Cleanup UX: slim logging, DBI keep config, no manifest overwrite
- Slim cleanup: one progress line per section (Bereinige: X [p%] (n/n)) via delete_path_lists_grouped() in clean and update mode - DBI: remove folder entries from deletion lists; only .nro deleted, folder and config preserved - Remove redundant manifest.ini creation; use manifest from pack config/ Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -7,9 +7,12 @@
|
||||
#include "version.h"
|
||||
#include "gfx.h"
|
||||
#include <libs/fatfs/ff.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <utils/sprintf.h>
|
||||
|
||||
#define GROUPED_DELETE_MAX_ENTRIES 512
|
||||
|
||||
#ifndef VERSION
|
||||
#define VERSION "1.0.0"
|
||||
#endif
|
||||
@@ -395,6 +398,89 @@ int folder_delete_single_with_progress(const char *path, const char *display_nam
|
||||
}
|
||||
|
||||
// Delete a list of paths with progress tracking
|
||||
// Delete multiple path lists under one label; one progress line "Bereinige: folder/ [p%] (d/t)".
|
||||
// Varargs: path lists (const char**), terminated by NULL.
|
||||
int delete_path_lists_grouped(const char *folder_display_name, ...) {
|
||||
va_list ap;
|
||||
const char *entries[GROUPED_DELETE_MAX_ENTRIES];
|
||||
int n_entries = 0;
|
||||
int deleted = 0;
|
||||
int failed = 0;
|
||||
u32 start_x, start_y;
|
||||
int last_percent = -1;
|
||||
int res;
|
||||
|
||||
va_start(ap, folder_display_name);
|
||||
const char **list;
|
||||
while (n_entries < GROUPED_DELETE_MAX_ENTRIES && (list = va_arg(ap, const char **)) != NULL) {
|
||||
for (int i = 0; list[i] != NULL && n_entries < GROUPED_DELETE_MAX_ENTRIES; i++) {
|
||||
if (install_path_exists(list[i]))
|
||||
entries[n_entries++] = list[i];
|
||||
}
|
||||
}
|
||||
va_end(ap);
|
||||
|
||||
if (n_entries == 0)
|
||||
return FR_OK;
|
||||
|
||||
int total_paths = n_entries;
|
||||
gfx_con_getpos(&start_x, &start_y);
|
||||
install_set_color(COLOR_CYAN);
|
||||
gfx_printf(" Bereinige: %s [ 0%%] (0/%d)", folder_display_name, total_paths);
|
||||
install_set_color(COLOR_WHITE);
|
||||
|
||||
for (int i = 0; i < n_entries; i++) {
|
||||
const char *path = entries[i];
|
||||
FILINFO fno;
|
||||
if (f_stat(path, &fno) != FR_OK)
|
||||
continue;
|
||||
|
||||
const char *item_name = strrchr(path, '/');
|
||||
if (item_name) item_name++;
|
||||
else item_name = path;
|
||||
|
||||
if (fno.fattrib & AM_DIR) {
|
||||
int item_count = install_count_directory_items(path);
|
||||
if (item_count > 50) {
|
||||
gfx_printf("\n");
|
||||
res = folder_delete_single_with_progress(path, item_name);
|
||||
} else {
|
||||
res = folder_delete(path);
|
||||
}
|
||||
} else {
|
||||
if (fno.fattrib & AM_RDO)
|
||||
f_chmod(path, fno.fattrib & ~AM_RDO, AM_RDO);
|
||||
res = f_unlink(path);
|
||||
}
|
||||
|
||||
if (res == FR_OK || res == FR_NO_FILE)
|
||||
deleted++;
|
||||
else
|
||||
failed++;
|
||||
|
||||
int percent = (deleted * 100) / total_paths;
|
||||
if (percent != last_percent || deleted % 5 == 0) {
|
||||
gfx_con_setpos(start_x, start_y);
|
||||
install_set_color(COLOR_CYAN);
|
||||
gfx_printf(" Bereinige: %s [%3d%%] (%d/%d)", folder_display_name, percent, deleted, total_paths);
|
||||
install_set_color(COLOR_WHITE);
|
||||
last_percent = percent;
|
||||
}
|
||||
}
|
||||
|
||||
gfx_con_setpos(start_x, start_y);
|
||||
if (failed == 0) {
|
||||
install_set_color(COLOR_GREEN);
|
||||
gfx_printf(" Bereinige: %s [100%%] (%d/%d) - Fertig!\n", folder_display_name, deleted, total_paths);
|
||||
install_set_color(COLOR_WHITE);
|
||||
} else {
|
||||
install_set_color(COLOR_ORANGE);
|
||||
gfx_printf(" Bereinige: %s [%3d%%] (%d/%d) - %d Fehler\n", folder_display_name, last_percent, deleted, total_paths, failed);
|
||||
install_set_color(COLOR_WHITE);
|
||||
}
|
||||
return (failed == 0) ? FR_OK : FR_DISK_ERR;
|
||||
}
|
||||
|
||||
int delete_path_list(const char* paths[], const char* description) {
|
||||
int res;
|
||||
int deleted = 0;
|
||||
|
||||
Reference in New Issue
Block a user