file_list: double list integration 2 [not finished]

This commit is contained in:
2026-08-17 18:22:15 +03:00
parent 3d9b6ccac9
commit e8d95f14b9
5 changed files with 32 additions and 17 deletions
+17 -8
View File
@@ -66,20 +66,21 @@ void file_list(file_args_t *f_args, query_args_t *q_args) {
}
}
int32_t ui_file_select(file_args_t *f_args, query_args_t *q_args, int32_t idx) {
fl_item_t *l_selected; /* from the list */
static bool fl_add_cb(void *_dst, void *_src);
int32_t ui_file_select(file_args_t *f_args, query_args_t *q_args, fl_item_t *l_selected) {
fl_item_t *f_selected =
&(f_args->f_selected); /* new copy of file struct (list be cleared) */
struct stat st = {0};
l_selected = NULL; /* TODO: FIX */
if (l_selected == NULL) {
return -1;
}
memcpy(f_selected, l_selected, sizeof(fl_item_t));
fl_add_cb(f_selected, l_selected);
if (stat(DOWNLOADS_DIR, &st) == -1) {
mkdir(DOWNLOADS_DIR, 0700);
}
@@ -315,7 +316,7 @@ void clear_file_in_query(query_args_t *q_args) {
}
void init_file_args(file_args_t *f_args, app_t *app) {
w_ui_file_list_t *fui = NULL;
w_ui_file_list_t *fui = app->main_ui.ui;
f_args->file_d = 0;
f_args->f_selected.name = NULL;
f_args->f_selected.size = 0;
@@ -327,6 +328,8 @@ void init_file_args(file_args_t *f_args, app_t *app) {
f_args->f_list = fui->f_list;
}
}
f_args->f_list = fui->f_list;
app->file_args = f_args;
}
static void fl_q_extract(fl_item_t *f, char *line) {
@@ -360,8 +363,12 @@ static bool fl_add_cb(void *_dst, void *_src) {
dst->size = src->size;
dst->description = malloc(sizeof(char) * (strlen(src->description) + 1));
strcpy(dst->description, src->description);
if (src->description != NULL) {
dst->description = malloc(sizeof(char) * (strlen(src->description) + 1));
strcpy(dst->description, src->description);
} else {
dst->description = NULL;
}
dst->name = malloc(sizeof(char) * (strlen(src->name) + 1));
strcpy(dst->name, src->name);
@@ -394,7 +401,9 @@ void fl_clear(fl_item_t **start, fl_item_t **arg_current) {
current = *start;
do {
free(current->description);
if (current->description != NULL) {
free(current->description);
}
free(current->name);
free(current);
} while ((current = next) != NULL);
+1 -1
View File
@@ -14,7 +14,7 @@ int file_upload_start(query_args_t *q_args);
int file_upload(query_args_t *q_args);
int32_t file_upload_open(char *dpath, char *fname, query_args_t *q_args);
void fl_clear(fl_item_t **start, fl_item_t **arg_current);
int32_t ui_file_select(file_args_t *f_args, query_args_t *q_args, int32_t idx);
int32_t ui_file_select(file_args_t *f_args, query_args_t *q_args, fl_item_t *ptr);
void clear_file_in_query(query_args_t *q_args);
#endif
-3
View File
@@ -50,13 +50,10 @@ void query_loop(app_t *app) {
int32_t sd = app->params->sd;
size_t qlen;
int sr;
static file_args_t file_args;
w_cb_args_t d_args = {
.app = app, .element = NULL, .data = NULL, .resp_data.code = cbrc_none};
init_file_args(&file_args, app);
query_args->sd = sd;
app->file_args = &file_args;
for (;;) {
/* update screen */
+4 -1
View File
@@ -14,8 +14,9 @@
#include <widget.h>
#include <windows.h>
#include <core/app.h>
#include "alert.h"
#include "core/file_processor.h"
#include <core/app.h>
#include <core/connection.h>
#include <core/query.h>
@@ -27,6 +28,7 @@ int main(int argc, char **argv) {
app_t app;
params_t params;
query_args_t q_args;
file_args_t file_args;
app_init_nc();
@@ -42,6 +44,7 @@ int main(int argc, char **argv) {
app.query_args = &q_args;
main_window_set(&app, mw_fl_server);
init_file_args(&file_args, &app);
/* init client to connect to the server */
app.params->sd = init_client();
+10 -4
View File
@@ -57,6 +57,8 @@ static void w_fl_cb(w_cb_args_t *args) {
case KEY_DOWN:
if (fui->current_idx < fui->current_count - 1) {
fui->current_idx++;
if (fui->f_selected == NULL) fui->f_selected = fui->f_list->start;
fui->f_selected = fui->f_selected->next;
} else if (fui->current_page < fui->pages) {
app->query_args->state = S_FILE_LIST;
server_send_string(app->query_args, "%s %d %d\n", q_prefix,
@@ -69,6 +71,7 @@ static void w_fl_cb(w_cb_args_t *args) {
case KEY_UP:
if (fui->current_idx > 0) {
fui->current_idx--;
fui->f_selected = fui->f_selected->previous;
} else if (fui->current_page > 1) {
app->query_args->state = S_FILE_LIST;
server_send_string(app->query_args, "%s %d %d\n", q_prefix,
@@ -110,7 +113,7 @@ static void w_fl_cb(w_cb_args_t *args) {
1);
w_fl_reset(fui);
case '\n':
ui_file_select(app->file_args, app->query_args, fui->current_idx + 1);
ui_file_select(app->file_args, app->query_args, dlist_get_ptr(fui->f_selected));
break;
}
}
@@ -187,12 +190,11 @@ void *w_fl_init(app_t *app) {
fui->activate_last = false;
fui->active_search = false;
fui->search_key = bfromcstrrangealloc(12, 64, "");
fui->start = NULL;
fui->current = NULL;
fui->w.sz.x = getmaxx(app->win);
fui->w.sz.y = getmaxy(app->win);
fui->f_list = dlist_init(NULL, fl_item_t, NULL);
fui->f_selected = NULL;
if (app->file_args != NULL) {
app->file_args->f_list = fui->f_list;
}
@@ -246,10 +248,12 @@ void w_fl_draw(w_ui_file_list_t *fui) {
sz_x -= 1; /* do not count the borders */
p_y = 1;
p_x = 1;
dlist_node_t *wp_bac = dlist_get_wp(fui->f_list);
dlist_set_wp(fui->f_list, fui->f_list->start);
fl_item_t *el = dlist_it_next(fui->f_list);
fl_item_t *active_el = dlist_get_ptr(fui->f_selected);
int32_t cur_el_idx = 0;
box(fui->win_list, 0, 0);
if (fui->start != NULL) {
@@ -287,6 +291,8 @@ void w_fl_draw(w_ui_file_list_t *fui) {
cur_el_idx++;
} while ((el = dlist_it_next(fui->f_list)) != NULL && p_y < sz_y_f);
dlist_set_wp(fui->f_list, wp_bac);
p_x = 1;
int32_t p_len;