From a53f94a7cbc9d69c984fd97df2ad2591184d73c5 Mon Sep 17 00:00:00 2001 From: w3irDv <170813473+w3irDv@users.noreply.github.com> Date: Sun, 12 Jan 2025 21:02:18 +0100 Subject: [PATCH 1/3] keep previous tag if returning with B --- src/menu/TitleOptionsState.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/menu/TitleOptionsState.cpp b/src/menu/TitleOptionsState.cpp index 0c2e912..fa69bbe 100644 --- a/src/menu/TitleOptionsState.cpp +++ b/src/menu/TitleOptionsState.cpp @@ -125,6 +125,7 @@ void TitleOptionsState::render() { consolePrintPos(M_OFF, 15, LanguageUtils::gettext("Date: %s"), metadataObj->simpleFormat().c_str()); tag = metadataObj->getTag(); + newTag = tag; if ( tag != "" ) { DrawUtils::setFontColorByCursor(COLOR_TEXT,COLOR_TEXT_AT_CURSOR,cursorPos,0); consolePrintPos(TAG_OFF, 5,"[%s]",tag.c_str()); @@ -199,6 +200,7 @@ void TitleOptionsState::render() { consolePrintPos(M_OFF, 15, LanguageUtils::gettext("Date: %s"), metadataObj->simpleFormat().c_str()); tag = metadataObj->getTag(); + newTag = tag; if ( tag != "" ) consolePrintPos(TAG_OFF, 5,"[%s]",tag.c_str()); } @@ -219,7 +221,10 @@ void TitleOptionsState::render() { case restore: consolePrintPos(20,0,LanguageUtils::gettext("Restore")); DrawUtils::setFontColor(COLOR_TEXT); - consolePrintPosAligned(17, 4, 2, LanguageUtils::gettext("\ue002: Change BackupSet \ue000: Restore \ue001: Back")); + if (emptySlot) + consolePrintPosAligned(17, 4, 2, LanguageUtils::gettext("\ue002: Change BackupSet \ue000: Restore \ue001: Back")); + else + consolePrintPosAligned(17, 4, 2, LanguageUtils::gettext("\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back")); break; case wipe: consolePrintPosAligned(0, 4, 1,LanguageUtils::gettext("Wipe")); @@ -246,6 +251,7 @@ void TitleOptionsState::render() { } ApplicationState::eSubState TitleOptionsState::update(Input *input) { + bool emptySlot = isSlotEmpty(this->title.highID, this->title.lowID, slot); if (this->state == STATE_TITLE_OPTIONS) { if (input->get(TRIGGER, PAD_BUTTON_B)) { return SUBSTATE_RETURN; @@ -463,9 +469,13 @@ ApplicationState::eSubState TitleOptionsState::update(Input *input) { } } if (input->get(TRIGGER, PAD_BUTTON_PLUS)) { - this->state = STATE_DO_SUBSTATE; - this->substateCalled = STATE_KEYBOARD; - this->subState = std::make_unique(newTag); + if (emptySlot) + return SUBSTATE_RUNNING; + if (this->task == backup || this->task == restore ) { + this->state = STATE_DO_SUBSTATE; + this->substateCalled = STATE_KEYBOARD; + this->subState = std::make_unique(newTag); + } } } else if (this->state == STATE_DO_SUBSTATE) { auto retSubState = this->subState->update(input); @@ -474,7 +484,7 @@ ApplicationState::eSubState TitleOptionsState::update(Input *input) { return SUBSTATE_RUNNING; } else if (retSubState == SUBSTATE_RETURN) { if ( this->substateCalled == STATE_KEYBOARD) { - if (newTag != tag) { + if (newTag != tag ) { Metadata *metadataObj = new Metadata(this->title.highID, this->title.lowID, slot); metadataObj->read(); metadataObj->setTag(newTag); From d527de0bd83014797811756cdaa453800748e63b Mon Sep 17 00:00:00 2001 From: w3irDv <170813473+w3irDv@users.noreply.github.com> Date: Sun, 12 Jan 2025 23:32:00 +0100 Subject: [PATCH 2/3] log read/write errors --- include/savemng.h | 3 +- include/utils/Colors.h | 1 + romfs/languages/SChinese.json | 36 +++++++++-- romfs/languages/TChinese.json | 39 +++++++++--- romfs/languages/english.json | 25 ++++---- romfs/languages/german.json | 38 ++++++++--- romfs/languages/italian.json | 39 +++++++++--- romfs/languages/japanese.json | 39 +++++++++--- romfs/languages/korean.json | 39 +++++++++--- romfs/languages/portuguese.json | 38 ++++++++--- romfs/languages/russian.json | 23 ++++--- romfs/languages/spanish.json | 23 ++++--- src/main.cpp | 5 ++ src/savemng.cpp | 108 +++++++++++++++++++++++++------- 14 files changed, 356 insertions(+), 100 deletions(-) diff --git a/include/savemng.h b/include/savemng.h index 9353d20..5e49cd2 100644 --- a/include/savemng.h +++ b/include/savemng.h @@ -167,4 +167,5 @@ uint8_t getWiiUaccn(); Account *getWiiUacc(); Account *getSDacc(); void deleteSlot(Title *title, uint8_t slot); -bool wipeBackupSet(const std::string &subPath); \ No newline at end of file +bool wipeBackupSet(const std::string &subPath); +void splitStringWithNewLines(const std::string &input, std::string &output); \ No newline at end of file diff --git a/include/utils/Colors.h b/include/utils/Colors.h index 8c10251..927e7cd 100644 --- a/include/utils/Colors.h +++ b/include/utils/Colors.h @@ -27,3 +27,4 @@ #define COLOR_KEY_S Color(0xFF666600) #define COLOR_KEY_C Color(0xFF0000FF) #define COLOR_BG_SUCCESS Color(0x00DD55FF) +#define COLOR_BG_ERROR Color(0xAA0000FF) diff --git a/romfs/languages/SChinese.json b/romfs/languages/SChinese.json index cb7c53b..8dac0b0 100644 --- a/romfs/languages/SChinese.json +++ b/romfs/languages/SChinese.json @@ -71,9 +71,9 @@ "Filesize: %d bytes": "文件大小:%d 字节", "Deleting folder %s": "正在删除 %s 文件夹", "From: \n%s": "从:\n%s", - "Failed to delete folder %s: %s": "删除文件夹失败 %s: %s", + "Failed to delete folder\n\n%s\n%s": "删除文件夹失败\n\n%s\n%s", "Deleting file %s": "正在删除文件 %s", - "Failed to delete file %s: %s": "删除文件失败 %s: %s", + "Failed to delete file\n\n%s\n%s": "删除文件失败\n\n%s\n%s", "Loadiine game folder not found.": "Loadiine游戏文件夹没有发现。", "Failed to open Loadiine game save directory.": "Loadiine游戏文件夹无法打开。", "Are you sure?": "你确定吗?", @@ -89,9 +89,9 @@ "Restore failed.": "还原保存数据失败。", "Hm, are you REALLY sure?": "嘶,你真的真的要这样做?", "Backup current savedata first?": "要不要先备份现在的保存数据?", - "Failed to delete common folder: %s": "删除common文件夹失败: %s", - "Failed to delete savefile.": "删除保存数据失败。", - "Failed to delete user folder: %s": "删除user文件夹失败: %s", + "%s \n Failed to delete common folder:\n%s\n%s": "%s \n 删除common文件夹失败:\n%s\n%s", + "%s \n Failed to delete savefile:\n%s": "%s \n 删除保存数据失败:\n%s", + "%s \n Failed to delete user folder:\n%s\n%s": "%s \n 删除user文件夹失败:\n%s\n%s", "Failed to import savedata from loadiine.": "导入loadiine保存数据失败。", "Failed to export savedata to loadiine.": "导出保存数据到loadiine失败。", "\ue083 Sort: %s \ue084": "\ue083 排序: %s \ue084", @@ -181,6 +181,32 @@ "pre-Wipe backup": "pre-Wipe backup", "pre-copyToOtherDev backup": "pre-copyToOtherDev backup", "UNUSABLE SLOT - BACKUP FAILED": "UNUSABLE SLOT - BACKUP FAILED", + "%s \n Common save not found.": "%s \n Common save not found.", + "%s\nBackup failed. DO NOT restore from this slot.": "%s\nBackup failed. DO NOT restore from this slot.", + "%s\nBackup failed.": "%s\nBackup failed.", + "%s\nCommon save not restored.": "%s\nCommon save not restored.", + "%s\nNo backup found on selected slot.": "%s\nNo backup found on selected slot.", + "%s\nNo save found for this user.": "%s\nNo save found for this user.", + "%s\nRestore failed.": "%s\nRestore failed.", + "Cannot open file for read\n\n%s\n%s": "Cannot open file for read\n\n%s\n%s", + "Cannot open file for write\n\n%s\n%s": "Cannot open file for write\n\n%s\n%s", + "Error opening source dir\n\n%s\n%s": "Error opening source dir\n\n%s\n%s", + "Error setting path. Aborting.": "Error setting path. Aborting.", + "Failed to delete backupSet %s.": "Failed to delete backupSet %s.", + "Failed to delete slot %u.": "Failed to delete slot %u.", + "Folder does not exist.": "Folder does not exist.", + "Getting Serial ID": "Getting Serial ID", + "Initializing BackupSets metadata.": "Initializing BackupSets metadata.", + "Initializing ROMFS": "Initializing ROMFS", + "Initializing WPAD and KAPD": "Initializing WPAD and KAPD", + "Initializing loadWiiU Titles": "Initializing loadWiiU Titles", + "Please wait. First write to SD may be slow.": "Please wait. First write to SD may be slow.", + "Press \ue000 to continue": "Press \ue000 to continue", + "Read error\n%s": "Read error\n%s", + "Wipe BackupSet - Hm, are you REALLY sure?": "Wipe BackupSet - Hm, are you REALLY sure?", + "Write error\n%s": "Write error\n%s", + "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back": "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back", + "\ue003 Confirm - \ue001 Cancel": "\ue003 Confirm - \ue001 Cancel", "KB_N_0": "1234567890-=", "KB_N_1": "qwertyuiop[]|", "KB_N_2": "asdfghjkl;'", diff --git a/romfs/languages/TChinese.json b/romfs/languages/TChinese.json index 4067a08..04d853e 100644 --- a/romfs/languages/TChinese.json +++ b/romfs/languages/TChinese.json @@ -72,9 +72,9 @@ "Filesize: %d bytes": "資料大小:%d 個字節", "Deleting folder %s": "刪除資料夾 %s", "From: \n%s": "從:\n%s", - "Failed to delete folder %s: %s": "無法刪除資料夾 %s: %s", + "Failed to delete folder\n\n%s\n%s": "無法刪除資料夾\n\n%s\n%s", "Deleting file %s": "刪除資料 %s", - "Failed to delete file %s: %s": "無法刪除資料 %s: %s", + "Failed to delete file\n\n%s\n%s": "無法刪除資料\n\n%s\n%s", "Loadiine game folder not found.": "未找到Loadiine遊戲資料夾。", "Failed to open Loadiine game save directory.": "打開Loadiine遊戲保存資料夾失敗。", "Are you sure?": "你確定嗎?", @@ -82,17 +82,17 @@ "Backup done. Now copying Savedata.": "備份完成。現在復制Savedata。", "Common save not found.": "Common保存資料未找到。", "Copy failed.": "複製失敗。", - "Backup failed.": "備份失敗。", + "%s\nBackup failed.": "%s\n備份失敗。", "Backup found on this slot. Overwrite it?": "在此槽位上找到備份。覆蓋?", "No save found for this user.": "未找到此使用者的保存資料。", - "Backup failed. DO NOT restore from this slot.": "備份失敗。請不要從該槽位恢復。", + "%s\nBackup failed. DO NOT restore from this slot.": "%s\n備份失敗。請不要從該槽位恢復。", "No backup found on selected slot.": "在選定的槽位上找不到備份。", "Restore failed.": "還原失敗。", "Hm, are you REALLY sure?": "蛤?你真的確定嗎?", "Backup current savedata first?": "先備份當前的保存數據?", - "Failed to delete common folder: %s": "無法刪除Common資料夾: %s", - "Failed to delete savefile.": "無法刪除保存資料。", - "Failed to delete user folder: %s": "無法刪除使用者資料夾: %s", + "%s \n Failed to delete common folder:\n%s\n%s": "%s \n 無法刪除Common資料夾:\n%s\n%s", + "%s \n Failed to delete savefile:\n%s": "%s \n 無法刪除保存資料:\n%s", + "%s \n Failed to delete user folder:\n%s\n%s": "%s \n 無法刪除使用者資料夾:\n%s\n%s", "Failed to import savedata from loadiine.": "無法從loadiine導入保存數據。", "Failed to export savedata to loadiine.": "無法導出保存數據到Loadiine。", " Batch Restore": " Batch Restore", @@ -176,6 +176,31 @@ "pre-Wipe backup": "pre-Wipe backup", "pre-copyToOtherDev backup": "pre-copyToOtherDev backup", "UNUSABLE SLOT - BACKUP FAILED": "UNUSABLE SLOT - BACKUP FAILED", + "%s \n Common save not found.": "%s \n Common save not found.", + "%s\nCommon save not restored.": "%s\nCommon save not restored.", + "%s\nNo backup found on selected slot.": "%s\nNo backup found on selected slot.", + "%s\nNo save found for this user.": "%s\nNo save found for this user.", + "%s\nRestore failed.": "%s\nRestore failed.", + ", from ": ", from ", + "Cannot open file for read\n\n%s\n%s": "Cannot open file for read\n\n%s\n%s", + "Cannot open file for write\n\n%s\n%s": "Cannot open file for write\n\n%s\n%s", + "Error opening source dir\n\n%s\n%s": "Error opening source dir\n\n%s\n%s", + "Error setting path. Aborting.": "Error setting path. Aborting.", + "Failed to delete backupSet %s.": "Failed to delete backupSet %s.", + "Failed to delete slot %u.": "Failed to delete slot %u.", + "Folder does not exist.": "Folder does not exist.", + "Getting Serial ID": "Getting Serial ID", + "Initializing BackupSets metadata.": "Initializing BackupSets metadata.", + "Initializing ROMFS": "Initializing ROMFS", + "Initializing WPAD and KAPD": "Initializing WPAD and KAPD", + "Initializing loadWiiU Titles": "Initializing loadWiiU Titles", + "Please wait. First write to SD may be slow.": "Please wait. First write to SD may be slow.", + "Press \ue000 to continue": "Press \ue000 to continue", + "Read error\n%s": "Read error\n%s", + "Wipe BackupSet - Hm, are you REALLY sure?": "Wipe BackupSet - Hm, are you REALLY sure?", + "Write error\n%s": "Write error\n%s", + "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back": "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back", + "\ue003 Confirm - \ue001 Cancel": "\ue003 Confirm - \ue001 Cancel", "KB_N_0": "1234567890-=", "KB_N_1": "qwertyuiop[]|", "KB_N_2": "asdfghjkl;'", diff --git a/romfs/languages/english.json b/romfs/languages/english.json index f4f2181..8513953 100644 --- a/romfs/languages/english.json +++ b/romfs/languages/english.json @@ -71,9 +71,9 @@ "Filesize: %d bytes": "Filesize: %d bytes", "Deleting folder %s": "Deleting folder %s", "From: \n%s": "From: \n%s", - "Failed to delete folder %s: %s": "Failed to delete folder %s: %s", + "Failed to delete folder\n\n%s\n%s": "Failed to delete folder\n\n%s\nº%s", "Deleting file %s": "Deleting file %s", - "Failed to delete file %s: %s": "Failed to delete file %s: %s", + "Failed to delete file\n\n%s\n%s": "Failed to delete file\n\n%s\n%s", "Loadiine game folder not found.": "Loadiine game folder not found.", "Failed to open Loadiine game save directory.": "Failed to open Loadiine game save directory.", "Are you sure?": "Are you sure?", @@ -81,17 +81,14 @@ "Backup done. Now copying Savedata.": "Backup done. Now copying Savedata.", "Common save not found.": "Common save not found.", "Copy failed.": "Copy failed.", - "Backup failed.": "Backup failed.", + "%s\nBackup failed.": "%s\nBackup failed.", "Backup found on this slot. Overwrite it?": "Backup found on this slot. Overwrite it?", "No save found for this user.": "No save found for this user.", - "Backup failed. DO NOT restore from this slot.": "Backup failed. DO NOT restore from this slot.", + "%s\nBackup failed. DO NOT restore from this slot.": "%s\nBackup failed. DO NOT restore from this slot.", "No backup found on selected slot.": "No backup found on selected slot.", "Restore failed.": "Restore failed.", "Hm, are you REALLY sure?": "Hm, are you REALLY sure?", "Backup current savedata first?": "Backup current savedata first?", - "Failed to delete common folder: %s": "Failed to delete common folder: %s", - "Failed to delete savefile.": "Failed to delete savefile.", - "Failed to delete user folder: %s": "Failed to delete user folder: %s", "Failed to import savedata from loadiine.": "Failed to import savedata from loadiine.", "Failed to export savedata to loadiine.": "Failed to export savedata to loadiine.", "\ue083 Sort: %s \ue084": "\ue083 Sort: %s \ue084", @@ -112,7 +109,7 @@ "Wipe BackupSet - Are you sure?": "Wipe BackupSet - Are you sure?", "Wipe BackupSet - Hm, are you REALLY sure?": "Wipe BackupSet - Hm, are you REALLY sure?", "Initializing BackupSets metadata.": "Initializing BackupSets metadata.", - "Please wait. First write to SD may be slow.": "Initializing BackupSets metadata.", + "Please wait. First write to SD may be slow.": "Please wait. First write to SD may be slow.", "Filter BackupSets": "Filter BackupSets", "Show only BackupSets satisfying all these conditions:": "Show only BackupSets satisfying all these conditions:", "Console: %s": "Console: %s", @@ -138,9 +135,9 @@ " Restore vWii (%u Title%s)": " Restore vWii (%u Title%s)", " [vWiiInject]": " [vWiiInject]", "%s \n Common save not found.": "%s \n Common save not found.", - "%s \n Failed to delete common folder:\n %s": "%s \n Failed to delete common folder:\n %s", - "%s \n Failed to delete savefile.": "%s \n Failed to delete savefile.", - "%s \n Failed to delete user folder:\n %s": "%s \n Failed to delete user folder:\n %s", + "%s \n Failed to delete common folder:\n%s\n%s": "%s \n Failed to delete common folder:\n%s\n%s", + "%s \n Failed to delete savefile:\n%s": "%s \n Failed to delete savefile:\n%s", + "%s \n Failed to delete user folder:\n%s\n%s": "%s \n Failed to delete user folder:\n%s\n%s", "%s\nCommon save not restored.": "%s\nCommon save not restored.", "%s\nNo backup found on selected slot.": "%s\nNo backup found on selected slot.", "%s\nNo save found for this user.": "%s\nNo save found for this user.", @@ -210,6 +207,12 @@ "pre-Wipe backup": "pre-Wipe backup", "pre-copyToOtherDev backup": "pre-copyToOtherDev backup", "UNUSABLE SLOT - BACKUP FAILED": "UNUSABLE SLOT - BACKUP FAILED", + "Cannot open file for read\n\n%s\n%s": "Cannot open file for read\n\n%s\n%s", + "Cannot open file for write\n\n%s\n%s": "Cannot open file for write\n\n%s\n%s", + "Error opening source dir\n\n%s\n%s": "Error opening source dir\n\n%s\n%s", + "Read error\n%s": "Read error\n%s", + "Write error\n%s": "Write error\n%s", + "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back": "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back", "KB_N_0": "1234567890-=", "KB_N_1": "qwertyuiop[]|", "KB_N_2": "asdfghjkl;'", diff --git a/romfs/languages/german.json b/romfs/languages/german.json index f3345cb..ea30628 100644 --- a/romfs/languages/german.json +++ b/romfs/languages/german.json @@ -71,9 +71,9 @@ "Filesize: %d bytes": "Dateigröße: %d bytes", "Deleting folder %s": "Lösche Ordner %s", "From: \n%s": "Von: \n%s", - "Failed to delete folder %s: %s": "Löschen von Ordner %s: %s fehlgeschlagen", + "Failed to delete folder\n\n%s\n%s": "Löschen von Ordner\n\n%s\n%s fehlgeschlagen", "Deleting file %s": "Lösche Datei %s", - "Failed to delete file %s: %s": "Löschen von Datei %s: %s fehlgeschlagen", + "Failed to delete file\n\n%s\n%s": "Löschen von Datei\n\n%s\n%s fehlgeschlagen", "Loadiine game folder not found.": "Loadiine Spielordner nicht gefunden.", "Failed to open Loadiine game save directory.": "Fehlgeschlagen Loadiine Spielspeicherverzeichnis zu öffnen.", "Are you sure?": "Bist du sicher?", @@ -81,17 +81,17 @@ "Backup done. Now copying Savedata.": "Sicherung abgeschlossen. Kopiere Speicherstand.", "Common save not found.": "'Gemeinsame' Speicherung nicht gefunden.", "Copy failed.": "Kopieren fehlgeschlagen.", - "Backup failed.": "Sicherung fehlgeschlagen.", + "%s\nBackup failed.": "%s\nSicherung fehlgeschlagen.", "Backup found on this slot. Overwrite it?": "Sicherung auf diesem Slot gefunden. Überschreiben?", "No save found for this user.": "Keinen Speicherstand für diesen Nutzer gefunden.", - "Backup failed. DO NOT restore from this slot.": "Sicherung fehlgeschlagen. STELLE NICHT von diesem Slot wiederher.", + "%s\nBackup failed. DO NOT restore from this slot.": "%s\nSicherung fehlgeschlagen. STELLE NICHT von diesem Slot wiederher.", "No backup found on selected slot.": "Keine Sicherung in ausgewähltem Slot gefunden.", "Restore failed.": "Wiederherstellen fehlgeschlagen.", "Hm, are you REALLY sure?": "Hm, are you REALLY sure?", "Backup current savedata first?": "Sichere aktuellen Speicherstand zuerst?", - "Failed to delete common folder: %s": "Löschen von 'gemeinsamem' Ordner fehlgeschlagen: %s", - "Failed to delete savefile.": "Löschen von Speicherstand fehlgeschlagen.", - "Failed to delete user folder: %s": "Löschen vom Nutzerordner fehlgeschlagen: %s", + "%s \n Failed to delete common folder:\n%s\n%s": "%s \n Löschen von 'gemeinsamem' Ordner fehlgeschlagen:\n%s\n%s", + "%s \n Failed to delete savefile:\n%s": "$s \n Löschen von Speicherstand fehlgeschlagen:\n%s", + "%s \n Failed to delete user folder:\n%s\n%s": "%s \n Löschen vom Nutzerordner fehlgeschlagen:\n%s\n%s", "Failed to import savedata from loadiine.": "Importieren von Loadiine Speicherdaten fehlgeschlagen.", "Failed to export savedata to loadiine.": "Exportieren von Loadiine Speicherdaten fehlgeschlagen.", "\ue083 Sort: %s \ue084": "\ue083 Sortieren: %s \ue084", @@ -181,6 +181,30 @@ "pre-Wipe backup": "pre-Wipe backup", "pre-copyToOtherDev backup": "pre-copyToOtherDev backup", "UNUSABLE SLOT - BACKUP FAILED": "UNUSABLE SLOT - BACKUP FAILED", + "%s \n Common save not found.": "%s \n Common save not found.", + "%s\nCommon save not restored.": "%s\nCommon save not restored.", + "%s\nNo backup found on selected slot.": "%s\nNo backup found on selected slot.", + "%s\nNo save found for this user.": "%s\nNo save found for this user.", + "%s\nRestore failed.": "%s\nRestore failed.", + "Cannot open file for read\n\n%s\n%s": "Cannot open file for read\n\n%s\n%s", + "Cannot open file for write\n\n%s\n%s": "Cannot open file for write\n\n%s\n%s", + "Error opening source dir\n\n%s\n%s": "Error opening source dir\n\n%s\n%s", + "Error setting path. Aborting.": "Error setting path. Aborting.", + "Failed to delete backupSet %s.": "Failed to delete backupSet %s.", + "Failed to delete slot %u.": "Failed to delete slot %u.", + "Folder does not exist.": "Folder does not exist.", + "Getting Serial ID": "Getting Serial ID", + "Initializing BackupSets metadata.": "Initializing BackupSets metadata.", + "Initializing ROMFS": "Initializing ROMFS", + "Initializing WPAD and KAPD": "Initializing WPAD and KAPD", + "Initializing loadWiiU Titles": "Initializing loadWiiU Titles", + "Please wait. First write to SD may be slow.": "Please wait. First write to SD may be slow.", + "Press \ue000 to continue": "Press \ue000 to continue", + "Read error\n%s": "Read error\n%s", + "Wipe BackupSet - Hm, are you REALLY sure?": "Wipe BackupSet - Hm, are you REALLY sure?", + "Write error\n%s": "Write error\n%s", + "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back": "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back", + "\ue003 Confirm - \ue001 Cancel": "\ue003 Confirm - \ue001 Cancel", "KB_N_0": "1234567890-=", "KB_N_1": "qwertyuiop[]|", "KB_N_2": "asdfghjkl;'", diff --git a/romfs/languages/italian.json b/romfs/languages/italian.json index 542a154..3d9f8aa 100644 --- a/romfs/languages/italian.json +++ b/romfs/languages/italian.json @@ -71,9 +71,9 @@ "Filesize: %d bytes": "Dimensione file: %d byte", "Deleting folder %s": "Eliminazione cartella %s", "From: \n%s": "Da: \n%s", - "Failed to delete folder %s: %s": "Non è stato possibile eliminare il file %s: %s", + "Failed to delete folder\n\n%s\n%s": "Non è stato possibile eliminare il file\n\n%s\n%s", "Deleting file %s": "Eliminazione cartella %s", - "Failed to delete file %s: %s": "Non è stato possibile eliminare il file %s: %s", + "Failed to delete file\n\n%s\n%s": "Non è stato possibile eliminare il file\n\n%s\n%s", "Loadiine game folder not found.": "Cartella di gioco Loadiine non trovata.", "Failed to open Loadiine game save directory.": "Apertura della directory di salvataggio del gioco Loadiine non riuscita.", "Are you sure?": "Sei sicuro?", @@ -81,17 +81,17 @@ "Backup done. Now copying Savedata.": "Backup effettuato. Ora copia in corso del salvataggio.", "Common save not found.": "Salvataggio non trovato.", "Copy failed.": "Copia non riuscita.", - "Backup failed.": "Backup fallito.", + "%s\nBackup failed.": "%s\nBackup fallito.", "Backup found on this slot. Overwrite it?": "Backup trovato su questo slot. Sovrascriverlo?", "No save found for this user.": "Nessun salvataggio trovato per questo utente.", - "Backup failed. DO NOT restore from this slot.": "Backup non riuscito. NON è stato possibile ripristinare da questo slot.", + "%s\nBackup failed. DO NOT restore from this slot.": "%s\nBackup non riuscito. NON è stato possibile ripristinare da questo slot.", "No backup found on selected slot.": "Nessun backup trovato sullo slot selezionato.", "Restore failed.": "Ripristino fallito.", "Hm, are you REALLY sure?": "Sei DAVVERO sicuro?", "Backup current savedata first?": "Salvare prima il salvataggio corrente?", - "Failed to delete common folder: %s": "Impossibile eliminare la cartella comune: %s", - "Failed to delete savefile.": "Non è stato possibile eliminare il salvataggio.", - "Failed to delete user folder: %s": "Impossibile eliminare la cartella: %s", + "%s \n Failed to delete common folder:\n%s\n%s": "%s \n Impossibile eliminare la cartella comune:\n%s\n%s", + "%s \n Failed to delete savefile:\n%s": "%s \n Non è stato possibile eliminare il salvataggio:\n%s", + "%s \n Failed to user common folder:\n%s\n%s": "%s \n Impossibile eliminare la cartella:\n%s\n%s", "Failed to import savedata from loadiine.": "Impossibile importare salvataggi da loadiine.", "Failed to export savedata to loadiine.": "Impossibile importare salvataggi da loadiine.", "\ue083 Sort: %s \ue084": "\ue083 Ordinare: %s \ue084", @@ -181,6 +181,31 @@ "pre-Wipe backup": "pre-Wipe backup", "pre-copyToOtherDev backup": "pre-copyToOtherDev backup", "UNUSABLE SLOT - BACKUP FAILED": "UNUSABLE SLOT - BACKUP FAILED", + "%s \n Common save not found.": "%s \n Common save not found.", + "%s \n Failed to delete user folder:\n%s\n%s": "%s \n Failed to delete user folder:\n%s\n%s", + "%s\nCommon save not restored.": "%s\nCommon save not restored.", + "%s\nNo backup found on selected slot.": "%s\nNo backup found on selected slot.", + "%s\nNo save found for this user.": "%s\nNo save found for this user.", + "%s\nRestore failed.": "%s\nRestore failed.", + "Cannot open file for read\n\n%s\n%s": "Cannot open file for read\n\n%s\n%s", + "Cannot open file for write\n\n%s\n%s": "Cannot open file for write\n\n%s\n%s", + "Error opening source dir\n\n%s\n%s": "Error opening source dir\n\n%s\n%s", + "Error setting path. Aborting.": "Error setting path. Aborting.", + "Failed to delete backupSet %s.": "Failed to delete backupSet %s.", + "Failed to delete slot %u.": "Failed to delete slot %u.", + "Folder does not exist.": "Folder does not exist.", + "Getting Serial ID": "Getting Serial ID", + "Initializing BackupSets metadata.": "Initializing BackupSets metadata.", + "Initializing ROMFS": "Initializing ROMFS", + "Initializing WPAD and KAPD": "Initializing WPAD and KAPD", + "Initializing loadWiiU Titles": "Initializing loadWiiU Titles", + "Please wait. First write to SD may be slow.": "Please wait. First write to SD may be slow.", + "Press \ue000 to continue": "Press \ue000 to continue", + "Read error\n%s": "Read error\n%s", + "Wipe BackupSet - Hm, are you REALLY sure?": "Wipe BackupSet - Hm, are you REALLY sure?", + "Write error\n%s": "Write error\n%s", + "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back": "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back", + "\ue003 Confirm - \ue001 Cancel": "\ue003 Confirm - \ue001 Cancel", "KB_N_0": "1234567890-=", "KB_N_1": "qwertyuiop[]|", "KB_N_2": "asdfghjkl;'", diff --git a/romfs/languages/japanese.json b/romfs/languages/japanese.json index 0956be6..fe2232b 100644 --- a/romfs/languages/japanese.json +++ b/romfs/languages/japanese.json @@ -72,9 +72,9 @@ "Filesize: %d bytes": "ファイルサイズ: %d バイト", "Deleting folder %s": "フォルダ %s を削除しています", "From: \n%s": "差出人: \n%s", - "Failed to delete folder %s: %s": "フォルダ %s の削除に失敗しました: %s", + "Failed to delete folder\n\n%s\n%s": "フォルダ\n\n%s の削除に失敗しました\n%s", "Deleting file %s": "ファイル %s を削除しています", - "Failed to delete file %s: %s": "ファイル %s の削除に失敗しました: %s", + "Failed to delete file\n\n%s\n%s": "ファイル\n\n%s の削除に失敗しました\n%s", "Loadiine game folder not found.": "読み込み中のゲーム フォルダが見つかりません。", "Failed to open Loadiine game save directory.": "Loadiine ゲームの保存ディレクトリを開けませんでした。", "Are you sure?": "本当によろしいですか?", @@ -82,17 +82,17 @@ "Backup done. Now copying Savedata.": "バックアップ完了。 セーブデータをコピーしています。", "Common save not found.": "共通保存が見つかりません。", "Copy failed.": "コピーに失敗しました。", - "Backup failed.": "バックアップに失敗しました。", + "%s\nBackup failed.": "%s\nバックアップに失敗しました。", "Backup found on this slot. Overwrite it?": "このスロットでバックアップが見つかりました。 上書きしますか?", "No save found for this user.": "このユーザーの保存は見つかりませんでした。", - "Backup failed. DO NOT restore from this slot.": "バックアップに失敗しました。 このスロットから復元しないでください。", + "%s\nBackup failed. DO NOT restore from this slot.": "%s\nバックアップに失敗しました。 このスロットから復元しないでください。", "No backup found on selected slot.": "選択したスロットにバックアップが見つかりません。", "Restore failed.": "復元に失敗しました。", "Hm, are you REALLY sure?": "うーん、本当によろしいですか?", "Backup current savedata first?": "最初に現在のセーブデータをバックアップしますか?", - "Failed to delete common folder: %s": "共通フォルダの削除に失敗しました: %s", - "Failed to delete savefile.": "保存ファイルの削除に失敗しました。", - "Failed to delete user folder: %s": "ユーザー フォルダの削除に失敗しました: %s", + "%s \n Failed to delete common folder:\n%s\n%s": "%s \n 共通フォルダの削除に失敗しました:\n%s\n%s", + "%s \n Failed to delete savefile:\n%s": "%s \n 保存ファイルの削除に失敗しました:\n%s", + "%s \n Failed to delete user folder:\n%s\n%s": "%s \n ユーザー フォルダの削除に失敗しました:\n%s\n%s", "Failed to import savedata from loadiine.": "loadiine からセーブデータをインポートできませんでした。", "Failed to export savedata to loadiine.": "セーブデータを loadiine にエクスポートできませんでした。", "\ue001: Back": "\ue001: 戻る", @@ -176,6 +176,31 @@ "pre-Wipe backup": "pre-Wipe backup", "pre-copyToOtherDev backup": "pre-copyToOtherDev backup", "UNUSABLE SLOT - BACKUP FAILED": "UNUSABLE SLOT - BACKUP FAILED", + "%s \n Common save not found.": "%s \n Common save not found.", + "%s\nCommon save not restored.": "%s\nCommon save not restored.", + "%s\nNo backup found on selected slot.": "%s\nNo backup found on selected slot.", + "%s\nNo save found for this user.": "%s\nNo save found for this user.", + "%s\nRestore failed.": "%s\nRestore failed.", + ", from ": ", from ", + "Cannot open file for read\n\n%s\n%s": "Cannot open file for read\n\n%s\n%s", + "Cannot open file for write\n\n%s\n%s": "Cannot open file for write\n\n%s\n%s", + "Error opening source dir\n\n%s\n%s": "Error opening source dir\n\n%s\n%s", + "Error setting path. Aborting.": "Error setting path. Aborting.", + "Failed to delete backupSet %s.": "Failed to delete backupSet %s.", + "Failed to delete slot %u.": "Failed to delete slot %u.", + "Folder does not exist.": "Folder does not exist.", + "Getting Serial ID": "Getting Serial ID", + "Initializing BackupSets metadata.": "Initializing BackupSets metadata.", + "Initializing ROMFS": "Initializing ROMFS", + "Initializing WPAD and KAPD": "Initializing WPAD and KAPD", + "Initializing loadWiiU Titles": "Initializing loadWiiU Titles", + "Please wait. First write to SD may be slow.": "Please wait. First write to SD may be slow.", + "Press \ue000 to continue": "Press \ue000 to continue", + "Read error\n%s": "Read error\n%s", + "Wipe BackupSet - Hm, are you REALLY sure?": "Wipe BackupSet - Hm, are you REALLY sure?", + "Write error\n%s": "Write error\n%s", + "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back": "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back", + "\ue003 Confirm - \ue001 Cancel": "\ue003 Confirm - \ue001 Cancel", "KB_N_0": "1234567890-=", "KB_N_1": "qwertyuiop[]|", "KB_N_2": "asdfghjkl;'", diff --git a/romfs/languages/korean.json b/romfs/languages/korean.json index bf1e796..7b609a8 100644 --- a/romfs/languages/korean.json +++ b/romfs/languages/korean.json @@ -72,9 +72,9 @@ "Filesize: %d bytes": "파일 크기: %d 바이트", "Deleting folder %s": "%s 폴더 삭제 중", "From: \n%s": "%s\n에서", - "Failed to delete folder %s: %s": "%s 폴더 삭제 실패: %s", + "Failed to delete folder\n\n%s\n%s": "%s\n\n폴더 삭제 실패\n%s", "Deleting file %s": "%s 파일 삭제 중", - "Failed to delete file %s: %s": "%s 파일 삭제 실패: %s", + "Failed to delete file\n\n%s\n%s": "%s\n\n파일 삭제 실패\n%s", "Loadiine game folder not found.": "Loadiine 게임 폴더를 찾을 수 없습니다.", "Failed to open Loadiine game save directory.": "Loadiine 게임 저장 디렉토리를 열지 못했습니다.", "Are you sure?": "확실하나요?", @@ -82,17 +82,17 @@ "Backup done. Now copying Savedata.": "백업이 완료되었습니다. 이제 저장데이터를 복사하고 있습니다.", "Common save not found.": "공통 저장을 찾을 수 없습니다.", "Copy failed.": "복사에 실패했습니다.", - "Backup failed.": "백업에 실패했습니다.", + "%s\nBackup failed.": "%s\n백업에 실패했습니다.", "Backup found on this slot. Overwrite it?": "이 슬롯에서 백업을 찾았습니다. 덮어쓰겠습니까?", "No save found for this user.": "이 사용자에 대한 저장을 찾을 수 없습니다.", - "Backup failed. DO NOT restore from this slot.": "백업에 실패했습니다. 이 슬롯에서 복원하지 마세요.", + "%s\nBackup failed. DO NOT restore from this slot.": "%s\n백업에 실패했습니다. 이 슬롯에서 복원하지 마세요.", "No backup found on selected slot.": "선택한 슬롯에서 백업을 찾을 수 없습니다.", "Restore failed.": "복원에 실패했습니다.", "Hm, are you REALLY sure?": "흠, 정말 확신하나요?", "Backup current savedata first?": "현재 저장 데이터를 먼저 백업하겠습니까?", - "Failed to delete common folder: %s": "공통 폴더를 삭제하지 못했습니다: %s", - "Failed to delete savefile.": "저장파일을 삭제하지 못했습니다.", - "Failed to delete user folder: %s": "사용자 폴더를 삭제하지 못했습니다: %s", + "%s \n Failed to delete common folder:\n%s\n%s": "%s \n 공통 폴더를 삭제하지 못했습니다:\n%s\n%s", + "%s \n Failed to delete savefile:\n%s": "%s \n 저장파일을 삭제하지 못했습니다:\n%s", + "%s \n Failed to delete user folder:\n%s\n%s": "%s \n 사용자 폴더를 삭제하지 못했습니다:\n%s\n%s", "Failed to import savedata from loadiine.": "loadiine에서 저장 데이터를 가져오지 못했습니다.", "Failed to export savedata to loadiine.": "저장 데이터를 loadiine으로 내보내지 못했습니다.", " Batch Restore": " Batch Restore", @@ -176,6 +176,31 @@ "pre-Wipe backup": "pre-Wipe backup", "pre-copyToOtherDev backup": "pre-copyToOtherDev backup", "UNUSABLE SLOT - BACKUP FAILED": "UNUSABLE SLOT - BACKUP FAILED", + "%s \n Common save not found.": "%s \n Common save not found.", + "%s\nCommon save not restored.": "%s\nCommon save not restored.", + "%s\nNo backup found on selected slot.": "%s\nNo backup found on selected slot.", + "%s\nNo save found for this user.": "%s\nNo save found for this user.", + "%s\nRestore failed.": "%s\nRestore failed.", + ", from ": ", from ", + "Cannot open file for read\n\n%s\n%s": "Cannot open file for read\n\n%s\n%s", + "Cannot open file for write\n\n%s\n%s": "Cannot open file for write\n\n%s\n%s", + "Error opening source dir\n\n%s\n%s": "Error opening source dir\n\n%s\n%s", + "Error setting path. Aborting.": "Error setting path. Aborting.", + "Failed to delete backupSet %s.": "Failed to delete backupSet %s.", + "Failed to delete slot %u.": "Failed to delete slot %u.", + "Folder does not exist.": "Folder does not exist.", + "Getting Serial ID": "Getting Serial ID", + "Initializing BackupSets metadata.": "Initializing BackupSets metadata.", + "Initializing ROMFS": "Initializing ROMFS", + "Initializing WPAD and KAPD": "Initializing WPAD and KAPD", + "Initializing loadWiiU Titles": "Initializing loadWiiU Titles", + "Please wait. First write to SD may be slow.": "Please wait. First write to SD may be slow.", + "Press \ue000 to continue": "Press \ue000 to continue", + "Read error\n%s": "Read error\n%s", + "Wipe BackupSet - Hm, are you REALLY sure?": "Wipe BackupSet - Hm, are you REALLY sure?", + "Write error\n%s": "Write error\n%s", + "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back": "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back", + "\ue003 Confirm - \ue001 Cancel": "\ue003 Confirm - \ue001 Cancel", "KB_N_0": "1234567890-=", "KB_N_1": "qwertyuiop[]|", "KB_N_2": "asdfghjkl;'", diff --git a/romfs/languages/portuguese.json b/romfs/languages/portuguese.json index 45fd47f..e81e43b 100644 --- a/romfs/languages/portuguese.json +++ b/romfs/languages/portuguese.json @@ -72,9 +72,9 @@ "Filesize: %d bytes": "Tamanho: %d bytes", "Deleting folder %s": "Excluindo pasta %s", "From: \n%s": "De:\n%s", - "Failed to delete folder %s: %s": "Falha ao excluir pasta %s: %s", + "Failed to delete folder\n\n%s\n%s": "Falha ao excluir pasta\n\n%s\n%s", "Deleting file %s": "Excluindo arquivo %s", - "Failed to delete file %s: %s": "Falha ao excluir arquivo %s: %s", + "Failed to delete file\n\n%s\n%s": "Falha ao excluir arquivo\n\n%s\n%s", "Loadiine game folder not found.": "Pasta do jogo não encontrada (Loadiine).", "Failed to open Loadiine game save directory.": "Falha ao abrir pasta de save (Loadiine).", "Are you sure?": "Tem certeza?", @@ -82,17 +82,17 @@ "Backup done. Now copying Savedata.": "Backup feito! Copiando save.", "Common save not found.": "Save 'Common' não encontrado.", "Copy failed.": "Falha ao copiar.", - "Backup failed.": "Falha ao fazer backup.", + "%s\nBackup failed.": "%s\nFalha ao fazer backup.", "Backup found on this slot. Overwrite it?": "Este slot já possui backup. Sobreescrever?", "No save found for this user.": "Este usuário não possui saves.", - "Backup failed. DO NOT restore from this slot.": "Falha ao fazer backup: NÃO restaure este slot.", + "%s\nBackup failed. DO NOT restore from this slot.": "%s\nFalha ao fazer backup: NÃO restaure este slot.", "No backup found on selected slot.": "O Slot selecionado não possui saves.", "Restore failed.": "Falha ao restaurar.", "Hm, are you REALLY sure?": "Hum, você quer REALMENTE fazer isso?", "Backup current savedata first?": "Deseja fazer backup do save?", - "Failed to delete common folder: %s": "Falha ao excluir pasta 'common': %s", - "Failed to delete savefile.": "Falha ao excluir save.", - "Failed to delete user folder: %s": "Falha ao excluir pasta de usuário: %s", + "%s \n Failed to delete common folder:\n%s\n%s": "%s \n Falha ao excluir pasta 'common':\n%s\n%s", + "%s \n Failed to delete savefile:\n%s": "%s \n Falha ao excluir save:\n%s", + "%s \n Failed to delete user folder:\n%s\n%s": "%s \n Falha ao excluir pasta de usuário:\n%s\n%s", "Failed to import savedata from loadiine.": "Falha ao importar save (Loadiine).", "Failed to export savedata to loadiine.": "Falha ao exportar save (Loadiine).", "\ue083 Sort: %s \ue084": "\ue083 Organizar: %s \ue084", @@ -181,6 +181,30 @@ "pre-Wipe backup": "pre-Wipe backup", "pre-copyToOtherDev backup": "pre-copyToOtherDev backup", "UNUSABLE SLOT - BACKUP FAILED": "UNUSABLE SLOT - BACKUP FAILED", + "%s \n Common save not found.": "%s \n Common save not found.", + "%s\nCommon save not restored.": "%s\nCommon save not restored.", + "%s\nNo backup found on selected slot.": "%s\nNo backup found on selected slot.", + "%s\nNo save found for this user.": "%s\nNo save found for this user.", + "%s\nRestore failed.": "%s\nRestore failed.", + "Cannot open file for read\n\n%s\n%s": "Cannot open file for read\n\n%s\n%s", + "Cannot open file for write\n\n%s\n%s": "Cannot open file for write\n\n%s\n%s", + "Error opening source dir\n\n%s\n%s": "Error opening source dir\n\n%s\n%s", + "Error setting path. Aborting.": "Error setting path. Aborting.", + "Failed to delete backupSet %s.": "Failed to delete backupSet %s.", + "Failed to delete slot %u.": "Failed to delete slot %u.", + "Folder does not exist.": "Folder does not exist.", + "Getting Serial ID": "Getting Serial ID", + "Initializing BackupSets metadata.": "Initializing BackupSets metadata.", + "Initializing ROMFS": "Initializing ROMFS", + "Initializing WPAD and KAPD": "Initializing WPAD and KAPD", + "Initializing loadWiiU Titles": "Initializing loadWiiU Titles", + "Please wait. First write to SD may be slow.": "Please wait. First write to SD may be slow.", + "Press \ue000 to continue": "Press \ue000 to continue", + "Read error\n%s": "Read error\n%s", + "Wipe BackupSet - Hm, are you REALLY sure?": "Wipe BackupSet - Hm, are you REALLY sure?", + "Write error\n%s": "Write error\n%s", + "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back": "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back", + "\ue003 Confirm - \ue001 Cancel": "\ue003 Confirm - \ue001 Cancel", "KB_N_0": "1234567890-=", "KB_N_1": "qwertyuiop[]|", "KB_N_2": "asdfghjkl;'", diff --git a/romfs/languages/russian.json b/romfs/languages/russian.json index ab06d66..5de798d 100644 --- a/romfs/languages/russian.json +++ b/romfs/languages/russian.json @@ -72,9 +72,9 @@ "Filesize: %d bytes": "Размер: %d байт", "Deleting folder %s": "Удаление папки %s", "From: \n%s": "Из %s", - "Failed to delete folder %s: %s": "Не удалось удалить папку %s: %s", + "Failed to delete folder\n\n%s\n%s": "Не удалось удалить папку\n\n%s\n%s", "Deleting file %s": "Удаление файла %s", - "Failed to delete file %s: %s": "Не удалось удалить файл %s: %s", + "Failed to delete file\n\n%s\n%s": "Не удалось удалить файл\n\n%s\n%s", "Loadiine game folder not found.": "Папка Loadiine не найдена.", "Failed to open Loadiine game save directory.": "Не удалось открыть каталог сохранения Loadiine.", "Are you sure?": "Вы уверены?", @@ -82,17 +82,17 @@ "Backup done. Now copying Savedata.": "Бекап завершен. Копирование сохранений.", "Common save not found.": "'Common' сохранение не найдено.", "Copy failed.": "Копирование не удалось.", - "Backup failed.": "Бекап не удался.", + "%s\nBackup failed.": "%s\nБекап не удался.", "Backup found on this slot. Overwrite it?": "Слот не пустой. Перезаписать?", "No save found for this user.": "Не найдено сохранений для этого пользователя.", - "Backup failed. DO NOT restore from this slot.": "Бекап не удался. НЕ восстанавливайте из этого слота.", + "%s\nBackup failed. DO NOT restore from this slot.": "%s\nБекап не удался. НЕ восстанавливайте из этого слота.", "No backup found on selected slot.": "В выбранном слоте бекап не найден.", "Restore failed.": "Ошибка восстановления.", "Hm, are you REALLY sure?": "Вы ТОЧНО уверены?", "Backup current savedata first?": "Сделать сперва бекап сохранения?", - "Failed to delete common folder: %s": "Не удалось удалить папку: %s", - "Failed to delete savefile.": "Не удалось удалить сохранение.", - "Failed to delete user folder: %s": "Не удалось удалить пользовательскую папку: %s", + "%s \n Failed to delete common folder:\n%s\n%s": "%s \n Не удалось удалить папку:\n%s\n%s", + "%s \n Failed to delete savefile:\n%s": "%s \n Не удалось удалить сохранение:\n%s", + "%s \n Failed to delete user folder:\n%s\n%s": "%s \n Не удалось удалить пользовательскую папку:\n%s\n%s", "Failed to import savedata from loadiine.": "Не удалось импортировать сохранения из loadiine.", "Failed to export savedata to loadiine.": "Не удалось экспортировать сохранения из loadiine.", " Batch Restore": " Batch Restore", @@ -102,9 +102,6 @@ " [vWiiInject]": " [vWiiInject]", "%s Sort: %s \ue084": "%s Sort: %s \ue084", "%s \n Common save not found.": "%s \n Common save not found.", - "%s \n Failed to delete common folder:\n %s": "%s \n Failed to delete common folder:\n %s", - "%s \n Failed to delete savefile.": "%s \n Failed to delete savefile.", - "%s \n Failed to delete user folder:\n %s": "%s \n Failed to delete user folder:\n %s", "%s\nCommon save not restored.": "%s\nCommon save not restored.", "%s\nNo backup found on selected slot.": "%s\nNo backup found on selected slot.", "%s\nNo save found for this user.": "%s\nNo save found for this user.", @@ -209,6 +206,12 @@ "pre-Wipe backup": "pre-Wipe backup", "pre-copyToOtherDev backup": "pre-copyToOtherDev backup", "UNUSABLE SLOT - BACKUP FAILED": "UNUSABLE SLOT - BACKUP FAILED", + "Cannot open file for read\n\n%s\n%s": "Cannot open file for read\n\n%s\n%s", + "Cannot open file for write\n\n%s\n%s": "Cannot open file for write\n\n%s\n%s", + "Error opening source dir\n\n%s\n%s": "Error opening source dir\n\n%s\n%s", + "Read error\n%s": "Read error\n%s", + "Write error\n%s": "Write error\n%s", + "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back": "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back", "KB_N_0": "1234567890-=", "KB_N_1": "qwertyuiop[]|", "KB_N_2": "asdfghjkl;'", diff --git a/romfs/languages/spanish.json b/romfs/languages/spanish.json index 88c8df0..e2e5a70 100644 --- a/romfs/languages/spanish.json +++ b/romfs/languages/spanish.json @@ -72,9 +72,9 @@ "Filesize: %d bytes": "Tamaño: %d bytes", "Deleting folder %s": "Eliminando carpeta %s", "From: \n%s": "Desde:\n%s", - "Failed to delete folder %s: %s": "Error al eliminar la carpeta %s: %s", + "Failed to delete folder\n\n%s\n%s": "Error al eliminar la carpeta\n\n%s\n%s", "Deleting file %s": "Eliminando archivo %s", - "Failed to delete file %s: %s": "Error al eliminar el archivo %s: %s", + "Failed to delete file\n\n%s\n%s": "Error al eliminar el archivo\n\n%s\n%s", "Loadiine game folder not found.": "Carpeta del juego de Loadiine no encontrada.", "Failed to open Loadiine game save directory.": "Error al abrir la carpeta de saves del juego de Loadiine.", "Are you sure?": "¿Estás seguro?", @@ -82,17 +82,14 @@ "Backup done. Now copying Savedata.": "Copia hecha. Haciendo copia del save.", "Common save not found.": "No se ha podido encontrar el common save.", "Copy failed.": "Error al realizar la copia.", - "Backup failed.": "Error al realizar la copia.", + "%s\nBackup failed.": "%s\nError al realizar la copia.", "Backup found on this slot. Overwrite it?": "Se ha encontrado una copia en este slot. ¿Sobreescribirlo?", "No save found for this user.": "No se han encontrado saves de este usuario.", - "Backup failed. DO NOT restore from this slot.": "Error al realizar la copia. NO restaures este slot.", + "%s\nBackup failed. DO NOT restore from this slot.": "%s\nError al realizar la copia. NO restaures este slot.", "No backup found on selected slot.": "No se ha encontrado una copia en el slot seleccionado.", "Restore failed.": "Error al restaurar.", "Hm, are you REALLY sure?": "¿Hm, estás COMPLETAMENTE seguro?", "Backup current savedata first?": "¿Hacer copia antes del save?", - "Failed to delete common folder: %s": "Error al eliminar la carpeta common: %s", - "Failed to delete savefile.": "Error al eliminar el save.", - "Failed to delete user folder: %s": "Error al eliminar la carpeta user: %s", "Failed to import savedata from loadiine.": "Error al importar el save de loadiine.", "Failed to export savedata to loadiine.": "Error al exportar el save a loadiine.", "\ue083 Sort: %s \ue084": "\ue083 Ordenar: %s \ue084", @@ -111,9 +108,9 @@ " Restore vWii (%u Title%s)": " Restore vWii (%u Title%s)", " [vWiiInject]": " [vWiiInject]", "%s \n Common save not found.": "%s \n Common save not found.", - "%s \n Failed to delete common folder:\n %s": "%s \n Failed to delete common folder:\n %s", - "%s \n Failed to delete savefile.": "%s \n Failed to delete savefile.", - "%s \n Failed to delete user folder:\n %s": "%s \n Failed to delete user folder:\n %s", + "%s \n Failed to delete common folder:\n%s\n%s": "%s \n Failed to delete common folder:\n%s\n%s", + "%s \n Failed to delete savefile:\n%s": "%s \n Failed to delete savefile:\n%s", + "%s \n Failed to delete user folder:\n%s\n%s": "%s \n Failed to delete user folder:\n%s\n%s", "%s\nCommon save not restored.": "%s\nCommon save not restored.", "%s\nNo backup found on selected slot.": "%s\nNo backup found on selected slot.", "%s\nNo save found for this user.": "%s\nNo save found for this user.", @@ -203,6 +200,12 @@ "pre-Wipe backup": "pre-Wipe backup", "pre-copyToOtherDev backup": "pre-copyToOtherDev backup", "UNUSABLE SLOT - BACKUP FAILED": "UNUSABLE SLOT - BACKUP FAILED", + "Cannot open file for read\n\n%s\n%s": "Cannot open file for read\n\n%s\n%s", + "Cannot open file for write\n\n%s\n%s": "Cannot open file for write\n\n%s\n%s", + "Error opening source dir\n\n%s\n%s": "Error opening source dir\n\n%s\n%s", + "Read error\n%s": "Read error\n%s", + "Write error\n%s": "Write error\n%s", + "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back": "\ue002: Change BackupSet \ue000: Restore \ue045 Tag Slot \ue001: Back", "KB_N_0": "1234567890-=", "KB_N_1": "qwertyuiop[]|", "KB_N_2": "asdfghjkl;'", diff --git a/src/main.cpp b/src/main.cpp index 4f17ed0..f3707c9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -495,6 +495,11 @@ int main() { Swkbd_LanguageType systemLanguage = LanguageUtils::getSystemLanguage(); LanguageUtils::loadLanguage(systemLanguage); + DrawUtils::beginDraw(); + DrawUtils::clear(COLOR_BLACK); + consolePrintPosAligned(10, 0, 1, LanguageUtils::gettext("Initializing FS")); + DrawUtils::endDraw(); + if (!initFS()) { promptError(LanguageUtils::gettext("initFS failed. Please make sure your MochaPayload is up-to-date")); DrawUtils::endDraw(); diff --git a/src/savemng.cpp b/src/savemng.cpp index 4ed83f0..662c77a 100644 --- a/src/savemng.cpp +++ b/src/savemng.cpp @@ -20,6 +20,7 @@ #define __FSAShimSend ((FSError(*)(FSAShimBuffer *, uint32_t))(0x101C400 + 0x042d90)) #define IO_MAX_FILE_BUFFER (1024 * 1024) // 1 MB +#define MAXWIDTH 60 const char *backupPath = "fs:/vol/external01/wiiu/backups"; const char *batchBackupPath = "fs:/vol/external01/wiiu/backups/batch"; // Must be "backupPath/batch" ~ backupSetListRoot @@ -465,16 +466,28 @@ void promptError(const char *message, ...) { va_start(va, message); char *tmp = nullptr; if ((vasprintf(&tmp, message, va) >= 0) && (tmp != nullptr)) { - int x = 31 - (DrawUtils::getTextWidth(tmp) / 24); - int y = 8; + std::string splitted; + std::stringstream message_ss(tmp); + int nLines = 0; + int maxLineSize = 0; + int lineSize = 0; + while (getline(message_ss,splitted,'\n')) { + lineSize = DrawUtils::getTextWidth((char *) splitted.c_str()); + maxLineSize = lineSize > maxLineSize ? lineSize : maxLineSize; + nLines++; + } + int initialYPos = 8 - nLines/2; + initialYPos = initialYPos > 0 ? initialYPos : 0; + + int x = 31 - (maxLineSize / 24); x = (x < -4 ? -4 : x); - DrawUtils::print((x + 4) * 12, (y + 1) * 24, tmp); + DrawUtils::print((x + 4) * 12, (initialYPos + 1) * 24, tmp); } if (tmp != nullptr) free(tmp); DrawUtils::endDraw(); va_end(va); - sleep(3); + sleep(4); } void promptMessage(Color bgcolor, const char *message, ...) { @@ -589,6 +602,8 @@ void getAccountsSD(Title *title, uint8_t slot) { } } +int readError; + static bool readThread(FILE *srcFile, LockingQueue *ready, LockingQueue *done) { file_buffer currentBuffer{}; ready->waitAndPop(currentBuffer); @@ -597,9 +612,15 @@ static bool readThread(FILE *srcFile, LockingQueue *ready, LockingQ ready->waitAndPop(currentBuffer); } done->push(currentBuffer); - return ferror(srcFile) == 0; + if (! ferror(srcFile) == 0) { + readError=errno; + return false; + } + return true; } +int writeError; + static bool writeThread(FILE *dstFile, LockingQueue *ready, LockingQueue *done, size_t totalSize) { uint bytes_written; file_buffer currentBuffer{}; @@ -611,7 +632,11 @@ static bool writeThread(FILE *dstFile, LockingQueue *ready, Locking written += bytes_written; } done->push(currentBuffer); - return ferror(dstFile) == 0; + if (! ferror(dstFile) == 0 ) { + writeError=errno; + return false; + } + return true; } static bool copyFileThreaded(FILE *srcFile, FILE *dstFile, size_t totalSize, const std::string &pPath, const std::string &oPath) { @@ -661,33 +686,55 @@ static inline size_t getFilesize(FILE *fp) { static bool copyFile(const std::string &pPath, const std::string &oPath) { if (pPath.find("savemiiMeta.json") != std::string::npos) return true; + //std::string uPath = pPath + "nonExistent"; + //FILE *source = fopen(uPath.c_str(), "rb"); FILE *source = fopen(pPath.c_str(), "rb"); - if (source == nullptr) + if (source == nullptr) { + std::string multilinePath; + splitStringWithNewLines(pPath,multilinePath); + promptError(LanguageUtils::gettext("Cannot open file for read\n\n%s\n%s"),multilinePath.c_str(),strerror(errno)); return false; + } FILE *dest = fopen(oPath.c_str(), "wb"); if (dest == nullptr) { fclose(source); + std::string multilinePath; + splitStringWithNewLines(oPath,multilinePath); + promptError(LanguageUtils::gettext("Cannot open file for write\n\n%s\n%s"),multilinePath.c_str(),strerror(errno)); return false; } size_t sizef = getFilesize(source); - copyFileThreaded(source, dest, sizef, pPath, oPath); + readError = 0; + writeError = 0; + bool success = copyFileThreaded(source, dest, sizef, pPath, oPath); fclose(source); fclose(dest); FSAChangeMode(handle, newlibtoFSA(oPath).c_str(), (FSMode) 0x666); - return true; + if (! success) { + if (readError > 0 ) + promptError(LanguageUtils::gettext("Read error\n%s"),strerror(readError)); + if (writeError > 0 ) + promptError(LanguageUtils::gettext("Write error\n%s"),strerror(writeError)); + } + + return success; } #ifndef MOCK static bool copyDir(const std::string &pPath, const std::string &tPath) { // Source: ft2sd DIR *dir = opendir(pPath.c_str()); - if (dir == nullptr) + if (dir == nullptr) { + std::string multilinePath; + splitStringWithNewLines(pPath,multilinePath); + promptError(LanguageUtils::gettext("Error opening source dir\n\n%s\n%s"),multilinePath.c_str(),strerror(errno)); return false; + } mkdir(tPath.c_str(), 0x666); FSAChangeMode(handle, newlibtoFSA(tPath).c_str(), (FSMode) 0x666); @@ -759,11 +806,19 @@ static bool removeDir(const std::string &pPath) { consolePrintPos(-2, 0, LanguageUtils::gettext("Deleting folder %s"), data->d_name); consolePrintPosMultiline(-2, 2, LanguageUtils::gettext("From: \n%s"), origPath.c_str()); - if (unlink(origPath.c_str()) == -1) promptError(LanguageUtils::gettext("Failed to delete folder %s: %s"), origPath.c_str(), strerror(errno)); + if (unlink(origPath.c_str()) == -1) { + std::string multilinePath; + splitStringWithNewLines(origPath,multilinePath); + promptError(LanguageUtils::gettext("Failed to delete folder\n\n%s\n%s"), multilinePath.c_str(), strerror(errno)); + } } else { consolePrintPos(-2, 0, LanguageUtils::gettext("Deleting file %s"), data->d_name); consolePrintPosMultiline(-2, 2, LanguageUtils::gettext("From: \n%s"), tempPath.c_str()); - if (unlink(tempPath.c_str()) == -1) promptError(LanguageUtils::gettext("Failed to delete file %s: %s"), tempPath.c_str(), strerror(errno)); + if (unlink(tempPath.c_str()) == -1) { + std::string multilinePath; + splitStringWithNewLines(tempPath,multilinePath); + promptError(LanguageUtils::gettext("Failed to delete file\n\n%s\n%s"), multilinePath.c_str(), strerror(errno)); + } } DrawUtils::endDraw(); @@ -1095,7 +1150,6 @@ void writeMetadata(uint32_t highID,uint32_t lowID,uint8_t slot,bool isUSB, const delete metadataObj; } - void writeMetadataWithTag(uint32_t highID,uint32_t lowID,uint8_t slot, bool isUSB, const std::string &tag) { Metadata *metadataObj = new Metadata(highID, lowID, slot); metadataObj->setTag(tag); @@ -1130,7 +1184,7 @@ void backupAllSave(Title *titles, int count, const std::string & batchDatetime, createFolder(dstPath.c_str()); if (!copyDir(srcPath, dstPath)) - promptError(LanguageUtils::gettext("Backup failed.")); + promptError(LanguageUtils::gettext("%s\nBackup failed."),titles[i].shortName); else writeMetadata(highID,lowID,slot,isUSB,batchDatetime); } @@ -1186,7 +1240,7 @@ void backupSavedata(Title *title, uint8_t slot, int8_t wiiuuser, bool common, co if (copyDir(srcCommonPath, dstCommonPath)) commonSaved = true; else { - promptError(LanguageUtils::gettext("Common save not found.")); + promptError(LanguageUtils::gettext("%s \n Common save not found."),title->shortName); errorCode = 1 ; } } @@ -1199,7 +1253,7 @@ void backupSavedata(Title *title, uint8_t slot, int8_t wiiuuser, bool common, co writeMetadataWithTag(highID,lowID,slot,isUSB,tag); else { - promptError(LanguageUtils::gettext("No save found for this user.")); + promptError(LanguageUtils::gettext("%s\nNo save found for this user."),title->shortName); dstPath = getDynamicBackupPath(highID, lowID, slot); removeDir(dstPath); unlink(dstPath.c_str()); @@ -1208,7 +1262,7 @@ void backupSavedata(Title *title, uint8_t slot, int8_t wiiuuser, bool common, co } else { if (!copyDir(srcPath, dstPath)) { - promptError(LanguageUtils::gettext("Backup failed. DO NOT restore from this slot.")); + promptError(LanguageUtils::gettext("%s\nBackup failed. DO NOT restore from this slot."),title->shortName); writeMetadataWithTag(highID,lowID,slot,isUSB,LanguageUtils::gettext("UNUSABLE SLOT - BACKUP FAILED")); errorCode += 4; } @@ -1219,7 +1273,7 @@ void backupSavedata(Title *title, uint8_t slot, int8_t wiiuuser, bool common, co else // allusers { if (!copyDir(srcPath, dstPath)) { - promptError(LanguageUtils::gettext("Backup failed. DO NOT restore from this slot.")); + promptError(LanguageUtils::gettext("%s\nBackup failed. DO NOT restore from this slot."),title->shortName); writeMetadataWithTag(highID,lowID,slot,isUSB,LanguageUtils::gettext("UNUSABLE SLOT - BACKUP FAILED")); errorCode += 8; } @@ -1430,7 +1484,9 @@ int wipeSavedata(Title *title, int8_t wiiuuser, bool common, bool interactive /* #else if (!unlink_c) { #endif - promptError(LanguageUtils::gettext("%s \n Failed to delete common folder:\n %s"), title->shortName,strerror(errno)); + std::string multilinePath; + splitStringWithNewLines(commonPath,multilinePath); + promptError(LanguageUtils::gettext("%s \n Failed to delete common folder:\n%s\n%s"), title->shortName,multilinePath.c_str(),strerror(errno)); errorCode += 2; } } @@ -1438,7 +1494,9 @@ int wipeSavedata(Title *title, int8_t wiiuuser, bool common, bool interactive /* if (doBase) { if (checkEntry(srcPath.c_str()) == 2) { if (!removeDir(srcPath)) { - promptError(LanguageUtils::gettext("%s \n Failed to delete savefile."),title->shortName); + std::string multilinePath; + splitStringWithNewLines(srcPath,multilinePath); + promptError(LanguageUtils::gettext("%s \n Failed to delete savefile:\n%s"),title->shortName,multilinePath.c_str()); errorCode += 4; } if ((wiiuuser > -1) && !isWii) { @@ -1447,7 +1505,9 @@ int wipeSavedata(Title *title, int8_t wiiuuser, bool common, bool interactive /* #else if (!unlink_b) { #endif - promptError(LanguageUtils::gettext("%s \n Failed to delete user folder:\n %s"), title->shortName,strerror(errno)); + std::string multilinePath; + splitStringWithNewLines(srcPath,multilinePath); + promptError(LanguageUtils::gettext("%s \n Failed to delete user folder:\n%s\n%s"), title->shortName,multilinePath.c_str(),strerror(errno)); errorCode += 8; } } @@ -1580,4 +1640,10 @@ bool wipeBackupSet(const std::string &subPath) { } return true; } + +void splitStringWithNewLines(const std::string &input, std::string &output) { + for (unsigned i=0; i < input.length(); i += MAXWIDTH) { + output = output + input.substr(i,MAXWIDTH) + "\n"; + } +} \ No newline at end of file From 8d71ceb5788c71a3a476cef14b8f6a6c8a035a7a Mon Sep 17 00:00:00 2001 From: w3irDv <170813473+w3irDv@users.noreply.github.com> Date: Mon, 13 Jan 2025 00:09:31 +0100 Subject: [PATCH 3/3] bump version to 1.6.5 --- README.md | 8 ++++---- include/version.h | 2 +- meta/hbl/meta.xml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 2e2d5fc..c1d6acf 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Allows you to backup/restore/wipe individual titles. 5. Copy to other Device: If savedata for a title is present in USB and NAND, copy it from one storage to the other #### Backup -1. Select a slot to store the savedata. You can select any number from 0 to 255, each one representing a different folder in the SD card. +1. Select a slot to store the savedata. You can select any number from 0 to 255, each one representing a different folder in the SD card. Individual backups will always be stored in the `Root backupSet`. 2. For Wii U titles, select which data to save: 1. All users: Recommended option. Will backup all game data. 2. From user: xxxxxxxx. Will only backup the data for the specified user/profile. In this case, you must also specify if you want to save the "common" data or not. "Common" savedata is data shared by all profiles. Titles can have common save data, profile savedata or both. @@ -38,7 +38,7 @@ Allows you to backup/restore/wipe individual titles. *Wii U titles savedata layout:* ``` -sd:/wiiu/backups/ +sd:/wiiu/backups/ # Root backupSet xxxxxxxxyyyyyyyy/ # Title Id 0/ saveMiiMeta.json @@ -55,7 +55,7 @@ sd:/wiiu/backups/ For vWii titles, savedata is directly under the slot folder. #### Restore -1. Select a slot to get the data from. By default, data from the "root" backupSet (the one where the manual backups are stored) is used. But you can also use slots from batch backupSets, by pressing "X" button in this menu and selecting the backupSet you want to use. BackupSets can be tagged by pressing "+" button in the BackupSet List Menu, or from the BackupSet Management in Main menu. +1. Select a slot to get the data from. If you haven't selected any backupSet, the data from the `Root backupSet` (the one where the manual backups are always stored) is used. But you can also use data from any batch backupSet, by pressing the "X" button and selecting the backupSet you want to use. Notice that the last backupSet you previously selected in any task (Batch Restore or BackupSet Management) will be the one used here by default. BackupSets can be tagged by pressing "+" button in the BackupSet List Menu, or from the BackupSet Management in Main menu. To identify which data the slot contains: If the slot has been tagged, you will see its tag next to the slot number. On the top screen line, you will see which backupSet is being used. And at the last screen line, you can see when the savedata were taken, and from which console. 2. For Wii U titles, select witch data to restore: 1. `From: All users / To: Same user than Source` @@ -77,7 +77,7 @@ BackupSets can be tagged by pressing "+" button in the BackupSet List menu or by ``` sd:/wiiu/backups/batch/ - ${timestamp}/ + ${timestamp}/ # batch backupSet saveMiiMeta.json xxxxxxxxyyyyyyyy/ # one folder for each title 0/ # slot containing USB or NAND savedata for the title diff --git a/include/version.h b/include/version.h index c7c646a..eb8c3ef 100644 --- a/include/version.h +++ b/include/version.h @@ -2,4 +2,4 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 6 -#define VERSION_MICRO 4 +#define VERSION_MICRO 5 diff --git a/meta/hbl/meta.xml b/meta/hbl/meta.xml index 9decf02..88a1fb0 100644 --- a/meta/hbl/meta.xml +++ b/meta/hbl/meta.xml @@ -2,7 +2,7 @@ SaveMii WUT DaThinkingChair,w3irDv - 1.6.4 + 1.6.5 202408240000 WiiU/vWii Save Manager WiiU/vWii Save Manager