Small fixes and tweaks.

This commit is contained in:
J-D-K
2025-08-09 08:27:10 -04:00
parent 2f2191bc15
commit 25f61b8a54
21 changed files with 67 additions and 39 deletions

View File

@@ -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);

View File

@@ -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..."

View File

@@ -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..."

View File

@@ -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..."

View File

@@ -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..."

View File

@@ -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..."

View File

@@ -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..."

View File

@@ -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..."

View File

@@ -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..."

View File

@@ -23,7 +23,8 @@
"12: ターゲット ディレクトリの 作成中に エラーが 発生しました!",
"13: アップロードには バックアップは ZIP 形式で ある必要があります!",
"14: セーブデータの マウント中に エラーが 発生しました!",
"15: セーブデータの クローズ中に エラーが 発生しました!"
"15: セーブデータの クローズ中に エラーが 発生しました!",
"16: バックアップにメタファイルが含まれていません!"
],
"BackupMenuStatus": [
"0: セーブ データ メタ ファイルを 処理中..."

View File

@@ -23,7 +23,8 @@
"12: 대상 디렉터리 생성 오류!",
"13: 업로드할 백업은 ZIP 형식이어야 합니다!",
"14: 저장 데이터 마운트 오류!",
"15: 저장 데이터 닫기 오류!"
"15: 저장 데이터 닫기 오류!",
"16: 백업에 메타 파일이 없습니다!"
],
"BackupMenuStatus": [
"0: 저장 데이터 메타 파일 처리 중..."

View File

@@ -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..."

View File

@@ -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..."

View File

@@ -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..."

View File

@@ -23,7 +23,8 @@
"12: Ошибка при создании целевого каталога!",
"13: Резервная копия должна быть zip-файлом для загрузки!",
"14: Ошибка при монтировании данных сохранения!",
"15: Ошибка при закрытии данных сохранения!"
"15: Ошибка при закрытии данных сохранения!",
"16: Резервная копия не содержит метафайла!"
],
"BackupMenuStatus": [
"0: Обработка файла метаданных сохранения..."

View File

@@ -23,7 +23,8 @@
"12: 创建目标目录时出错!",
"13: 备份必须是zip格式才能上传",
"14: 挂载存档时出错!",
"15: 关闭存档时出错!"
"15: 关闭存档时出错!",
"16: 备份不包含元文件!"
],
"BackupMenuStatus": [
"0: 正在处理存档元数据文件..."

View File

@@ -23,7 +23,8 @@
"12: 建立目標資料夾時發生錯誤!",
"13: 備份必須為 zip 格式才能上傳!",
"14: 掛載存檔時發生錯誤!",
"15: 關閉存檔時發生錯誤!"
"15: 關閉存檔時發生錯誤!",
"16: 備份不包含元文件!"
],
"BackupMenuStatus": [
"0: 正在處理存檔元資料檔案..."

View File

@@ -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<FsSaveDataSpaceId>(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<FsSaveDataSpaceId>(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; }

View File

@@ -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);

View File

@@ -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<char, 5> sizeBuffer = {0};
FsSaveDataExtraData extraData{};
const FsSaveDataSpaceId spaceId = static_cast<FsSaveDataSpaceId>(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)
{