/* * OmniNX Installer - Update Mode * Selective cleanup and install when OmniNX is already installed. */ #include "install.h" #include "deletion_lists_update.h" #include "fs.h" #include "version.h" #include "gfx.h" #include #include #include #undef COLOR_CYAN #undef COLOR_WHITE #undef COLOR_GREEN #undef COLOR_YELLOW #undef COLOR_ORANGE #undef COLOR_RED #define COLOR_CYAN 0xFF00FFFF #define COLOR_WHITE 0xFFFFFFFF #define COLOR_GREEN 0xFF00FF00 #define COLOR_YELLOW 0xFFFFDD00 #define COLOR_ORANGE 0xFF00A5FF #define COLOR_RED 0xFFFF0000 #define set_color install_set_color #define check_and_clear_screen_if_needed install_check_and_clear_screen_if_needed #define path_exists install_path_exists // Update mode: Cleanup specific directories/files int update_mode_cleanup(omninx_variant_t variant) { (void)variant; install_preserve_update_cleanup_begin(); check_and_clear_screen_if_needed(); set_color(COLOR_WHITE); delete_path_lists_grouped("atmosphere/", atmosphere_dirs_to_delete, atmosphere_contents_dirs_to_delete, atmosphere_files_to_delete, NULL); delete_path_lists_grouped("bootloader/", bootloader_dirs_to_delete, bootloader_files_to_delete, NULL); delete_path_lists_grouped("config/", config_dirs_to_delete, NULL); delete_path_lists_grouped("switch/", switch_dirs_to_delete, switch_files_to_delete, NULL); delete_path_lists_grouped("Root-Dateien", root_files_to_delete, misc_dirs_to_delete, misc_files_to_delete, NULL); install_preserve_update_cleanup_end(); set_color(COLOR_GREEN); gfx_printf(" Bereinigung abgeschlossen!\n"); set_color(COLOR_WHITE); return FR_OK; } // Pack folders installed from staging (SaltySD only ships with OC). static const char *const pack_folders[] = { "atmosphere", "bootloader", "config", "switch", "themes", "warmboot_mariko", "hwtest", "SaltySD", "extras", }; // Update mode: Move files from staging (rename on the same SD card, copy only as fallback) int update_mode_install(omninx_variant_t variant) { int res; const char* staging = get_staging_path(variant); char src_path[FS_PATH_MAX]; char label[32]; if (!staging) { return FR_INVALID_PARAMETER; } check_and_clear_screen_if_needed(); set_color(COLOR_YELLOW); gfx_printf("Dateien werden installiert...\n"); set_color(COLOR_WHITE); for (u32 i = 0; i < sizeof(pack_folders) / sizeof(pack_folders[0]); i++) { if (!strcmp(pack_folders[i], "SaltySD") && variant != VARIANT_OC) continue; s_printf(src_path, "%s/%s", staging, pack_folders[i]); s_printf(label, "%s/", pack_folders[i]); res = install_move_tree(src_path, "sd:/", label); if (res != FR_OK && res != FR_NO_FILE) return res; } set_color(COLOR_CYAN); gfx_printf(" Installiere Root-Dateien...\n"); set_color(COLOR_WHITE); res = install_move_staging_root_files(staging, "sd:/"); if (res != FR_OK) return res; set_color(COLOR_GREEN); gfx_printf(" Installation der Dateien abgeschlossen!\n"); set_color(COLOR_WHITE); return FR_OK; } // Remove staging directory after installation (mostly empty folders after the move) int cleanup_staging_directory(omninx_variant_t pack_variant) { const char* staging = get_staging_path(pack_variant); if (!staging) { return FR_INVALID_PARAMETER; } check_and_clear_screen_if_needed(); if (!path_exists(staging)) return FR_OK; set_color(COLOR_YELLOW); gfx_printf("\nEntferne Installationsordner...\n"); set_color(COLOR_WHITE); int res = install_delete_tree(staging); if (res != FR_OK) { set_color(COLOR_ORANGE); gfx_printf(" [WARN] Ordner konnte nicht entfernt werden (err=%d)\n", res); set_color(COLOR_WHITE); } return res; }