Changeset 00d26202 in mainline


Ignore:
Timestamp:
2026-02-13T11:54:37Z (7 days ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
a4e4e29
Parents:
cd0dce3
git-author:
Jiri Svoboda <jiri@…> (2026-02-13 18:54:24)
git-committer:
Jiri Svoboda <jiri@…> (2026-02-13 11:54:37)
Message:

Delete files (Navigator + 'delete' command)

Location:
uspace
Files:
12 added
14 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/meson.build

    rcd0dce3 r00d26202  
    3939        'cpptest',
    4040        'date',
     41        'delete',
    4142        'devctl',
    4243        'df',
  • uspace/app/nav/dlg/copydlg.c

    rcd0dce3 r00d26202  
    293293 *
    294294 * @param dialog Copy dialog
    295  * @param cb New file dialog callbacks
     295 * @param cb Copy dialog callbacks
    296296 * @param arg Callback argument
    297297 */
  • uspace/app/nav/dlg/progress.c

    rcd0dce3 r00d26202  
    11/*
    2  * Copyright (c) 2025 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    128128                goto error;
    129129
    130         rc = ui_label_create(ui_res, "XXX of XXX (XXX%)", &label);
     130        rc = ui_label_create(ui_res, "", &label);
    131131        if (rc != EOK)
    132132                goto error;
     
    155155        label = NULL;
    156156
    157         rc = ui_label_create(ui_res, "XXX of XXX (XXX%)", &label);
     157        rc = ui_label_create(ui_res, "", &label);
    158158        if (rc != EOK)
    159159                goto error;
     
    277277        errno_t rc;
    278278
    279         snprintf(buf, sizeof(buf), "Total: %s files, %s.",
    280             progress->total_procf, progress->total_procb);
     279        if (progress->file_progress) {
     280                snprintf(buf, sizeof(buf), "Total: %s files, %s.",
     281                    progress->total_procf, progress->total_procb);
     282        } else {
     283                snprintf(buf, sizeof(buf), "Total: %s files.",
     284                    progress->total_procf);
     285        }
    281286
    282287        rc = ui_label_set_text(dialog->ltotal_prog, buf);
     
    288293                return rc;
    289294
    290         snprintf(buf, sizeof(buf), "Current file: %s of %s (%s done).",
    291             progress->curf_procb, progress->curf_totalb,
    292             progress->curf_percent);
    293 
    294         rc = ui_label_set_text(dialog->lcurf_prog, buf);
    295         if (rc != EOK)
    296                 return rc;
    297 
    298         rc = ui_label_paint(dialog->lcurf_prog);
    299         if (rc != EOK)
    300                 return rc;
     295        if (progress->file_progress) {
     296                snprintf(buf, sizeof(buf), "Current file: %s of %s (%s done).",
     297                    progress->curf_procb, progress->curf_totalb,
     298                    progress->curf_percent);
     299
     300                rc = ui_label_set_text(dialog->lcurf_prog, buf);
     301                if (rc != EOK)
     302                        return rc;
     303
     304                rc = ui_label_paint(dialog->lcurf_prog);
     305                if (rc != EOK)
     306                        return rc;
     307        }
    301308
    302309        return EOK;
  • uspace/app/nav/dlg/verifydlg.c

    rcd0dce3 r00d26202  
    11/*
    2  * Copyright (c) 2025 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    249249}
    250250
    251 /** Destroy new file dialog.
    252  *
    253  * @param dialog New file dialog or @c NULL
     251/** Destroy verify dialog.
     252 *
     253 * @param dialog Verify dialog or @c NULL
    254254 */
    255255void verify_dlg_destroy(verify_dlg_t *dialog)
     
    262262}
    263263
    264 /** Set new file dialog callback.
    265  *
    266  * @param dialog new file dialog
    267  * @param cb New file dialog callbacks
     264/** Set verify dialog callback.
     265 *
     266 * @param dialog Verify dialog
     267 * @param cb Verify dialog callbacks
    268268 * @param arg Callback argument
    269269 */
     
    275275}
    276276
    277 /** New file dialog window close handler.
     277/** Verify dialog window close handler.
    278278 *
    279279 * @param window Window
     
    290290}
    291291
    292 /** New file dialog window keyboard event handler.
     292/** Verify dialog window keyboard event handler.
    293293 *
    294294 * @param window Window
     
    321321}
    322322
    323 /** New file dialog OK button click handler.
     323/** Verify dialog OK button click handler.
    324324 *
    325325 * @param pbutton Push button
     
    335335}
    336336
    337 /** New file dialog cancel button click handler.
     337/** Verify dialog cancel button click handler.
    338338 *
    339339 * @param pbutton Push button
  • uspace/app/nav/menu.c

    rcd0dce3 r00d26202  
    6161        ui_menu_entry_t *mcopy;
    6262        ui_menu_entry_t *mmove;
     63        ui_menu_entry_t *mdelete;
    6364        ui_menu_entry_t *mfsep;
    6465        ui_menu_entry_t *mexit;
     
    125126        ui_menu_entry_set_cb(mmove, nav_menu_file_move, (void *) menu);
    126127
     128        rc = ui_menu_entry_create(mfile, "~D~elete", "Ctrl-D", &mdelete);
     129        if (rc != EOK)
     130                goto error;
     131
     132        ui_menu_entry_set_cb(mdelete, nav_menu_file_delete, (void *) menu);
     133
    127134        rc = ui_menu_entry_sep_create(mfile, &mfsep);
    128135        if (rc != EOK)
     
    274281}
    275282
     283/** File / Delete menu entry selected.
     284 *
     285 * @param mentry Menu entry
     286 * @param arg Argument (navigator_t *)
     287 */
     288void nav_menu_file_delete(ui_menu_entry_t *mentry, void *arg)
     289{
     290        nav_menu_t *menu = (nav_menu_t *)arg;
     291
     292        if (menu->cb != NULL && menu->cb->file_delete != NULL)
     293                menu->cb->file_delete(menu->cb_arg);
     294}
     295
    276296/** File / Exit menu entry selected.
    277297 *
  • uspace/app/nav/menu.h

    rcd0dce3 r00d26202  
    5353extern void nav_menu_file_copy(ui_menu_entry_t *, void *);
    5454extern void nav_menu_file_move(ui_menu_entry_t *, void *);
     55extern void nav_menu_file_delete(ui_menu_entry_t *, void *);
    5556extern void nav_menu_file_exit(ui_menu_entry_t *, void *);
    5657
  • uspace/app/nav/meson.build

    rcd0dce3 r00d26202  
    3030src = files(
    3131        'dlg/copydlg.c',
     32        'dlg/deletedlg.c',
    3233        'dlg/existsdlg.c',
    3334        'dlg/ioerrdlg.c',
     
    3839        'dlg/verifydlg.c',
    3940        'copy.c',
     41        'delete.c',
    4042        'main.c',
    4143        'menu.c',
     
    5052test_src = files(
    5153        'dlg/copydlg.c',
     54        'dlg/deletedlg.c',
    5255        'dlg/existsdlg.c',
    5356        'dlg/ioerrdlg.c',
     
    5861        'dlg/verifydlg.c',
    5962        'copy.c',
     63        'delete.c',
    6064        'menu.c',
    6165        'move.c',
     
    6670        'verify.c',
    6771        'test/dlg/copydlg.c',
     72        'test/dlg/deletedlg.c',
    6873        'test/dlg/existsdlg.c',
    6974        'test/dlg/ioerrdlg.c',
  • uspace/app/nav/nav.c

    rcd0dce3 r00d26202  
    4848#include <ui/ui.h>
    4949#include <ui/window.h>
     50
    5051#include "copy.h"
     52#include "delete.h"
    5153#include "dlg/existsdlg.h"
    5254#include "dlg/ioerrdlg.h"
     
    7678static void navigator_file_copy(void *);
    7779static void navigator_file_move(void *);
     80static void navigator_file_delete(void *);
    7881static void navigator_file_exit(void *);
    7982
     
    8689        .file_copy = navigator_file_copy,
    8790        .file_move = navigator_file_move,
     91        .file_delete = navigator_file_delete,
    8892        .file_exit = navigator_file_exit
    8993};
     
    172176                        navigator_file_move((void *)navigator);
    173177                        break;
     178                case KC_D:
     179                        navigator_file_delete((void *)navigator);
     180                        break;
    174181                case KC_Q:
    175182                        ui_quit(navigator->ui);
     
    679686        /* flist ownership transferred */
    680687        navigator_move_dlg(navigator, flist);
     688}
     689
     690/** File / Delete menu entry selected */
     691static void navigator_file_delete(void *arg)
     692{
     693        navigator_t *navigator = (navigator_t *)arg;
     694
     695        ui_file_list_entry_t *entry;
     696        ui_file_list_entry_attr_t attr;
     697        fmgt_flist_t *flist;
     698        panel_t *panel;
     699        errno_t rc;
     700
     701        panel = navigator_get_active_panel(navigator);
     702        entry = ui_file_list_get_cursor(panel->flist);
     703        ui_file_list_entry_get_attr(entry, &attr);
     704
     705        rc = fmgt_flist_create(&flist);
     706        if (rc != EOK)
     707                return;
     708
     709        rc = fmgt_flist_append(flist, attr.name);
     710        if (rc != EOK) {
     711                fmgt_flist_destroy(flist);
     712                return;
     713        }
     714
     715        /* flist ownership transferred */
     716        navigator_delete_dlg(navigator, flist);
    681717}
    682718
  • uspace/app/nav/test/main.c

    rcd0dce3 r00d26202  
    3232
    3333PCUT_IMPORT(copydlg);
     34PCUT_IMPORT(deletedlg);
    3435PCUT_IMPORT(existsdlg);
    3536PCUT_IMPORT(ioerrdlg);
  • uspace/app/nav/types/menu.h

    rcd0dce3 r00d26202  
    5757        /** File / Move */
    5858        void (*file_move)(void *);
     59        /** File / Delete */
     60        void (*file_delete)(void *);
    5961        /** File / Exit */
    6062        void (*file_exit)(void *);
  • uspace/lib/fmgt/include/fmgt.h

    rcd0dce3 r00d26202  
    4343#include <stdint.h>
    4444#include "fmgt/copy.h"
     45#include "fmgt/delete.h"
    4546#include "fmgt/flist.h"
    4647#include "fmgt/move.h"
  • uspace/lib/fmgt/include/types/fmgt.h

    rcd0dce3 r00d26202  
    4848/** File management progress update */
    4949typedef struct {
     50        /** Progress on individual files is valid. */
     51        bool file_progress;
    5052        /** Current file processed bytes */
    5153        char curf_procb[CAPA_BLOCKS_BUFSIZE];
     
    139141        /** Post an immediate initial progress update */
    140142        bool do_init_update;
     143        /** Report file progress. */
     144        bool file_progress;
    141145} fmgt_t;
    142146
  • uspace/lib/fmgt/meson.build

    rcd0dce3 r00d26202  
    2929src = files(
    3030        'src/copy.c',
     31        'src/delete.c',
    3132        'src/flist.c',
    3233        'src/fmgt.c',
  • uspace/lib/fmgt/src/fmgt.c

    rcd0dce3 r00d26202  
    117117        fmgt->curf_totalb = 0;
    118118        fmgt->curf_progr = false;
     119
     120        fmgt->file_progress = false;
    119121}
    120122
     
    131133        fmgt->curf_procb = 0;
    132134        fmgt->curf_totalb = 0;
     135
     136        /*
     137         * This function is only called from operations that need to
     138         * display byte progress within a file. Set a flag so that
     139         * we will report file progress.
     140         */
     141        fmgt->file_progress = true;
    133142
    134143        rc = vfs_stat_path(fname, &stat);
     
    171180                percent = 100;
    172181
    173         capa_blocks_format_buf(fmgt->curf_procb, 1, progress->curf_procb,
    174             sizeof(progress->curf_procb));
    175         capa_blocks_format_buf(fmgt->curf_totalb, 1, progress->curf_totalb,
    176             sizeof(progress->curf_totalb));
    177         snprintf(progress->curf_percent, sizeof(progress->curf_percent), "%u%%",
    178             percent);
    179         snprintf(progress->total_procf, sizeof(progress->total_procf), "%u",
    180             fmgt->total_procf);
    181         capa_blocks_format_buf(fmgt->total_procb, 1, progress->total_procb,
    182             sizeof(progress->total_procb));
     182        progress->file_progress = fmgt->file_progress;
     183
     184        if (fmgt->file_progress) {
     185                capa_blocks_format_buf(fmgt->curf_procb, 1,
     186                    progress->curf_procb, sizeof(progress->curf_procb));
     187                capa_blocks_format_buf(fmgt->curf_totalb, 1,
     188                    progress->curf_totalb, sizeof(progress->curf_totalb));
     189                snprintf(progress->curf_percent, sizeof(progress->curf_percent),
     190                    "%u%%", percent);
     191                capa_blocks_format_buf(fmgt->total_procb, 1,
     192                    progress->total_procb, sizeof(progress->total_procb));
     193        } else {
     194                memset(progress->curf_procb, 0, sizeof(progress->curf_procb));
     195                memset(progress->curf_totalb, 0, sizeof(progress->curf_totalb));
     196                memset(progress->curf_percent, 0,
     197                    sizeof(progress->curf_percent));
     198                memset(progress->total_procb, 0, sizeof(progress->total_procb));
     199        }
     200
     201        snprintf(progress->total_procf, sizeof(progress->total_procf),
     202            "%u", fmgt->total_procf);
    183203}
    184204
Note: See TracChangeset for help on using the changeset viewer.