file_list: double list integration 2 [not finished]
This commit is contained in:
@@ -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) {
|
static bool fl_add_cb(void *_dst, void *_src);
|
||||||
fl_item_t *l_selected; /* from the list */
|
|
||||||
|
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 =
|
fl_item_t *f_selected =
|
||||||
&(f_args->f_selected); /* new copy of file struct (list be cleared) */
|
&(f_args->f_selected); /* new copy of file struct (list be cleared) */
|
||||||
struct stat st = {0};
|
struct stat st = {0};
|
||||||
|
|
||||||
l_selected = NULL; /* TODO: FIX */
|
|
||||||
|
|
||||||
if (l_selected == NULL) {
|
if (l_selected == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(f_selected, l_selected, sizeof(fl_item_t));
|
memcpy(f_selected, l_selected, sizeof(fl_item_t));
|
||||||
|
|
||||||
|
fl_add_cb(f_selected, l_selected);
|
||||||
|
|
||||||
if (stat(DOWNLOADS_DIR, &st) == -1) {
|
if (stat(DOWNLOADS_DIR, &st) == -1) {
|
||||||
mkdir(DOWNLOADS_DIR, 0700);
|
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) {
|
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->file_d = 0;
|
||||||
f_args->f_selected.name = NULL;
|
f_args->f_selected.name = NULL;
|
||||||
f_args->f_selected.size = 0;
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
f_args->f_list = fui->f_list;
|
||||||
|
app->file_args = f_args;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fl_q_extract(fl_item_t *f, char *line) {
|
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->size = src->size;
|
||||||
|
|
||||||
dst->description = malloc(sizeof(char) * (strlen(src->description) + 1));
|
if (src->description != NULL) {
|
||||||
strcpy(dst->description, src->description);
|
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));
|
dst->name = malloc(sizeof(char) * (strlen(src->name) + 1));
|
||||||
strcpy(dst->name, src->name);
|
strcpy(dst->name, src->name);
|
||||||
@@ -394,7 +401,9 @@ void fl_clear(fl_item_t **start, fl_item_t **arg_current) {
|
|||||||
current = *start;
|
current = *start;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
free(current->description);
|
if (current->description != NULL) {
|
||||||
|
free(current->description);
|
||||||
|
}
|
||||||
free(current->name);
|
free(current->name);
|
||||||
free(current);
|
free(current);
|
||||||
} while ((current = next) != NULL);
|
} while ((current = next) != NULL);
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ int file_upload_start(query_args_t *q_args);
|
|||||||
int file_upload(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);
|
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);
|
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);
|
void clear_file_in_query(query_args_t *q_args);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -50,13 +50,10 @@ void query_loop(app_t *app) {
|
|||||||
int32_t sd = app->params->sd;
|
int32_t sd = app->params->sd;
|
||||||
size_t qlen;
|
size_t qlen;
|
||||||
int sr;
|
int sr;
|
||||||
static file_args_t file_args;
|
|
||||||
w_cb_args_t d_args = {
|
w_cb_args_t d_args = {
|
||||||
.app = app, .element = NULL, .data = NULL, .resp_data.code = cbrc_none};
|
.app = app, .element = NULL, .data = NULL, .resp_data.code = cbrc_none};
|
||||||
|
|
||||||
init_file_args(&file_args, app);
|
|
||||||
query_args->sd = sd;
|
query_args->sd = sd;
|
||||||
app->file_args = &file_args;
|
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
/* update screen */
|
/* update screen */
|
||||||
|
|||||||
+4
-1
@@ -14,8 +14,9 @@
|
|||||||
#include <widget.h>
|
#include <widget.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
#include <core/app.h>
|
|
||||||
#include "alert.h"
|
#include "alert.h"
|
||||||
|
#include "core/file_processor.h"
|
||||||
|
#include <core/app.h>
|
||||||
#include <core/connection.h>
|
#include <core/connection.h>
|
||||||
#include <core/query.h>
|
#include <core/query.h>
|
||||||
|
|
||||||
@@ -27,6 +28,7 @@ int main(int argc, char **argv) {
|
|||||||
app_t app;
|
app_t app;
|
||||||
params_t params;
|
params_t params;
|
||||||
query_args_t q_args;
|
query_args_t q_args;
|
||||||
|
file_args_t file_args;
|
||||||
|
|
||||||
app_init_nc();
|
app_init_nc();
|
||||||
|
|
||||||
@@ -42,6 +44,7 @@ int main(int argc, char **argv) {
|
|||||||
app.query_args = &q_args;
|
app.query_args = &q_args;
|
||||||
|
|
||||||
main_window_set(&app, mw_fl_server);
|
main_window_set(&app, mw_fl_server);
|
||||||
|
init_file_args(&file_args, &app);
|
||||||
/* init client to connect to the server */
|
/* init client to connect to the server */
|
||||||
app.params->sd = init_client();
|
app.params->sd = init_client();
|
||||||
|
|
||||||
|
|||||||
+10
-4
@@ -57,6 +57,8 @@ static void w_fl_cb(w_cb_args_t *args) {
|
|||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
if (fui->current_idx < fui->current_count - 1) {
|
if (fui->current_idx < fui->current_count - 1) {
|
||||||
fui->current_idx++;
|
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) {
|
} else if (fui->current_page < fui->pages) {
|
||||||
app->query_args->state = S_FILE_LIST;
|
app->query_args->state = S_FILE_LIST;
|
||||||
server_send_string(app->query_args, "%s %d %d\n", q_prefix,
|
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:
|
case KEY_UP:
|
||||||
if (fui->current_idx > 0) {
|
if (fui->current_idx > 0) {
|
||||||
fui->current_idx--;
|
fui->current_idx--;
|
||||||
|
fui->f_selected = fui->f_selected->previous;
|
||||||
} else if (fui->current_page > 1) {
|
} else if (fui->current_page > 1) {
|
||||||
app->query_args->state = S_FILE_LIST;
|
app->query_args->state = S_FILE_LIST;
|
||||||
server_send_string(app->query_args, "%s %d %d\n", q_prefix,
|
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);
|
1);
|
||||||
w_fl_reset(fui);
|
w_fl_reset(fui);
|
||||||
case '\n':
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -187,12 +190,11 @@ void *w_fl_init(app_t *app) {
|
|||||||
fui->activate_last = false;
|
fui->activate_last = false;
|
||||||
fui->active_search = false;
|
fui->active_search = false;
|
||||||
fui->search_key = bfromcstrrangealloc(12, 64, "");
|
fui->search_key = bfromcstrrangealloc(12, 64, "");
|
||||||
fui->start = NULL;
|
|
||||||
fui->current = NULL;
|
|
||||||
fui->w.sz.x = getmaxx(app->win);
|
fui->w.sz.x = getmaxx(app->win);
|
||||||
fui->w.sz.y = getmaxy(app->win);
|
fui->w.sz.y = getmaxy(app->win);
|
||||||
|
|
||||||
fui->f_list = dlist_init(NULL, fl_item_t, NULL);
|
fui->f_list = dlist_init(NULL, fl_item_t, NULL);
|
||||||
|
fui->f_selected = NULL;
|
||||||
if (app->file_args != NULL) {
|
if (app->file_args != NULL) {
|
||||||
app->file_args->f_list = fui->f_list;
|
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 */
|
sz_x -= 1; /* do not count the borders */
|
||||||
p_y = 1;
|
p_y = 1;
|
||||||
p_x = 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 *el = dlist_it_next(fui->f_list);
|
||||||
fl_item_t *active_el = dlist_get_ptr(fui->f_selected);
|
fl_item_t *active_el = dlist_get_ptr(fui->f_selected);
|
||||||
int32_t cur_el_idx = 0;
|
int32_t cur_el_idx = 0;
|
||||||
|
|
||||||
box(fui->win_list, 0, 0);
|
box(fui->win_list, 0, 0);
|
||||||
|
|
||||||
if (fui->start != NULL) {
|
if (fui->start != NULL) {
|
||||||
@@ -287,6 +291,8 @@ void w_fl_draw(w_ui_file_list_t *fui) {
|
|||||||
cur_el_idx++;
|
cur_el_idx++;
|
||||||
} while ((el = dlist_it_next(fui->f_list)) != NULL && p_y < sz_y_f);
|
} 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;
|
p_x = 1;
|
||||||
int32_t p_len;
|
int32_t p_len;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user