Compare commits

..

2 Commits

Author SHA1 Message Date
nova
36ff54038e improvenments to threading 2025-06-24 00:18:53 +02:00
nova
1a64b83703 improvenments to the rendering 2025-06-24 00:18:18 +02:00
3 changed files with 36 additions and 24 deletions

View File

@@ -69,13 +69,13 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten
memcpy(full_path + path_len + sizeof("/") - 1, entry[i]->d_name, strlen(entry[i]->d_name) + 1); memcpy(full_path + path_len + sizeof("/") - 1, entry[i]->d_name, strlen(entry[i]->d_name) + 1);
lstat(full_path, file); lstat(full_path, file);
free(full_path);
dir_content[i].file_size_bytes = file->st_size; dir_content[i].file_size_bytes = file->st_size;
if (S_ISDIR(file->st_mode)) { if (S_ISDIR(file->st_mode)) {
dir_content[i].file_type = FILE_TYPE_DIR; dir_content[i].file_type = FILE_TYPE_DIR;
dir_content[i].color_pair = COLOR_DIR; dir_content[i].color_pair = COLOR_DIR;
dir_content[i].file_size_bytes = get_dir_size(full_path);
} else if (file->st_mode & S_IXUSR) { } else if (file->st_mode & S_IXUSR) {
dir_content[i].file_type = FILE_TYPE_EXEC; dir_content[i].file_type = FILE_TYPE_EXEC;
dir_content[i].color_pair = COLOR_EXEC; dir_content[i].color_pair = COLOR_EXEC;
@@ -87,6 +87,7 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten
} else if (S_ISLNK(file->st_mode)) { } else if (S_ISLNK(file->st_mode)) {
dir_content[i].file_type = FILE_TYPE_SYMLINK; dir_content[i].file_type = FILE_TYPE_SYMLINK;
dir_content[i].color_pair = COLOR_SYMLINK; dir_content[i].color_pair = COLOR_SYMLINK;
dir_content[i].file_size_bytes = get_dir_size(full_path);
} else if (S_ISFIFO(file->st_mode)) { } else if (S_ISFIFO(file->st_mode)) {
dir_content[i].file_type = FILE_TYPE_FIFO; dir_content[i].file_type = FILE_TYPE_FIFO;
dir_content[i].color_pair = COLOR_FIFO; dir_content[i].color_pair = COLOR_FIFO;
@@ -120,6 +121,7 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten
} else { } else {
} }
} }
free(full_path);
free(file); free(file);
} }
} }
@@ -134,28 +136,46 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten
void print_dir(WINDOW *win, unsigned long *line_width, unsigned long *dir_file_count, file *dir_content){ void print_dir(WINDOW *win, unsigned long *line_width, unsigned long *dir_file_count, file *dir_content){
char *hover_bg = malloc(*line_width+1); char *hover_bg = malloc(*line_width+1);
memset(hover_bg, ' ', *line_width); memset(hover_bg, ' ', *line_width);
hover_bg[*line_width] = '\0'; hover_bg[*line_width] = '\0';
unsigned long i = 0; unsigned long i = 0;
unsigned long j = 0;
unsigned long offset_front = 2; unsigned long offset_front = 2;
if (*dir_file_count > 9) { if (*dir_file_count > 9) {
offset_front = (snprintf(NULL, 0, "%ld", *dir_file_count)) + 1; offset_front = (snprintf(NULL, 0, "%ld", *dir_file_count)) + 1;
} }
for (i = 0; i < *dir_file_count; i++) { for (i = 0; i < *dir_file_count; i++) {
unsigned long offset_back = *line_width - (snprintf(NULL,0,"%ld",dir_content[i].file_size_bytes) + 1); unsigned long offset_back = *line_width - (snprintf(NULL,0,"%ld",dir_content[i].file_size_bytes) + 1);
unsigned long allowed_width = *line_width+1;
wattron(win, COLOR_PAIR(dir_content[i].color_pair)); wattron(win, COLOR_PAIR(dir_content[i].color_pair));
if (dir_content[i].status & FILE_STATUS_HOVER) { if (dir_content[i].status & FILE_STATUS_HOVER) {
wattron(win, A_REVERSE); wattron(win, A_REVERSE);
mvwprintw(win, i, 0, "%s", hover_bg); mvwprintw(win, i, 0, "%s", hover_bg);
mvwprintw(win, i, 0, "%ld", i); mvwprintw(win, i, 0, "%ld", i);
mvwprintw(win, i, offset_front, "%s", dir_content[i].file_name);
for (j = 0; j < dir_content[i].file_name_width ;j++) {
if (j >= offset_back-1) {
mvwaddch(win, i, j, '~');
break;
}
mvwaddch(win, i, offset_front+j, dir_content[i].file_name[j]);
}
mvwprintw(win, i, offset_back, "%ld", dir_content[i].file_size_bytes); mvwprintw(win, i, offset_back, "%ld", dir_content[i].file_size_bytes);
wattroff(win, A_REVERSE); wattroff(win, A_REVERSE);
} else { } else {
mvwprintw(win, i, 0, "%ld", i); mvwprintw(win, i, 0, "%ld", i);
mvwprintw(win, i, offset_front, "%s", dir_content[i].file_name); for (j = 0; j < dir_content[i].file_name_width ;j++) {
if (j >= offset_back-1) {
mvwaddch(win, i, j, '~');
break;
}
mvwaddch(win, i, offset_front+j, dir_content[i].file_name[j]);
}
mvwprintw(win, i, offset_back, "%ld", dir_content[i].file_size_bytes); mvwprintw(win, i, offset_back, "%ld", dir_content[i].file_size_bytes);
} }
wattroff(win, COLOR_PAIR(dir_content[i].color_pair)); wattroff(win, COLOR_PAIR(dir_content[i].color_pair));

26
main.c
View File

@@ -53,27 +53,23 @@ int main(){
temp_width = terminal_width; temp_width = terminal_width;
temp_heigth = terminal_height; temp_heigth = terminal_height;
} }
if (status & STATUS_RUN_BACKEND || threading) { if (status & STATUS_RUN_BACKEND) {
if (threading) { if (threading) {
/* temporary comment, somehow stops timing related crashes
pthread_cancel(thread_t); pthread_cancel(thread_t);
pthread_cancel(thread_b);
pthread_cancel(thread_l); pthread_cancel(thread_l);
pthread_cancel(thread_m); pthread_cancel(thread_m);
pthread_cancel(thread_r); pthread_cancel(thread_r);
*/ pthread_cancel(thread_b);
threading = 0; threading = 0;
status &= ~STATUS_RUN_BACKEND; }
status &= ~STATUS_RELOAD_DIRECTORY; pthread_create(&thread_t, NULL, thread_top, win_t); /*top bar*/
status |= STATUS_UPDATE_SCREEN_0; pthread_create(&thread_l, NULL, thread_lft, win_l); /*current_content slash win_m*/
} else { pthread_create(&thread_m, NULL, thread_mid, win_m); /*parent_content slash win_l*/
pthread_create(&thread_t, NULL, thread_top, win_t); /*top bar*/ pthread_create(&thread_r, NULL, thread_rgt, win_r); /*child_content slash win_r*/
pthread_create(&thread_b, NULL, thread_btm, win_b); /*bottom bar*/ pthread_create(&thread_b, NULL, thread_btm, win_b); /*bottom bar*/
pthread_create(&thread_m, NULL, thread_mid, win_m); /*parent_content slash win_l*/ threading = 1;
pthread_create(&thread_l, NULL, thread_lft, win_l); /*current_content slash win_m*/ status &= ~(STATUS_RUN_BACKEND | STATUS_RELOAD_DIRECTORY);
pthread_create(&thread_r, NULL, thread_rgt, win_r); /*child_content slash win_r*/ status |= STATUS_UPDATE_SCREEN_0;
threading = 1;
}
} }
if ((input = getch())) { if ((input = getch())) {
user_interactions(&input, win_b); user_interactions(&input, win_b);

View File

@@ -71,13 +71,13 @@ void *thread_mid(void *data){
mid_content[selected_file_last].status &= ~FILE_STATUS_HOVER; mid_content[selected_file_last].status &= ~FILE_STATUS_HOVER;
} }
selected_file_last = selected_file_current; selected_file_last = selected_file_current;
pthread_mutex_unlock(&mutex_selection);
file_current.file_name = malloc(mid_content[selected_file_current].file_name_width + 1); file_current.file_name = malloc(mid_content[selected_file_current].file_name_width + 1);
strcpy(file_current.file_name, mid_content[selected_file_current].file_name); strcpy(file_current.file_name, mid_content[selected_file_current].file_name);
file_current.file_name_width = mid_content[selected_file_current].file_name_width; file_current.file_name_width = mid_content[selected_file_current].file_name_width;
file_current.file_size_bytes = mid_content[selected_file_current].file_size_bytes; file_current.file_size_bytes = mid_content[selected_file_current].file_size_bytes;
file_current.file_type = mid_content[selected_file_current].file_type; file_current.file_type = mid_content[selected_file_current].file_type;
pthread_mutex_unlock(&mutex_selection);
} }
free(path); free(path);
@@ -86,9 +86,6 @@ void *thread_mid(void *data){
} }
void *thread_lft(void *data){ void *thread_lft(void *data){
pthread_mutex_lock(&mutex_lft); pthread_mutex_lock(&mutex_lft);
/*{{{*/
char *path; char *path;
if((path=getcwd(NULL, 0)) == NULL) { if((path=getcwd(NULL, 0)) == NULL) {
@@ -112,7 +109,6 @@ void *thread_lft(void *data){
} }
free(path); free(path);
pthread_mutex_unlock(&mutex_lft); pthread_mutex_unlock(&mutex_lft);
/*}}}*/
pthread_exit(NULL); pthread_exit(NULL);