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:
parent
a65f8355d4
commit
cc50d526c0
12 changed files with 70 additions and 91 deletions
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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?"
|
||||
}
|
||||
}
|
|
@ -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 ?"
|
||||
}
|
||||
}
|
|
@ -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?"
|
||||
}
|
||||
}
|
|
@ -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": "これで、インストールを完了するために、スイッチが特別なペイロードで再起動します。",
|
||||
|
|
|
@ -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ę.",
|
||||
|
|
|
@ -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?"
|
||||
}
|
||||
}
|
|
@ -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 设置文件吗?"
|
||||
}
|
||||
}
|
|
@ -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將會重新啟動,並載入特定的注入檔案來完成安裝。",
|
||||
|
|
|
@ -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);
|
||||
|
|
107
source/utils.cpp
107
source/utils.cpp
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue