diff --git a/AUTOPLUG2/git/shared.lua b/AUTOPLUG2/git/shared.lua
index 9c55dd8e..928b7ea8 100644
--- a/AUTOPLUG2/git/shared.lua
+++ b/AUTOPLUG2/git/shared.lua
@@ -4,5 +4,5 @@ APP_PROJECT = "AutoPlugin2"
APP_FOLDER = "AUTOPLUG2"
APP_VERSION_MAJOR = 0x01 -- major.minor
-APP_VERSION_MINOR = 0x03
+APP_VERSION_MINOR = 0x04
APP_VERSION = ((APP_VERSION_MAJOR << 0x18) | (APP_VERSION_MINOR << 0x10)) -- Union Binary
diff --git a/AUTOPLUG2/lang/CHINESE_S.lua b/AUTOPLUG2/lang/CHINESE_S.lua
index e2c9dfb0..0d174573 100644
--- a/AUTOPLUG2/lang/CHINESE_S.lua
+++ b/AUTOPLUG2/lang/CHINESE_S.lua
@@ -190,7 +190,8 @@ CHINESE_S["TRANSIMPOSE_LEVEL"] = "设置级别"
--Translate
CHINESE_S["TRANSLATE_ENGLISH_TITLE"] = "英文方案: "
-CHINESE_S["TRANSLATE_CURRENT_TITLE"] = "当前方案: "
+CHINESE_S["TRANSLATE_CURRENT_TITLE"] = "System Language: "
+CHINESE_S["TRANSLATE_CURRENT_AUTOPLUGIN"] = "AutoPlugin Language: "
CHINESE_S["TRANSLATE_YOUR_TITLE"] = "您的方案: "
CHINESE_S["SAVE_TRANSLATIONS"] = "保存翻译"
CHINESE_S["EXIT_SAVE_TRANSLATIONS"] = "翻译尚未保存. 是否在退出前保存?"
@@ -327,6 +328,7 @@ CHINESE_S["INSTALLP_DESC_QASCREEN"] = "适用于 PSVita 的高
CHINESE_S["INSTALLP_DESC_NOSHAREDFB"] = "对于在系统模式下运行但使用标准帧缓冲实现的自制应用程序,允许您在挂起恢复周期之后绕过共享的帧缓冲问题的插件."
CHINESE_S["INSTALLP_DESC_TRIMPOSE"] = "PS Vita 插件,用于使强制菜单 (长按 PS 按钮出现的那个) 透明."
CHINESE_S["INSTALLP_DESC_QUIETSHOT"] = "在截屏,录像,拍照及拍摄全景照时,关闭快门音效.适用于 Playstation Vita 以及 PlayStation TV."
+CHINESE_S["INSTALLP_DESC_FTPEVERYWHERE"] = "ftpeverywhere - Always running background FTP server plugin."
--ALL
CHINESE_S["INSTALLP_DESC_YAMT"] = "适用于 PSVita/PSTV 的又一款分区重新挂载内核插件 (依赖 Enso, 仅兼容 3.60 及 3.65 固件)"
@@ -356,6 +358,7 @@ CHINESE_S["INSTALLP_DESC_TRACKPLUGMOD"] = "适用于 PSV 的游戏
CHINESE_S["INSTALLP_DESC_PSONESCROT"] = "为PS1游戏拍摄PNG格式截屏. [在快捷菜单中打开设置,如果使用 Adrenaline 请打开官方设置,选择截屏(screenshot)]"
CHINESE_S["INSTALLP_DESC_CPUAFFCHANGER"] = "此插件将 PSVita 系统应用程序的 CPU 亲和力掩码指定为所有用户核心,从而提高程序的性能."
CHINESE_S["INSTALLP_DESC_SHARPSCALE"] = "此插件令 PSTV 支持原生 960x544 HDMI 输出."
+CHINESE_S["INSTALLP_DESC_RAPIDMENU"] = "Reduce quick menu open time from 2 seconds to 200 milliseconds."
--*NPXS10013
CHINESE_S["INSTALLP_DESC_PS4LINK"] = "大变革插件,用于强制选择喜欢的遥控操作按键配置方案"
diff --git a/AUTOPLUG2/lang/ENGLISH_US.lua b/AUTOPLUG2/lang/ENGLISH_US.lua
index 1b4b26e1..db33dd17 100644
--- a/AUTOPLUG2/lang/ENGLISH_US.lua
+++ b/AUTOPLUG2/lang/ENGLISH_US.lua
@@ -190,7 +190,8 @@ ENGLISH_US["TRANSIMPOSE_LEVEL"] = "Level Set"
--Translate
ENGLISH_US["TRANSLATE_ENGLISH_TITLE"] = "English: "
-ENGLISH_US["TRANSLATE_CURRENT_TITLE"] = "Current: "
+ENGLISH_US["TRANSLATE_CURRENT_TITLE"] = "System Language: "
+ENGLISH_US["TRANSLATE_CURRENT_AUTOPLUGIN"] = "AutoPlugin Language: "
ENGLISH_US["TRANSLATE_YOUR_TITLE"] = "Yours: "
ENGLISH_US["SAVE_TRANSLATIONS"] = "Save Translations"
ENGLISH_US["EXIT_SAVE_TRANSLATIONS"] = "Translation not saved. Save before exiting?"
@@ -327,6 +328,7 @@ ENGLISH_US["INSTALLP_DESC_QASCREEN"] = "High quality screenshot
ENGLISH_US["INSTALLP_DESC_NOSHAREDFB"] = "Allows you to bypass shared framebuffer issues after suspend-resume cycle for homebrew applications that run in system mode. but use standard framebuffer implementation."
ENGLISH_US["INSTALLP_DESC_TRIMPOSE"] = "Plugin for PS Vita that makes impose menu (the one that appears after long PS button press) transparent."
ENGLISH_US["INSTALLP_DESC_QUIETSHOT"] = "Silences the shutter sound when taking a screenshot, photo, video, or panoramic photo. Works on both the Playstation Vita and PlayStation TV."
+ENGLISH_US["INSTALLP_DESC_FTPEVERYWHERE"] = "ftpeverywhere - Always running background FTP server plugin."
--ALL
ENGLISH_US["INSTALLP_DESC_YAMT"] = "Yet another (re)mount tool kernel plugin for PSVita/PSTV (Requires Enso, compatible ONLY with firmware 3.60 and 3.65"
@@ -356,6 +358,7 @@ ENGLISH_US["INSTALLP_DESC_TRACKPLUGMOD"] = "Playtime tracker plugin
ENGLISH_US["INSTALLP_DESC_PSONESCROT"] = "Take proper PNG screenshots for PS1 games (Open settings in the quick menu, Open official settings if using adrenaline, Select screenshot)."
ENGLISH_US["INSTALLP_DESC_CPUAFFCHANGER"] = "This plugin changes CPU affinity mask of PS Vita system applications to all user core,which increases their performance."
ENGLISH_US["INSTALLP_DESC_SHARPSCALE"] = "Native 960x544 HDMI output for PSTV."
+ENGLISH_US["INSTALLP_DESC_RAPIDMENU"] = "Reduce quick menu open time from 2 seconds to 200 milliseconds."
--*NPXS10013
ENGLISH_US["INSTALLP_DESC_PS4LINK"] = "taiHEN plugin that allows to force preferred Remote Play button configuration"
diff --git a/AUTOPLUG2/lang/FRENCH.lua b/AUTOPLUG2/lang/FRENCH.lua
index 5ef2e64a..9b81abd5 100644
--- a/AUTOPLUG2/lang/FRENCH.lua
+++ b/AUTOPLUG2/lang/FRENCH.lua
@@ -190,7 +190,8 @@ FRENCH["TRANSIMPOSE_LEVEL"] = "Définition du niveau de tr
--Translate
FRENCH["TRANSLATE_ENGLISH_TITLE"] = "Anglais : "
-FRENCH["TRANSLATE_CURRENT_TITLE"] = "Actuel : "
+FRENCH["TRANSLATE_CURRENT_TITLE"] = "System Language: "
+FRENCH["TRANSLATE_CURRENT_AUTOPLUGIN"] = "AutoPlugin Language: "
FRENCH["TRANSLATE_YOUR_TITLE"] = "Le votre: "
FRENCH["SAVE_TRANSLATIONS"] = "Enregistrer la traduction"
FRENCH["EXIT_SAVE_TRANSLATIONS"] = "Traduction non enregistré. Enregistrer avant de quitter ?"
@@ -327,6 +328,7 @@ FRENCH["INSTALLP_DESC_QASCREEN"] = "Plugin de capture d'écran
FRENCH["INSTALLP_DESC_NOSHAREDFB"] = "Permet de contourner les problèmes de framebuffer partagé après le cycle de mise en veille-reprise pour les applications et homebrews qui s'exécutent en mode système, mais utilisent une implémentation de framebuffer standard."
FRENCH["INSTALLP_DESC_TRIMPOSE"] = "Plugin pour PS Vita qui rend le menu imposé (celui qui apparaît après une longue pression sur le bouton PS) transparent."
FRENCH["INSTALLP_DESC_QUIETSHOT"] = "Désactive le son de l'obturateur lors de la prise d'une capture d'écran, d'une photo, d'une vidéo ou d'une photo panoramique. Fonctionne à la fois sur la Playstation Vita et la PlayStation TV."
+FRENCH["INSTALLP_DESC_FTPEVERYWHERE"] = "ftpeverywhere - Always running background FTP server plugin."
--ALL
FRENCH["INSTALLP_DESC_YAMT"] = "Encore un autre plugin Kernel de l'outil de (re)montage pour PSVita/PSTV (nécessite Enso, compatible UNIQUEMENT avec les firmware 3.60 et 3.65"
@@ -356,6 +358,7 @@ FRENCH["INSTALLP_DESC_TRACKPLUGMOD"] = "Plugin PSVita qui calcule l
FRENCH["INSTALLP_DESC_PSONESCROT"] = "Faites des captures d'écran PNG appropriées pour les jeux PS1 (Ouvrez les paramètres dans le menu rapide, Ouvrez les paramètres officiels si vous utilisez l'adrénaline, Sélectionnez la capture d'écran)."
FRENCH["INSTALLP_DESC_CPUAFFCHANGER"] = "Ce plugin modifie le masque d'affinité de l'unité centrale des applications du système PS Vita pour tous les noyaux d'utilisateurs, ce qui augmente leurs performances."
FRENCH["INSTALLP_DESC_SHARPSCALE"] = "Sortie HDMI 960x544 pour les PSTV."
+FRENCH["INSTALLP_DESC_RAPIDMENU"] = "Reduce quick menu open time from 2 seconds to 200 milliseconds."
--*NPXS10013
FRENCH["INSTALLP_DESC_PS4LINK"] = "plugin taiHEN qui permet de forcer la configuration préférée des boutons de lecture à distance"
diff --git a/AUTOPLUG2/lang/GERMAN.lua b/AUTOPLUG2/lang/GERMAN.lua
index bd280c2e..baf67da1 100644
--- a/AUTOPLUG2/lang/GERMAN.lua
+++ b/AUTOPLUG2/lang/GERMAN.lua
@@ -190,7 +190,8 @@ GERMAN["TRANSIMPOSE_LEVEL"] = "Tranzparenzstufe eingestell
--Translate
GERMAN["TRANSLATE_ENGLISH_TITLE"] = "Englisch: "
-GERMAN["TRANSLATE_CURRENT_TITLE"] = "Aktuell: "
+GERMAN["TRANSLATE_CURRENT_TITLE"] = "System Language: "
+GERMAN["TRANSLATE_CURRENT_AUTOPLUGIN"] = "AutoPlugin Language: "
GERMAN["TRANSLATE_YOUR_TITLE"] = "Deine: "
GERMAN["SAVE_TRANSLATIONS"] = "Übersetzung speichern"
GERMAN["EXIT_SAVE_TRANSLATIONS"] = "Übersetzung nicht gespeichert. Vor dem verlassen Speichern?"
@@ -327,6 +328,7 @@ GERMAN["INSTALLP_DESC_QASCREEN"] = "Hochwertiges Screenshot Plu
GERMAN["INSTALLP_DESC_NOSHAREDFB"] = "Ermöglicht das Umgehen von Problemen mit gemeinsam genutzten Bildspeichern nach dem Anhalten des Wiederaufnahmezyklus für Homebrew Anwendungen, die im Systemmodus ausgeführt werden. Verwenden Sie jedoch die Standard Bildspeicher Implementierung."
GERMAN["INSTALLP_DESC_TRIMPOSE"] = "Ein Plugin für PS Vita, dass das Schnellmenü (das nach langem Drücken der PS-Taste angezeigt wird) transparent macht."
GERMAN["INSTALLP_DESC_QUIETSHOT"] = "Silences the shutter sound when taking a screenshot, photo, video, or panoramic photo. Works on both the Playstation Vita and PlayStation TV."
+GERMAN["INSTALLP_DESC_FTPEVERYWHERE"] = "ftpeverywhere - Always running background FTP server plugin."
--ALL
GERMAN["INSTALLP_DESC_YAMT"] = "Ein anderes Kernel Plugin um den Speicher einer Partition zu zuweisen, für PSVita/PSTV (Benötigt Enso, NUR mit der Firmware 3.60 und 3.65"
@@ -356,6 +358,7 @@ GERMAN["INSTALLP_DESC_TRACKPLUGMOD"] = "Playtime tracker plugin for
GERMAN["INSTALLP_DESC_PSONESCROT"] = "Take proper PNG screenshots for PS1 games (Open settings in the quick menu, Open official settings if using adrenaline, Select screenshot)."
GERMAN["INSTALLP_DESC_CPUAFFCHANGER"] = "This plugin changes CPU affinity mask of PS Vita system applications to all user core,which increases their performance."
GERMAN["INSTALLP_DESC_SHARPSCALE"] = "Native 960x544 HDMI output for PSTV."
+GERMAN["INSTALLP_DESC_RAPIDMENU"] = "Reduce quick menu open time from 2 seconds to 200 milliseconds."
--*NPXS10013
GERMAN["INSTALLP_DESC_PS4LINK"] = "taiHEN Plugin, mit dem die bevorzugte Tasten Konfiguration für Remote Play erzwungen werden kann."
diff --git a/AUTOPLUG2/lang/ITALIAN.lua b/AUTOPLUG2/lang/ITALIAN.lua
index 9faa5cff..9498f230 100644
--- a/AUTOPLUG2/lang/ITALIAN.lua
+++ b/AUTOPLUG2/lang/ITALIAN.lua
@@ -190,7 +190,8 @@ ITALIAN["TRANSIMPOSE_LEVEL"] = "Modifica livello"
--Translate
ITALIAN["TRANSLATE_ENGLISH_TITLE"] = "Inglese: "
-ITALIAN["TRANSLATE_CURRENT_TITLE"] = "Attuale: "
+ITALIAN["TRANSLATE_CURRENT_TITLE"] = "System Language: "
+ITALIAN["TRANSLATE_CURRENT_AUTOPLUGIN"] = "AutoPlugin Language: "
ITALIAN["TRANSLATE_YOUR_TITLE"] = "La tua traduzione: "
ITALIAN["SAVE_TRANSLATIONS"] = "Salva le traduzioni"
ITALIAN["EXIT_SAVE_TRANSLATIONS"] = "Traduzione non salvata. Salvare prima di uscire?"
@@ -327,6 +328,7 @@ ITALIAN["INSTALLP_DESC_QASCREEN"] = "Plugin che permette di
ITALIAN["INSTALLP_DESC_NOSHAREDFB"] = "Consente di aggirare i problemi di framebuffer condivisi dopo il ciclo di sospensione/ripresa per le applicazioni homebrew eseguite in modalità di sistema. ma usa l'implementazione standard di framebuffer."
ITALIAN["INSTALLP_DESC_TRIMPOSE"] = "Plugin per PS Vita che rende trasparente il menu RAPIDO (quello che appare dopo aver premuto a lungo il pulsante PS)."
ITALIAN["INSTALLP_DESC_QUIETSHOT"] = "Silenzia il suono di default quando si scatta uno screenshot, una foto, un video o una foto panoramica. Funziona sia su Playstation Vita che su PlayStation TV."
+ITALIAN["INSTALLP_DESC_FTPEVERYWHERE"] = "ftpeverywhere - Always running background FTP server plugin."
--ALL
ITALIAN["INSTALLP_DESC_YAMT"] = "Ancora un altro plugin(SD2VITA) per PSVita/PSTV (richiede Enso, compatibile SOLO con firmware 3.60 e 3.65)"
@@ -356,6 +358,7 @@ ITALIAN["INSTALLP_DESC_TRACKPLUGMOD"] = "Semplice plugin che ti
ITALIAN["INSTALLP_DESC_PSONESCROT"] = "Take proper PNG screenshots for PS1 games (Open settings in the quick menu, Open official settings if using adrenaline, Select screenshot)."
ITALIAN["INSTALLP_DESC_CPUAFFCHANGER"] = "This plugin changes CPU affinity mask of PS Vita system applications to all user core,which increases their performance."
ITALIAN["INSTALLP_DESC_SHARPSCALE"] = "Native 960x544 HDMI output for PSTV."
+ITALIAN["INSTALLP_DESC_RAPIDMENU"] = "Reduce quick menu open time from 2 seconds to 200 milliseconds."
--*NPXS10013
ITALIAN["INSTALLP_DESC_PS4LINK"] = "Questo plugin consente di forzare la configurazione preferita del pulsante di Riproduzione remota"
diff --git a/AUTOPLUG2/lang/JAPANESE.lua b/AUTOPLUG2/lang/JAPANESE.lua
index 006ebd0c..525a7cd6 100644
--- a/AUTOPLUG2/lang/JAPANESE.lua
+++ b/AUTOPLUG2/lang/JAPANESE.lua
@@ -190,7 +190,8 @@ JAPANESE["TRANSIMPOSE_LEVEL"] = "Level Set"
--Translate
JAPANESE["TRANSLATE_ENGLISH_TITLE"] = "英語: "
-JAPANESE["TRANSLATE_CURRENT_TITLE"] = "現在: "
+JAPANESE["TRANSLATE_CURRENT_TITLE"] = "System Language: "
+JAPANESE["TRANSLATE_CURRENT_AUTOPLUGIN"] = "AutoPlugin Language: "
JAPANESE["TRANSLATE_YOUR_TITLE"] = "Yours: "
JAPANESE["SAVE_TRANSLATIONS"] = "翻訳を保存"
JAPANESE["EXIT_SAVE_TRANSLATIONS"] = "翻訳内容は保存されませんでした。 終了する前に保存しますか?"
@@ -327,6 +328,7 @@ JAPANESE["INSTALLP_DESC_QASCREEN"] = "PSVita用の高品質
JAPANESE["INSTALLP_DESC_NOSHAREDFB"] = "システムモードで実行される自作アプリケーションのサスペンドと再開のサイクル後、共有フレームバッファの問題を回避できます。 ただし、標準のフレームバッファ実装を使用します"
JAPANESE["INSTALLP_DESC_TRIMPOSE"] = "長押しメニュー(PSボタンを長く押した後に表示されるメニュー)を透明にするPSVitaのプラグイン"
JAPANESE["INSTALLP_DESC_QUIETSHOT"] = "Silences the shutter sound when taking a screenshot, photo, video, or panoramic photo. Works on both the Playstation Vita and PlayStation TV."
+JAPANESE["INSTALLP_DESC_FTPEVERYWHERE"] = "ftpeverywhere - Always running background FTP server plugin."
--ALL
JAPANESE["INSTALLP_DESC_YAMT"] = "PSVita/PSTV用の別の(再)マウントツールカーネルプラグイン (Ensoが必要、ファームウェア3.60および3.65とのみ互換性あり)"
@@ -356,6 +358,7 @@ JAPANESE["INSTALLP_DESC_TRACKPLUGMOD"] = "Playtime tracker plugin
JAPANESE["INSTALLP_DESC_PSONESCROT"] = "Take proper PNG screenshots for PS1 games (Open settings in the quick menu, Open official settings if using adrenaline, Select screenshot)."
JAPANESE["INSTALLP_DESC_CPUAFFCHANGER"] = "This plugin changes CPU affinity mask of PS Vita system applications to all user core,which increases their performance."
JAPANESE["INSTALLP_DESC_SHARPSCALE"] = "Native 960x544 HDMI output for PSTV."
+JAPANESE["INSTALLP_DESC_RAPIDMENU"] = "Reduce quick menu open time from 2 seconds to 200 milliseconds."
--*NPXS10013
JAPANESE["INSTALLP_DESC_PS4LINK"] = "優先リモート再生ボタンの設定を強制することができるtaiHENプラグイン"
diff --git a/AUTOPLUG2/lang/Langdatabase.lua b/AUTOPLUG2/lang/Langdatabase.lua
index 1eb8506c..17efb548 100644
--- a/AUTOPLUG2/lang/Langdatabase.lua
+++ b/AUTOPLUG2/lang/Langdatabase.lua
@@ -1,11 +1,11 @@
Langs = {
-{ id = "ENGLISH_US", version = "01.07", author = "Yoti" },
-{ id = "ITALIAN", version = "01.09", author = "TheHeroGAC" },
-{ id = "JAPANESE", version = "01.07", author = "Kouchan" },
-{ id = "SPANISH", version = "01.10", author = "gvaldebenit" },
-{ id = "CHINESE_S", version = "01.11", author = "yexun1995" },
-{ id = "FRENCH", version = "01.11", author = "Chronoss09" },
-{ id = "GERMAN", version = "01.07", author = "Schn1ek3" },
-{ id = "RUSSIAN", version = "01.10", author = "Yoti" },
-{ id = "POLISH", version = "01.06", author = "Gameplay World's" }
+{ id = "ENGLISH_US", version = "01.08", author = "Yoti" },
+{ id = "ITALIAN", version = "01.10", author = "TheHeroGAC" },
+{ id = "JAPANESE", version = "01.08", author = "Kouchan" },
+{ id = "SPANISH", version = "01.11", author = "gvaldebenit" },
+{ id = "CHINESE_S", version = "01.12", author = "yexun1995" },
+{ id = "FRENCH", version = "01.12", author = "Chronoss09" },
+{ id = "GERMAN", version = "01.08", author = "Schn1ek3" },
+{ id = "RUSSIAN", version = "01.11", author = "Yoti" },
+{ id = "POLISH", version = "01.07", author = "Gameplay World's" },
}
diff --git a/AUTOPLUG2/lang/POLISH.lua b/AUTOPLUG2/lang/POLISH.lua
index 5d199a24..d4ad7874 100644
--- a/AUTOPLUG2/lang/POLISH.lua
+++ b/AUTOPLUG2/lang/POLISH.lua
@@ -190,7 +190,8 @@ POLISH["TRANSIMPOSE_LEVEL"] = "Level Set"
--Translate
POLISH["TRANSLATE_ENGLISH_TITLE"] = "Polski: "
-POLISH["TRANSLATE_CURRENT_TITLE"] = "Obecny: "
+POLISH["TRANSLATE_CURRENT_TITLE"] = "System Language: "
+POLISH["TRANSLATE_CURRENT_AUTOPLUGIN"] = "AutoPlugin Language: "
POLISH["TRANSLATE_YOUR_TITLE"] = "Twoje: "
POLISH["SAVE_TRANSLATIONS"] = "Zapisano tłumaczenie"
POLISH["EXIT_SAVE_TRANSLATIONS"] = "Tłumaczenie nie zapisane, czy napewno chcesz wyjść?"
@@ -327,6 +328,7 @@ POLISH["INSTALLP_DESC_QASCREEN"] = "Wtyczka wysokiej jakości z
POLISH["INSTALLP_DESC_NOSHAREDFB"] = "Pozwala ominąć wspólne problemy z buforowaniem ramki po cyklu zawieszenia-wznowienia dla aplikacji homebrew, które działają w trybie systemowym. Ale używa standardowej implementacji bufora ramki."
POLISH["INSTALLP_DESC_TRIMPOSE"] = "Wtyczka do PS Vita, która sprawia, że nakładka menu (to, które pojawia się po długim naciśnięciu przycisku PS) jest przezroczyste."
POLISH["INSTALLP_DESC_QUIETSHOT"] = "Silences the shutter sound when taking a screenshot, photo, video, or panoramic photo. Works on both the Playstation Vita and PlayStation TV."
+POLISH["INSTALLP_DESC_FTPEVERYWHERE"] = "ftpeverywhere - Always running background FTP server plugin."
--ALL
POLISH["INSTALLP_DESC_YAMT"] = "Yet another (re)mount tool kernel plugin for PSVita/PSTV (Requires Enso, compatible ONLY with firmware 3.60 and 3.65"
@@ -356,6 +358,7 @@ POLISH["INSTALLP_DESC_TRACKPLUGMOD"] = "Playtime tracker plugin for
POLISH["INSTALLP_DESC_PSONESCROT"] = "Take proper PNG screenshots for PS1 games (Open settings in the quick menu, Open official settings if using adrenaline, Select screenshot)."
POLISH["INSTALLP_DESC_CPUAFFCHANGER"] = "This plugin changes CPU affinity mask of PS Vita system applications to all user core,which increases their performance."
POLISH["INSTALLP_DESC_SHARPSCALE"] = "Native 960x544 HDMI output for PSTV."
+POLISH["INSTALLP_DESC_RAPIDMENU"] = "Reduce quick menu open time from 2 seconds to 200 milliseconds."
--*NPXS10013
POLISH["INSTALLP_DESC_PS4LINK"] = "taiHEN plugin that allows to force preferred Remote Play button configuration"
diff --git a/AUTOPLUG2/lang/RUSSIAN.lua b/AUTOPLUG2/lang/RUSSIAN.lua
index 079487d8..934442f9 100644
--- a/AUTOPLUG2/lang/RUSSIAN.lua
+++ b/AUTOPLUG2/lang/RUSSIAN.lua
@@ -190,7 +190,8 @@ RUSSIAN["TRANSIMPOSE_LEVEL"] = "Применить уро
--Translate
RUSSIAN["TRANSLATE_ENGLISH_TITLE"] = "Английский: "
-RUSSIAN["TRANSLATE_CURRENT_TITLE"] = "Сейчас выбран: "
+RUSSIAN["TRANSLATE_CURRENT_TITLE"] = "System Language: "
+RUSSIAN["TRANSLATE_CURRENT_AUTOPLUGIN"] = "AutoPlugin Language: "
RUSSIAN["TRANSLATE_YOUR_TITLE"] = "Ваш: "
RUSSIAN["SAVE_TRANSLATIONS"] = "Сохранить переводы"
RUSSIAN["EXIT_SAVE_TRANSLATIONS"] = "Изменения не сохранены. Сохранить перед выходом?"
@@ -327,6 +328,7 @@ RUSSIAN["INSTALLP_DESC_QASCREEN"] = "Плагин убирае
RUSSIAN["INSTALLP_DESC_NOSHAREDFB"] = "Плагин обходит проблемы при использовании общего кадрового буфера в самописных приложениях, работающих в режиме системных"
RUSSIAN["INSTALLP_DESC_TRIMPOSE"] = "Плагин позволяет настроить прозрачность фона быстрого меню"
RUSSIAN["INSTALLP_DESC_QUIETSHOT"] = "Плагин отключает звук затвора камеры при создании скриншотов, создании обычного или панорамного снимка, а также записи видео. Поддерживается как PlayStation Vita, так и PlayStation TV."
+RUSSIAN["INSTALLP_DESC_FTPEVERYWHERE"] = "ftpeverywhere - Always running background FTP server plugin."
--ALL
RUSSIAN["INSTALLP_DESC_YAMT"] = "Удобный плагин для изменения точек монтирования устройств на прошивках 3.60 и 3.65 (необходим enso)"
@@ -356,6 +358,7 @@ RUSSIAN["INSTALLP_DESC_TRACKPLUGMOD"] = "Плагин для под
RUSSIAN["INSTALLP_DESC_PSONESCROT"] = "Создание снимков экрана без искажений в формате PNG в PS1 играх (Быстрое меню - Настройки - Снимок экрана)."
RUSSIAN["INSTALLP_DESC_CPUAFFCHANGER"] = "Плагин переносит выполнение системных приложений на все ядра процессора, за счёт чего вырастает скорость запуска и работы"
RUSSIAN["INSTALLP_DESC_SHARPSCALE"] = "Вывод родного разрешения 960x544 (в рамке) при выборе 720p и кратного масштабирования (с обрезкой нижних 8 строк) при выборе 1080i для PSTV"
+RUSSIAN["INSTALLP_DESC_RAPIDMENU"] = "Reduce quick menu open time from 2 seconds to 200 milliseconds."
--*NPXS10013
RUSSIAN["INSTALLP_DESC_PS4LINK"] = "Плагин для принудительного выбора раскладки управления при использовании функции удалённой игры"
diff --git a/AUTOPLUG2/lang/SPANISH.lua b/AUTOPLUG2/lang/SPANISH.lua
index 80c3fcf5..4e0a5f61 100644
--- a/AUTOPLUG2/lang/SPANISH.lua
+++ b/AUTOPLUG2/lang/SPANISH.lua
@@ -190,7 +190,8 @@ SPANISH["TRANSIMPOSE_LEVEL"] = "Nivel establecido"
--Translate
SPANISH["TRANSLATE_ENGLISH_TITLE"] = "Inglés: "
-SPANISH["TRANSLATE_CURRENT_TITLE"] = "Actual: "
+SPANISH["TRANSLATE_CURRENT_TITLE"] = "Idioma del Sistema: "
+SPANISH["TRANSLATE_CURRENT_AUTOPLUGIN"] = "Idioma AutoPlugin: "
SPANISH["TRANSLATE_YOUR_TITLE"] = "Tuyo: "
SPANISH["SAVE_TRANSLATIONS"] = "Guardar traducción"
SPANISH["EXIT_SAVE_TRANSLATIONS"] = "Traducción no guardada. ¿Guardar antes de salir?"
@@ -327,6 +328,7 @@ SPANISH["INSTALLP_DESC_QASCREEN"] = "Plugin para screenshots
SPANISH["INSTALLP_DESC_NOSHAREDFB"] = "Permite evitar los problemas de framebuffer compartido en homebrew que corre en modo sistema, pero ocupa la implementación estandar de framebuffer, despues de un ciclo de suspender-resumir (3.60-3.68)"
SPANISH["INSTALLP_DESC_TRIMPOSE"] = "Plugin para PS Vita que hace al al menú rápido (el que aparece al mantener presionado el botón PS) transparente"
SPANISH["INSTALLP_DESC_QUIETSHOT"] = "Silencia el sonido de obsturador al momento de hacer un screenshot (captura de pantalla), foto, video, fotos panorámicas. Funciona en PS Vita y PSTV."
+SPANISH["INSTALLP_DESC_FTPEVERYWHERE"] = "ftpeverywhere - Always running background FTP server plugin."
--ALL
SPANISH["INSTALLP_DESC_YAMT"] = "Otro Plugin de Kernel de (re)montaje para PS Vita/PlayStation TV (Requiere Enso, compatible SOLO con firmware 3.60 y 3.65"
@@ -356,6 +358,7 @@ SPANISH["INSTALLP_DESC_TRACKPLUGMOD"] = "Plugin para hacer segui
SPANISH["INSTALLP_DESC_PSONESCROT"] = "Tomar capturas de pantalla (.PNG) en juegos PSX de manera apropiada (PS + Start no funciona bien en juegos de PS1) (Abrir Ajustes en el menú rapido, Abrir Ajustes Oficial si estás usando Adrenaline, seleccionar Screenshot)"
SPANISH["INSTALLP_DESC_CPUAFFCHANGER"] = "Este Plugin cambia la Mascara de Afinidad de la CPU (Un pequeño indicador para ligar los procesos a una CPU específica) de las Aplicaciones de Sistema de PS Vita a todos los Core de Usuarios, lo que permite mejorar su rendimiento"
SPANISH["INSTALLP_DESC_SHARPSCALE"] = "Salida Nativa de 960x544 a través de HDMI en PSTV"
+SPANISH["INSTALLP_DESC_RAPIDMENU"] = "Reduce quick menu open time from 2 seconds to 200 milliseconds."
--*NPXS10013
SPANISH["INSTALLP_DESC_PS4LINK"] = "Plugin de taiHEN que permite forzar la configuración de botones preferida en Juego Remoto (PS4)"
diff --git a/AUTOPLUG2/plugins/plugins.lua b/AUTOPLUG2/plugins/plugins.lua
index e4694bd9..ca0806cb 100644
--- a/AUTOPLUG2/plugins/plugins.lua
+++ b/AUTOPLUG2/plugins/plugins.lua
@@ -50,6 +50,7 @@ plugins = {
{ name = "PSOneScrot by cuevavirus v0.1", path = "psonescrot.skprx", section = "KERNEL", version = "0001", desc = LANGUAGE["INSTALLP_DESC_PSONESCROT"], KEY = "INSTALLP_DESC_PSONESCROT", link = "https://raw.githubusercontent.com/cuevavirus/PSOneScrot/master/README.md", },
{ name = "Cpu Affinity Changer by GrapheneCt v2.0", path = "CpuAffinityChanger.skprx", section = "KERNEL", version = "0001", desc = LANGUAGE["INSTALLP_DESC_CPUAFFCHANGER"], KEY = "INSTALLP_DESC_CPUAFFCHANGER", link = "https://raw.githubusercontent.com/GrapheneCt/Affinity-Changer/master/README.md", },
{ name = "Sharpscale by cuevavirus r3", path = "sharpscale.skprx", section = "KERNEL", version = "0003", desc = LANGUAGE["INSTALLP_DESC_SHARPSCALE"], KEY = "INSTALLP_DESC_SHARPSCALE", link = "https://raw.githubusercontent.com/cuevavirus/Sharpscale/master/README.md", },
+{ name = "RapidMenu by cuevavirus r1", path = "rapidmenu.skprx", section = "KERNEL", version = "0001", desc = LANGUAGE["INSTALLP_DESC_RAPIDMENU"], KEY = "INSTALLP_DESC_RAPIDMENU", link = "https://raw.githubusercontent.com/cuevavirus/Rapidmenu/master/README.md", },
--Boot_config.txt
{ name = "Custom Boot Splash by Princess of Sleeping", path = "custom_boot_splash.skprx", section = "KERNEL", version = "0001", desc = LANGUAGE["INSTALLP_DESC_CUSTOMBOOTSPLASH"], KEY = "INSTALLP_DESC_CUSTOMBOOTSPLASH", link = "https://raw.githubusercontent.com/Princess-of-Sleeping/PSP2-CustomBootSplash/master/README.md", },
@@ -76,6 +77,7 @@ plugins = {
{ name = "NoSharedFb v1.0", path = "NoSharedFb.suprx", section = "main", version = "0001", desc = LANGUAGE["INSTALLP_DESC_NOSHAREDFB"], KEY = "INSTALLP_DESC_NOSHAREDFB", link = "https://raw.githubusercontent.com/GrapheneCt/NoSharedFb/master/README.md", },
{ name = "TransparentImpose v1.0 by GrapheneCt", path = "TrImpose.suprx", section = "main", config = "trimpose.txt", configpath = "ur0:data/", version = "0001", desc = LANGUAGE["INSTALLP_DESC_TRIMPOSE"], KEY = "INSTALLP_DESC_TRIMPOSE", link = "https://raw.githubusercontent.com/GrapheneCt/TransparentImpose/master/README.md", },
{ name = "Quietshot v1.0 by cuevavirus", path = "quietshot.suprx", section = "main", path2 = "quietshot.suprx", section2 = "NPXS10095", version = "0001", desc = LANGUAGE["INSTALLP_DESC_QUIETSHOT"], KEY = "INSTALLP_DESC_QUIETSHOT", link = "https://raw.githubusercontent.com/cuevavirus/Quietshot/master/README.md", },
+{ name = "ftpeverywhere v1.0 by teakhanirons", path = "ftpeverywhere.suprx", section = "main", version = "0001", desc = LANGUAGE["INSTALLP_DESC_FTPEVERYWHERE"], KEY = "INSTALLP_DESC_FTPEVERYWHERE", link = "https://raw.githubusercontent.com/teakhanirons/ftpeverywhere/master/README.md", vpk = string.format("https://github.com/%s/%s/raw/master/vpks/%s", APP_REPO, APP_PROJECT, "NoSleep.vpk"), },
--All
{ name = "PSV-VSH MENU by joel16 v3.4", path = "vsh.suprx", section = "ALL", path2 = "kuio.skprx", section2 = "KERNEL", version = "0001", desc = LANGUAGE["INSTALLP_DESC_VSHMENU"], KEY = "INSTALLP_DESC_VSHMENU", link = "https://raw.githubusercontent.com/joel16/PSV-VSH-Menu/master/README.md", },-- Need kuio.skprx
diff --git a/AUTOPLUG2/resources/config/config.txt b/AUTOPLUG2/resources/config/config.txt
index abb96858..2db8dfb2 100644
--- a/AUTOPLUG2/resources/config/config.txt
+++ b/AUTOPLUG2/resources/config/config.txt
@@ -13,6 +13,3 @@ ur0:tai/henkaku.suprx
*NPXS10016
# this is for modifying the version string in settings widget
ur0:tai/henkaku.suprx
-*NPXS10013
-# this is for modifying the version string in settings
-*ALL
\ No newline at end of file
diff --git a/AUTOPLUG2/resources/plugins/ftpeverywhere.suprx b/AUTOPLUG2/resources/plugins/ftpeverywhere.suprx
new file mode 100644
index 00000000..f723ac31
Binary files /dev/null and b/AUTOPLUG2/resources/plugins/ftpeverywhere.suprx differ
diff --git a/AUTOPLUG2/resources/plugins/rapidmenu.skprx b/AUTOPLUG2/resources/plugins/rapidmenu.skprx
new file mode 100644
index 00000000..5dfbbb3a
Binary files /dev/null and b/AUTOPLUG2/resources/plugins/rapidmenu.skprx differ
diff --git a/AUTOPLUG2/sce_sys/livearea/contents/template.xml b/AUTOPLUG2/sce_sys/livearea/contents/template.xml
index e4dfd078..9b41f506 100644
--- a/AUTOPLUG2/sce_sys/livearea/contents/template.xml
+++ b/AUTOPLUG2/sce_sys/livearea/contents/template.xml
@@ -20,7 +20,7 @@
- v1.03
+ v1.04
diff --git a/AUTOPLUG2/sce_sys/param.sfo b/AUTOPLUG2/sce_sys/param.sfo
index c6ec959e..19f8f9c9 100644
Binary files a/AUTOPLUG2/sce_sys/param.sfo and b/AUTOPLUG2/sce_sys/param.sfo differ
diff --git a/AUTOPLUG2/script.lua b/AUTOPLUG2/script.lua
index 1db08bd4..6367f5d8 100644
--- a/AUTOPLUG2/script.lua
+++ b/AUTOPLUG2/script.lua
@@ -44,6 +44,9 @@ __LANG = ini.read(__PATH_INI,"LANGUAGE","lang","")
if __LANG == "" then __LANG = os.language() end
dofile("scripts/language.lua")
+dofile("scripts/commons.lua")
+dofile("scripts/scroll.lua")
+
-- Loading font
files.mkdir("ux0:data/AUTOPLUGIN2/font/")
fnt = nil
@@ -54,7 +57,9 @@ end
if __LANG == "CHINESE_T" or __LANG == "CHINESE_S" or __LANG == "TURKISH" then
if not files.exists("ux0:data/AUTOPLUGIN2/font/font.pgf") then
- message_wait(LANGUAGE["CHINESE_FONT_DOWNLOAD"])
+ if back then back:blit(0,0) end
+ message_wait(LANGUAGE["CHINESE_FONT_DOWNLOAD"])
+ os.delay(500)
http.getfile(string.format("https://raw.githubusercontent.com/%s/%s/master/font/font.pgf", APP_REPO, APP_PROJECT), "ux0:data/AUTOPLUGIN2/font/font.pgf")
end
if not fnt then fnt, __FONT = font.load("ux0:data/AUTOPLUGIN2/font/font.pgf"), "font.pgf" end
@@ -68,9 +73,6 @@ if os.access() == 0 then
os.exit()
end
-dofile("scripts/commons.lua")
-dofile("scripts/scroll.lua")
-
__UPDATE = tonumber(ini.read(__PATH_INI,"UPDATE","update","1"))
_update = LANGUAGE["NO"]
if __UPDATE == 1 then
@@ -81,18 +83,18 @@ write_config()
--Copy defect for config.txt
dofile("scripts/tai.lua")
-if not files.exists(tai_ux0_path) and not files.exists(tai_ur0_path) then files.copy("resources/config/config.txt", "ur0:tai/") end
+
+--Aqui obtener solo ur0:tai/config.txt, eliminar o ignorar ux0:tai/config.txt
+files.delete("ux0:tai/config.txt")
+files.delete("uma0:tai/config")
+if not files.exists(tai_config_ur0_path) then files.copy("resources/config/config.txt", "ur0:tai/") end
--Init load configs
tai.load()
-tai.sync(__UX0, "ux0:tai/config.txt")
-tai.sync(__UR0, "ur0:tai/config.txt")
-
--Backups
-tai.sync(__UX0, "ux0:tai/config_backup.txt")
-tai.sync(__UR0, "ur0:tai/config_backup.txt")
-
+tai.sync(tai_config_ur0_path)
+tai.sync("ur0:tai/config_backup.txt")
if back then back:blit(0,0) end
message_wait(LANGUAGE["STRING_BACKUP_CONFIGS"])
diff --git a/AUTOPLUG2/scripts/commons.lua b/AUTOPLUG2/scripts/commons.lua
index 49f0584a..d3f3cb27 100644
--- a/AUTOPLUG2/scripts/commons.lua
+++ b/AUTOPLUG2/scripts/commons.lua
@@ -78,6 +78,10 @@ function onExtractFiles(size,written,file,totalsize,totalwritten)
return 1
end
+function tableSortSectionAsc(a,b)
+ return (a.section < b.section) or (a.section == b.section and a.name < b.name)
+end
+
function write_config()
ini.write(__PATH_INI,"UPDATE","update",__UPDATE)
ini.write(__PATH_INI,"LANGUAGE","lang",__LANG)
@@ -108,9 +112,8 @@ end
--Variables Universales
path_plugins = "resources/plugins/"
-__UX0, __UR0, loc = 1,2,1
-locations = { "ux0:", "ur0:" }
-path_tai = locations[loc].."tai/"
+tai_ux0 = "ux0:tai/"
+tai_ur0 = "ur0:tai/"
version = tostring(os.swversion())
--Buttons Assign
diff --git a/AUTOPLUG2/scripts/extras/customsplash.lua b/AUTOPLUG2/scripts/extras/customsplash.lua
index dbc5afeb..a6ec2098 100644
--- a/AUTOPLUG2/scripts/extras/customsplash.lua
+++ b/AUTOPLUG2/scripts/extras/customsplash.lua
@@ -48,7 +48,7 @@ function img2splashbin(img,flag)
fp:close()
if copy then
- files.copy("resources/plugins/custom_boot_splash.skprx", locations[loc].."tai/")
+ files.copy("resources/plugins/custom_boot_splash.skprx", tai_ur0)
end
if flag then
@@ -69,13 +69,7 @@ end
function customimgsplash()
--Init load configs
- loc = 1
tai.load()
- local partition = 0
- if tai[__UX0].exist then partition = __UX0
- elseif tai[__UR0].exist then partition,loc = __UR0,2
- end
- path_tai = locations[loc].."tai/"
local png, custom_boot = files.listfiles("ux0:CustomBootsplash/"), {}
@@ -180,7 +174,7 @@ function customimgsplash()
if buttons.accept then
if os.message(LANGUAGE["CUSTOMBOOTSPLASH_QUESTION"],1) == 1 then
- files.copy("resources/plugins/custom_boot_splash.skprx",path_tai)
+ files.copy("resources/plugins/custom_boot_splash.skprx",tai_ur0)
if img2splashbin(custom_boot[scroll.sel].img,true) == 1 then
if os.message(LANGUAGE["RESTART_QUESTION"],1) == 1 then
if back then back:blit(0,0) end
@@ -210,7 +204,7 @@ function customimgsplash()
screen.flip()
os.delay(1500)
if os.message(LANGUAGE["CUSTOMBOOTSPLASH_QUESTION"],1) == 1 then
- files.copy("resources/plugins/custom_boot_splash.skprx",path_tai)
+ files.copy("resources/plugins/custom_boot_splash.skprx",tai_ur0)
tmpimg:reset()
if img2splashbin(tmpimg,true) == 1 then
if os.message(LANGUAGE["RESTART_QUESTION"],1) == 1 then
diff --git a/AUTOPLUG2/scripts/extras/menu_extras.lua b/AUTOPLUG2/scripts/extras/menu_extras.lua
index de2e092c..4f354a0f 100644
--- a/AUTOPLUG2/scripts/extras/menu_extras.lua
+++ b/AUTOPLUG2/scripts/extras/menu_extras.lua
@@ -136,9 +136,7 @@ function menu_extras()
end
--Init load configs
- loc = 1
tai.load()
- if tai[__UR0].exist then loc = 2 end
local menu = {
{ text = LANGUAGE["MENU_EXTRAS_INSTALL_ITLSENSO"], desc = LANGUAGE["MENU_EXTRAS_INSTALL_ITLSENSO_DESC"], funct = itls_callback },
{ text = LANGUAGE["MENU_EXTRAS_INSTALL_BATTFIX"], desc = LANGUAGE["MENU_EXTRAS_INSTALL_DESC_BATTFIX"], funct = batteryfixer_callback },
@@ -148,17 +146,17 @@ function menu_extras()
table.insert(menu, 1, { text = LANGUAGE["MENU_EXTRAS_PKGJ_TITLE"], desc = LANGUAGE["MENU_EXTRAS_CUSTOM_PKG_CONFIG_DESC"], funct = config_callback } )
end
- local idx = tai.find(loc, "KERNEL", "custom_boot_splash.skprx")
+ local idx = tai.find("KERNEL", "custom_boot_splash.skprx")
if idx then
table.insert(menu, { text = LANGUAGE["MENU_EXTRAS_CONVERT_BOOTSPLASH"], desc = LANGUAGE["MENU_EXTRAS_CUSTOMBOOTSPLASH_DESC"], funct = convertimgsplash_callback } )
end
- idx = tai.find(loc, "main", "custom_warning.suprx")
+ idx = tai.find("main", "custom_warning.suprx")
if idx then
table.insert(menu, { text = LANGUAGE["MENU_EXTRAS_CUSTOM_WARNING"], desc = LANGUAGE["MENU_EXTRAS_CUSTOMWARNING_DESC"], funct = customwarning_callback } )
end
- idx = tai.find(loc, "main", "TrImpose.suprx")
+ idx = tai.find("main", "TrImpose.suprx")
if idx then
table.insert(menu, { text = LANGUAGE["MENU_EXTRAS_TRANSP_IMPOSE"], desc = LANGUAGE["MENU_EXTRAS_TRANSPIMPOSE_DESC"], funct = customTransImpose_callback } )
end
diff --git a/AUTOPLUG2/scripts/psvita/autoplugin.lua b/AUTOPLUG2/scripts/psvita/autoplugin.lua
index c22923cc..62599601 100644
--- a/AUTOPLUG2/scripts/psvita/autoplugin.lua
+++ b/AUTOPLUG2/scripts/psvita/autoplugin.lua
@@ -12,18 +12,18 @@
function plugins_installation(sel)
if plugins[sel].path:find("udcd_uvc",1,true) and hw.model() == "PlayStation TV" then os.message(LANGUAGE["INSTALLP_WARNING_UDCD"])
- elseif plugins[sel].path == "reF00D.skprx" and loc == __UX0 then os.message(LANGUAGE["INSTALLP_WARNING_REFOOD"])
+ --elseif plugins[sel].path == "reF00D.skprx" and loc == __UX0 then os.message(LANGUAGE["INSTALLP_WARNING_REFOOD"])
elseif plugins[sel].path == "custom_warning.suprx" and ( version == "3.67" or version == "3.68") then os.message(LANGUAGE["INSTALLP_CWARNING_360_365"])
else
local idx = nil
- if files.exists(tai[loc].path) then
+ if files.exists(tai.path) then
local install,udcd = true,false
- idx = tai.find(loc, "KERNEL", "udcd_uvc.skprx")
+ idx = tai.find("KERNEL", "udcd_uvc.skprx")
if idx then
- tai.del(loc, "KERNEL", "udcd_uvc.skprx")
+ tai.del("KERNEL", "udcd_uvc.skprx")
udcd = true
end
@@ -39,26 +39,26 @@ function plugins_installation(sel)
--Checking plugin Batt (only 1 of them)
if plugins[sel].path == "shellbat.suprx" then
- idx = tai.find(loc, "main", "shellsecbat.suprx")
+ idx = tai.find("main", "shellsecbat.suprx")
if idx then
if os.message(LANGUAGE["INSTALLP_QUESTION_SHELLSECBAT"],1) == 1 then
- tai.del(loc, "main", "shellsecbat.suprx")
+ tai.del("main", "shellsecbat.suprx")
else
install = false
end
end
elseif plugins[sel].path == "shellsecbat.suprx" then
- idx = tai.find(loc, "main", "shellbat.suprx")
+ idx = tai.find("main", "shellbat.suprx")
if idx then
if os.message(LANGUAGE["INSTALLP_QUESTION_SHELLBAT"],1) == 1 then
- tai.del(loc, "main", "shellbat.suprx")
+ tai.del("main", "shellbat.suprx")
else
install = false
end
end
elseif plugins[sel].path:find(string.lower("repatch"),1,true) then
- tai.del(loc, "KERNEL", "repatch.skprx")
- tai.del(loc, "KERNEL", "repatch_4.skprx")
+ tai.del("KERNEL", "repatch.skprx")
+ tai.del("KERNEL", "repatch_4.skprx")
elseif plugins[sel].path == "vitastick.skprx" and not game.exists("VITASTICK") then
__file = "vitastick.vpk"
@@ -121,20 +121,20 @@ function plugins_installation(sel)
if install then
--Install plugin to tai folder
- files.copy(path_plugins..plugins[sel].path, path_tai)
+ files.copy(path_plugins..plugins[sel].path, tai_ur0)
--Install Extra Plugin
- if plugins[sel].path2 then files.copy(path_plugins..plugins[sel].path2, path_tai) end
+ if plugins[sel].path2 then files.copy(path_plugins..plugins[sel].path2, tai_ur0) end
--Install Especial Config for the plugin
if plugins[sel].config then
if plugins[sel].config == "custom_warning.txt" then
- if not files.exists(locations[loc].."tai/"..plugins[sel].config) then
+ if not files.exists(tai_ur0..plugins[sel].config) then
local text = osk.init(LANGUAGE["INSTALLP_OSK_TITLE"], LANGUAGE["INSTALLP_OSK_TEXT"])
if not text or (string.len(text)<=0) then text = "" end--os.nick() end
- local fp = io.open(locations[loc].."tai/"..plugins[sel].config, "wb")
+ local fp = io.open(tai_ur0..plugins[sel].config, "wb")
if fp then
fp:write(string.char(0xFF)..string.char(0xFE))
fp:write(os.toucs2(text))
@@ -145,26 +145,26 @@ function plugins_installation(sel)
if plugins[sel].configpath then
files.copy(path_plugins..plugins[sel].config, plugins[sel].configpath)
else
- files.copy(path_plugins..plugins[sel].config, locations[loc].."tai/")
+ files.copy(path_plugins..plugins[sel].config, tai_ur0)
end
end
end
--Insert plugin to Config
- local pathline_in_config = path_tai..plugins[sel].path
+ local pathline_in_config = tai_ur0..plugins[sel].path
if plugins[sel].path == "adrenaline_kernel.skprx" then pathline_in_config = "ux0:app/PSPEMUCFW/sce_module/adrenaline_kernel.skprx" end
idx = nil
if plugins[sel].section2 then
- idx = tai.find(loc, plugins[sel].section2, path_tai..plugins[sel].path2)
- if idx then tai.del(loc, plugins[sel].section2, path_tai..plugins[sel].path2) end
- tai.put(loc, plugins[sel].section2, path_tai..plugins[sel].path2)
+ idx = tai.find(plugins[sel].section2, tai_ur0..plugins[sel].path2)
+ if idx then tai.del(plugins[sel].section2, tai_ur0..plugins[sel].path2) end
+ tai.put(plugins[sel].section2, tai_ur0..plugins[sel].path2)
end
- idx = tai.find(loc, plugins[sel].section, pathline_in_config)
- if idx then tai.del(loc, plugins[sel].section, pathline_in_config) end
+ idx = tai.find(plugins[sel].section, pathline_in_config)
+ if idx then tai.del(plugins[sel].section, pathline_in_config) end
local plugin_name = plugins[sel].name
@@ -172,52 +172,52 @@ function plugins_installation(sel)
if plugins[sel].path:find("udcd_uvc_",1,true) then
--os.message("offs")
if hw.model() == "Vita Fat" then
- tai.put(loc, plugins[sel].section, path_tai.."udcd_uvc_oled_off.skprx")
+ tai.put(plugins[sel].section, tai_ur0.."udcd_uvc_oled_off.skprx")
plugin_name = "udcd_uvc_oled"
else
- tai.put(loc, plugins[sel].section, path_tai.."udcd_uvc_lcd_off.skprx")
+ tai.put(plugins[sel].section, tai_ur0.."udcd_uvc_lcd_off.skprx")
plugin_name = "udcd_uvc_lcd"
end
else
if plugins[sel].path:lower() == "custom_boot_splash.skprx" or (udcd or plugins[sel].path:lower() == "udcd_uvc.skprx") then
--os.message("1")
- tai.put(loc, plugins[sel].section, pathline_in_config)
+ tai.put(plugins[sel].section, pathline_in_config)
if udcd or plugins[sel].path:lower() == "udcd_uvc.skprx" then
--os.message("udcd_uvc.skprx")
- tai.put(loc, "KERNEL", path_tai.."udcd_uvc.skprx")
- tai.del(loc, "KERNEL", "udcd_uvc_oled_off.skprx")
- tai.del(loc, "KERNEL", "udcd_uvc_lcd_off.skprx")
+ tai.put("KERNEL", tai_ur0.."udcd_uvc.skprx")
+ tai.del("KERNEL", "udcd_uvc_oled_off.skprx")
+ tai.del("KERNEL", "udcd_uvc_lcd_off.skprx")
end
else
if plugins[sel].path:find("udcd_uvc_",1,true) then
if hw.model() == "Vita Fat" then
--os.message("udcd_uvc_oled 2")
- tai.put(loc, plugins[sel].section, path_tai.."udcd_uvc_oled_off.skprx")
+ tai.put(plugins[sel].section, tai_ur0.."udcd_uvc_oled_off.skprx")
plugin_name = "udcd_uvc_oled"
- tai.del(loc, "KERNEL", "udcd_uvc.skprx")
+ tai.del("KERNEL", "udcd_uvc.skprx")
else
--os.message("udcd_uvc_lcd 2")
- tai.put(loc, plugins[sel].section, path_tai.."udcd_uvc_lcd_off.skprx")
+ tai.put(plugins[sel].section, tai_ur0.."udcd_uvc_lcd_off.skprx")
plugin_name = "udcd_uvc_lcd"
- tai.del(loc, "KERNEL", "udcd_uvc.skprx")
+ tai.del("KERNEL", "udcd_uvc.skprx")
end
else
if (plugins[sel].path == "vitacheat.skprx") then --3.65
- tai.del(loc, "KERNEL", "vitacheat360.skprx")
+ tai.del("KERNEL", "vitacheat360.skprx")
elseif (plugins[sel].path == "vitacheat360.skprx") then
- tai.del(loc, "KERNEL", "vitacheat.skprx")
+ tai.del("KERNEL", "vitacheat.skprx")
end
--os.message("2")
- tai.put(loc, plugins[sel].section, pathline_in_config)
+ tai.put(plugins[sel].section, pathline_in_config)
end
end
end
--Write
- tai.sync(loc)
+ tai.sync()
--Extra
if plugins[sel].path == "vsh.suprx" then files.delete("ur0:/data:/vsh/")
@@ -240,11 +240,21 @@ function plugins_installation(sel)
elseif plugins[sel].path == "ps4linkcontrols.suprx" and not files.exists("ux0:ps4linkcontrols.txt") then--ps4linkcontrols
files.extract("resources/plugins/ps4linkcontrols.zip","ux0:")
end
+
+ if plugins[sel].section2 and plugins[sel].section2 == "KERNEL" then
+ change = true
+ end
+
+ if plugins[sel].section == "main" or plugins[sel].section == "KERNEL" then
+ change = true
+ else
+ ReloadConfig = true
+ end
if back2 then back2:blit(0,0) end
message_wait(plugin_name.."\n\n"..LANGUAGE["STRING_INSTALLED"])
- os.delay(1500)
- change = true
+ os.delay(1250)
+
end
else
@@ -257,19 +267,15 @@ end
function autoplugin()
--Init load configs
- loc = 1
tai.load()
- local partition = 0
- if tai[__UX0].exist then partition = __UX0
- elseif tai[__UR0].exist then partition,loc = __UR0,2
- end
- path_tai = locations[loc].."tai/"
local limit = 9
local scr = newScroll(plugins,limit)
local xscr1,toinstall = 10,0
scr.ini,scr.lim,scr.sel = 1,limit,1
+ local ReloadConfig = false
+
while true do
buttons.read()
if change then buttons.homepopup(0) else buttons.homepopup(1) end
@@ -278,15 +284,10 @@ function autoplugin()
screen.print(10,15,LANGUAGE["LIST_PLUGINS"].." "..toinstall.."/"..#plugins,1,color.white)
--Partitions
- local xRoot = 750
- local w = (960-xRoot)/#locations
- for i=1, #locations do
- if loc == i then
- draw.fillrect(xRoot,0,w,47, color.green:a(90))
- end
- screen.print(xRoot+(w/2), 12, locations[i], 1, color.white, color.blue, __ACENTER)
- xRoot += w
- end
+ local xRoot = 860
+ local w = (960-xRoot)
+ draw.fillrect(xRoot,0,w,40, color.green:a(90))
+ screen.print(xRoot+(w/2), 12, "ur0:", 1, color.white, color.blue, __ACENTER)
--List of Plugins
local y = 64
@@ -294,9 +295,9 @@ function autoplugin()
if i == scr.sel then draw.offsetgradrect(3,y-9,944,31,color.shine:a(75),color.shine:a(135),0x0,0x0,21) end
- idx = tai.find(partition,plugins[i].section,plugins[i].path)
+ idx = tai.find(plugins[i].section,plugins[i].path)
if idx != nil then
- if files.exists(tai[partition].gameid[ plugins[i].section ].prx[idx].path) then
+ if files.exists(tai.gameid[ plugins[i].section ].prx[idx].path) then
if dotg then dotg:blit(924,y-1) else draw.fillrect(924,y-2,21,21,color.green:a(205)) end
else
if doty then doty:blit(924,y-1) else draw.fillrect(924,y-2,21,21,color.yellow:a(205)) end
@@ -332,11 +333,20 @@ function autoplugin()
screen.print(480, 405, plugins[scr.sel].desc,1,color.green, 0x0,__ACENTER)
end
+ screen.print(950, 433, plugins[scr.sel].section,1,color.yellow, 0x0,__ARIGHT)
+ screen.print(950, 455, plugins[scr.sel].path,1,color.yellow, 0x0,__ARIGHT)
+ if plugins[scr.sel].section2 then
+ screen.print(950, 480, plugins[scr.sel].section2,1,color.yellow, 0x0,__ARIGHT)
+ screen.print(950, 500, plugins[scr.sel].path2,1,color.yellow, 0x0,__ARIGHT)
+ end
+
+ --[[
if tai[__UX0].exist and tai[__UR0].exist then
if buttonskey2 then buttonskey2:blitsprite(900,448,2) end
if buttonskey2 then buttonskey2:blitsprite(930,448,3) end
screen.print(895,450,LANGUAGE["LR_SWAP"],1,color.white,color.black,__ARIGHT)
end
+ ]]
if buttonskey then buttonskey:blitsprite(10,448,__SQUARE) end
screen.print(45,450,LANGUAGE["MARK_PLUGINS"],1,color.white,color.black, __ALEFT)
@@ -358,6 +368,10 @@ function autoplugin()
-------------------------- Controls --------------------------
if buttons.released.cancel then
+ if ReloadConfig then
+ if os.taicfgreload() != 1 then change = true end
+ end
+
--Clean
for i=1,scr.maxim do
plugins[i].inst = false
@@ -369,12 +383,17 @@ function autoplugin()
--Exit
if buttons.start then
+ if ReloadConfig then
+ if os.taicfgreload() != 1 then change = true end
+ end
+
if change then
os.message(LANGUAGE["STRING_PSVITA_RESTART"])
os.delay(250)
buttons.homepopup(1)
power.restart()
end
+
os.exit()
end
@@ -389,8 +408,12 @@ function autoplugin()
end
if buttons.released.l or buttons.released.r then
- if tai[__UX0].exist and tai[__UR0].exist then
- if loc == __UX0 then loc = __UR0 else loc = __UX0 end
+ if tsort == 1 then
+ tsort = 0
+ table.sort(plugins, tableSortSectionAsc)
+ else
+ tsort = 1
+ table.sort(plugins, function (a,b) return string.lower(a.name) 0 then table.sort(plugins, function (a,b) return string.lower(a.name) 0 then table.sort(plugins, function (a,b) return string.lower(a.name) 0 then
+ if tsort == 1 then
+ table.sort(plugins, function (a,b) return string.lower(a.name) 0 then
- table.insert(tmp, tai[partition].gameid[k].section)
+ table.insert(tmp, tai.gameid[k].section)
end
end
if #tmp > 1 then table.sort(tmp) end
@@ -55,18 +52,18 @@ function pluginsmanager()
end
for i=1,#section do
- for j=1,#tai[partition].gameid[ section[i] ].prx do
+ for j=1,#tai.gameid[ section[i] ].prx do
for k=1,#tb_cop do
- if files.nopath(tai[partition].gameid[ section[i] ].prx[j].path:lower()) == tb_cop[k].path:lower() then
- tai[partition].gameid[ section[i] ].prx[j].desc = tb_cop[k].desc
+ if files.nopath(tai.gameid[ section[i] ].prx[j].path:lower()) == tb_cop[k].path:lower() then
+ tai.gameid[ section[i] ].prx[j].desc = tb_cop[k].desc
end
end
end
end
- if tai[partition].gameid[ section[sel_section] ] then
- --os.message(tostring(#tai[partition].gameid[ section[sel_section] ].prx))
- scrollp = newScroll( tai[partition].gameid[ section[sel_section] ].prx, limtpm)
+ if tai.gameid[ section[sel_section] ] then
+ --os.message(tostring(#tai.gameid[ section[sel_section] ].prx))
+ scrollp = newScroll( tai.gameid[ section[sel_section] ].prx, limtpm)
else
scrollp = newScroll( {}, limtpm)
end
@@ -77,44 +74,41 @@ function pluginsmanager()
screen.print(480,18,LANGUAGE["UNINSTALLP_TITLE"],1.2,color.white, 0x0, __ACENTER)
- if not tai[partition].exist then screen.print(480,270,LANGUAGE["UNINSTALLP_NOCONFIG_FOUND"]..locations[partition],1.3,color.red, 0x0, __ACENTER)
+ if not tai.exist then screen.print(480,270,LANGUAGE["UNINSTALLP_NOCONFIG_FOUND"]..tai_ur0,1.3,color.red, 0x0, __ACENTER)
else
if #section > 0 and scrollp.maxim > 0 then
--Partitions
- local xRoot = 750
- local w = (960-xRoot)/#locations
- for i=1, #locations do
- if partition == i then
- draw.fillrect(xRoot,0,w,40, color.green:a(90))
- end
- screen.print(xRoot+(w/2), 12, locations[i], 1, color.white, color.blue, __ACENTER)
- xRoot += w
- end
+ local xRoot = 860
+ local w = (960-xRoot)
+ draw.fillrect(xRoot,0,w,40, color.green:a(90))
+ screen.print(xRoot+(w/2), 12, "ur0:", 1, color.white, color.blue, __ACENTER)
draw.fillrect(0,40,960,350,color.shine:a(25))
- screen.print(15,20, "*"..section[sel_section],1,color.yellow, 0x0)
+ if section[sel_section] then
+ screen.print(13,20, " ("..scrollp.maxim..")".." ".."*"..section[sel_section],1,color.yellow, 0x0)
+ end
- if tai[partition].gameid[ section[sel_section] ] then
+ if tai.gameid[ section[sel_section] ] then
local y = y1
for i=scrollp.ini, scrollp.lim do
if i == scrollp.sel then
draw.offsetgradrect(0,y-10,940,35,color.shine:a(75),color.shine:a(135),0x0,0x0,21)
- if tai[partition].gameid[ section[sel_section] ].prx[scrollp.sel].desc then
- if screen.textwidth(tai[partition].gameid[ section[sel_section] ].prx[scrollp.sel].desc) > 925 then
- xscr1 = screen.print(xscr1, 405, tai[partition].gameid[ section[sel_section] ].prx[scrollp.sel].desc,1,color.green, 0x0,__SLEFT,935)
+ if tai.gameid[ section[sel_section] ].prx[scrollp.sel].desc then
+ if screen.textwidth(tai.gameid[ section[sel_section] ].prx[scrollp.sel].desc) > 925 then
+ xscr1 = screen.print(xscr1, 405, tai.gameid[ section[sel_section] ].prx[scrollp.sel].desc,1,color.green, 0x0,__SLEFT,935)
else
- screen.print(480,405,tai[partition].gameid[ section[sel_section] ].prx[scrollp.sel].desc,1.0,color.green, 0x0, __ACENTER)
+ screen.print(480,405,tai.gameid[ section[sel_section] ].prx[scrollp.sel].desc,1.0,color.green, 0x0, __ACENTER)
end
end
end
- if not files.exists(tai[partition].gameid[ section[sel_section] ].prx[i].path) then ccolor = color.orange else ccolor = color.white end
+ if not files.exists(tai.gameid[ section[sel_section] ].prx[i].path) then ccolor = color.orange else ccolor = color.white end
- screen.print(20,y, tai[partition].gameid[ section[sel_section] ].prx[i].path,1,ccolor,0x0)
+ screen.print(20,y, tai.gameid[ section[sel_section] ].prx[i].path,1,ccolor,0x0)
y+=40
end
@@ -129,8 +123,6 @@ function pluginsmanager()
draw.fillrect(950, ybar-2 + ((hbar-pos_height)/(scrollp.maxim-1))*(scrollp.sel-1), 8, pos_height, color.new(0,255,0))
end
- --screen.print(480,405,locations[partition].."tai/config.txt",1.3,color.green, 0x0, __ACENTER)
-
if buttonskey then buttonskey:blitsprite(5,448,saccept) end
screen.print(30,450,LANGUAGE["UNINSTALLP_PLUGIN"],1,color.white,color.black,__ALEFT)
@@ -138,15 +130,13 @@ function pluginsmanager()
if buttonskey2 then buttonskey2:blitsprite(35,475,1) end
screen.print(70,475,LANGUAGE["UNINSTALLP_LEFTRIGHT_SECTION"],1,color.white,color.black,__ALEFT)
+ screen.print(950, 435, "("..sel_section.."/"..#section..")",1,color.yellow, 0x0,__ARIGHT)
+
else
screen.print(480,270,LANGUAGE["UNINSTALLP_EMPTY"],1.3,color.red,0x0,__ACENTER)
end
end
- if buttonskey2 then buttonskey2:blitsprite(5,498,2) end
- if buttonskey2 then buttonskey2:blitsprite(35,498,3) end
- screen.print(70,500,LANGUAGE["LR_SWAP"],1,color.white,color.black,__ALEFT)
-
if buttonskey then buttonskey:blitsprite(10,523,scancel) end
screen.print(35,525,LANGUAGE["STRING_BACK"],1,color.white,color.black, __ALEFT)
@@ -157,16 +147,26 @@ function pluginsmanager()
-------------------------- Controls --------------------------
- if buttons.cancel then break end
+ if buttons.cancel then
+ if ReloadConfig then
+ if os.taicfgreload() != 1 then change = true end
+ end
+ break
+ end
--Exit
if buttons.start then
+ if ReloadConfig then
+ if os.taicfgreload() != 1 then change = true end
+ end
+
if change then
os.message(LANGUAGE["STRING_PSVITA_RESTART"])
os.delay(250)
buttons.homepopup(1)
power.restart()
end
+
os.exit()
end
@@ -181,27 +181,26 @@ function pluginsmanager()
end
if buttons.accept then
- if tai[partition].gameid[ section[sel_section] ] then
+ if tai.gameid[ section[sel_section] ] then
- if os.message(LANGUAGE["UNINSTALLP_QUESTION"].."\n\n"..files.nopath(tai[partition].gameid[ section[sel_section] ].prx[scrollp.sel].path:lower()),1) == 1 then
- table.remove(tai[partition].raw, tai[partition].gameid[section[sel_section]].prx[scrollp.sel].line)
- local name = files.nopath(tai[partition].gameid[ section[sel_section] ].prx[scrollp.sel].path:lower())
+ if os.message(LANGUAGE["UNINSTALLP_QUESTION"].."\n\n"..files.nopath(tai.gameid[ section[sel_section] ].prx[scrollp.sel].path:lower()),1) == 1 then
+ table.remove(tai.raw, tai.gameid[section[sel_section]].prx[scrollp.sel].line)
+ local name = files.nopath(tai.gameid[ section[sel_section] ].prx[scrollp.sel].path:lower())
--No delete
if name != "adrenaline_kernel.skprx" then
- local subpath = tai[partition].gameid[ section[sel_section] ].prx[scrollp.sel].path
+ local subpath = tai.gameid[ section[sel_section] ].prx[scrollp.sel].path
if #subpath > 4 then
--os.message("1\n"..subpath)
-- files.delete(subpath)
end
end
- tai.sync(partition)
+ tai.sync()
tai.load()
--Yamt
if name == "yamt.suprx" then
- --os.message("yamt")
if files.exists("ur0:tai/boot_config.txt") then
local cont = {}
for line in io.lines("ur0:tai/boot_config.txt") do
@@ -227,51 +226,102 @@ function pluginsmanager()
for i=#tb_cop,1,-1 do
if name == tb_cop[i].path:lower() then
- if tb_cop[i].section2 and tai[partition].gameid[ tb_cop[i].section2 ] then
- del_plugin_tai(partition, tb_cop[i].section2, tb_cop[i].path2)
+ if tb_cop[i].section2 and tai.gameid[ tb_cop[i].section2 ] then
+ del_plugin_tai(tb_cop[i].section2, tb_cop[i].path2)
+ if tb_cop[i].section2 and tb_cop[i].section2 == "KERNEL" then
+ change = true
+ end
end
end
if tb_cop[i].path2 and (name == tb_cop[i].path2:lower()) then
- if tb_cop[i].section and tai[partition].gameid[ tb_cop[i].section ] then
- del_plugin_tai(partition, tb_cop[i].section, tb_cop[i].path)
+ if tb_cop[i].section and tai.gameid[ tb_cop[i].section ] then
+ del_plugin_tai(tb_cop[i].section, tb_cop[i].path)
+ if tb_cop[i].section and tb_cop[i].section == "KERNEL" then
+ change = true
+ end
end
end
end
+ --Reboot or ReloadConfig
+ if section[sel_section]:upper() == "MAIN" or section[sel_section]:upper() == "KERNEL" or name:upper() == "YAMT.SUPRX" then
+ change = true
+ --os.message("change")
+ else
+ ReloadConfig = true
+ --os.message("Reload")
+ end
+
+ tai.sync()
+ tai.load()
+
--update
- if tai[partition].gameid[ section[sel_section] ] then
- scrollp = newScroll( tai[partition].gameid[ section[sel_section] ].prx, limtpm)
- if scrollp.maxim <= 0 then
- for i=1,#section do
- if section[sel_section] == section[i] then
- --os.message(section[i])
- table.remove(section,i)
- sel_section +=1
- if sel_section > #section then sel_section = 1 end
- if tai[partition].gameid[ section[sel_section] ] then
- scrollp = newScroll( tai[partition].gameid[ section[sel_section] ].prx, limtpm)
- else
- scrollp = newScroll( {}, limtpm)
- end
- break
+ if tai.gameid[ section[sel_section] ] then
+ scrollp = newScroll( tai.gameid[ section[sel_section] ].prx, limtpm)
+ else
+ sel_section += 1
+ if sel_section > #section then sel_section = 1 end
+ if tai.gameid[ section[sel_section] ] then
+ scrollp = newScroll( tai.gameid[ section[sel_section] ].prx, limtpm)
+ else
+ scrollp = newScroll( {}, limtpm)
+ end
+ end
+
+ if scrollp.maxim <= 0 then
+ for i=1,#section do
+ if section[sel_section] == section[i] then
+ --os.message(section[i])
+ table.remove(section,i)
+ sel_section += 1
+ if sel_section > #section then sel_section = 1 end
+ if tai.gameid[ section[sel_section] ] then
+ scrollp = newScroll( tai.gameid[ section[sel_section] ].prx, limtpm)
+ else
+ scrollp = newScroll( {}, limtpm)
end
+ break
end
end
- --else
- -- scrollp = newScroll( {}, limtpm)
end
-
+
+ local tmp={}
+ section = {}
+
+ for k,v in pairs(tai.gameid) do
+ --os.message(tostring(tai.gameid[k].section))
+ local scroll_tmp = newScroll( tai.gameid[ k ].prx, limtpm)
+ if scroll_tmp.maxim > 0 then
+ table.insert(tmp, tai.gameid[k].section)
+ end
+ end
+ if #tmp > 1 then table.sort(tmp) end
+
+ --*KERNEL,*main,*ALL...more
+ for i=1,#tmp do
+ if tmp[i]:upper() == "KERNEL" then
+ table.insert(section, 1, tmp[i])
+ elseif tmp[i]:upper() == "MAIN" then
+ table.insert(section, 2, tmp[i])
+ elseif tmp[i]:upper() == "ALL" then
+ table.insert(section, 3, tmp[i])
+ else
+ table.insert(section, tmp[i])
+ end
+ end
+
for i=1,#section do
- for j=1,#tai[partition].gameid[ section[i] ].prx do
- for k=1,#tb_cop do
- if files.nopath(tai[partition].gameid[ section[i] ].prx[j].path:lower()) == tb_cop[k].path:lower() then
- tai[partition].gameid[ section[i] ].prx[j].desc = tb_cop[k].desc
+ if tai.gameid[ section[i] ] then
+ for j=1,#tai.gameid[ section[i] ].prx do
+ for k=1,#tb_cop do
+ if files.nopath(tai.gameid[ section[i] ].prx[j].path:lower()) == tb_cop[k].path:lower() then
+ tai.gameid[ section[i] ].prx[j].desc = tb_cop[k].desc
+ end
end
end
end
end
- change = true
buttons.homepopup(0)
end
end
@@ -279,50 +329,41 @@ function pluginsmanager()
end
- if tai[partition].exist then
- if buttons.released.right then
- sel_section +=1
+ if tai.exist then
+ if buttons.released.right or buttons.released.left then
+ if buttons.released.right then sel_section += 1 else sel_section -= 1 end
+
if sel_section > #section then sel_section = 1 end
- if tai[partition].gameid[ section[sel_section] ] then
- scrollp = newScroll( tai[partition].gameid[ section[sel_section] ].prx, limtpm)
- --else
- -- scrollp = newScroll( {}, limtpm)
- end
- end
-
- if buttons.released.left then
- sel_section -=1
if sel_section < 1 then sel_section = #section end
- if tai[partition].gameid[ section[sel_section] ] then
- scrollp = newScroll( tai[partition].gameid[ section[sel_section] ].prx, limtpm)
- --else
- -- scrollp = newScroll( {}, limtpm)
+
+ if tai.gameid[ section[sel_section] ] then
+ scrollp = newScroll( tai.gameid[ section[sel_section] ].prx, limtpm)
end
end
end
+ --[[
if buttons.released.l or buttons.released.r then
if partition == __UX0 then partition = __UR0 else partition = __UX0 end
- if tai[partition].exist then
+ if tai.exist then
sel_section = 1
- if tai[partition].gameid[ section[sel_section] ] then
- scrollp = newScroll( tai[partition].gameid[ section[sel_section] ].prx, limtpm)
- --else
- -- scrollp = newScroll( {}, limtpm)
+ if tai.gameid[ section[sel_section] ] then
+ scrollp = newScroll( tai.gameid[ section[sel_section] ].prx, limtpm)
end
end
end
+ ]]
end
end
-function del_plugin_tai(mount, obj1, obj2)
+function del_plugin_tai(obj1, obj2)
- local idx = tai.find(mount, obj1, obj2)
+ local idx = tai.find(obj1, obj2)
if idx then
if name != "adrenaline_kernel.skprx" then
- local subpath = tai[mount].gameid[ obj1 ].prx[idx].path
+ local subpath = tai.gameid[ obj1 ].prx[idx].path
--delete plugin physical
if #subpath > 4 then
--os.message("2\n"..subpath)
@@ -331,8 +372,8 @@ function del_plugin_tai(mount, obj1, obj2)
end
end
- tai.del(mount, obj1, obj2)
- tai.sync(mount)
+ tai.del(obj1, obj2)
+ tai.sync()
tai.load()
end
diff --git a/AUTOPLUG2/scripts/psvita/sd2vita.lua b/AUTOPLUG2/scripts/psvita/sd2vita.lua
index 761c63b1..5d90b23f 100644
--- a/AUTOPLUG2/scripts/psvita/sd2vita.lua
+++ b/AUTOPLUG2/scripts/psvita/sd2vita.lua
@@ -96,41 +96,33 @@ function install()
end
--No ur0:tai/config.txt
- if not tai[__UR0].exist then
-
- if tai[__UX0].exist then files.copy(tai[__UX0].path, "ur0:tai/") --If exist ux0:tai/config.txt copy to ur0:tai
- else
- files.copy("resources/config/config.txt", "ur0:tai/")
- end
-
+ if not tai.exist then
+ files.copy("resources/config/config.txt", "ur0:tai/")
--Update configs
tai.load()
end
--delete if plugin gamesd.skprx
- if tai[__UR0].gameid["KERNEL"] then
- tai.del(__UR0, "KERNEL", "gamesd.skprx")
+ if tai.gameid["KERNEL"] then
+ tai.del("KERNEL", "gamesd.skprx")
--Write
- tai.sync(__UR0)
+ tai.sync()
end
--Update configs
tai.load()
- -- Delete ux0:tai/config.txt
- if tai[__UX0].exist then files.delete(tai[__UX0].path) end
-
- if files.exists(tai[__UR0].path) then
+ if files.exists(tai.path) then
--Install plugin to tai folder
- files.copy(path_plugins.."storagemgr.skprx", "ur0:tai")
- files.copy(path_plugins.."storage_config.txt", "ur0:tai")
+ files.copy(path_plugins.."storagemgr.skprx", tai_ur0)
+ files.copy(path_plugins.."storage_config.txt", tai_ur0)
--Insert plugin to Config
- tai.put(__UR0, "KERNEL", "ur0:tai/storagemgr.skprx", 1)
+ tai.put("KERNEL", "ur0:tai/storagemgr.skprx", 1)
--Write
- tai.sync(__UR0)
+ tai.sync()
change = true
buttons.homepopup(0)
@@ -296,7 +288,7 @@ end
function read_storage_config()
- if not files.exists("ur0:tai/storage_config.txt") then files.copy(path_plugins.."storage_config.txt", "ur0:tai") end
+ if not files.exists("ur0:tai/storage_config.txt") then files.copy(path_plugins.."storage_config.txt", tai_ur0) end
local data = {}
for line in io.lines("ur0:tai/storage_config.txt") do
@@ -323,8 +315,8 @@ function parse_mounts(devices, mounts, original)
end
function sd2vita()
- if tai[__UR0].exist and tai.find(__UR0, "KERNEL", "storagemgr.skprx") then
- if not files.exists("ur0:tai/storage_config.txt") then files.copy(path_plugins.."storage_config.txt", "ur0:tai") end
+ if tai.exist and tai.find("KERNEL", "storagemgr.skprx") then
+ if not files.exists("ur0:tai/storage_config.txt") then files.copy(path_plugins.."storage_config.txt", tai_ur0) end
configure()
else
install()
diff --git a/AUTOPLUG2/scripts/settings/change_lang.lua b/AUTOPLUG2/scripts/settings/change_lang.lua
index e9154716..3dfc36a9 100644
--- a/AUTOPLUG2/scripts/settings/change_lang.lua
+++ b/AUTOPLUG2/scripts/settings/change_lang.lua
@@ -46,7 +46,7 @@ function change_lang()
local maxim,y1 = 8,85
local scroll = newScroll(tb,maxim)
- local xscroll = 10
+ local xscroll,xcroll2 = 10,10
while true do
buttons.read()
@@ -73,10 +73,15 @@ function change_lang()
local pos_height = math.max(h/scroll.maxim, maxim)
draw.fillrect(3, ybar-2 + ((h-pos_height)/(scroll.maxim-1))*(scroll.sel-1), 8, pos_height, color.new(0,255,0))
- if screen.textwidth(LANGUAGE["TRANSLATE_CURRENT_TITLE"]..current_lang) > 925 then
- xscroll = screen.print(xscroll, 445, LANGUAGE["TRANSLATE_CURRENT_TITLE"]..current_lang, 1, color.white, color.blue, __SLEFT,935)
+ if screen.textwidth(LANGUAGE["TRANSLATE_CURRENT_TITLE"]..tostring(os.language())) > 925 then
+ xcroll2 = screen.print(xcroll2, 445, LANGUAGE["TRANSLATE_CURRENT_TITLE"]..tostring(os.language()), 1, color.white, color.blue, __SLEFT,935)
else
- screen.print(10, 445,LANGUAGE["TRANSLATE_CURRENT_TITLE"]..current_lang,1,color.white,color.blue,__ALEFT)
+ screen.print(10, 445,LANGUAGE["TRANSLATE_CURRENT_TITLE"]..tostring(os.language()),1,color.white,color.blue,__ALEFT)
+ end
+ if screen.textwidth(LANGUAGE["TRANSLATE_CURRENT_AUTOPLUGIN"]..current_lang) > 925 then
+ xscroll = screen.print(xscroll, 475, LANGUAGE["TRANSLATE_CURRENT_AUTOPLUGIN"]..current_lang, 1, color.white, color.blue, __SLEFT,935)
+ else
+ screen.print(10, 475,LANGUAGE["TRANSLATE_CURRENT_AUTOPLUGIN"]..current_lang,1,color.white,color.blue,__ALEFT)
end
else
@@ -125,7 +130,13 @@ function change_lang()
end
dofile("plugins/plugins.lua")
- if #plugins > 0 then table.sort(plugins, function (a,b) return string.lower(a.name) 0 then
+ if tsort == 1 then
+ table.sort(plugins, function (a,b) return string.lower(a.name) 1 then
if line:find("*",1,true) then -- Secction Found.
id_sect = line:sub(2)
- --os.message("id_sect\n"..id_sect)
+ --os.message("id_sect\n"..id_sect.. " "..i)
--print("Section found %s\n", id_sect)
- if not tai[index].gameid[id_sect] then tai[index].gameid[id_sect] = { line = {}, prx = {}, section = id_sect } end
- table.insert(tai[index].gameid[id_sect].line, i)
+ if not tai.gameid[id_sect] then
+ tai.gameid[id_sect] = { line = {}, prx = {}, section = id_sect }
+ end
+ table.insert(tai.gameid[id_sect].line, i)
continue
end
if id_sect and not line:find("#",1,true) then -- Is a path and not a comment.
- --print("[%s]: %s\n", id_sect, line:lower())
+ --print("[%s]: %s\n", id_sect, line)
if not line:find("henkaku.suprx",1,true) then
- --os.message("line\n"..line:lower())
- table.insert(tai[index].gameid[id_sect].prx, { path=line:lower(), line=i })
+ --os.message("insert\n"..line.." "..i)
+ table.insert(tai.gameid[id_sect].prx, { path = line, line = i })
end
- end
+ end--id_sect
+
end
end
+
end
end
@@ -124,35 +117,35 @@ end
concentrating these into a single one, and preserving the first id found in the txt, or if section is void, delete.
Useful to repair previous errors in the use of the same.
]]
-function tai.repair(index)
+function tai.repair()
- if tai[index].raw and tai[index].gameid then
- for k,v in pairs(tai[index].gameid) do
+ if tai.raw and tai.gameid then
+ for k,v in pairs(tai.gameid) do
local len = #v.line
if len > 1 then
- tai.delete_sect(index, v) -- Remove all sections of id...
+ tai.delete_sect(v) -- Remove all sections of id...
-- Reinsert in first pos! :D
- table.insert(tai[index].raw,v.line[1], "*"..k)
+ table.insert(tai.raw,v.line[1], "*"..k)
for a=1, #v.prx do
- table.insert(tai[index].raw,v.line[1]+a, v.prx[a].path)
+ table.insert(tai.raw,v.line[1]+a, v.prx[a].path)
end
- tai.parse(index)
+ tai.parse()
- return tai.repair(index) -- recursive! :D
+ return tai.repair() -- recursive! :D
elseif #v.prx < 1 then -- No have any plug?, remove!!!!
- local id = tai[index].gameid[k].section
+ local id = tai.gameid[k].section
--os.message(section)
if id != "KERNEL" and id != "main" and id != "ALL" and id != "NPXS10015" and id != "NPXS10016" then
--os.message(section)
- tai.delete_sect(index, v) -- Remove all sections of id...
- tai.parse(index)
+ tai.delete_sect(v) -- Remove all sections of id...
+ tai.parse()
- return tai.repair(index) -- recursive! :D
+ return tai.repair() -- recursive! :D
end
end
@@ -161,7 +154,7 @@ function tai.repair(index)
end
-function tai.delete_sect(index, v) -- Internal use...
+function tai.delete_sect(v) -- Internal use...
local len = #v.line
@@ -169,32 +162,32 @@ function tai.delete_sect(index, v) -- Internal use...
for b=#v.prx, 1, -1 do
if v.prx[b].line > v.line[a] and not v.prx[b].rv then
--print("Line: %d - Removed: %s\n", v.prx[b].line,
- table.remove(tai[index].raw, v.prx[b].line)--)
+ table.remove(tai.raw, v.prx[b].line)--)
v.prx[b].rv = true
end
end
--print("Line: %d - Removed: %s\n",v.line[a],
- table.remove(tai[index].raw, v.line[a])--)
+ table.remove(tai.raw, v.line[a])--)
end
end
--[[
- NUMBER tai.find(index, id, path)
+ NUMBER tai.find(id, path)
Search a filename in the list of plugin of the id.
return nil in case of error, index in success.
]]
-function tai.find(index, id, path)
+function tai.find(id, path)
- if not tai[index].gameid[id] then return nil end
+ if not tai.gameid[id] then return nil end
local fname = files.nopath(path)--name or ""
fname = fname:lower()
- for i=1, #tai[index].gameid[id].prx do
- local x1,x2 = string.find(tai[index].gameid[id].prx[i].path:lower(), fname, 1, true)
+ for i=1, #tai.gameid[id].prx do
+ local x1,x2 = string.find(tai.gameid[id].prx[i].path:lower(), fname, 1, true)
if x1 then
return i
end
@@ -204,39 +197,39 @@ function tai.find(index, id, path)
end
--[[
- NUMBER tai.put(index, id, path)
+ NUMBER tai.put(id, path)
Add a filename in the list of plugin of the id, if the id no exists, then create a id or if exists id and path then nothing do!
return false in case of error, true in success.
]]
-function tai.put(index, id, path, pos)
+function tai.put(id, path, pos)
- local idx = tai.find(index, id, path)
+ local idx = tai.find(id, path)
if idx then -- Nothing to do... :O ?
- --tai[index].gameid[id].prx[idx].path =
+ --tai.gameid[id].prx[idx].path =
- elseif tai[index].gameid[id] then -- Exists the id then have any prx!
+ elseif tai.gameid[id] then -- Exists the id then have any prx!
- idx = #tai[index].gameid[id].prx
+ idx = #tai.gameid[id].prx
if pos then
- table.insert(tai[index].raw, tai[index].gameid[id].line[1]+pos, path)
+ table.insert(tai.raw, tai.gameid[id].line[1]+pos, path)
else
if idx > 0 then
- table.insert(tai[index].raw, tai[index].gameid[id].prx[idx].line+1, path)
+ table.insert(tai.raw, tai.gameid[id].prx[idx].line+1, path)
else
- table.insert(tai[index].raw, tai[index].gameid[id].line[1] + 1, path)
+ table.insert(tai.raw, tai.gameid[id].line[1] + 1, path)
end
end
- tai.parse(index) -- Refresh all ids lines etc..
+ tai.parse() -- Refresh all ids lines etc..
--tai.debug()
return true
else -- New ID new path!
- table.insert(tai[index].raw, "*"..id)
- table.insert(tai[index].raw, path)
- tai.parse(index) -- Refresh all ids lines etc..
+ table.insert(tai.raw, "*"..id)
+ table.insert(tai.raw, path)
+ tai.parse() -- Refresh all ids lines etc..
--tai.debug()
return true
end
@@ -250,18 +243,18 @@ end
Remove a filename in the list of plugin of the id, if the id no have more prx, its erase!
return false in case of error, true in success.
]]
-function tai.del(index, id, path)
+function tai.del(id, path)
- local idx = tai.find(index, id, path)
+ local idx = tai.find(id, path)
if idx then
- table.remove(tai[index].raw, tai[index].gameid[id].prx[idx].line)
+ table.remove(tai.raw, tai.gameid[id].prx[idx].line)
- if #tai[index].gameid[id].prx == 1 and (id != "KERNEL" and id != "main" and id != "ALL" and id != "NPXS10015" and id != "NPXS10016") then -- remove section if not have nothing more prx!
- --os.message("tai.del\n"..#tai[index].gameid[id].prx.."\nid "..id)
- table.remove(tai[index].raw, tai[index].gameid[id].line[1])
+ if #tai.gameid[id].prx == 1 and (id != "KERNEL" and id != "main" and id != "ALL" and id != "NPXS10015" and id != "NPXS10016") then -- remove section if not have nothing more prx!
+ --os.message("tai.del\n"..#tai.gameid[id].prx.."\nid "..id)
+ table.remove(tai.raw, tai.gameid[id].line[1])
end
- tai.parse(index) -- Refresh all ids lines etc..
+ tai.parse() -- Refresh all ids lines etc..
--tai.debug()
return true
end
@@ -274,18 +267,19 @@ end
Can send a path to sync or use the default.
Synchronize all the changes made so far with the library.
]]
-function tai.sync(index, path)
- if tai[index].raw then
- files.write(path or tai[index].path, table.concat(tai[index].raw, '\n'))
+function tai.sync(path)
+ if not files.exists("ur0:tai/") then files.mkdir("ur0:tai/") end
+ if tai.raw then
+ files.write(path or tai.path, table.concat(tai.raw, '\n'))
end
end
-function tai.debug(index)
+function tai.debug()
return nil
--[[print("### CONFIG.TXT ##\n")
- if tai[index].raw then
- for i=1,#tai[index].raw do
- print("#%03d: %s\n",i,tai[index].raw[i])
+ if tai.raw then
+ for i=1,#tai.raw do
+ print("#%03d: %s\n",i,tai.raw[i])
end
end
print("##################\n")]]
@@ -302,4 +296,4 @@ print("Del: %s\n",tostring(tai.del("NPUG80318", "ux0:adrenaline/adrenaline.suprx
tai.sync()
buttons.waitforkey()
err()
-]]
\ No newline at end of file
+]]
diff --git a/AUTOPLUG2/scripts/thread/thread_plugins.lua b/AUTOPLUG2/scripts/thread/thread_plugins.lua
index 06abbf7b..3a08cd23 100644
--- a/AUTOPLUG2/scripts/thread/thread_plugins.lua
+++ b/AUTOPLUG2/scripts/thread/thread_plugins.lua
@@ -13,13 +13,23 @@ PLUGINS_PORT = channel.new("PLUGINS_PORT")
cont_global = PLUGINS_PORT:pop()
cont_plugins = 0
+function tableSortSectionAsc(a,b)
+ return (a.section < b.section) or (a.section == b.section and a.name < b.name)
+end
+
if wlan.isconnected() then
if http.getfile(string.format("https://raw.githubusercontent.com/%s/%s/master/plugins/plugins.lua", APP_REPO, APP_PROJECT), "ux0:data/AUTOPLUGIN2/plugins/plugins.lua") then
LANGUAGE = {}
dofile("ux0:data/AUTOPLUGIN2/plugins/plugins.lua")
--Plugins!!!
dofile("plugins/plugins.lua")
- if #plugins > 0 then table.sort(plugins, function (a,b) return string.lower(a.name) 0 then
+ if tsort == 1 then
+ table.sort(plugins, function (a,b) return string.lower(a.name) 0 then
for i=1,#plugins do
diff --git a/Changelog.txt b/Changelog.txt
index 652a359c..fc0006ca 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -1,3 +1,10 @@
+# v1.04
++ Fixed missing string in Chinese and Turkish Systems (Again)
++ Now plugins will only be installed to ur0:tai/config.txt .
++ Added support to Reload onfig.txt for userland plugins (Only for plugins which not require reboot).
++ Now the section where each plugin would be installed to config.txt is added at plugins list, under plugin description.
++ Now plugins list can be sorted by: alfabetic or section, by pressing L/R.
+
# v1.03
+ Added support to install extra applications that require some plugins.
@@ -27,4 +34,4 @@
- Download/Install ITLS-Enso and Battery fixer (vpk)
- Set a Custom Image (Custom Boot Splash is required)
- Set a Custom Warning Message (Custom Warning is required)
-- Set Level Transparent (Transparent Impose is required)
\ No newline at end of file
+- Set Level Transparent (Transparent Impose is required)
diff --git a/Translations/Langdatabase.lua b/Translations/Langdatabase.lua
index 161bcea0..da6585cf 100644
--- a/Translations/Langdatabase.lua
+++ b/Translations/Langdatabase.lua
@@ -1,11 +1,11 @@
Online_Langs = {
-{ id = "ENGLISH_US", version = "01.07", author = "Yoti" },
-{ id = "ITALIAN", version = "01.09", author = "TheHeroGAC" },
-{ id = "JAPANESE", version = "01.07", author = "Kouchan" },
-{ id = "SPANISH", version = "01.10", author = "gvaldebenit" },
-{ id = "CHINESE_S", version = "01.11", author = "yexun1995" },
-{ id = "FRENCH", version = "01.11", author = "Chronoss09" },
-{ id = "GERMAN", version = "01.07", author = "Schn1ek3" },
-{ id = "RUSSIAN", version = "01.10", author = "Yoti" },
-{ id = "POLISH", version = "01.06", author = "Gameplay World's" }
+{ id = "ENGLISH_US", version = "01.08", author = "Yoti" },
+{ id = "ITALIAN", version = "01.10", author = "TheHeroGAC" },
+{ id = "JAPANESE", version = "01.08", author = "Kouchan" },
+{ id = "SPANISH", version = "01.11", author = "gvaldebenit" },
+{ id = "CHINESE_S", version = "01.12", author = "yexun1995" },
+{ id = "FRENCH", version = "01.12", author = "Chronoss09" },
+{ id = "GERMAN", version = "01.08", author = "Schn1ek3" },
+{ id = "RUSSIAN", version = "01.11", author = "Yoti" },
+{ id = "POLISH", version = "01.07", author = "Gameplay World's" },
}
diff --git a/plugins/plugins.lua b/plugins/plugins.lua
index 249eb266..6eefb1c9 100644
--- a/plugins/plugins.lua
+++ b/plugins/plugins.lua
@@ -50,6 +50,7 @@ Online_Plugins = {
{ name = "PSOneScrot by cuevavirus v0.1", path = "psonescrot.skprx", section = "KERNEL", version = "0001", desc = LANGUAGE["INSTALLP_DESC_PSONESCROT"], KEY = "INSTALLP_DESC_PSONESCROT", link = "https://raw.githubusercontent.com/cuevavirus/PSOneScrot/master/README.md", },
{ name = "Cpu Affinity Changer by GrapheneCt v2.0", path = "CpuAffinityChanger.skprx", section = "KERNEL", version = "0001", desc = LANGUAGE["INSTALLP_DESC_CPUAFFCHANGER"], KEY = "INSTALLP_DESC_CPUAFFCHANGER", link = "https://raw.githubusercontent.com/GrapheneCt/Affinity-Changer/master/README.md", },
{ name = "Sharpscale by cuevavirus r3", path = "sharpscale.skprx", section = "KERNEL", version = "0003", desc = LANGUAGE["INSTALLP_DESC_SHARPSCALE"], KEY = "INSTALLP_DESC_SHARPSCALE", link = "https://raw.githubusercontent.com/cuevavirus/Sharpscale/master/README.md", },
+{ name = "RapidMenu by cuevavirus r1", path = "rapidmenu.skprx", section = "KERNEL", version = "0001", desc = LANGUAGE["INSTALLP_DESC_RAPIDMENU"], KEY = "INSTALLP_DESC_RAPIDMENU", link = "https://raw.githubusercontent.com/cuevavirus/Rapidmenu/master/README.md", },
--Boot_config.txt
{ name = "Custom Boot Splash by Princess of Sleeping", path = "custom_boot_splash.skprx", section = "KERNEL", version = "0001", desc = LANGUAGE["INSTALLP_DESC_CUSTOMBOOTSPLASH"], KEY = "INSTALLP_DESC_CUSTOMBOOTSPLASH", link = "https://raw.githubusercontent.com/Princess-of-Sleeping/PSP2-CustomBootSplash/master/README.md", },
@@ -76,6 +77,7 @@ Online_Plugins = {
{ name = "NoSharedFb v1.0", path = "NoSharedFb.suprx", section = "main", version = "0001", desc = LANGUAGE["INSTALLP_DESC_NOSHAREDFB"], KEY = "INSTALLP_DESC_NOSHAREDFB", link = "https://raw.githubusercontent.com/GrapheneCt/NoSharedFb/master/README.md", },
{ name = "TransparentImpose v1.0 by GrapheneCt", path = "TrImpose.suprx", section = "main", config = "trimpose.txt", configpath = "ur0:data/", version = "0001", desc = LANGUAGE["INSTALLP_DESC_TRIMPOSE"], KEY = "INSTALLP_DESC_TRIMPOSE", link = "https://raw.githubusercontent.com/GrapheneCt/TransparentImpose/master/README.md", },
{ name = "Quietshot v1.0 by cuevavirus", path = "quietshot.suprx", section = "main", path2 = "quietshot.suprx", section2 = "NPXS10095", version = "0001", desc = LANGUAGE["INSTALLP_DESC_QUIETSHOT"], KEY = "INSTALLP_DESC_QUIETSHOT", link = "https://raw.githubusercontent.com/cuevavirus/Quietshot/master/README.md", },
+{ name = "ftpeverywhere v1.0 by teakhanirons", path = "ftpeverywhere.suprx", section = "main", version = "0001", desc = LANGUAGE["INSTALLP_DESC_FTPEVERYWHERE"], KEY = "INSTALLP_DESC_FTPEVERYWHERE", link = "https://raw.githubusercontent.com/teakhanirons/ftpeverywhere/master/README.md", vpk = string.format("https://github.com/%s/%s/raw/master/vpks/%s", APP_REPO, APP_PROJECT, "NoSleep.vpk"), },
--All
{ name = "PSV-VSH MENU by joel16 v3.4", path = "vsh.suprx", section = "ALL", path2 = "kuio.skprx", section2 = "KERNEL", version = "0001", desc = LANGUAGE["INSTALLP_DESC_VSHMENU"], KEY = "INSTALLP_DESC_VSHMENU", link = "https://raw.githubusercontent.com/joel16/PSV-VSH-Menu/master/README.md", },-- Need kuio.skprx
diff --git a/version b/version
index b8cf7411..66d53fc9 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-16973824
\ No newline at end of file
+17039360
\ No newline at end of file
diff --git a/vpks/NoSleep.vpk b/vpks/NoSleep.vpk
new file mode 100644
index 00000000..6e637b0f
Binary files /dev/null and b/vpks/NoSleep.vpk differ