improvenments to file previews

This commit is contained in:
nova
2025-07-07 19:28:34 +02:00
parent b2b100727f
commit 3f8fdc9e17
3 changed files with 27 additions and 22 deletions

View File

@ -3,7 +3,9 @@
#include <string.h>
#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;
}

View File

@ -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);

View File

@ -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);
}