1
0
Fork 0
mirror of https://github.com/HamletDuFromage/aio-switch-updater.git synced 2024-11-28 12:22:02 +00:00

Better archive detection

This commit is contained in:
flb 2021-10-19 14:07:14 +02:00
parent a65f8355d4
commit cc50d526c0
12 changed files with 70 additions and 91 deletions

View file

@ -138,10 +138,7 @@
"utils": {
"fw_warning": "Wegen der größe der Firmwarearchive werden downloads im Applet Mode nicht unterstützt. Bitte öffne die App mit vollem RAM Zugriff.",
"overwrite": " Möchtest du folgende Datei überschreiben: ",
"wrong_type_sigpatches": "Die heruntergeladene Datei ist kein Sigpatches Archive. Dies kommt vermutlich durch einen kaputten Link. Wenn der Download nach 30 Minuten weiterhin nicht funktioniert, eröffne bitte ein Github issue.",
"wrong_type_fw": "Die heruntergeladene Datei ist kein firmware Archive. Dies kommt vermutlich durch einen kaputten Link. Wenn der Download nach 30 Minuten weiterhin nicht funktioniert, eröffne bitte ein Github issue.",
"overwrite_inis": "Möchtestet du vorhandene .ini Konfigurationsdateien überschreiben?",
"wrong_type_cfw": "Die heruntergeladene Datei ist kein CFW Archive. Dies kommt vermutlich durch einen kaputten Link. Wenn der Download nach 30 Minuten weiterhin nicht funktioniert, eröffne bitte ein Github issue."
"overwrite_inis": "Möchtestet du vorhandene .ini Konfigurationsdateien überschreiben?"
},
"ams_update": {
"reboot_rcm": "Die switch wird nun zu einem Speziellem Payload rebooten um den Installationsprozess ab zu schließen.",

View file

@ -164,10 +164,8 @@
"utils": {
"fw_warning": "Because of the size of the FW archive, downloading firmwares in Applet Mode is not supported. Please launch the app with full RAM access.",
"overwrite": " Do you want to overwrite existing ",
"wrong_type_sigpatches": "The downloaded file is not a sigpatches archive. This is most likely due to a broken link. If the problem persists after more than 30 minutes, please open an issue on Github.",
"wrong_type_fw": "The downloaded file is not a firmware archive. This is most likely due to a broken link. If the problem persists after more than 30 minutes, please open an issue on Github.",
"overwrite_inis": "Do you want to overwrite existing .ini config files?",
"wrong_type_cfw": "The downloaded file is not a CFW archive. This is most likely due to a broken link. If the problem persists after more than 30 minutes, please open an issue on Github."
"not_an_archive": "The downloaded file is not a zip archive. This is most likely due to a broken link. If the problem persists after more than 30 minutes, please open an issue on Github.",
"overwrite_inis": "Do you want to overwrite existing .ini config files?"
},
"ams_update": {
"reboot_rcm": "The Switch will now reboot to a special payload in order to finalise the install.",

View file

@ -93,9 +93,6 @@
"utils": {
"fw_warning": "Debido al tamaño de los FW, descargar firmwares en modo Applet no está soportado. Por favor, ejecuta la aplicación con acceso a toda la RAM.",
"overwrite": " ¿Quieres sobrescribir el fichero existente ",
"wrong_type_sigpatches": "El fichero descargado no es un paquete de sigpatches. Esto se debe probablemente a un enlace roto. Si el problema persiste durante más de 3 horas, por favor abre un issue en Github.",
"wrong_type_fw": "El fichero descargado no es un firmware. Esto se debe probablemente a un enlace roto. Si el problema persiste durante más de 3 horas, por favor abre un issue en Github.",
"overwrite_inis": "¿Quieres sobrescribir los ficheros de configuración .ini existentes?",
"wrong_type_cfw": "El fichero descargado no es un CFW. Esto se debe probablemente a un enlace roto. Si el problema persiste durante más de 3 horas, por favor abre un issue en Github."
"overwrite_inis": "¿Quieres sobrescribir los ficheros de configuración .ini existentes?"
}
}

View file

@ -94,9 +94,7 @@
"utils": {
"fw_warning": "En raison de la taille de l'archive FW, le téléchargement de firmwares en mode Applet n'est pas pris en charge. Veuillez lancer l'application avec un accès total à la RAM.",
"overwrite": " Voulez-vous écraser le fichier l'existant ",
"wrong_type_sigpatches": "Le fichier téléchargé n'est pas une archive de sigpatches. Cela est probablement dû à un lien brisé. Si le problème persiste après plus de 3 heures, veuillez ouvrir une issue sur GitHub.",
"wrong_type_fw": "Le fichier téléchargé n'est pas une archive de firmare. Cela est probablement dû à un lien rompu. Si le problème persiste après plus de 3 heures, veuillez ouvrir une issue sur GitHub.",
"overwrite_inis": "Voulez-vous écraser les fichiers de configuration .ini déja présents ?",
"wrong_type_cfw": "Le fichier téléchargé n'est pas une archive de CFW. Cela est probablement dû à un lien rompu. Si le problème persiste après plus de 3 heures, veuillez ouvrir une issue sur GitHub."
"not_an_archive": "Le fichier téléchargé n'est pas une archive zip. Cela est probablement dû à un lien brisé. Si le problème persiste après plus de 3 heures, veuillez ouvrir une issue sur GitHub.",
"overwrite_inis": "Voulez-vous écraser les fichiers de configuration .ini déja présents ?"
}
}

View file

@ -93,9 +93,6 @@
"utils": {
"fw_warning": "A causa della dimensione del FW, lo scaricamento dei firmwares in Applet Mode non è supportato. Avvia l'applicazione con pieno accesso alla RAM.",
"overwrite": " Do you want to overwrite existing ",
"wrong_type_sigpatches": "Il file scaricato non è un archivio di sigpatches. Ciò è probabilmente causato da un link non funzionante. Se il problema persiste dopo più di 3 ore, apri una issue su Github.",
"wrong_type_fw": "Il file scaricato non è un firmware. Ciò è probabilmente causato da un link non funzionante. Se il problema persiste dopo più di 3 ore, apri una issue su Github.",
"overwrite_inis": "Vuoi sovrascrivere i file di configurazione .ini esistenti?",
"wrong_type_cfw": "Il file scaricato non è un CFW. Ciò è probabilmente causato da un link non funzionante. Se il problema persiste dopo più di 3 ore, apri una issue su Github."
"overwrite_inis": "Vuoi sovrascrivere i file di configurazione .ini esistenti?"
}
}

View file

@ -159,10 +159,7 @@
"utils": {
"fw_warning": "FWアーカイブのサイズが大きいため、アプレットモードでのファームウェアのダウンロードはサポートされていません。フルRAMアクセスでアプリを起動してください。",
"overwrite": " 既存のものを上書きしますか ",
"wrong_type_sigpatches": "ダウンロードされたファイルはsigpatchはアーカイブではありません。これは、リンクが壊れていることが原因である可能性があります。 3時間以上経過しても問題が解決しない場合は、Githubで問題を開いてください。",
"wrong_type_fw": "ダウンロードしたファイルはファームウェアアーカイブではありません。これは、リンクが壊れていることが原因である可能性があります。 3時間以上経過しても問題が解決しない場合は、Githubで問題を開いてください。",
"overwrite_inis": "既存の.ini構成ファイルを上書きしますか?",
"wrong_type_cfw": "ダウンロードしたファイルはCFWアーカイブではありません。これは、リンクが壊れていることが原因である可能性があります。 3時間以上経過しても問題が解決しない場合は、Githubで問題を開いてください。"
"overwrite_inis": "既存の.ini構成ファイルを上書きしますか?"
},
"ams_update": {
"reboot_rcm": "これで、インストールを完了するために、スイッチが特別なペイロードで再起動します。",

View file

@ -142,10 +142,7 @@
"utils": {
"fw_warning": "Z powodu rozmiarów archiwów z firmwarem, ich pobieranie w trybie appletu nie jest wspierane. Uruchom aplikację z pełnym dostępem do pamięci RAM.",
"overwrite": " Czy chcesz nadpisać istniejący ",
"wrong_type_sigpatches": "Pobrany plik nie jest archiwum z sigpatchami. Jest to najprawdopodobniej spowodowane wadliwym linkiem. Jeśli problem nie ustanie po więcej niż 30 minutach, utwórz nowy problem na Githubie.",
"wrong_type_fw": "Pobrany plik nie jest archiwum z firmwarem. Jest to najprawdopodobniej spowodowane wadliwym linkiem. Jeśli problem nie ustanie po więcej niż 30 minutach, utwórz nowy problem na Githubie.",
"overwrite_inis": "Czy chcesz nadpisać istniejące pliki konfiguracyjne .ini?",
"wrong_type_cfw": "Pobrany plik nie jest archiwum z CFW. Jest to najprawdopodobniej spowodowane wadliwym linkiem. Jeśli problem nie ustanie po więcej niż 30 minutach, utwórz nowy problem na Githubie."
"overwrite_inis": "Czy chcesz nadpisać istniejące pliki konfiguracyjne .ini?"
},
"ams_update": {
"reboot_rcm": "Switch uruchomi się teraz ponownie do specjalnego payloadu aby ukończyć instalację.",

View file

@ -93,9 +93,6 @@
"utils": {
"fw_warning": "Devido ao tamanho dos FWs, o download do firmware no modo Applet não é compatível. Execute o aplicativo com acesso a toda a RAM.",
"overwrite": " Você quer sobrescrever o arquivo existente? ",
"wrong_type_sigpatches": "O arquivo baixado não é um pacote sigpatches. Isso provavelmente se deve a um link quebrado. Se o problema persistir por mais de 3 horas, abra um 'issue' no Github.",
"wrong_type_fw": "O arquivo baixado não é um firmware. Isso provavelmente se deve a um link quebrado. Se o problema persistir por mais de 3 horas, abra um 'issue' no Github.",
"overwrite_inis": "Você deseja sobrescrever os arquivos de configuração .ini existentes?",
"wrong_type_cfw": "O arquivo baixado não é um CFW. Isso provavelmente se deve a um link quebrado. Se o problema persistir por mais de 3 horas, abra um 'issue' no Github."
"overwrite_inis": "Você deseja sobrescrever os arquivos de configuração .ini existentes?"
}
}

View file

@ -95,9 +95,6 @@
"utils": {
"fw_warning": "由于 FW archive的文件大小, 仅支持在 Applet Mode 模式下更新固件. (百度查询进入applet Mode模式方法)请让程序在Applet Mode下启动",
"overwrite": "你想要覆盖已经存在的",
"wrong_type_sigpatches": "下载的文件没有数字签名认证. 可能是由于链接出问题了.如果3个小时还有类似的问题, 请到github上给作者提出issue.",
"wrong_type_fw": "下载的文件没有数字签名认证. 可能是由于链接出问题了.如果3个小时还有类似的问题, 请到github上给作者提出issue",
"overwrite_inis": "你想要覆盖已经存在的.ini 设置文件吗?",
"wrong_type_cfw": "下载的文件CFW出现问题. 可能是由于链接出问题了.如果3个小时还有类似的问题, 请到github上给作者提出issue."
"overwrite_inis": "你想要覆盖已经存在的.ini 设置文件吗?"
}
}

View file

@ -164,10 +164,7 @@
"utils": {
"fw_warning": "由於FW壓縮檔太大在applet模式下無法下載韌體。請在能存取完整記憶體的一般模式下執行下載程序",
"overwrite": " 是否要覆蓋現有的檔案 ",
"wrong_type_sigpatches": "下載的檔案並不是正確的sigpatches壓縮檔。可能是檔案連結發生錯誤。如果下載錯誤持續超過30分鐘請使用Github提出問題來進行回報",
"wrong_type_fw": "下載的檔案並不是正確的韌體壓縮檔。可能是檔案連結發生錯誤。如果下載錯誤持續超過30分鐘請使用Github提出問題來進行回報",
"overwrite_inis": "是否要覆蓋現有的 .ini 系統配置檔案?",
"wrong_type_cfw": "下載的檔案並不是正確的CFW壓縮檔。可能是檔案連結發生錯誤。如果下載錯誤持續超過30分鐘請使用Github提出問題來進行回報"
"overwrite_inis": "是否要覆蓋現有的 .ini 系統配置檔案?"
},
"ams_update": {
"reboot_rcm": "Switch將會重新啟動並載入特定的注入檔案來完成安裝。",

View file

@ -43,7 +43,7 @@ void AppPage::PopulatePage()
tid = records[i].application_id;
if R_FAILED (GetControlData(tid, controlData, controlSize, name)) continue;
if R_FAILED(GetControlData(tid, controlData, controlSize, name)) continue;
listItem = new brls::ListItem(name, "", util::formatApplicationId(tid));
this->DeclareGameListItem(name, tid, &controlData);

View file

@ -21,13 +21,16 @@ namespace util {
bool isArchive(const std::string& path)
{
std::fstream file;
std::string fileContent;
if (std::filesystem::exists(path)) {
file.open(path, std::fstream::in);
file >> fileContent;
std::ifstream is(path, std::ifstream::binary);
char zip_signature[4] = {0x50, 0x4B, 0x03, 0x04}; // zip signature header PK\3\4
char signature[4];
is.read(signature, 4);
if (is.good() && std::equal(std::begin(signature), std::end(signature), std::begin(zip_signature), std::end(zip_signature))) {
return true;
}
}
return fileContent.find("DOCTYPE") == std::string::npos;
return false;
}
void downloadArchive(const std::string& url, contentType type)
@ -107,29 +110,43 @@ namespace util {
return result;
}
void extractArchive(contentType type, const std::string& tag)
void crashIfNotArchive(contentType type)
{
int overwriteInis = 0;
chdir(ROOT_PATH);
std::string filename;
switch (type) {
case contentType::sigpatches:
if (isArchive(SIGPATCHES_FILENAME)) {
/* if(std::filesystem::exists(HEKATE_IPL_PATH)){
overwriteInis = showDialogBox("menus/utils/overwrite"_i18n + std::string(HEKATE_IPL_PATH) +"?", "menus/common/no"_i18n, "menus/common/yes"_i18n);
if(overwriteInis == 0){
extract::extract(SIGPATCHES_FILENAME, ROOT_PATH, HEKATE_IPL_PATH);
}
else{
extract::extract(SIGPATCHES_FILENAME);
}
} */
//else{
extract::extract(SIGPATCHES_FILENAME);
//}
}
else {
brls::Application::crash("menus/utils/wrong_type_sigpatches"_i18n);
}
filename = SIGPATCHES_FILENAME;
break;
case contentType::cheats:
filename = CHEATS_FILENAME;
break;
case contentType::fw:
filename = FIRMWARE_FILENAME;
break;
case contentType::app:
filename = APP_FILENAME;
break;
case contentType::bootloaders:
filename = CFW_FILENAME;
break;
case contentType::ams_cfw:
filename = AMS_FILENAME;
break;
default:
return;
}
if (!isArchive(filename)) {
brls::Application::crash("menus/utils/not_an_archive"_i18n);
}
}
void extractArchive(contentType type, const std::string& tag)
{
chdir(ROOT_PATH);
crashIfNotArchive(type);
switch (type) {
case contentType::sigpatches:
extract::extract(SIGPATCHES_FILENAME);
break;
case contentType::cheats: {
std::vector<std::string> titles = extract::getInstalledTitlesNs();
@ -138,14 +155,9 @@ namespace util {
break;
}
case contentType::fw:
if (std::filesystem::file_size(FIRMWARE_FILENAME) < 200000) {
brls::Application::crash("menus/utils/wrong_type_sigpatches_downloaded"_i18n);
}
else {
if (std::filesystem::exists(FIRMWARE_PATH)) std::filesystem::remove_all(FIRMWARE_PATH);
fs::createTree(FIRMWARE_PATH);
extract::extract(FIRMWARE_FILENAME, FIRMWARE_PATH);
}
if (std::filesystem::exists(FIRMWARE_PATH)) std::filesystem::remove_all(FIRMWARE_PATH);
fs::createTree(FIRMWARE_PATH);
extract::extract(FIRMWARE_FILENAME, FIRMWARE_PATH);
break;
case contentType::app:
extract::extract(APP_FILENAME, CONFIG_PATH);
@ -154,25 +166,20 @@ namespace util {
romfsExit();
brls::Application::quit();
break;
case contentType::bootloaders:
if (isArchive(CFW_FILENAME)) {
overwriteInis = showDialogBox("menus/utils/overwrite_inis"_i18n, "menus/common/no"_i18n, "menus/common/yes"_i18n);
extract::extract(CFW_FILENAME, ROOT_PATH, overwriteInis);
}
else {
brls::Application::crash("menus/utils/wrong_type_cfw"_i18n);
}
case contentType::bootloaders: {
int overwriteInis = showDialogBox("menus/utils/overwrite_inis"_i18n, "menus/common/no"_i18n, "menus/common/yes"_i18n);
extract::extract(CFW_FILENAME, ROOT_PATH, overwriteInis);
break;
case contentType::ams_cfw:
if (isArchive(AMS_FILENAME)) {
overwriteInis = showDialogBox("menus/utils/overwrite_inis"_i18n, "menus/common/no"_i18n, "menus/common/yes"_i18n);
usleep(800000);
int deleteContents = showDialogBox("menus/ams_update/delete_sysmodules_flags"_i18n, "menus/common/no"_i18n, "menus/common/yes"_i18n);
if (deleteContents == 1)
removeSysmodulesFlags(AMS_CONTENTS);
extract::extract(AMS_FILENAME, ROOT_PATH, overwriteInis);
}
}
case contentType::ams_cfw: {
int overwriteInis = showDialogBox("menus/utils/overwrite_inis"_i18n, "menus/common/no"_i18n, "menus/common/yes"_i18n);
usleep(800000);
int deleteContents = showDialogBox("menus/ams_update/delete_sysmodules_flags"_i18n, "menus/common/no"_i18n, "menus/common/yes"_i18n);
if (deleteContents == 1)
removeSysmodulesFlags(AMS_CONTENTS);
extract::extract(AMS_FILENAME, ROOT_PATH, overwriteInis);
break;
}
default:
break;
}