ui: show file sizes in human-friendly

This commit is contained in:
2026-01-05 16:47:24 +02:00
parent bdb194679e
commit 9b44285c56
3 changed files with 40 additions and 9 deletions
-1
View File
@@ -1,5 +1,4 @@
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <ncurses.h>
+3 -3
View File
@@ -29,9 +29,9 @@ void upload_dialogue_modal_cb(callback_args_t *args) {
dialogue_t *init_upload_dialogue_modal(app_t *app) {
if (app == NULL)
return NULL;
group_el_init_t content[] = {{.type = w_input,
.label = "File description",
.length = 30}, /* length is ignored */
group_el_init_t content[] = {
{.type = w_input, .label = "File description", .length = 30},
{.type = w_input, .label = "File path", .length = 30},
{.type = w_end}};
group_el_init_t actions[] = {
+34 -2
View File
@@ -4,6 +4,7 @@
#include "progress_bar.h"
#include <ncurses.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
@@ -11,6 +12,7 @@
#include <unistd.h>
void reset_file_list(ui_file_list_t *fl_ui);
void size_to_text(size_t size, char *text);
void file_list_cb(callback_args_t *args) {
app_t *app = args->app;
@@ -134,15 +136,45 @@ void draw_file_list(ui_file_list_t *fl_ui) {
mvwprintw(win, p_y, p_x, "%*s%s%*s", l_pad, "", p_info, l_pad, "");
wattroff(win, A_BOLD);
/* draw file info */
p_y = 1;
p_x = 1;
WINDOW *i_win = *fl_ui->info_win;
wclear(i_win);
mvwprintw(i_win, p_y++, p_x, "Size: %zu", active_el->size);
char size_text[64];
size_to_text(active_el->size, size_text);
mvwprintw(i_win, p_y++, p_x, "Size: %s", size_text);
mvwprintw(i_win, p_y++, p_x, "Owner: %s", active_el->owner);
mvwprintw(i_win, p_y++, p_x, "Description: ");
print_multiline_text(i_win, active_el->description, sz_x, p_y, p_x, 0);
}
#define BYTES_IN_GB 1073741824
#define BYTES_IN_MB 1048576
#define BYTES_IN_KB 1024
void size_to_text(size_t size, char *text) {
size_t kb = 0;
size_t mb = 0;
size_t gb = 0;
gb = size / BYTES_IN_GB;
mb = size / BYTES_IN_MB;
kb = size / BYTES_IN_KB;
if (gb > 0) {
size = size % BYTES_IN_GB;
mb = size / BYTES_IN_MB;
sprintf(text, "%zu,%zu GB", gb, mb);
} else if (mb > 0) {
size = size % BYTES_IN_MB;
kb = size / BYTES_IN_KB;
sprintf(text, "%zu,%zu MB", mb, kb);
} else if (kb > 0) {
size = size % BYTES_IN_KB;
sprintf(text, "%zu,%zu KB", kb, size);
} else {
sprintf(text, "%zu B", size);
}
}