From 3f8fdc9e17e16717120976cd6e2049028ad5b2a9 Mon Sep 17 00:00:00 2001 From: nova Date: Mon, 7 Jul 2025 19:28:34 +0200 Subject: [PATCH] improvenments to file previews --- file_previews.c | 30 +++++++++++++++++------------- file_previews.h | 3 ++- threading.c | 16 ++++++++-------- 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/file_previews.c b/file_previews.c index 5d100ff..0884f51 100644 --- a/file_previews.c +++ b/file_previews.c @@ -3,7 +3,9 @@ #include #include "defines.h" + char* text(char *path, unsigned long *file_size); +char* generic(char *path); char* get_mimetype(char *path){ static char *cmd_str = "file --mime-type -b ./\""; @@ -24,32 +26,23 @@ char* get_mimetype(char *path){ pclose(cmd_open); return line; } -char* preview_file(char *path, unsigned long file_size){ +char* preview_file(file *file_current){ /* this calls "file" on path */ char *file_buffer; - char *mime = get_mimetype(path); - - unsigned int mime_len = strlen(mime); + char *mime = get_mimetype(file_current->file_name); if (strstr(mime, "text")) { - file_buffer = text(path, &file_size); + file_buffer = text(file_current->file_name, &file_current->file_size); } else { - - file_buffer = malloc(mime_len + 1); - memset(file_buffer, ' ', mime_len); - memcpy(file_buffer, mime, mime_len); - file_buffer[mime_len] = '\0'; + file_buffer = generic(file_current->file_name); } free(mime); return file_buffer; } - - - char* text(char *path, unsigned long *file_size){ char *file_buffer = malloc(*file_size + 1); @@ -59,3 +52,14 @@ char* text(char *path, unsigned long *file_size){ return file_buffer; } +char* generic(char *path){ + char *cmd = concat("file ./\"", path); + cmd = concat(cmd, "\""); + + FILE *cmd_open = popen(cmd, "r"); + char *line; + size_t size = 0; + getline(&line, &size, cmd_open); + pclose(cmd_open); + return line; +} diff --git a/file_previews.h b/file_previews.h index 7fbf7bf..c62bc53 100644 --- a/file_previews.h +++ b/file_previews.h @@ -1,4 +1,5 @@ #include "file_previews.c" +#include "defines.h" -char* preview_file(char *path, unsigned long file_size); +char* preview_file(file *file_current); char* get_mimetype(char *path); diff --git a/threading.c b/threading.c index 308103a..0c3bf50 100644 --- a/threading.c +++ b/threading.c @@ -139,11 +139,11 @@ void *thread_rgt(void *data){ free(rgt_content); rgt_content = malloc(sizeof(file)); - rgt_content[0].file_name = malloc(file_current->file_name_width + 1); - strcpy(rgt_content[0].file_name, file_current->file_name); - rgt_content[0].file_name_width = file_current->file_name_width; - rgt_content[0].file_size = file_current->file_size; - rgt_content[0].file_type = file_current->file_type; + rgt_content->file_name = malloc(file_current->file_name_width + 1); + strcpy(rgt_content->file_name, file_current->file_name); + rgt_content->file_name_width = file_current->file_name_width; + rgt_content->file_size = file_current->file_size; + rgt_content->file_type = file_current->file_type; pthread_mutex_unlock(&mutex_mid); @@ -161,10 +161,10 @@ void *thread_rgt(void *data){ rgt_file_count = 1; - rgt_content[0].file_type = FILE_TYPE_OPEN_FILE; - rgt_content[0].status = FILE_STATUS_HOVER; + rgt_content->file_type = FILE_TYPE_OPEN_FILE; + rgt_content->status = FILE_STATUS_HOVER; free(rgt_buffer); - rgt_buffer = preview_file(rgt_content[0].file_name, rgt_content[0].file_size); + rgt_buffer = preview_file(rgt_content); }