From 25f61b8a54d85dda11214feb747c0b070747f746 Mon Sep 17 00:00:00 2001 From: J-D-K Date: Sat, 9 Aug 2025 08:27:10 -0400 Subject: [PATCH] Small fixes and tweaks. --- Libraries/FsLib | 2 +- include/fs/SaveMetaData.hpp | 3 +++ romfs/Text/DE.json | 3 ++- romfs/Text/ENGB.json | 3 ++- romfs/Text/ENUS.json | 3 ++- romfs/Text/ES.json | 3 ++- romfs/Text/ES419.json | 3 ++- romfs/Text/FR.json | 3 ++- romfs/Text/FRCA.json | 3 ++- romfs/Text/IT.json | 3 ++- romfs/Text/JA.json | 3 ++- romfs/Text/KO.json | 3 ++- romfs/Text/NL.json | 3 ++- romfs/Text/PT.json | 3 ++- romfs/Text/PTBR.json | 3 ++- romfs/Text/RU.json | 3 ++- romfs/Text/ZHCN.json | 3 ++- romfs/Text/ZHTW.json | 3 ++- source/fs/SaveMetaData.cpp | 24 +++++++++++++----------- source/tasks/backup.cpp | 13 ++++++++++--- source/tasks/titleoptions.cpp | 16 ++++++++-------- 21 files changed, 67 insertions(+), 39 deletions(-) diff --git a/Libraries/FsLib b/Libraries/FsLib index ebd3747..833cc56 160000 --- a/Libraries/FsLib +++ b/Libraries/FsLib @@ -1 +1 @@ -Subproject commit ebd3747271f3f741f5cf04b8edf55c11f05c652c +Subproject commit 833cc56182f3796eb4b7123d2edd5dff83d4f8e4 diff --git a/include/fs/SaveMetaData.hpp b/include/fs/SaveMetaData.hpp index 89ff579..b5a128a 100644 --- a/include/fs/SaveMetaData.hpp +++ b/include/fs/SaveMetaData.hpp @@ -32,6 +32,9 @@ namespace fs } __attribute__((packed)); // clang-format on + // I didn't want a separate file for this. + bool read_save_data_extra_info(const FsSaveDataInfo *saveInfo, FsSaveDataExtraData &dataOut); + /// @brief Didn't feel like a whole new file just for this. Fills an fs::SaveMetaData struct. bool fill_save_meta_data(const FsSaveDataInfo *saveInfo, SaveMetaData &meta); diff --git a/romfs/Text/DE.json b/romfs/Text/DE.json index 35ac55e..e346305 100644 --- a/romfs/Text/DE.json +++ b/romfs/Text/DE.json @@ -23,7 +23,8 @@ "12: Fehler beim Erstellen des Zielverzeichnisses!", "13: Backup muss eine ZIP sein, um hochgeladen zu werden!", "14: Fehler beim Einbinden der Speicherdaten!", - "15: Fehler beim Schließen der Speicherdaten!" + "15: Fehler beim Schließen der Speicherdaten!", + "16: Die Sicherung enthält keine Metadatei!" ], "BackupMenuStatus": [ "0: Verarbeite Metadatei der Speicherdaten..." diff --git a/romfs/Text/ENGB.json b/romfs/Text/ENGB.json index a671403..7859c3f 100644 --- a/romfs/Text/ENGB.json +++ b/romfs/Text/ENGB.json @@ -23,7 +23,8 @@ "12: Error creating target directory!", "13: Backup must be a zip to upload!", "14: Error mounting save data!", - "15: Error closing save data!" + "15: Error closing save data!", + "16: Backup contains no meta file!" ], "BackupMenuStatus": [ "0: Processing save data meta file..." diff --git a/romfs/Text/ENUS.json b/romfs/Text/ENUS.json index fd5719a..19c0ffb 100644 --- a/romfs/Text/ENUS.json +++ b/romfs/Text/ENUS.json @@ -23,7 +23,8 @@ "12: Error creating target directory!", "13: Backup must be a zip to upload!", "14: Error mounting save data!", - "15: Error closing save data!" + "15: Error closing save data!", + "16: Backup contains no meta file!" ], "BackupMenuStatus": [ "0: Processing save data meta file..." diff --git a/romfs/Text/ES.json b/romfs/Text/ES.json index efb4cf1..9cb054a 100644 --- a/romfs/Text/ES.json +++ b/romfs/Text/ES.json @@ -23,7 +23,8 @@ "12: ¡Error al crear el directorio de destino!", "13: ¡La copia de seguridad debe ser un zip para subirla!", "14: ¡Error al montar los datos guardados!", - "15: ¡Error al cerrar los datos guardados!" + "15: ¡Error al cerrar los datos guardados!", + "16: ¡La copia de seguridad no contiene ningún archivo meta!" ], "BackupMenuStatus": [ "0: Procesando el archivo de metadatos de los datos guardados..." diff --git a/romfs/Text/ES419.json b/romfs/Text/ES419.json index 9e6bd3d..778a80c 100644 --- a/romfs/Text/ES419.json +++ b/romfs/Text/ES419.json @@ -23,7 +23,8 @@ "12: ¡Error al crear el directorio destino!", "13: ¡La copia de seguridad debe ser un archivo zip para subir!", "14: ¡Error al montar los datos guardados!", - "15: ¡Error al cerrar los datos guardados!" + "15: ¡Error al cerrar los datos guardados!", + "16: ¡La copia de seguridad no contiene ningún archivo meta!" ], "BackupMenuStatus": [ "0: Procesando el archivo de metadatos de datos guardados..." diff --git a/romfs/Text/FR.json b/romfs/Text/FR.json index 64ba48b..c7efa28 100644 --- a/romfs/Text/FR.json +++ b/romfs/Text/FR.json @@ -23,7 +23,8 @@ "12: Erreur lors de la création du répertoire cible !", "13: La sauvegarde doit être un zip pour être téléversée !", "14: Erreur lors du montage des données sauvegardées !", - "15: Erreur lors de la fermeture des données sauvegardées !" + "15: Erreur lors de la fermeture des données sauvegardées !", + "16: La sauvegarde ne contient aucun fichier méta !" ], "BackupMenuStatus": [ "0: Traitement du fichier méta des données sauvegardées..." diff --git a/romfs/Text/FRCA.json b/romfs/Text/FRCA.json index 51e216b..98fb475 100644 --- a/romfs/Text/FRCA.json +++ b/romfs/Text/FRCA.json @@ -23,7 +23,8 @@ "12: Erreur lors de la création du répertoire cible !", "13: La sauvegarde doit être un fichier zip pour être téléversée !", "14: Erreur lors du montage des données sauvegardées !", - "15: Erreur lors de la fermeture des données sauvegardées !" + "15: Erreur lors de la fermeture des données sauvegardées !", + "16: La sauvegarde ne contient aucun fichier méta !" ], "BackupMenuStatus": [ "0: Traitement du fichier méta des données sauvegardées..." diff --git a/romfs/Text/IT.json b/romfs/Text/IT.json index c9c72ae..11695a5 100644 --- a/romfs/Text/IT.json +++ b/romfs/Text/IT.json @@ -23,7 +23,8 @@ "12: Errore durante la creazione della directory di destinazione!", "13: Il backup deve essere uno zip per poter essere caricato!", "14: Errore durante il montaggio dei dati di salvataggio!", - "15: Errore durante la chiusura dei dati di salvataggio!" + "15: Errore durante la chiusura dei dati di salvataggio!", + "16: Il backup non contiene alcun file meta!" ], "BackupMenuStatus": [ "0: Elaborazione del file meta dei dati di salvataggio..." diff --git a/romfs/Text/JA.json b/romfs/Text/JA.json index 7dcdf99..45cc6c1 100644 --- a/romfs/Text/JA.json +++ b/romfs/Text/JA.json @@ -23,7 +23,8 @@ "12: ターゲット ディレクトリの 作成中に エラーが 発生しました!", "13: アップロードには バックアップは ZIP 形式で ある必要があります!", "14: セーブデータの マウント中に エラーが 発生しました!", - "15: セーブデータの クローズ中に エラーが 発生しました!" + "15: セーブデータの クローズ中に エラーが 発生しました!", + "16: バックアップにメタファイルが含まれていません!" ], "BackupMenuStatus": [ "0: セーブ データ メタ ファイルを 処理中..." diff --git a/romfs/Text/KO.json b/romfs/Text/KO.json index 62f2c0a..ccfa373 100644 --- a/romfs/Text/KO.json +++ b/romfs/Text/KO.json @@ -23,7 +23,8 @@ "12: 대상 디렉터리 생성 오류!", "13: 업로드할 백업은 ZIP 형식이어야 합니다!", "14: 저장 데이터 마운트 오류!", - "15: 저장 데이터 닫기 오류!" + "15: 저장 데이터 닫기 오류!", + "16: 백업에 메타 파일이 없습니다!" ], "BackupMenuStatus": [ "0: 저장 데이터 메타 파일 처리 중..." diff --git a/romfs/Text/NL.json b/romfs/Text/NL.json index 15f3dd8..cd6b8bc 100644 --- a/romfs/Text/NL.json +++ b/romfs/Text/NL.json @@ -23,7 +23,8 @@ "12: Fout bij het maken van doelmap!", "13: Back-up moet een zip zijn om te uploaden!", "14: Fout bij het koppelen van opslaggegevens!", - "15: Fout bij het sluiten van opslaggegevens!" + "15: Fout bij het sluiten van opslaggegevens!", + "16: Back-up bevat geen metabestand!" ], "BackupMenuStatus": [ "0: Opslag meta gegevensbestand verwerken..." diff --git a/romfs/Text/PT.json b/romfs/Text/PT.json index 9223c81..a6b152a 100644 --- a/romfs/Text/PT.json +++ b/romfs/Text/PT.json @@ -23,7 +23,8 @@ "12: Erro ao criar diretório de destino!", "13: O backup tem de ser um zip para enviar!", "14: Erro ao montar dados guardados!", - "15: Erro ao fechar dados guardados!" + "15: Erro ao fechar dados guardados!", + "16: O backup não contém nenhum ficheiro meta!" ], "BackupMenuStatus": [ "0: A processar ficheiro de metadados do save..." diff --git a/romfs/Text/PTBR.json b/romfs/Text/PTBR.json index b17b93c..5f7110d 100644 --- a/romfs/Text/PTBR.json +++ b/romfs/Text/PTBR.json @@ -23,7 +23,8 @@ "12: Erro ao criar diretório alvo!", "13: Backup precisa ser um zip para enviar!", "14: Erro ao montar dados salvos!", - "15: Erro ao fechar dados salvos!" + "15: Erro ao fechar dados salvos!", + "16: O backup não contém nenhum arquivo meta!" ], "BackupMenuStatus": [ "0: Processando arquivo de metadados do save..." diff --git a/romfs/Text/RU.json b/romfs/Text/RU.json index 008c4f9..b52cbd5 100644 --- a/romfs/Text/RU.json +++ b/romfs/Text/RU.json @@ -23,7 +23,8 @@ "12: Ошибка при создании целевого каталога!", "13: Резервная копия должна быть zip-файлом для загрузки!", "14: Ошибка при монтировании данных сохранения!", - "15: Ошибка при закрытии данных сохранения!" + "15: Ошибка при закрытии данных сохранения!", + "16: Резервная копия не содержит метафайла!" ], "BackupMenuStatus": [ "0: Обработка файла метаданных сохранения..." diff --git a/romfs/Text/ZHCN.json b/romfs/Text/ZHCN.json index cec78c0..9f76060 100644 --- a/romfs/Text/ZHCN.json +++ b/romfs/Text/ZHCN.json @@ -23,7 +23,8 @@ "12: 创建目标目录时出错!", "13: 备份必须是zip格式才能上传!", "14: 挂载存档时出错!", - "15: 关闭存档时出错!" + "15: 关闭存档时出错!", + "16: 备份不包含元文件!" ], "BackupMenuStatus": [ "0: 正在处理存档元数据文件..." diff --git a/romfs/Text/ZHTW.json b/romfs/Text/ZHTW.json index 9658f94..5b2dbc6 100644 --- a/romfs/Text/ZHTW.json +++ b/romfs/Text/ZHTW.json @@ -23,7 +23,8 @@ "12: 建立目標資料夾時發生錯誤!", "13: 備份必須為 zip 格式才能上傳!", "14: 掛載存檔時發生錯誤!", - "15: 關閉存檔時發生錯誤!" + "15: 關閉存檔時發生錯誤!", + "16: 備份不包含元文件!" ], "BackupMenuStatus": [ "0: 正在處理存檔元資料檔案..." diff --git a/source/fs/SaveMetaData.cpp b/source/fs/SaveMetaData.cpp index 0b73960..f410321 100644 --- a/source/fs/SaveMetaData.cpp +++ b/source/fs/SaveMetaData.cpp @@ -11,15 +11,22 @@ namespace constexpr size_t SIZE_EXTRA_DATA = sizeof(FsSaveDataExtraData); } -bool fs::fill_save_meta_data(const FsSaveDataInfo *saveInfo, fs::SaveMetaData &meta) +bool fs::read_save_data_extra_info(const FsSaveDataInfo *saveInfo, FsSaveDataExtraData &dataOut) { const FsSaveDataSpaceId spaceID = static_cast(saveInfo->save_data_space_id); - const uint64_t saveID = saveInfo->save_data_id; + const uint64_t saveDataID = saveInfo->save_data_id; - FsSaveDataExtraData extraData{}; const bool readError = - error::libnx(fsReadSaveDataFileSystemExtraDataBySaveDataSpaceId(&extraData, SIZE_EXTRA_DATA, spaceID, saveID)); + error::libnx(fsReadSaveDataFileSystemExtraDataBySaveDataSpaceId(&dataOut, SIZE_EXTRA_DATA, spaceID, saveDataID)); if (readError) { return false; } + return true; +} + +bool fs::fill_save_meta_data(const FsSaveDataInfo *saveInfo, fs::SaveMetaData &meta) +{ + FsSaveDataExtraData extraData{}; + const bool extraRead = fs::read_save_data_extra_info(saveInfo, extraData); + if (!extraRead) { return false; } meta = {.magic = fs::SAVE_META_MAGIC, .revision = 0x00, @@ -41,15 +48,10 @@ bool fs::fill_save_meta_data(const FsSaveDataInfo *saveInfo, fs::SaveMetaData &m bool fs::process_save_meta_data(const FsSaveDataInfo *saveInfo, const SaveMetaData &meta) { - const FsSaveDataSpaceId spaceID = static_cast(saveInfo->save_data_space_id); - const uint64_t saveID = saveInfo->save_data_id; - FsSaveDataExtraData extraData{}; - const bool readError = - error::libnx(fsReadSaveDataFileSystemExtraDataBySaveDataSpaceId(&extraData, SIZE_EXTRA_DATA, spaceID, saveID)); - if (readError) { return false; } + const bool extraRead = fs::read_save_data_extra_info(saveInfo, extraData); + if (!extraRead) { return false; } - // We need to close this temporarily. To do: Look for a way to make this not needed? const bool needsExtend = extraData.data_size < meta.saveDataSize; const bool extended = needsExtend && fs::extend_save_data(saveInfo, meta.saveDataSize, meta.journalSize); if (needsExtend && !extended) { return false; } diff --git a/source/tasks/backup.cpp b/source/tasks/backup.cpp index 56eab46..dfd7b5c 100644 --- a/source/tasks/backup.cpp +++ b/source/tasks/backup.cpp @@ -473,7 +473,7 @@ static bool read_and_process_meta(const fslib::Path &targetDir, BackupMenuState: fslib::File metaFile{metaPath, FsOpenMode_Read}; if (!metaFile.is_open()) { - const char *popErrorProcessing = strings::get_by_name(strings::names::BACKUPMENU_POPS, 11); + const char *popErrorProcessing = strings::get_by_name(strings::names::BACKUPMENU_POPS, 16); ui::PopMessageManager::push_message(popTicks, popErrorProcessing); return false; } @@ -514,10 +514,17 @@ static bool read_and_process_meta(fs::MiniUnzip &unzip, BackupMenuState::TaskDat } fs::SaveMetaData saveMeta{}; - const bool metaFound = unzip.locate_file(fs::NAME_SAVE_META); + const bool metaFound = unzip.locate_file(fs::NAME_SAVE_META); + if (!metaFound) + { + const char *popNotFound = strings::get_by_name(strings::names::BACKUPMENU_POPS, 16); + ui::PopMessageManager::push_message(popTicks, popNotFound); + return false; + } + const bool metaRead = metaFound && unzip.read(&saveMeta, SIZE_SAVE_META) == SIZE_SAVE_META; const bool metaProcessed = metaRead && fs::process_save_meta_data(saveInfo, saveMeta); - if (!metaFound || !metaRead || !metaProcessed) + if (!metaRead || !metaProcessed) { const char *popErrorProcessing = strings::get_by_name(strings::names::BACKUPMENU_POPS, 11); ui::PopMessageManager::push_message(popTicks, popErrorProcessing); diff --git a/source/tasks/titleoptions.cpp b/source/tasks/titleoptions.cpp index 29f1e4e..5b8cc65 100644 --- a/source/tasks/titleoptions.cpp +++ b/source/tasks/titleoptions.cpp @@ -5,6 +5,7 @@ #include "error.hpp" #include "fs/fs.hpp" #include "keyboard.hpp" +#include "logger.hpp" #include "remote/remote.hpp" #include "strings.hpp" #include "stringutil.hpp" @@ -192,8 +193,7 @@ void tasks::titleoptions::delete_save_data_from_system(sys::Task *task, TitleOpt void tasks::titleoptions::extend_save_data(sys::Task *task, TitleOptionState::TaskData taskData) { - static constexpr size_t SIZE_EXTRA_DATA = sizeof(FsSaveDataExtraData); - static constexpr size_t SIZE_MB = 0x100000; + static constexpr int SIZE_MB = 0x100000; if (error::is_null(task)) { return; } @@ -208,18 +208,18 @@ void tasks::titleoptions::extend_save_data(sys::Task *task, TitleOptionState::Ta std::array sizeBuffer = {0}; FsSaveDataExtraData extraData{}; - const FsSaveDataSpaceId spaceId = static_cast(saveInfo->save_data_space_id); - const uint64_t saveDataId = saveInfo->save_data_id; + const bool readExtra = fs::read_save_data_extra_info(saveInfo, extraData); + + const int sizeMB = extraData.data_size / SIZE_MB; const char *keyboardHeader = strings::get_by_name(strings::names::KEYBOARD, 8); - const std::string keyboardDefault = stringutil::get_formatted_string("%u", (extraData.data_size / SIZE_MB) + SIZE_MB); - const bool extraError = - error::libnx(fsReadSaveDataFileSystemExtraDataBySaveDataSpaceId(&extraData, SIZE_EXTRA_DATA, spaceId, saveDataId)); + const std::string keyboardDefault = stringutil::get_formatted_string("%lli", sizeMB + 1); + const bool validInput = keyboard::get_input(SwkbdType_NumPad, keyboardDefault, keyboardHeader, sizeBuffer.data(), 5); if (!validInput) { TASK_FINISH_RETURN(task); } const uint8_t saveType = saveInfo->save_data_type; const int64_t size = std::strtoll(sizeBuffer.data(), nullptr, 10) * SIZE_MB; - const int64_t journal = extraError ? titleInfo->get_journal_size(saveType) : extraData.journal_size; + const int64_t journal = !readExtra ? titleInfo->get_journal_size(saveType) : extraData.journal_size; const bool saveExtended = fs::extend_save_data(saveInfo, size, journal); if (saveExtended) {