From c74e21243d70d89213fa840abb12f4a6e6296f75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Wed, 25 Feb 2026 14:28:31 +0100 Subject: [PATCH] Add support for installing plugins directly from zip files --- Core/Loaders.cpp | 22 +++++--- Core/Loaders.h | 16 +++--- Core/Util/GameManager.cpp | 27 +++++++-- Core/Util/GameManager.h | 2 +- Tools/langtool/Cargo.lock | 104 +++++++++++++++++------------------ UI/InstallZipScreen.cpp | 35 +++++++++++- assets/lang/ar_AE.ini | 2 + assets/lang/az_AZ.ini | 2 + assets/lang/be_BY.ini | 2 + assets/lang/bg_BG.ini | 2 + assets/lang/ca_ES.ini | 2 + assets/lang/cz_CZ.ini | 2 + assets/lang/da_DK.ini | 2 + assets/lang/de_DE.ini | 2 + assets/lang/dr_ID.ini | 2 + assets/lang/es_ES.ini | 2 + assets/lang/es_LA.ini | 2 + assets/lang/fa_IR.ini | 2 + assets/lang/fi_FI.ini | 2 + assets/lang/fr_FR.ini | 2 + assets/lang/gl_ES.ini | 2 + assets/lang/gr_EL.ini | 2 + assets/lang/he_IL.ini | 2 + assets/lang/he_IL_invert.ini | 2 + assets/lang/hr_HR.ini | 2 + assets/lang/hu_HU.ini | 2 + assets/lang/id_ID.ini | 2 + assets/lang/it_IT.ini | 2 + assets/lang/ja_JP.ini | 2 + assets/lang/jv_ID.ini | 2 + assets/lang/ko_KR.ini | 2 + assets/lang/ku_SO.ini | 2 + assets/lang/lo_LA.ini | 2 + assets/lang/lt-LT.ini | 2 + assets/lang/ms_MY.ini | 2 + assets/lang/nl_NL.ini | 2 + assets/lang/no_NO.ini | 2 + assets/lang/pl_PL.ini | 2 + assets/lang/pt_BR.ini | 2 + assets/lang/pt_PT.ini | 2 + assets/lang/ro_RO.ini | 2 + assets/lang/ru_RU.ini | 2 + assets/lang/sv_SE.ini | 2 + assets/lang/tg_PH.ini | 2 + assets/lang/th_TH.ini | 2 + assets/lang/tr_TR.ini | 2 + assets/lang/uk_UA.ini | 2 + assets/lang/vi_VN.ini | 2 + assets/lang/zh_CN.ini | 2 + assets/lang/zh_TW.ini | 2 + ext/libchdr | 2 +- 51 files changed, 220 insertions(+), 76 deletions(-) diff --git a/Core/Loaders.cpp b/Core/Loaders.cpp index 93f6460369..4d31a63bbb 100644 --- a/Core/Loaders.cpp +++ b/Core/Loaders.cpp @@ -468,14 +468,14 @@ void DetectZipFileContents(zip_t *z, ZipFileInfo *info) { bool isSaveStates = false; bool isFrameDump = false; int stripChars = 0; - int isoFileIndex = -1; int stripCharsTexturePack = -1; - int textureIniIndex = -1; int filesInRoot = 0; int directoriesInRoot = 0; bool hasParamSFO = false; bool isExtractedISO = false; bool hasIcon0PNG = false; + bool hasPRX = false; + bool hasPluginIni = false; s64 totalFileSize = 0; // TODO: It might be cleaner to write separate detection functions, but this big loop doing it all at once @@ -514,10 +514,10 @@ void DetectZipFileContents(zip_t *z, ZipFileInfo *info) { // We only do this if the ISO file is in the root or one level down. isZippedISO = true; INFO_LOG(Log::HLE, "ISO found in zip: %s", zippedName.c_str()); - if (isoFileIndex != -1) { + if (info->isoFileIndex != -1) { INFO_LOG(Log::HLE, "More than one ISO file found in zip. Ignoring additional ones."); } else { - isoFileIndex = i; + info->isoFileIndex = i; info->contentName = zippedName; } } @@ -526,11 +526,11 @@ void DetectZipFileContents(zip_t *z, ZipFileInfo *info) { if (stripCharsTexturePack == -1 || slashLocation < stripCharsTexturePack + 1) { stripCharsTexturePack = slashLocation + 1; isTexturePack = true; - textureIniIndex = i; + info->textureIniIndex = i; } } else if (endsWith(zippedName, ".ppdmp")) { isFrameDump = true; - isoFileIndex = i; + info->isoFileIndex = i; info->contentName = zippedName; } else if (endsWith(zippedName, ".ppst")) { int slashLocation = (int)zippedName.find_last_of('/'); @@ -561,6 +561,12 @@ void DetectZipFileContents(zip_t *z, ZipFileInfo *info) { } } else if (endsWith(zippedName, "/icon0.png")) { hasIcon0PNG = true; + } else if (endsWith(zippedName, "/plugin.ini") && slashCount == 1) { + hasPluginIni = true; + ZipExtractFileToMemory(z, i, &info->iniContents); + info->contentName = zippedName.substr(0, zippedName.find_last_of('/')); + } else if (endsWith(zippedName, ".prx") && slashCount == 1) { + hasPRX = true; } if (slashCount == 0) { filesInRoot++; @@ -569,8 +575,6 @@ void DetectZipFileContents(zip_t *z, ZipFileInfo *info) { info->stripChars = stripChars; info->numFiles = numFiles; - info->isoFileIndex = isoFileIndex; - info->textureIniIndex = textureIniIndex; info->ignoreMetaFiles = false; info->totalFileSize = totalFileSize; @@ -592,6 +596,8 @@ void DetectZipFileContents(zip_t *z, ZipFileInfo *info) { info->contents = ZipFileContents::SAVE_STATES; } else if (isExtractedISO && hasParamSFO) { info->contents = ZipFileContents::EXTRACTED_GAME; + } else if (hasPluginIni && hasPRX) { + info->contents = ZipFileContents::PRX_PLUGIN; } else { info->contents = ZipFileContents::UNKNOWN; } diff --git a/Core/Loaders.h b/Core/Loaders.h index 5fba70b09d..5eb1e57e91 100644 --- a/Core/Loaders.h +++ b/Core/Loaders.h @@ -173,21 +173,23 @@ enum class ZipFileContents { FRAME_DUMP, EXTRACTED_GAME, SAVE_STATES, + PRX_PLUGIN, }; struct ZipFileInfo { - ZipFileContents contents; - int numFiles; - int stripChars; // for PSP game - how much to strip from the path. - int isoFileIndex; // for ISO - int textureIniIndex; // for textures - bool ignoreMetaFiles; + ZipFileContents contents = ZipFileContents::NOT_A_ZIP_FILE; + int numFiles = 0; + int stripChars = 0; // for PSP game - how much to strip from the path. + int isoFileIndex = -1; // for ISO + int textureIniIndex = -1; // for textures + bool ignoreMetaFiles = false; std::string gameTitle; // from PARAM.SFO if available std::string savedataTitle; std::string savedataDetails; std::string savedataDir; std::string mTime; - s64 totalFileSize; + std::string iniContents; + s64 totalFileSize = 0; std::string contentName; }; diff --git a/Core/Util/GameManager.cpp b/Core/Util/GameManager.cpp index a3b3ba7908..32693d170c 100644 --- a/Core/Util/GameManager.cpp +++ b/Core/Util/GameManager.cpp @@ -171,7 +171,7 @@ void GameManager::Update() { } } -bool CanExtractWithoutOverwrite(struct zip *z, const Path &destination, int maxOkFiles) { +bool ZipCanExtractWithoutOverwrite(struct zip *z, const Path &destination, int maxOkFiles) { int numFiles = zip_get_num_files(z); if (numFiles > maxOkFiles && maxOkFiles >= 0) { // Ignore the check, just assume we can't. @@ -192,6 +192,19 @@ bool CanExtractWithoutOverwrite(struct zip *z, const Path &destination, int maxO return true; } +static std::string ZipReadFileByIndex(struct zip *z, int file_index) { + struct zip_stat zstat; + zip_stat_index(z, file_index, 0, &zstat); + std::string buffer; + buffer.resize(zstat.size); + zip_file *zf = zip_fopen_index(z, file_index, 0); + if (zip_fread(zf, &buffer[0], buffer.size()) != (zip_int64_t)zstat.size) { + return {}; + } + zip_fclose(zf); + return buffer; +} + // Parameters need to be by value, since this is a thread func. void GameManager::InstallZipContents(ZipFileTask task) { SetCurrentThreadName("InstallZipContents"); @@ -308,6 +321,12 @@ void GameManager::InstallZipContents(ZipFileTask task) { success = ExtractZipContents(z, pspSaveData, zipInfo, true); break; } + case ZipFileContents::PRX_PLUGIN: + { + Path pspPlugins = GetSysDirectory(DIRECTORY_PLUGINS); + success = ExtractZipContents(z, pspPlugins, zipInfo, true); + break; + } default: ERROR_LOG(Log::HLE, "File not a PSP game, no EBOOT.PBP found."); SetInstallError(sy->T("Not a PSP game")); @@ -337,10 +356,8 @@ bool GameManager::DetectTexturePackDest(struct zip *z, int iniIndex, Path &dest) return false; } - std::string buffer; - buffer.resize(zstat.size); - zip_file *zf = zip_fopen_index(z, iniIndex, 0); - if (zip_fread(zf, &buffer[0], buffer.size()) != (zip_int64_t)zstat.size) { + std::string buffer = ZipReadFileByIndex(z, iniIndex); + if (buffer.empty()) { SetInstallError(iz->T("Zip archive corrupt")); return false; } diff --git a/Core/Util/GameManager.h b/Core/Util/GameManager.h index 67c6be6084..665d112d3d 100644 --- a/Core/Util/GameManager.h +++ b/Core/Util/GameManager.h @@ -119,4 +119,4 @@ private: extern GameManager g_GameManager; -bool CanExtractWithoutOverwrite(struct zip *z, const Path &destination, int maxOkFiles); +bool ZipCanExtractWithoutOverwrite(struct zip *z, const Path &destination, int maxOkFiles); diff --git a/Tools/langtool/Cargo.lock b/Tools/langtool/Cargo.lock index 9ba4b4fc1e..a924da511f 100644 --- a/Tools/langtool/Cargo.lock +++ b/Tools/langtool/Cargo.lock @@ -63,9 +63,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.101" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "atomic-waker" @@ -127,9 +127,9 @@ checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "bumpalo" -version = "3.20.1" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6f81257d10a0f602a294ae4182251151ff97dbb504ef9afcdda4a64b24d9b4" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "bytes" @@ -169,9 +169,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "clap" -version = "4.5.59" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5caf74d17c3aec5495110c34cc3f78644bfa89af6c8993ed4de2790e49b6499" +checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" dependencies = [ "clap_builder", "clap_derive", @@ -179,9 +179,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.59" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "370daa45065b80218950227371916a1633217ae42b2715b2287b606dcd618e24" +checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" dependencies = [ "anstream", "anstyle", @@ -198,7 +198,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -302,7 +302,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -820,9 +820,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.85" +version = "0.3.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" +checksum = "14dc6f6450b3f6d4ed5b16327f38fed626d375a886159ca555bd7822c0c3a5a6" dependencies = [ "once_cell", "wasm-bindgen", @@ -855,9 +855,9 @@ checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" @@ -1056,7 +1056,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1193,9 +1193,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "reqwest" @@ -1261,9 +1261,9 @@ checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustix" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ "bitflags 2.11.0", "errno", @@ -1274,9 +1274,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.36" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "aws-lc-rs", "once_cell", @@ -1373,9 +1373,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.6.0" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d17b898a6d6948c3a8ee4372c17cb384f90d2e6e912ef00895b14fd7ab54ec38" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ "bitflags 2.11.0", "core-foundation 0.10.1", @@ -1386,9 +1386,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.16.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321c8673b092a9a42605034a9879d73cb79101ed5fd117bc9a597b89b4e9e61a" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -1427,7 +1427,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1508,9 +1508,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.116" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -1534,7 +1534,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1560,9 +1560,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.25.0" +version = "3.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" +checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0" dependencies = [ "fastrand", "getrandom 0.4.1", @@ -1597,7 +1597,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1608,7 +1608,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1841,9 +1841,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.108" +version = "0.2.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" +checksum = "60722a937f594b7fde9adb894d7c092fc1bb6612897c46368d18e7a20208eff2" dependencies = [ "cfg-if", "once_cell", @@ -1854,9 +1854,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.58" +version = "0.4.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" +checksum = "8a89f4650b770e4521aa6573724e2aed4704372151bd0de9d16a3bbabb87441a" dependencies = [ "cfg-if", "futures-util", @@ -1868,9 +1868,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.108" +version = "0.2.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" +checksum = "0fac8c6395094b6b91c4af293f4c79371c163f9a6f56184d2c9a85f5a95f3950" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1878,22 +1878,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.108" +version = "0.2.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" +checksum = "ab3fabce6159dc20728033842636887e4877688ae94382766e00b180abac9d60" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.108" +version = "0.2.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" +checksum = "de0e091bdb824da87dc01d967388880d017a0a9bc4f3bdc0d86ee9f9336e3bb5" dependencies = [ "unicode-ident", ] @@ -1993,9 +1993,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.85" +version = "0.3.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" +checksum = "705eceb4ce901230f8625bd1d665128056ccbe4b7408faa625eec1ba80f59a97" dependencies = [ "js-sys", "wasm-bindgen", @@ -2347,7 +2347,7 @@ dependencies = [ "heck", "indexmap", "prettyplease", - "syn 2.0.116", + "syn 2.0.117", "wasm-metadata", "wit-bindgen-core", "wit-component", @@ -2363,7 +2363,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "wit-bindgen-core", "wit-bindgen-rust", ] @@ -2485,7 +2485,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "synstructure", ] @@ -2506,7 +2506,7 @@ checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2526,7 +2526,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "synstructure", ] @@ -2566,7 +2566,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] diff --git a/UI/InstallZipScreen.cpp b/UI/InstallZipScreen.cpp index f33addfecf..1e519ed6af 100644 --- a/UI/InstallZipScreen.cpp +++ b/UI/InstallZipScreen.cpp @@ -23,11 +23,13 @@ #include "Common/File/FileUtil.h" #include "Common/Data/Text/I18n.h" #include "Common/Data/Text/Parsers.h" +#include "Common/Data/Format/IniFile.h" #include "Core/Config.h" #include "Core/System.h" #include "Core/Util/GameManager.h" #include "Core/Util/PathUtil.h" +#include "Core/Util/GameDB.h" #include "Core/Loaders.h" #include "UI/InstallZipScreen.h" @@ -87,6 +89,7 @@ void InstallZipScreen::CreateSettingsViews(UI::ViewGroup *parent) { case ZipFileContents::TEXTURE_PACK: case ZipFileContents::SAVE_DATA: case ZipFileContents::SAVE_STATES: + case ZipFileContents::PRX_PLUGIN: installChoice_ = parent->Add(new Choice(iz->T("Install"), ImageID("I_FOLDER_UPLOAD"))); installChoice_->OnClick.Handle(this, &InstallZipScreen::OnInstall); showDeleteCheckbox = true; @@ -178,6 +181,34 @@ void InstallZipScreen::CreateContentViews(UI::ViewGroup *parent) { showDeleteCheckbox = true; break; } + case ZipFileContents::PRX_PLUGIN: + { + leftColumn->Add(new TextView(iz->T("Install plugin from ZIP file?"))); + leftColumn->Add(new TextView(GetFriendlyPath(zipPath_))); + Path pluginsDir = GetSysDirectory(DIRECTORY_PLUGINS); + ZipContainer zipFile = ZipOpenPath(zipPath_); + overwrite = !ZipCanExtractWithoutOverwrite(zipFile, pluginsDir, 50); + ZipClose(zipFile); + std::stringstream sstream(zipFileInfo_.iniContents); + IniFile ini; + ini.Load(sstream); + if (Section *games = ini.GetSection("games")) { + leftColumn->Add(new TextView(iz->T("Supported games:"))); + for (const auto &line : games->Lines()) { + std::string gameID(line.Key()); + std::vector infos; + if (g_gameDB.GetGameInfos(gameID, &infos)) { + for (const auto &info : infos) { + leftColumn->Add(new TextView(info.title + " - " + gameID)); + break; // Let's just show the first match for each gameID, it gets messy otherwise. + } + } else { + leftColumn->Add(new TextView(gameID)); + } + } + } + break; + } case ZipFileContents::SAVE_STATES: { std::string_view question = iz->T("Import savestates from ZIP file"); @@ -187,7 +218,7 @@ void InstallZipScreen::CreateContentViews(UI::ViewGroup *parent) { Path savestateDir = GetSysDirectory(DIRECTORY_SAVESTATE); ZipContainer zipFile = ZipOpenPath(zipPath_); - overwrite = !CanExtractWithoutOverwrite(zipFile, savestateDir, 50); + overwrite = !ZipCanExtractWithoutOverwrite(zipFile, savestateDir, 50); ZipClose(zipFile); destFolders_.push_back(savestateDir); @@ -204,7 +235,7 @@ void InstallZipScreen::CreateContentViews(UI::ViewGroup *parent) { Path savedataDir = GetSysDirectory(DIRECTORY_SAVEDATA); ZipContainer zipFile = ZipOpenPath(zipPath_); - overwrite = !CanExtractWithoutOverwrite(zipFile, savedataDir, 50); + overwrite = !ZipCanExtractWithoutOverwrite(zipFile, savedataDir, 50); ZipClose(zipFile); destFolders_.push_back(savedataDir); diff --git a/assets/lang/ar_AE.ini b/assets/lang/ar_AE.ini index 558b9ac930..c59fc7b4b6 100644 --- a/assets/lang/ar_AE.ini +++ b/assets/lang/ar_AE.ini @@ -786,9 +786,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = ‎تثبيت Install game from ZIP file? = ‎تثبيت اللعبة من الملف المضغوط ? Install into folder = Install into folder +Install plugin from ZIP file? = تثبيت الإضافة من ملف ZIP؟ # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = فشل في التثبيت Installed! = ‎مثبت! +Supported games: = الألعاب المدعومة: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = ملف ZIP diff --git a/assets/lang/az_AZ.ini b/assets/lang/az_AZ.ini index 920821bc2c..4fb3eee68a 100644 --- a/assets/lang/az_AZ.ini +++ b/assets/lang/az_AZ.ini @@ -780,9 +780,11 @@ Import savedata from ZIP file = Qorunuş verilənini ZIP fayldan götür Install = Quraşdır Install game from ZIP file? = Oyun ZIP fayldan quraşdırılsın? Install into folder = Qovluqda quraşdır +Install plugin from ZIP file? = ZIP faylından plagin quraşdırın? # AI translated Install textures from ZIP file? = Toxumalar ZIP fayldan quraşdırılsın? Installation failed = Quraşdırma uğursuz oldu Installed! = Quraşdırıldı! +Supported games: = Dəstəklənən oyunlar: # AI translated Texture pack doesn't support install = Toxuma bağlaması quraşdırmanı dəstəkləmir Zip archive corrupt = ZIP arxivi korlanıb ZIP file = ZIP faylı diff --git a/assets/lang/be_BY.ini b/assets/lang/be_BY.ini index 55321c5169..74a0d00b22 100644 --- a/assets/lang/be_BY.ini +++ b/assets/lang/be_BY.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Усталяваць Install game from ZIP file? = Install game from ZIP file? Install into folder = Усталяваць у тэчку +Install plugin from ZIP file? = Усталяваць плагін з ZIP-файла? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Усталявана! +Supported games: = Падтрымліваемыя гульні: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = Файл ZIP diff --git a/assets/lang/bg_BG.ini b/assets/lang/bg_BG.ini index 0dda100fad..1218304d1d 100644 --- a/assets/lang/bg_BG.ini +++ b/assets/lang/bg_BG.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Импортиране на запазени д Install = Инсталирай Install game from ZIP file? = Инсталирай игра от ZIP архив? Install into folder = Инсталиране в папка +Install plugin from ZIP file? = Инсталирайте плъгин от ZIP файл? # AI translated Install textures from ZIP file? = Инсталиране на текстури от ZIP файл? Installation failed = Инсталацията не бе успешна Installed! = Инсталирано! +Supported games: = Поддържани игри: # AI translated Texture pack doesn't support install = Текстурният пакет не поддържа инсталиране Zip archive corrupt = ZIP архивът е повреден ZIP file = ZIP файл diff --git a/assets/lang/ca_ES.ini b/assets/lang/ca_ES.ini index 54e5368f1d..0cff9896a0 100644 --- a/assets/lang/ca_ES.ini +++ b/assets/lang/ca_ES.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Install Install game from ZIP file? = Install game from ZIP file? Install into folder = Install into folder +Install plugin from ZIP file? = Instal·la el complement des d'un fitxer ZIP? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Installed! +Supported games: = Jocs compatibles: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = Fitxer ZIP diff --git a/assets/lang/cz_CZ.ini b/assets/lang/cz_CZ.ini index b53af2915b..b2e70b3486 100644 --- a/assets/lang/cz_CZ.ini +++ b/assets/lang/cz_CZ.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Nainstalovat Install game from ZIP file? = Instalovat hru ze souboru ZIP? Install into folder = Install into folder +Install plugin from ZIP file? = Nainstalovat plugin z ZIP souboru? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Instalováno! +Supported games: = Podporované hry: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = ZIP soubor diff --git a/assets/lang/da_DK.ini b/assets/lang/da_DK.ini index df9d9b45c4..003fcb9f87 100644 --- a/assets/lang/da_DK.ini +++ b/assets/lang/da_DK.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Installer Install game from ZIP file? = Installer spil fra ZIP fil? Install into folder = Install into folder +Install plugin from ZIP file? = Installer plugin fra ZIP-fil? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Installeret! +Supported games: = Understøttede spil: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = ZIP-fil diff --git a/assets/lang/de_DE.ini b/assets/lang/de_DE.ini index 8a9f5e3d49..997774aad8 100644 --- a/assets/lang/de_DE.ini +++ b/assets/lang/de_DE.ini @@ -777,9 +777,11 @@ Import savedata from ZIP file = Gespeicherte Daten aus ZIP-Datei importieren Install = Installieren Install game from ZIP file? = Spiel aus ZIP-Datei installieren? Install into folder = In Ordner installieren +Install plugin from ZIP file? = Plugin aus ZIP-Datei installieren? # AI translated Install textures from ZIP file? = Texturen von ZIP-Datei installieren? Installation failed = Installation fehlgeschlagen Installed! = Installiert! +Supported games: = Unterstützte Spiele: # AI translated Texture pack doesn't support install = Texturpaket unterstützt keine Installation Zip archive corrupt = ZIP-Archiv beschädigt ZIP file = ZIP-Datei diff --git a/assets/lang/dr_ID.ini b/assets/lang/dr_ID.ini index e64851737c..f2ddec1c95 100644 --- a/assets/lang/dr_ID.ini +++ b/assets/lang/dr_ID.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Install Install game from ZIP file? = Install game from ZIP file? Install into folder = Install into folder +Install plugin from ZIP file? = Pasang plugin dari file ZIP? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Installed! +Supported games: = Game yang didukung: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = File ZIP diff --git a/assets/lang/es_ES.ini b/assets/lang/es_ES.ini index cd811d5c12..ecc09d3f3f 100644 --- a/assets/lang/es_ES.ini +++ b/assets/lang/es_ES.ini @@ -779,9 +779,11 @@ Import savedata from ZIP file = Importar datos guardados desde archivo ZIP Install = Instalar Install game from ZIP file? = ¿Instalar juego desde archivo ZIP? Install into folder = Instalar en carpeta +Install plugin from ZIP file? = ¿Instalar el plugin desde un archivo ZIP? # AI translated Install textures from ZIP file? = ¿Instalar texturas desde archivo ZIP? Installation failed = Instalación fallida Installed! = ¡Instalado! +Supported games: = Juegos compatibles: # AI translated Texture pack doesn't support install = El paquete de texturas no admite instalación Zip archive corrupt = Archivo ZIP dañado ZIP file = Archivo ZIP diff --git a/assets/lang/es_LA.ini b/assets/lang/es_LA.ini index 927fea16d6..03b28d2b87 100644 --- a/assets/lang/es_LA.ini +++ b/assets/lang/es_LA.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Instalar Install game from ZIP file? = ¿Instalar juego desde un archivo ZIP? Install into folder = Install into folder +Install plugin from ZIP file? = ¿Instalar el complemento desde un archivo ZIP? # AI translated Install textures from ZIP file? = ¿Instalar texturas desde un archivo ZIP? Installation failed = Instalación fallida Installed! = ¡Instalado! +Supported games: = Juegos compatibles: # AI translated Texture pack doesn't support install = El paquete de texturas no es compatible con la instalación. Zip archive corrupt = El archivo ZIP está dañado. ZIP file = Archivo ZIP diff --git a/assets/lang/fa_IR.ini b/assets/lang/fa_IR.ini index c1009532f5..e888b045e8 100644 --- a/assets/lang/fa_IR.ini +++ b/assets/lang/fa_IR.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Install Install game from ZIP file? = Install game from ZIP file? Install into folder = Install into folder +Install plugin from ZIP file? = نصب پلاگین از فایل ZIP؟ # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Installed! +Supported games: = بازی‌های پشتیبانی‌شده: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = فایل ZIP diff --git a/assets/lang/fi_FI.ini b/assets/lang/fi_FI.ini index 879253f559..edc6945d4b 100644 --- a/assets/lang/fi_FI.ini +++ b/assets/lang/fi_FI.ini @@ -779,9 +779,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Asenna Install game from ZIP file? = Asenna peli ZIP-tiedostosta? Install into folder = Install into folder +Install plugin from ZIP file? = Asenna liitännäinen ZIP-tiedostosta? # AI translated Install textures from ZIP file? = Asenna tekstuureja ZIP-tiedostosta? Installation failed = Installation failed Installed! = Asenettu! +Supported games: = Tuetut pelit: # AI translated Texture pack doesn't support install = Tekstuuripakkaus ei tue asennusta Zip archive corrupt = ZIP-arkisto on korruptoitunut ZIP file = ZIP-tiedosto diff --git a/assets/lang/fr_FR.ini b/assets/lang/fr_FR.ini index 5cabc9a051..4e3b1fffa0 100644 --- a/assets/lang/fr_FR.ini +++ b/assets/lang/fr_FR.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Installer Install game from ZIP file? = Installer le jeu depuis le fichier ZIP ? Install into folder = Install into folder +Install plugin from ZIP file? = Installer le plugin à partir d'un fichier ZIP ? # AI translated Install textures from ZIP file? = Installer les textures depuis le fichier ZIP ? Installation failed = Installation failed Installed! = Installé ! +Supported games: = Jeux pris en charge : # AI translated Texture pack doesn't support install = Le pack de textures ne peut pas être installé Zip archive corrupt = Archive ZIP corrompue ZIP file = Fichier ZIP diff --git a/assets/lang/gl_ES.ini b/assets/lang/gl_ES.ini index ff07fd0acf..30be931b40 100644 --- a/assets/lang/gl_ES.ini +++ b/assets/lang/gl_ES.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Instalar Install game from ZIP file? = Instalar xogo dende un arquivo ZIP? Install into folder = Install into folder +Install plugin from ZIP file? = Instala o complemento desde un arquivo ZIP? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = ¡Instalado! +Supported games: = Xogos compatibles: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = Arquivo ZIP diff --git a/assets/lang/gr_EL.ini b/assets/lang/gr_EL.ini index 7c6921d852..fcede81b4c 100644 --- a/assets/lang/gr_EL.ini +++ b/assets/lang/gr_EL.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Εγκατάσταση Install game from ZIP file? = Εγκατάσταση παιχνιδιού από το αρχείο ZIP? Install into folder = Install into folder +Install plugin from ZIP file? = Εγκατάσταση πρόσθετου από ZIP αρχείο; # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Εγκαταστάθηκε! +Supported games: = Υποστηριζόμενα παιχνίδια: # AI translated Texture pack doesn't support install = Το πακέτο υφής δεν υποστηρίζει την εγκατάσταση Zip archive corrupt = Το αρχείο ZIP είναι κατεστραμμένο ZIP file = Αρχείο ZIP diff --git a/assets/lang/he_IL.ini b/assets/lang/he_IL.ini index 8d84c47bfd..84cd2b2664 100644 --- a/assets/lang/he_IL.ini +++ b/assets/lang/he_IL.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Install Install game from ZIP file? = Install game from ZIP file? Install into folder = Install into folder +Install plugin from ZIP file? = התקנת תוסף מקובץ ZIP? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Installed! +Supported games: = משחקים נתמכים: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = קובץ ZIP diff --git a/assets/lang/he_IL_invert.ini b/assets/lang/he_IL_invert.ini index 12b50a3d27..4ac3c85a39 100644 --- a/assets/lang/he_IL_invert.ini +++ b/assets/lang/he_IL_invert.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Install Install game from ZIP file? = Install game from ZIP file? Install into folder = Install into folder +Install plugin from ZIP file? = התקנת קובץ ZIP מתוסף? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Installed! +Supported games: = דתמנגשימ : # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = קובץ ZIP diff --git a/assets/lang/hr_HR.ini b/assets/lang/hr_HR.ini index a6d321d344..c2f1ea06b3 100644 --- a/assets/lang/hr_HR.ini +++ b/assets/lang/hr_HR.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Instaliraj Install game from ZIP file? = Instaliraj igru iz ZIP datoteke? Install into folder = Install into folder +Install plugin from ZIP file? = Instalirajte dodatak iz ZIP datoteke? # AI translated Install textures from ZIP file? = Instaliraj teksture iz ZIP datoteke? Installation failed = Installation failed Installed! = Instalirano! +Supported games: = Podržane igre: # AI translated Texture pack doesn't support install = Texture pack ne podržava instaliranje Zip archive corrupt = Koruptana ZIP arhiva ZIP file = ZIP datoteka diff --git a/assets/lang/hu_HU.ini b/assets/lang/hu_HU.ini index 93afd3228a..541e08da6f 100644 --- a/assets/lang/hu_HU.ini +++ b/assets/lang/hu_HU.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Telepítés Install game from ZIP file? = Játék telepítése ZIP fájlból? Install into folder = Telepítés mappába +Install plugin from ZIP file? = Plugin telepítése ZIP fájlból? # AI translated Install textures from ZIP file? = Textúrák telepítése ZIP fájlból? Installation failed = Sikertelen telepítés Installed! = Telepítve! +Supported games: = Támogatott játékok: # AI translated Texture pack doesn't support install = A textúra csomag nem támogatja a telepítést Zip archive corrupt = A ZIP archívum sérült ZIP file = ZIP fájl diff --git a/assets/lang/id_ID.ini b/assets/lang/id_ID.ini index 1a508fb8b2..9f5921ed15 100644 --- a/assets/lang/id_ID.ini +++ b/assets/lang/id_ID.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Pasang Install game from ZIP file? = Pasang game dari berkas ZIP? Install into folder = Pasang di folder +Install plugin from ZIP file? = Pasang plugin dari file ZIP? # AI translated Install textures from ZIP file? = Pasang tekstur dari file ZIP? Installation failed = Pemasangan gagal Installed! = Terpasang! +Supported games: = Game yang didukung: # AI translated Texture pack doesn't support install = Paket tekstur tidak mendukung pemasangan Zip archive corrupt = Arzip ZIP rusak ZIP file = File ZIP diff --git a/assets/lang/it_IT.ini b/assets/lang/it_IT.ini index 0128832da8..b34cf44e65 100644 --- a/assets/lang/it_IT.ini +++ b/assets/lang/it_IT.ini @@ -779,9 +779,11 @@ Import savedata from ZIP file = Importa i dati salvati dal file ZIP Install = Installa Install game from ZIP file? = Installare il gioco dal file ZIP? Install into folder = Installa nella cartella +Install plugin from ZIP file? = Installa plugin da file ZIP? # AI translated Install textures from ZIP file? = Installare le texture dal file ZIP? Installation failed = Installazione fallita Installed! = Installato! +Supported games: = Giochi supportati: # AI translated Texture pack doesn't support install = Il texture pack non supporta l'installazione Zip archive corrupt = Archivio ZIP corrotto ZIP file = File ZIP diff --git a/assets/lang/ja_JP.ini b/assets/lang/ja_JP.ini index be508eb443..325190f6b9 100644 --- a/assets/lang/ja_JP.ini +++ b/assets/lang/ja_JP.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = ZIPファイルからセーブデータをイン Install = インストールする Install game from ZIP file? = ZIPファイルからゲームをインストールしますか? Install into folder = フォルダにインストール +Install plugin from ZIP file? = ZIPファイルからプラグインをインストールしますか? # AI translated Install textures from ZIP file? = ZIPファイルからテクスチャをインストールしますか? Installation failed = インストール失敗 Installed! = インストールしました +Supported games: = サポートされているゲーム: # AI translated Texture pack doesn't support install = テクスチャパックがインストールをサポートしていません Zip archive corrupt = ZIPアーカイブが破損しています ZIP file = ZIPファイル diff --git a/assets/lang/jv_ID.ini b/assets/lang/jv_ID.ini index 27354909e0..ed76a8aa75 100644 --- a/assets/lang/jv_ID.ini +++ b/assets/lang/jv_ID.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Nginstal Install game from ZIP file? = Nginstal dolanan saka berkas ZIP? Install into folder = Install into folder +Install plugin from ZIP file? = Instalasi plugin saka file ZIP? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Keinstal! +Supported games: = Game sing didhukung: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = File ZIP diff --git a/assets/lang/ko_KR.ini b/assets/lang/ko_KR.ini index a47615f4e6..c9436ca605 100644 --- a/assets/lang/ko_KR.ini +++ b/assets/lang/ko_KR.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = ZIP 파일에서 저장된 데이터 가져오 Install = 설치 Install game from ZIP file? = ZIP 파일에서 게임을 설치할까요? Install into folder = 폴더에 설치 +Install plugin from ZIP file? = ZIP 파일에서 플러그인을 설치하시겠습니까? # AI translated Install textures from ZIP file? = ZIP 파일에서 텍스처를 설치하겠습니까? Installation failed = 설치 실패 Installed! = 설치되었습니다! +Supported games: = 지원되는 게임: # AI translated Texture pack doesn't support install = 텍스처 팩은 설치를 지원하지 않습니다. Zip archive corrupt = ZIP 아카이브가 손상되었습니다. ZIP file = ZIP 파일 diff --git a/assets/lang/ku_SO.ini b/assets/lang/ku_SO.ini index 73c8750b4e..a5c7cb399b 100644 --- a/assets/lang/ku_SO.ini +++ b/assets/lang/ku_SO.ini @@ -792,9 +792,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Install Install game from ZIP file? = Install game from ZIP file? Install into folder = Install into folder +Install plugin from ZIP file? = Plugini ji pelê ZIP-ê re saz bike? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Installed! +Supported games: = Ludan piştgirî: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = Pelê ZIP diff --git a/assets/lang/lo_LA.ini b/assets/lang/lo_LA.ini index 5e21272e58..648dce0cec 100644 --- a/assets/lang/lo_LA.ini +++ b/assets/lang/lo_LA.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = ຕິດຕັ້ງ Install game from ZIP file? = ຕິດຕັ້ງເກມຈາກໄຟລ໌ ZIP ຫຼືບໍ່? Install into folder = Install into folder +Install plugin from ZIP file? = ແຕ່ງຕິດຕັ້ງສິນຄ້າຈາກໄຟລ໌ ZIP? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = ຕິດຕັ້ງແລ້ວ! +Supported games: = ເກມທີ່ໄດ້ຮັບການສະໜັບສະໜູນ: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = File ZIP diff --git a/assets/lang/lt-LT.ini b/assets/lang/lt-LT.ini index 3659780e66..36526b6a9a 100644 --- a/assets/lang/lt-LT.ini +++ b/assets/lang/lt-LT.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Instaliuoti Install game from ZIP file? = Instaliuoti žaidimą iš ZIP failo? Install into folder = Install into folder +Install plugin from ZIP file? = Įdiekite plėtinį iš ZIP failo? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Instaliuota! +Supported games: = Palaikomi žaidimai: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = ZIP failas diff --git a/assets/lang/ms_MY.ini b/assets/lang/ms_MY.ini index 670ec52a7a..2ced9cc08c 100644 --- a/assets/lang/ms_MY.ini +++ b/assets/lang/ms_MY.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Pasang Install game from ZIP file? = Pasang permainan dari fail ZIP? Install into folder = Install into folder +Install plugin from ZIP file? = Pasang pemalam dari fail ZIP? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Dipasang! +Supported games: = Permainan yang disokong: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = Fail ZIP diff --git a/assets/lang/nl_NL.ini b/assets/lang/nl_NL.ini index ca75a37c5b..2599865413 100644 --- a/assets/lang/nl_NL.ini +++ b/assets/lang/nl_NL.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Installeren Install game from ZIP file? = Game installeren vanuit het ZIP-bestand? Install into folder = Install into folder +Install plugin from ZIP file? = Plugin installeren vanaf ZIP-bestand? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Installatie voltooid! +Supported games: = Ondersteunde spellen: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = ZIP-bestand diff --git a/assets/lang/no_NO.ini b/assets/lang/no_NO.ini index c763e09460..79c72fc8e8 100644 --- a/assets/lang/no_NO.ini +++ b/assets/lang/no_NO.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Install Install game from ZIP file? = Install game from ZIP file? Install into folder = Install into folder +Install plugin from ZIP file? = Installer plugin fra ZIP-fil? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Installed! +Supported games: = Støttede spill: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = ZIP-fil diff --git a/assets/lang/pl_PL.ini b/assets/lang/pl_PL.ini index ad5622e757..cc9b7bbc71 100644 --- a/assets/lang/pl_PL.ini +++ b/assets/lang/pl_PL.ini @@ -782,9 +782,11 @@ Import savedata from ZIP file = Zaimportuj pliki zapisu z pliku ZIP Install = Zainstaluj Install game from ZIP file? = Zainstalować grę z pliku ZIP? Install into folder = Zainstaluj do folderu +Install plugin from ZIP file? = Zainstaluj wtyczkę z pliku ZIP? # AI translated Install textures from ZIP file? = Czy zainstalować teksturę z archiwum ZIP? Installation failed = Instalacja zakończona porażką Installed! = Zainstalowano! +Supported games: = Obsługiwane gry: # AI translated Texture pack doesn't support install = Paczka tekstur nie obsługuje instalacji Zip archive corrupt = Niepoprawne archiwum ZIP ZIP file = Plik ZIP diff --git a/assets/lang/pt_BR.ini b/assets/lang/pt_BR.ini index dcd38dcd94..43868b67bb 100644 --- a/assets/lang/pt_BR.ini +++ b/assets/lang/pt_BR.ini @@ -802,9 +802,11 @@ Import savedata from ZIP file = Importar dados salvos do arquivo ZIP Install = Instalar Install game from ZIP file? = Instalar o jogo do arquivo ZIP? Install into folder = Instalar na pasta +Install plugin from ZIP file? = Instalar plugin a partir do arquivo ZIP? # AI translated Install textures from ZIP file? = Instalar as texturas do arquivo ZIP? Installation failed = A instalação falhou Installed! = Instalado! +Supported games: = Jogos suportados: # AI translated Texture pack doesn't support install = O pacote das texturas não suporta a instalação Zip archive corrupt = Arquivo ZIP corrompido ZIP file = Arquivo ZIP diff --git a/assets/lang/pt_PT.ini b/assets/lang/pt_PT.ini index 3613ee11be..d745226953 100644 --- a/assets/lang/pt_PT.ini +++ b/assets/lang/pt_PT.ini @@ -803,9 +803,11 @@ Import savedata from ZIP file = Importar dados salvos do ficheiro .zip Install = Instalar Install game from ZIP file? = Instalar o jogo do ficheiro .zip? Install into folder = Instalar para pasta +Install plugin from ZIP file? = Instalar plugin a partir do ficheiro ZIP? # AI translated Install textures from ZIP file? = Instalar as texturas do ficheiro .zip? Installation failed = Erro ao instalar Installed! = Instalado! +Supported games: = Jogos suportados: # AI translated Texture pack doesn't support install = O pacote de texturas não é compatível com a instalação. Zip archive corrupt = Ficheiro .zip corrompido. ZIP file = Ficheiro .zip diff --git a/assets/lang/ro_RO.ini b/assets/lang/ro_RO.ini index bc254dfa84..42c5a15342 100644 --- a/assets/lang/ro_RO.ini +++ b/assets/lang/ro_RO.ini @@ -779,9 +779,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Instalează Install game from ZIP file? = Instalează joc din fișier ZIP? Install into folder = Install into folder +Install plugin from ZIP file? = Instalare plugin din fișier ZIP? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Instalat! +Supported games: = Jocuri suportate: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = Fișier ZIP diff --git a/assets/lang/ru_RU.ini b/assets/lang/ru_RU.ini index e79db110dc..d537f64ec4 100644 --- a/assets/lang/ru_RU.ini +++ b/assets/lang/ru_RU.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Импорт сохранённых данных Install = Установить Install game from ZIP file? = Установить игру из файла ZIP? Install into folder = Установить в папку +Install plugin from ZIP file? = Установить плагин из ZIP-файла? # AI translated Install textures from ZIP file? = Установить текстуры из файла ZIP? Installation failed = Не удалось установить Installed! = Установлено! +Supported games: = Поддерживаемые игры: # AI translated Texture pack doesn't support install = Набор текстур не поддерживает установку Zip archive corrupt = ZIP-архив повреждён ZIP file = Файл ZIP diff --git a/assets/lang/sv_SE.ini b/assets/lang/sv_SE.ini index b6833baa98..ecb08f0470 100644 --- a/assets/lang/sv_SE.ini +++ b/assets/lang/sv_SE.ini @@ -779,9 +779,11 @@ Import savedata from ZIP file = Importera sparade data från ZIP-fil Install = Installera Install game from ZIP file? = Installera spel från ZIP-fil? Install into folder = Installera i mapp +Install plugin from ZIP file? = Installera plugin från ZIP-fil? # AI translated Install textures from ZIP file? = Installera texturer från ZIP-fil? Installation failed = Installation misslyckades Installed! = Installerad! +Supported games: = Stödda spel: # AI translated Texture pack doesn't support install = Texturpaketet stöder ej installation Zip archive corrupt = ZIP-filen är korrupt ZIP file = ZIP-fil diff --git a/assets/lang/tg_PH.ini b/assets/lang/tg_PH.ini index 5e9fbf35f1..b98b6f584d 100644 --- a/assets/lang/tg_PH.ini +++ b/assets/lang/tg_PH.ini @@ -779,9 +779,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Install Install game from ZIP file? = I-install ang laro mula sa ZIP file? Install into folder = Install into folder +Install plugin from ZIP file? = Насбт кардани плагин аз файли ZIP? # AI translated Install textures from ZIP file? = I-install ang texture mula sa ZIP file? Installation failed = Hindi mainstall Installed! = Naka-install na! +Supported games: = Бозии дастгиришударо: # AI translated Texture pack doesn't support install = Hindi sinusuportahan ng texture pack ang pag-install Zip archive corrupt = Sira ang ZIP archive ZIP file = ZIP файл diff --git a/assets/lang/th_TH.ini b/assets/lang/th_TH.ini index e0134f32fb..a19f542fc2 100644 --- a/assets/lang/th_TH.ini +++ b/assets/lang/th_TH.ini @@ -795,9 +795,11 @@ Import savedata from ZIP file = นำเข้าข้อมูลเซฟเ Install = ติดตั้ง Install game from ZIP file? = ต้องการติดตั้งเกมจากไฟล์ ZIP เลยหรือไม่? Install into folder = Install into folder +Install plugin from ZIP file? = ติดตั้งปลั๊กอินจากไฟล์ ZIP? # AI translated Install textures from ZIP file? = ต้องการติดตั้งเท็คเจอร์จากไฟล์ ZIP เลยหรือไม่? Installation failed = การติดตั้งล้มเหลว Installed! = ติดตั้งเสร็จสิ้น! +Supported games: = เกมที่รองรับ: # AI translated Texture pack doesn't support install = เท็คเจอร์แพ็คนี้ไม่รองรับการติดตั้ง Zip archive corrupt = ไฟล์ ZIP ไม่สมบูรณ์ (เสียจ้า) ZIP file = ไฟล์ ZIP diff --git a/assets/lang/tr_TR.ini b/assets/lang/tr_TR.ini index e882d602cb..06eb6d81d6 100644 --- a/assets/lang/tr_TR.ini +++ b/assets/lang/tr_TR.ini @@ -780,9 +780,11 @@ Import savedata from ZIP file = Kayıtlı verileri ZIP dosyasından içe aktar Install = Kur Install game from ZIP file? = ZIP dosyasından oyun kurulsun mu? Install into folder = Klasöre kur +Install plugin from ZIP file? = ZIP dosyasından eklenti yükle? # AI translated Install textures from ZIP file? = ZIP dosyasından dokular kurulsun mu? Installation failed = Kurulum başarısız Installed! = Kuruldu! +Supported games: = Desteklenen oyunlar: # AI translated Texture pack doesn't support install = Doku paketi kurulumu desteklemiyor Zip archive corrupt = ZIP arşivi bozuk ZIP file = ZIP dosyası diff --git a/assets/lang/uk_UA.ini b/assets/lang/uk_UA.ini index b8a26afe32..74a32eb235 100644 --- a/assets/lang/uk_UA.ini +++ b/assets/lang/uk_UA.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Імпорт збережених даних і Install = Встановити Install game from ZIP file? = Встановити гру з ZIP-файлу? Install into folder = Встановити в папку +Install plugin from ZIP file? = Встановити плагін з ZIP-файлу? # AI translated Install textures from ZIP file? = Встановити текстури з ZIP-файлу? Installation failed = Помилка встановлення Installed! = Встановлено! +Supported games: = Підтримувані ігри: # AI translated Texture pack doesn't support install = Пакет текстур не підтримує встановлення Zip archive corrupt = ZIP-архів пошкоджено ZIP file = ZIP файл diff --git a/assets/lang/vi_VN.ini b/assets/lang/vi_VN.ini index 96eef8770c..51e4f9767d 100644 --- a/assets/lang/vi_VN.ini +++ b/assets/lang/vi_VN.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = Import savedata from ZIP file Install = Cài đặt Install game from ZIP file? = Cài đặt trò chơi từ file ZIP? Install into folder = Install into folder +Install plugin from ZIP file? = Cài đặt plugin từ tệp ZIP? # AI translated Install textures from ZIP file? = Install textures from ZIP file? Installation failed = Installation failed Installed! = Đã cài xong! +Supported games: = Trò chơi được hỗ trợ: # AI translated Texture pack doesn't support install = Texture pack doesn't support install Zip archive corrupt = ZIP archive corrupt ZIP file = Tập tin ZIP diff --git a/assets/lang/zh_CN.ini b/assets/lang/zh_CN.ini index 40fff9973e..dd2d4a3270 100644 --- a/assets/lang/zh_CN.ini +++ b/assets/lang/zh_CN.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = 从ZIP文件导入保存的数据 Install = 安装 Install game from ZIP file? = 从ZIP文件安装游戏? Install into folder = 在文件夹中安装 +Install plugin from ZIP file? = 从ZIP文件安装插件? # AI translated Install textures from ZIP file? = 从ZIP文件安装纹理包? Installation failed = 安装失败! Installed! = 安装完成! +Supported games: = 支持的游戏: # AI translated Texture pack doesn't support install = 这个纹理包不支持安装使用 Zip archive corrupt = ZIP文档损坏 ZIP file = ZIP 文件 diff --git a/assets/lang/zh_TW.ini b/assets/lang/zh_TW.ini index 5c01baa75f..3c37224e18 100644 --- a/assets/lang/zh_TW.ini +++ b/assets/lang/zh_TW.ini @@ -778,9 +778,11 @@ Import savedata from ZIP file = 從ZIP檔案匯入儲存的資料 Install = 安裝 Install game from ZIP file? = 從 ZIP 檔案安裝遊戲? Install into folder = 在資料夾中安裝 +Install plugin from ZIP file? = 從ZIP檔案安裝插件? # AI translated Install textures from ZIP file? = 從 ZIP 檔案安裝紋理? Installation failed = 安裝失敗 Installed! = 已安裝! +Supported games: = 支援的遊戲: # AI translated Texture pack doesn't support install = 紋理套件不支援安裝 Zip archive corrupt = ZIP 封存損毀 ZIP file = ZIP 檔案 diff --git a/ext/libchdr b/ext/libchdr index 7891cbee2e..8bba7745d7 160000 --- a/ext/libchdr +++ b/ext/libchdr @@ -1 +1 @@ -Subproject commit 7891cbee2e8d7967bf8b6c24f091d2c5a53d8cfc +Subproject commit 8bba7745d758627258b315997a860039244cedaf