You've already forked Tricky-Addon-Update-Target-List
mirror of
https://github.com/KOWX712/Tricky-Addon-Update-Target-List.git
synced 2025-09-06 06:37:09 +00:00
change update method
This commit is contained in:
@@ -45,7 +45,7 @@ check_update() {
|
|||||||
JSON=$(download "https://raw.githubusercontent.com/KOWX712/Tricky-Addon-Update-Target-List/main/update.json") || exit 1
|
JSON=$(download "https://raw.githubusercontent.com/KOWX712/Tricky-Addon-Update-Target-List/main/update.json") || exit 1
|
||||||
REMOTE_VERSION=$(echo "$JSON" | grep -o '"versionCode": *[0-9]*' | awk -F: '{print $2}' | tr -d ' ')
|
REMOTE_VERSION=$(echo "$JSON" | grep -o '"versionCode": *[0-9]*' | awk -F: '{print $2}' | tr -d ' ')
|
||||||
LOCAL_VERSION=$(grep -o 'versionCode=[0-9]*' "$MODPATH/update/module.prop" | awk -F= '{print $2}')
|
LOCAL_VERSION=$(grep -o 'versionCode=[0-9]*' "$MODPATH/update/module.prop" | awk -F= '{print $2}')
|
||||||
if [ "$REMOTE_VERSION" -gt "$LOCAL_VERSION" ]; then
|
if [ "$REMOTE_VERSION" -gt "$LOCAL_VERSION" ] && [ ! -f "/data/adb/modules/TA_utl/update" ]; then
|
||||||
if [ "$MODPATH" = "/data/adb/modules/.TA_utl/common" ]; then
|
if [ "$MODPATH" = "/data/adb/modules/.TA_utl/common" ]; then
|
||||||
[ -d "/data/adb/modules/TA_utl" ] && rm -rf "/data/adb/modules/TA_utl"
|
[ -d "/data/adb/modules/TA_utl" ] && rm -rf "/data/adb/modules/TA_utl"
|
||||||
cp -rf "$MODPATH/update" "/data/adb/modules/TA_utl"
|
cp -rf "$MODPATH/update" "/data/adb/modules/TA_utl"
|
||||||
@@ -66,6 +66,43 @@ uninstall() {
|
|||||||
touch "/data/adb/modules/TA_utl/remove"
|
touch "/data/adb/modules/TA_utl/remove"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get_update() {
|
||||||
|
JSON=$(download "https://raw.githubusercontent.com/KOWX712/Tricky-Addon-Update-Target-List/main/update.json") || exit 1
|
||||||
|
ZIP_URL=$(echo "$JSON" | grep -o '"zipUrl": "[^"]*"' | cut -d '"' -f 4) || exit 1
|
||||||
|
CHANGELOG_URL=$(echo "$JSON" | grep -o '"changelog": "[^"]*"' | cut -d '"' -f 4) || exit 1
|
||||||
|
busybox wget --no-check-certificate -qO "$MODPATH/tmp/module.zip" "$ZIP_URL" || exit 1
|
||||||
|
busybox wget --no-check-certificate -qO "$MODPATH/tmp/changelog.md" "$CHANGELOG_URL" || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
install_update() {
|
||||||
|
if command -v magisk >/dev/null 2>&1; then
|
||||||
|
magisk --install-module "$MODPATH/tmp/module.zip"
|
||||||
|
elif command -v apd >/dev/null 2>&1; then
|
||||||
|
apd module install "$MODPATH/tmp/module.zip"
|
||||||
|
elif command -v ksud >/dev/null 2>&1; then
|
||||||
|
ksud module install "$MODPATH/tmp/module.zip"
|
||||||
|
else
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
rm -f "$MODPATH/tmp/module.zip"
|
||||||
|
rm -f "$MODPATH/tmp/changelog.md"
|
||||||
|
}
|
||||||
|
|
||||||
|
release_note() {
|
||||||
|
awk '
|
||||||
|
/^### v[0-9]+\.[0-9]+$/ {
|
||||||
|
if (!found) {
|
||||||
|
version = $2;
|
||||||
|
found = 1;
|
||||||
|
next
|
||||||
|
} else {
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
found && !/^###/ { content = content $0 "\n" }
|
||||||
|
END { if (found) { print version; print content } }
|
||||||
|
' "$MODPATH/tmp/changelog.md"
|
||||||
|
}
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
--kb)
|
--kb)
|
||||||
@@ -88,4 +125,16 @@ case "$1" in
|
|||||||
uninstall
|
uninstall
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
|
--get-update)
|
||||||
|
get_update
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
--install-update)
|
||||||
|
install_update
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
--release-note)
|
||||||
|
release_note
|
||||||
|
exit
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
@@ -87,8 +87,8 @@
|
|||||||
<!-- Applist Display -->
|
<!-- Applist Display -->
|
||||||
<div id="apps-list"></div>
|
<div id="apps-list"></div>
|
||||||
<div class="update-card" id="update-card">
|
<div class="update-card" id="update-card">
|
||||||
<p id="update-available" data-i18n="update_banner.update_available"></p>
|
<p id="update-available" data-i18n="update.update_available"></p>
|
||||||
<p id="redirect-to-release" data-i18n="update_banner.redirect_to_release"></p>
|
<p id="redirect-to-release" data-i18n="update.redirect_to_release"></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="mode-overlay"></div>
|
<div class="mode-overlay"></div>
|
||||||
<template id="app-template">
|
<template id="app-template">
|
||||||
@@ -97,29 +97,29 @@
|
|||||||
<div class="content" data-package="">
|
<div class="content" data-package="">
|
||||||
<div class="mode">
|
<div class="mode">
|
||||||
<label class="mode-switch" id="normal">
|
<label class="mode-switch" id="normal">
|
||||||
<input type="radio" class="mode-input" id="normal-mode">
|
<input type="radio" class="mode-input" id="normal-mode">
|
||||||
<i class="mode-icon">
|
<i class="mode-icon">
|
||||||
<div class="status-indicator" id="normal-indicator">
|
<div class="status-indicator" id="normal-indicator">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" height="30px" viewBox="0 -960 960 960" width="30px" fill="#ffffff"><path d="M480-480Zm0 280q-116 0-198-82t-82-198q0-116 82-198t198-82q116 0 198 82t82 198q0 116-82 198t-198 82Zm0-80q83 0 141.5-58.5T680-480q0-83-58.5-141.5T480-680q-83 0-141.5 58.5T280-480q0 83 58.5 141.5T480-280Z"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" height="30px" viewBox="0 -960 960 960" width="30px" fill="#ffffff"><path d="M480-480Zm0 280q-116 0-198-82t-82-198q0-116 82-198t198-82q116 0 198 82t82 198q0 116-82 198t-198 82Zm0-80q83 0 141.5-58.5T680-480q0-83-58.5-141.5T480-680q-83 0-141.5 58.5T280-480q0 83 58.5 141.5T480-280Z"/></svg>
|
||||||
</div>
|
</div>
|
||||||
</i>
|
</i>
|
||||||
</label>
|
</label>
|
||||||
<label class="mode-switch" id="generate">
|
<label class="mode-switch" id="generate">
|
||||||
<input type="radio" class="mode-input" id="generate-mode">
|
<input type="radio" class="mode-input" id="generate-mode">
|
||||||
<i class="mode-icon">
|
<i class="mode-icon">
|
||||||
<div class="status-indicator" id="generate-indicator">
|
<div class="status-indicator" id="generate-indicator">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 -960 960 960" width="18px" fill="#ffffff"><path d="M480-120q-33 0-56.5-23.5T400-200q0-33 23.5-56.5T480-280q33 0 56.5 23.5T560-200q0 33-23.5 56.5T480-120Zm-80-240v-480h160v480H400Z"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 -960 960 960" width="18px" fill="#ffffff"><path d="M480-120q-33 0-56.5-23.5T400-200q0-33 23.5-56.5T480-280q33 0 56.5 23.5T560-200q0 33-23.5 56.5T480-120Zm-80-240v-480h160v480H400Z"/></svg>
|
||||||
</div>
|
</div>
|
||||||
</i>
|
</i>
|
||||||
</label>
|
</label>
|
||||||
<label class="mode-switch" id="hack">
|
<label class="mode-switch" id="hack">
|
||||||
<input type="radio" class="mode-input" id="hack-mode">
|
<input type="radio" class="mode-input" id="hack-mode">
|
||||||
<i class="mode-icon">
|
<i class="mode-icon">
|
||||||
<div class="status-indicator" id="hack-indicator">
|
<div class="status-indicator" id="hack-indicator">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" height="19px" viewBox="0 -960 960 960" width="19px" fill="#ffffff"><path d="M424-320q0-81 14.5-116.5T500-514q41-36 62.5-62.5T584-637q0-41-27.5-68T480-732q-51 0-77.5 31T365-638l-103-44q21-64 77-111t141-47q105 0 161.5 58.5T698-641q0 50-21.5 85.5T609-475q-49 47-59.5 71.5T539-320H424Zm56 240q-33 0-56.5-23.5T400-160q0-33 23.5-56.5T480-240q33 0 56.5 23.5T560-160q0 33-23.5 56.5T480-80Z"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" height="19px" viewBox="0 -960 960 960" width="19px" fill="#ffffff"><path d="M424-320q0-81 14.5-116.5T500-514q41-36 62.5-62.5T584-637q0-41-27.5-68T480-732q-51 0-77.5 31T365-638l-103-44q21-64 77-111t141-47q105 0 161.5 58.5T698-641q0 50-21.5 85.5T609-475q-49 47-59.5 71.5T539-320H424Zm56 240q-33 0-56.5-23.5T400-160q0-33 23.5-56.5T480-240q33 0 56.5 23.5T560-160q0 33-23.5 56.5T480-80Z"/></svg>
|
||||||
</div>
|
</div>
|
||||||
</i>
|
</i>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<p class="name"></p>
|
<p class="name"></p>
|
||||||
<div class="checkbox-wrapper">
|
<div class="checkbox-wrapper">
|
||||||
@@ -237,6 +237,21 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Update Overlay -->
|
||||||
|
<div class="update-overlay">
|
||||||
|
<div class="update-menu">
|
||||||
|
<button class="close-update">✕</button>
|
||||||
|
<div class="update-content">
|
||||||
|
<h1 data-i18n="update.changelog"></h1>
|
||||||
|
<p class="changelog"></p>
|
||||||
|
<div class="update-button-container">
|
||||||
|
<button class="install" data-i18n="update.install"></button>
|
||||||
|
<button class="reboot" data-i18n="update.reboot"></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<div class="uninstall-container hidden-uninstall">
|
<div class="uninstall-container hidden-uninstall">
|
||||||
|
|||||||
@@ -14,15 +14,18 @@
|
|||||||
"select_denylist": "Select From DenyList",
|
"select_denylist": "Select From DenyList",
|
||||||
"select_denylist_description": "Available in Magisk only, select apps that are in the DenyList. Recommended.",
|
"select_denylist_description": "Available in Magisk only, select apps that are in the DenyList. Recommended.",
|
||||||
"deselect_unnecessary": "Deselect Unnecessary",
|
"deselect_unnecessary": "Deselect Unnecessary",
|
||||||
"deselect_unnecessary_description": "Unnecessary category: Xposed module, root manager, root-related apps, and general apps that never check bootloader status. This option requires an Internet connection.",
|
"deselect_unnecessary_description": "Unnecessary category: Xposed module, root manager, root-related apps, and general apps that never check bootloader status. This option requires Internet connection.",
|
||||||
"set_keybox": "Set AOSP & Valid Keybox",
|
"set_keybox": "Set AOSP & Valid Keybox",
|
||||||
"set_keybox_description": "Replace tricky store keybox.xml. AOSP keybox will be replaced if there's no more valid keybox. Valid keybox option requires Internet connection.",
|
"set_keybox_description": "Replace tricky store keybox.xml. AOSP keybox will be replaced if there's no more valid keybox. Valid keybox option requires Internet connection.",
|
||||||
"set_verified_boot_hash": "Set Verified Boot Hash",
|
"set_verified_boot_hash": "Set Verified Boot Hash",
|
||||||
"set_verified_boot_hash_description": "Get verifiedBootHash value from Key Attestation Demo. Fix abnormal boot state by resetting ro.boot.vbmeta.digest."
|
"set_verified_boot_hash_description": "Get verifiedBootHash value from Key Attestation Demo. Fix abnormal boot state by resetting ro.boot.vbmeta.digest."
|
||||||
},
|
},
|
||||||
"update_banner": {
|
"update": {
|
||||||
"update_available": "A new version is ready",
|
"update_available": "A new version is ready",
|
||||||
"redirect_to_release": "tap to download the latest version"
|
"redirect_to_release": "tap to download the latest version",
|
||||||
|
"changelog": "Changelog",
|
||||||
|
"install": "Install",
|
||||||
|
"reboot": "Reboot"
|
||||||
},
|
},
|
||||||
"search_bar": {
|
"search_bar": {
|
||||||
"search_placeholder": "Search"
|
"search_placeholder": "Search"
|
||||||
@@ -70,6 +73,14 @@
|
|||||||
"save_error": "Failed to save config",
|
"save_error": "Failed to save config",
|
||||||
"uninstall_prompt": "WebUI will be removed after reboot",
|
"uninstall_prompt": "WebUI will be removed after reboot",
|
||||||
"uninstall_failed": "Failed to uninstall WebUI",
|
"uninstall_failed": "Failed to uninstall WebUI",
|
||||||
"new_update": "A new update is available!"
|
"new_update": "A new update is available!",
|
||||||
|
"downloading": "Downloading new update...",
|
||||||
|
"downloaded": "Download completed",
|
||||||
|
"download_fail": "Fail to download update",
|
||||||
|
"installing": "Installing update...",
|
||||||
|
"installed": "Installed successfully, reboot now.",
|
||||||
|
"install_fail": "Fail to install, please update manual",
|
||||||
|
"rebooting": "Rebooting...",
|
||||||
|
"reboot_fail": "Fail to reboot, please reboot manually"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,15 +14,18 @@
|
|||||||
"select_denylist": "Select From DenyList",
|
"select_denylist": "Select From DenyList",
|
||||||
"select_denylist_description": "Available in Magisk only, select apps that are in the DenyList. Recommended.",
|
"select_denylist_description": "Available in Magisk only, select apps that are in the DenyList. Recommended.",
|
||||||
"deselect_unnecessary": "Deselect Unnecessary",
|
"deselect_unnecessary": "Deselect Unnecessary",
|
||||||
"deselect_unnecessary_description": "Unnecessary category: Xposed module, root manager, root-related apps, and general apps that never check bootloader status. This option requires an Internet connection.",
|
"deselect_unnecessary_description": "Unnecessary category: Xposed module, root manager, root-related apps, and general apps that never check bootloader status. This option requires Internet connection.",
|
||||||
"set_keybox": "Set AOSP & Valid Keybox",
|
"set_keybox": "Set AOSP & Valid Keybox",
|
||||||
"set_keybox_description": "Replace tricky store keybox.xml. AOSP keybox will be replaced if there's no more valid keybox. Valid keybox option requires Internet connection.",
|
"set_keybox_description": "Replace tricky store keybox.xml. AOSP keybox will be replaced if there's no more valid keybox. Valid keybox option requires Internet connection.",
|
||||||
"set_verified_boot_hash": "Set Verified Boot Hash",
|
"set_verified_boot_hash": "Set Verified Boot Hash",
|
||||||
"set_verified_boot_hash_description": "Get verifiedBootHash value from Key Attestation Demo. Fix abnormal boot state by resetting ro.boot.vbmeta.digest."
|
"set_verified_boot_hash_description": "Get verifiedBootHash value from Key Attestation Demo. Fix abnormal boot state by resetting ro.boot.vbmeta.digest."
|
||||||
},
|
},
|
||||||
"update_banner": {
|
"update": {
|
||||||
"update_available": "A new version is ready",
|
"update_available": "A new version is ready",
|
||||||
"redirect_to_release": "tap to download the latest version"
|
"redirect_to_release": "tap to download the latest version",
|
||||||
|
"changelog": "Changelog",
|
||||||
|
"install": "Install",
|
||||||
|
"reboot": "Reboot"
|
||||||
},
|
},
|
||||||
"search_bar": {
|
"search_bar": {
|
||||||
"search_placeholder": "Search"
|
"search_placeholder": "Search"
|
||||||
@@ -70,6 +73,14 @@
|
|||||||
"save_error": "Failed to save config",
|
"save_error": "Failed to save config",
|
||||||
"uninstall_prompt": "WebUI will be removed after reboot",
|
"uninstall_prompt": "WebUI will be removed after reboot",
|
||||||
"uninstall_failed": "Failed to uninstall WebUI",
|
"uninstall_failed": "Failed to uninstall WebUI",
|
||||||
"new_update": "A new update is available!"
|
"new_update": "A new update is available!",
|
||||||
|
"downloading": "Downloading new update...",
|
||||||
|
"downloaded": "Download completed",
|
||||||
|
"download_fail": "Fail to download update",
|
||||||
|
"installing": "Installing update...",
|
||||||
|
"installed": "Installed successfully, reboot now.",
|
||||||
|
"install_fail": "Fail to install, please update manual",
|
||||||
|
"rebooting": "Rebooting...",
|
||||||
|
"reboot_fail": "Fail to reboot, please reboot manually"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,9 +20,12 @@
|
|||||||
"set_verified_boot_hash": "Configurar Boot Hash Verificado",
|
"set_verified_boot_hash": "Configurar Boot Hash Verificado",
|
||||||
"set_verified_boot_hash_description": "Obtén el valor de verifiedBootHash del Key Attestation Demo. Corrige un estado de arranque anormal reiniciando ro.boot.vbmeta.digest."
|
"set_verified_boot_hash_description": "Obtén el valor de verifiedBootHash del Key Attestation Demo. Corrige un estado de arranque anormal reiniciando ro.boot.vbmeta.digest."
|
||||||
},
|
},
|
||||||
"update_banner": {
|
"update": {
|
||||||
"update_available": "Una nueva versión está lista",
|
"update_available": "Una nueva versión está lista",
|
||||||
"redirect_to_release": "toca para descargar la última versión"
|
"redirect_to_release": "toca para descargar la última versión",
|
||||||
|
"changelog": "Registro de cambios",
|
||||||
|
"install": "Instalar",
|
||||||
|
"reboot": "Reiniciar"
|
||||||
},
|
},
|
||||||
"search_bar": {
|
"search_bar": {
|
||||||
"search_placeholder": "Buscar"
|
"search_placeholder": "Buscar"
|
||||||
@@ -70,6 +73,14 @@
|
|||||||
"save_error": "Error al guardar la configuración",
|
"save_error": "Error al guardar la configuración",
|
||||||
"uninstall_prompt": "El WebUI se eliminará después de reiniciar",
|
"uninstall_prompt": "El WebUI se eliminará después de reiniciar",
|
||||||
"uninstall_failed": "Error al desinstalar el WebUI",
|
"uninstall_failed": "Error al desinstalar el WebUI",
|
||||||
"new_update": "¡Una nueva actualización está disponible!"
|
"new_update": "¡Una nueva actualización está disponible!",
|
||||||
|
"downloading": "Descargando nueva actualización...",
|
||||||
|
"downloaded": "Descarga completada",
|
||||||
|
"download_fail": "Error al descargar la actualización",
|
||||||
|
"installing": "Instalando actualización...",
|
||||||
|
"installed": "Instalado con éxito, reinicia ahora.",
|
||||||
|
"install_fail": "Error al instalar, actualiza manualmente",
|
||||||
|
"rebooting": "Reiniciando...",
|
||||||
|
"reboot_fail": "Error al reiniciar, reinicia manualmente"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,9 +20,12 @@
|
|||||||
"set_verified_boot_hash": "確認付きブートハッシュを設定",
|
"set_verified_boot_hash": "確認付きブートハッシュを設定",
|
||||||
"set_verified_boot_hash_description": "Key Attestation Demo から確認付きブートハッシュの値を取得します。ro.boot.vbmeta.digest をリセットして異常なブート状態を修正します。"
|
"set_verified_boot_hash_description": "Key Attestation Demo から確認付きブートハッシュの値を取得します。ro.boot.vbmeta.digest をリセットして異常なブート状態を修正します。"
|
||||||
},
|
},
|
||||||
"update_banner": {
|
"update": {
|
||||||
"update_available": "新しいバージョンの準備完了",
|
"update_available": "新しいバージョンの準備完了",
|
||||||
"redirect_to_release": "タップで最新のバージョンをダウンロード"
|
"redirect_to_release": "タップで最新のバージョンをダウンロード",
|
||||||
|
"changelog": "変更履歴",
|
||||||
|
"install": "インストール",
|
||||||
|
"reboot": "再起動"
|
||||||
},
|
},
|
||||||
"search_bar": {
|
"search_bar": {
|
||||||
"search_placeholder": "検索"
|
"search_placeholder": "検索"
|
||||||
@@ -70,6 +73,14 @@
|
|||||||
"save_error": "設定の保存に失敗しました。",
|
"save_error": "設定の保存に失敗しました。",
|
||||||
"uninstall_prompt": "WebUI は再起動後に削除されます。",
|
"uninstall_prompt": "WebUI は再起動後に削除されます。",
|
||||||
"uninstall_failed": "WebUI のアンインストールに失敗しました。",
|
"uninstall_failed": "WebUI のアンインストールに失敗しました。",
|
||||||
"new_update": "新しいバージョンがあります!"
|
"new_update": "新しいバージョンがあります!",
|
||||||
|
"downloading": "新しい更新をダウンロード中...",
|
||||||
|
"downloaded": "ダウンロードが完了しました",
|
||||||
|
"download_fail": "更新のダウンロードに失敗しました",
|
||||||
|
"installing": "更新をインストール中...",
|
||||||
|
"installed": "正常にインストールされました。再起動してください。",
|
||||||
|
"install_fail": "インストールに失敗しました。手動で更新してください。",
|
||||||
|
"rebooting": "再起動中...",
|
||||||
|
"reboot_fail": "再起動に失敗しました。手動で再起動してください。"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,9 +20,12 @@
|
|||||||
"set_verified_boot_hash": "Установить Verified Boot Hash",
|
"set_verified_boot_hash": "Установить Verified Boot Hash",
|
||||||
"set_verified_boot_hash_description": "Получите значение verifiedBootHash из Key Attestation Demo. Исправьте аномальное состояние загрузки, сбросив ro.boot.vbmeta.digest."
|
"set_verified_boot_hash_description": "Получите значение verifiedBootHash из Key Attestation Demo. Исправьте аномальное состояние загрузки, сбросив ro.boot.vbmeta.digest."
|
||||||
},
|
},
|
||||||
"update_banner": {
|
"update": {
|
||||||
"update_available": "Доступна новая версия",
|
"update_available": "Доступна новая версия",
|
||||||
"redirect_to_release": "нажмите, чтобы скачать последнюю версию"
|
"redirect_to_release": "нажмите, чтобы скачать последнюю версию",
|
||||||
|
"changelog": "Список изменений",
|
||||||
|
"install": "Установить",
|
||||||
|
"reboot": "Перезагрузить"
|
||||||
},
|
},
|
||||||
"search_bar": {
|
"search_bar": {
|
||||||
"search_placeholder": "Поиск"
|
"search_placeholder": "Поиск"
|
||||||
@@ -70,6 +73,14 @@
|
|||||||
"save_error": "Не удалось сохранить конфигурацию",
|
"save_error": "Не удалось сохранить конфигурацию",
|
||||||
"uninstall_prompt": "WebUI будет удален после перезагрузки",
|
"uninstall_prompt": "WebUI будет удален после перезагрузки",
|
||||||
"uninstall_failed": "Не удалось удалить WebUI",
|
"uninstall_failed": "Не удалось удалить WebUI",
|
||||||
"new_update": "Доступно новое обновление!"
|
"new_update": "Доступно новое обновление!",
|
||||||
|
"downloading": "Загрузка нового обновления...",
|
||||||
|
"downloaded": "Загрузка завершена",
|
||||||
|
"download_fail": "Не удалось загрузить обновление",
|
||||||
|
"installing": "Установка обновления...",
|
||||||
|
"installed": "Успешно установлено, перезагрузите устройство.",
|
||||||
|
"install_fail": "Не удалось установить, обновите вручную",
|
||||||
|
"rebooting": "Перезагрузка...",
|
||||||
|
"reboot_fail": "Не удалось перезагрузить, перезагрузите вручную"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,9 +20,12 @@
|
|||||||
"set_verified_boot_hash": "I-set ang Verified Boot Hash",
|
"set_verified_boot_hash": "I-set ang Verified Boot Hash",
|
||||||
"set_verified_boot_hash_description": "Kunin ang verifiedBootHash mula sa Key Attestation Demo. Ayusin ang abnormal na boot state sa pamamagitan ng pag-reset ng ro.boot.vbmeta.digest."
|
"set_verified_boot_hash_description": "Kunin ang verifiedBootHash mula sa Key Attestation Demo. Ayusin ang abnormal na boot state sa pamamagitan ng pag-reset ng ro.boot.vbmeta.digest."
|
||||||
},
|
},
|
||||||
"update_banner": {
|
"update": {
|
||||||
"update_available": "Handa na ang bagong bersyon",
|
"update_available": "Handa na ang bagong bersyon",
|
||||||
"redirect_to_release": "i-tap para i-download ang pinakabagong bersyon"
|
"redirect_to_release": "i-tap para i-download ang pinakabagong bersyon",
|
||||||
|
"changelog": "Mga Pagbabago",
|
||||||
|
"install": "I-install",
|
||||||
|
"reboot": "I-reboot"
|
||||||
},
|
},
|
||||||
"search_bar": {
|
"search_bar": {
|
||||||
"search_placeholder": "Maghanap"
|
"search_placeholder": "Maghanap"
|
||||||
@@ -70,6 +73,14 @@
|
|||||||
"save_error": "Nabigong i-save ang config",
|
"save_error": "Nabigong i-save ang config",
|
||||||
"uninstall_prompt": "Mawawala ang WebUI pagkatapos ng reboot",
|
"uninstall_prompt": "Mawawala ang WebUI pagkatapos ng reboot",
|
||||||
"uninstall_failed": "Nabigong i-uninstall ang WebUI",
|
"uninstall_failed": "Nabigong i-uninstall ang WebUI",
|
||||||
"new_update": "May bagong update na available!"
|
"new_update": "May bagong update na available!",
|
||||||
|
"downloading": "Nagda-download ng bagong update...",
|
||||||
|
"downloaded": "Natapos ang pag-download",
|
||||||
|
"download_fail": "Nabigo ang pag-download ng update",
|
||||||
|
"installing": "Nag-i-install ng update...",
|
||||||
|
"installed": "Matagumpay na na-install, mag-reboot na ngayon.",
|
||||||
|
"install_fail": "Nabigo ang pag-install, pakisubukang mag-update nang manu-mano",
|
||||||
|
"rebooting": "Nag-re-reboot...",
|
||||||
|
"reboot_fail": "Nabigo ang pag-reboot, pakisubukang mag-reboot nang manu-mano"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"language": "中文(简体)",
|
"language": "中文(简体)",
|
||||||
"header": {
|
"header": {
|
||||||
"title": "TS插件"
|
"title": "TS 插件"
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"help_instructions": "使用指南",
|
"help_instructions": "使用指南",
|
||||||
@@ -20,9 +20,12 @@
|
|||||||
"set_verified_boot_hash": "设置哈希值",
|
"set_verified_boot_hash": "设置哈希值",
|
||||||
"set_verified_boot_hash_description": "从 Key Attestation Demo 获取 verifiedBootHash(哈希值)。通过重置 ro.boot.vbmeta.digest 修复异常 boot 状态。"
|
"set_verified_boot_hash_description": "从 Key Attestation Demo 获取 verifiedBootHash(哈希值)。通过重置 ro.boot.vbmeta.digest 修复异常 boot 状态。"
|
||||||
},
|
},
|
||||||
"update_banner": {
|
"update": {
|
||||||
"update_available": "发现新的版本",
|
"update_available": "发现新的版本",
|
||||||
"redirect_to_release": "点击跳转 GitHub 下载最新版本"
|
"redirect_to_release": "点击跳转 GitHub 下载最新版本",
|
||||||
|
"changelog": "更新日志",
|
||||||
|
"install": "安装",
|
||||||
|
"reboot": "重启"
|
||||||
},
|
},
|
||||||
"search_bar": {
|
"search_bar": {
|
||||||
"search_placeholder": "搜索"
|
"search_placeholder": "搜索"
|
||||||
@@ -70,6 +73,14 @@
|
|||||||
"save_error": "保存配置失败",
|
"save_error": "保存配置失败",
|
||||||
"uninstall_prompt": "WebUI 将在重启后被移除",
|
"uninstall_prompt": "WebUI 将在重启后被移除",
|
||||||
"uninstall_failed": "卸载 WebUI 失败",
|
"uninstall_failed": "卸载 WebUI 失败",
|
||||||
"new_update": "发现新的版本!"
|
"new_update": "发现新的版本!",
|
||||||
|
"downloading": "正在下载...",
|
||||||
|
"downloaded": "下载完成",
|
||||||
|
"download_fail": "下载失败",
|
||||||
|
"installing": "正常安装...",
|
||||||
|
"installed": "安装完成,重启生效",
|
||||||
|
"install_fail": "安装失败,请手动更新",
|
||||||
|
"rebooting": "正在重启...",
|
||||||
|
"reboot_fail": "重启失败,请手动重启"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"language": "中文(繁体)",
|
"language": "中文(繁體)",
|
||||||
"header": {
|
"header": {
|
||||||
"title": "TS插件"
|
"title": "TS 插件"
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"help_instructions": "使用指南",
|
"help_instructions": "使用指南",
|
||||||
@@ -13,19 +13,22 @@
|
|||||||
"select_description": "選擇或取消選擇當前界面中的所有應用。",
|
"select_description": "選擇或取消選擇當前界面中的所有應用。",
|
||||||
"select_denylist": "從排除列表中選擇",
|
"select_denylist": "從排除列表中選擇",
|
||||||
"select_denylist_description": "僅適用於 Magisk,選擇在排除列表中的應用。推薦使用。",
|
"select_denylist_description": "僅適用於 Magisk,選擇在排除列表中的應用。推薦使用。",
|
||||||
"deselect_unnecessary": "取消選擇非必應用",
|
"deselect_unnecessary": "取消選擇非必要應用",
|
||||||
"deselect_unnecessary_description": "非必要分類:Xposed 模塊、root 管理器、與 root 相關的應用,以及從不檢查 bootloader 狀態的通用應用。此功能需連網使用。",
|
"deselect_unnecessary_description": "非必要分類:Xposed 模組、root 管理器、與 root 相關的應用,以及從不檢查 bootloader 狀態的通用應用。此功能需連網使用。",
|
||||||
"set_keybox": "設置 AOSP & 有效密鑰",
|
"set_keybox": "設置 AOSP & 有效密鑰",
|
||||||
"set_keybox_description": "替換 Tricky Store 的密鑰(keybox.xml)。如果沒有有效密鑰,將替換為 AOSP 密鑰。有效密鑰選項需連網使用。",
|
"set_keybox_description": "替換 Tricky Store 的密鑰(keybox.xml)。如果沒有有效密鑰,將替換為 AOSP 密鑰。有效密鑰選項需連網使用。",
|
||||||
"set_verified_boot_hash": "設置哈希值",
|
"set_verified_boot_hash": "設置哈希值",
|
||||||
"set_verified_boot_hash_description": "從 Key Attestation Demo 獲取 verifiedBootHash(哈希值)。通過重置 ro.boot.vbmeta.digest 修復異常 boot 狀態。"
|
"set_verified_boot_hash_description": "從 Key Attestation Demo 獲取 verifiedBootHash(哈希值)。通過重置 ro.boot.vbmeta.digest 修復異常 boot 狀態。"
|
||||||
},
|
},
|
||||||
"update_banner": {
|
"update": {
|
||||||
"update_available": "發現新的版本",
|
"update_available": "發現新版本",
|
||||||
"redirect_to_release": "點擊跳轉至 GitHub 下載最新版本"
|
"redirect_to_release": "點擊跳轉 GitHub 下載最新版本",
|
||||||
|
"changelog": "更新日誌",
|
||||||
|
"install": "安裝",
|
||||||
|
"reboot": "重啟"
|
||||||
},
|
},
|
||||||
"search_bar": {
|
"search_bar": {
|
||||||
"search_placeholder": "搜尋"
|
"search_placeholder": "搜索"
|
||||||
},
|
},
|
||||||
"functional_button": {
|
"functional_button": {
|
||||||
"save_and_update_button": "保存",
|
"save_and_update_button": "保存",
|
||||||
@@ -39,27 +42,27 @@
|
|||||||
"select_all": "全選",
|
"select_all": "全選",
|
||||||
"deselect_all": "取消全選",
|
"deselect_all": "取消全選",
|
||||||
"select_denylist": "從排除列表中選擇",
|
"select_denylist": "從排除列表中選擇",
|
||||||
"deselect_unnecessary": "取消選擇非必應用",
|
"deselect_unnecessary": "取消選擇非必要應用",
|
||||||
"set_aosp_keybox": "設置 AOSP 密鑰",
|
"set_aosp_keybox": "設置 AOSP 密鑰",
|
||||||
"set_valid_keybox": "設置有效密鑰",
|
"set_valid_keybox": "設置有效密鑰",
|
||||||
"set_verified_boot_hash": "設置哈希值",
|
"set_verified_boot_hash": "設置哈希值",
|
||||||
"about": "關於"
|
"about": "關於"
|
||||||
},
|
},
|
||||||
"reset_vbmeta": {
|
"reset_vbmeta": {
|
||||||
"boot_hash_input_placeholder": "在此粘貼您的哈希值",
|
"boot_hash_input_placeholder": "在此貼上您的哈希值",
|
||||||
"boot_hash_save_button": "保存"
|
"boot_hash_save_button": "保存"
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"module_name_line1": "TS插件",
|
"module_name_line1": "TS 插件",
|
||||||
"module_name_line2": "更新目標列表",
|
"module_name_line2": "更新目標列表",
|
||||||
"by": "作者:",
|
"by": "作者:",
|
||||||
"telegram_channel": "TG頻道",
|
"telegram_channel": "Telegram 頻道",
|
||||||
"github": "GitHub",
|
"github": "GitHub",
|
||||||
"disclaimer": "此 WebUI 不是 Tricky Store 的一部分,遇到任何問題請勿向 Tricky Store 作者反饋。",
|
"disclaimer": "此 WebUI 並非 Tricky Store 的一部分,如遇任何問題請勿向 Tricky Store 作者反饋。",
|
||||||
"acknowledgment": "特別鳴謝"
|
"acknowledgment": "特別鳴謝"
|
||||||
},
|
},
|
||||||
"prompt": {
|
"prompt": {
|
||||||
"no_internet": "請檢查您的網路連接",
|
"no_internet": "請檢查您的網絡連接",
|
||||||
"aosp_key_set": "成功設置 AOSP 密鑰",
|
"aosp_key_set": "成功設置 AOSP 密鑰",
|
||||||
"key_set_error": "更新密鑰失敗",
|
"key_set_error": "更新密鑰失敗",
|
||||||
"valid_key_set": "成功設置有效密鑰",
|
"valid_key_set": "成功設置有效密鑰",
|
||||||
@@ -70,6 +73,14 @@
|
|||||||
"save_error": "保存配置失敗",
|
"save_error": "保存配置失敗",
|
||||||
"uninstall_prompt": "WebUI 將在重啟後被移除",
|
"uninstall_prompt": "WebUI 將在重啟後被移除",
|
||||||
"uninstall_failed": "卸載 WebUI 失敗",
|
"uninstall_failed": "卸載 WebUI 失敗",
|
||||||
"new_update": "發現新的版本!"
|
"new_update": "發現新版本!",
|
||||||
|
"downloading": "正在下載...",
|
||||||
|
"downloaded": "下載完成",
|
||||||
|
"download_fail": "下載失敗",
|
||||||
|
"installing": "正在安裝...",
|
||||||
|
"installed": "安裝完成,重啟生效",
|
||||||
|
"install_fail": "安裝失敗,請手動更新",
|
||||||
|
"rebooting": "正在重啟...",
|
||||||
|
"reboot_fail": "重啟失敗,請手動重啟"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -235,7 +235,7 @@ function setupModeMenu() {
|
|||||||
} else if (event.target.closest(".status-indicator")) {
|
} else if (event.target.closest(".status-indicator")) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
hideAllModes();
|
hideAllModes();
|
||||||
}, 200);
|
}, 300);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
window.addEventListener("scroll", hideAllModes);
|
window.addEventListener("scroll", hideAllModes);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { appListContainer, updateCard, fetchAppList } from './applist.js';
|
import { appListContainer, fetchAppList } from './applist.js';
|
||||||
import { initializeAvailableLanguages, detectUserLanguage, loadTranslations, setupLanguageMenu, translations } from './language.js';
|
import { initializeAvailableLanguages, detectUserLanguage, loadTranslations, setupLanguageMenu, translations } from './language.js';
|
||||||
import { aospkb } from './menu_option.js';
|
import { aospkb } from './menu_option.js';
|
||||||
import { searchMenuContainer, searchInput, clearBtn, setupMenuToggle } from './search_menu.js';
|
import { searchMenuContainer, searchInput, clearBtn, setupMenuToggle } from './search_menu.js';
|
||||||
@@ -19,7 +19,7 @@ export const basePath = "set-path";
|
|||||||
export const appsWithExclamation = [];
|
export const appsWithExclamation = [];
|
||||||
export const appsWithQuestion = [];
|
export const appsWithQuestion = [];
|
||||||
const ADDITIONAL_APPS = [ "com.google.android.gms", "io.github.vvb2060.keyattestation", "io.github.vvb2060.mahoshojo", "icu.nullptr.nativetest" ];
|
const ADDITIONAL_APPS = [ "com.google.android.gms", "io.github.vvb2060.keyattestation", "io.github.vvb2060.mahoshojo", "icu.nullptr.nativetest" ];
|
||||||
const rippleClasses = ['.language-option', '.menu-button', '.menu-options li', '.search-card', '.card', '.update-card', '.link-icon', '.floating-btn', '.uninstall-container', '.boot-hash-save-button', '.boot-hash-value', '.status-indicator'];
|
const rippleClasses = ['.language-option', '.menu-button', '.menu-options li', '.search-card', '.card', '.update-card', '.link-icon', '.floating-btn', '.uninstall-container', '.boot-hash-save-button', '.boot-hash-value', '.status-indicator', '.reboot', '.install'];
|
||||||
|
|
||||||
// Variables
|
// Variables
|
||||||
let e = 0;
|
let e = 0;
|
||||||
@@ -84,7 +84,7 @@ async function checkMagisk() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Function to show the prompt with a success or error message
|
// Function to show the prompt with a success or error message
|
||||||
export function showPrompt(key, isSuccess = true) {
|
export function showPrompt(key, isSuccess = true, duration = 3000) {
|
||||||
const message = key.split('.').reduce((acc, k) => acc && acc[k], translations) || key;
|
const message = key.split('.').reduce((acc, k) => acc && acc[k], translations) || key;
|
||||||
prompt.textContent = message;
|
prompt.textContent = message;
|
||||||
prompt.classList.toggle('error', !isSuccess);
|
prompt.classList.toggle('error', !isSuccess);
|
||||||
@@ -99,8 +99,8 @@ export function showPrompt(key, isSuccess = true) {
|
|||||||
}
|
}
|
||||||
window.promptTimeout = setTimeout(() => {
|
window.promptTimeout = setTimeout(() => {
|
||||||
prompt.style.transform = 'translateY(100%)';
|
prompt.style.transform = 'translateY(100%)';
|
||||||
}, 3000);
|
}, duration);
|
||||||
}, 200);
|
}, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function to redirect link on external browser
|
// Function to redirect link on external browser
|
||||||
@@ -291,16 +291,6 @@ document.addEventListener('DOMContentLoaded', async () => {
|
|||||||
document.querySelector('.uninstall-container').classList.remove('hidden-uninstall');
|
document.querySelector('.uninstall-container').classList.remove('hidden-uninstall');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Redirect to GitHub release page
|
|
||||||
updateCard.addEventListener('click', async () => {
|
|
||||||
try {
|
|
||||||
await execCommand('am start -a android.intent.action.VIEW -d https://github.com/KOWX712/Tricky-Addon-Update-Target-List/releases/latest');
|
|
||||||
} catch (error) {
|
|
||||||
toast("Failed!");
|
|
||||||
console.error('Error opening GitHub Release link:', error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Function to execute shell commands
|
// Function to execute shell commands
|
||||||
export async function execCommand(command) {
|
export async function execCommand(command) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
|||||||
@@ -1,6 +1,13 @@
|
|||||||
import { basePath, execCommand, showPrompt, noConnection } from './main.js';
|
import { basePath, execCommand, showPrompt, noConnection } from './main.js';
|
||||||
import { updateCard } from './applist.js';
|
import { updateCard } from './applist.js';
|
||||||
|
|
||||||
|
const updateCardText = document.getElementById('redirect-to-release');
|
||||||
|
const UpdateMenu = document.querySelector('.update-overlay');
|
||||||
|
const closeUpdate = document.querySelector('.close-update');
|
||||||
|
const releaseNotes = document.querySelector('.changelog');
|
||||||
|
const installButton = document.querySelector('.install');
|
||||||
|
const rebootButton = document.querySelector('.reboot');
|
||||||
|
|
||||||
// Function to run the update check
|
// Function to run the update check
|
||||||
export async function updateCheck() {
|
export async function updateCheck() {
|
||||||
try {
|
try {
|
||||||
@@ -9,8 +16,9 @@ export async function updateCheck() {
|
|||||||
noConnection.style.display = "none";
|
noConnection.style.display = "none";
|
||||||
if (output.includes("update")) {
|
if (output.includes("update")) {
|
||||||
console.log("Update detected from extra script.");
|
console.log("Update detected from extra script.");
|
||||||
showPrompt("prompt.new_update");
|
showPrompt("prompt.new_update", true, 2000);
|
||||||
updateCard.style.display = "flex";
|
updateCard.style.display = "flex";
|
||||||
|
setupUpdateMenu();
|
||||||
} else {
|
} else {
|
||||||
console.log("No update detected from extra script.");
|
console.log("No update detected from extra script.");
|
||||||
}
|
}
|
||||||
@@ -20,3 +28,74 @@ export async function updateCheck() {
|
|||||||
noConnection.style.display = "flex";
|
noConnection.style.display = "flex";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Function to setup update menu
|
||||||
|
function setupUpdateMenu() {
|
||||||
|
function openUpdateMenu() {
|
||||||
|
UpdateMenu.style.display = "flex";
|
||||||
|
setTimeout(async () => {
|
||||||
|
UpdateMenu.style.opacity = "1";
|
||||||
|
}, 10);
|
||||||
|
document.body.classList.add("no-scroll");
|
||||||
|
}
|
||||||
|
function closeUpdateMenu() {
|
||||||
|
UpdateMenu.style.opacity = "0";
|
||||||
|
document.body.classList.remove("no-scroll");
|
||||||
|
setTimeout(async () => {
|
||||||
|
UpdateMenu.style.display = "none";
|
||||||
|
}, 200);
|
||||||
|
}
|
||||||
|
updateCard.addEventListener('click', async () => {
|
||||||
|
try {
|
||||||
|
const module = await execCommand(`[ -f ${basePath}common/tmp/module.zip ] || echo "false"`);
|
||||||
|
if (module.trim() === "false") {
|
||||||
|
showPrompt("prompt.downloading");
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 200));
|
||||||
|
await execCommand(`sh ${basePath}common/get_extra.sh --get-update`);
|
||||||
|
showPrompt("prompt.downloaded");
|
||||||
|
}
|
||||||
|
const changelog = await execCommand(`sh ${basePath}common/get_extra.sh --release-note`);
|
||||||
|
const lines = changelog.split('\n');
|
||||||
|
const formattedChangelog = `
|
||||||
|
<span style="font-weight: bold; font-size: 18px;">${lines[0]}</span><br>
|
||||||
|
${lines.slice(1).join('<br>')}
|
||||||
|
`;
|
||||||
|
releaseNotes.innerHTML = formattedChangelog;
|
||||||
|
openUpdateMenu();
|
||||||
|
} catch (error) {
|
||||||
|
showPrompt("prompt.download_fail", false);
|
||||||
|
console.error('Error download module update:', error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
closeUpdate.addEventListener("click", closeUpdateMenu);
|
||||||
|
UpdateMenu.addEventListener("click", (event) => {
|
||||||
|
if (event.target === UpdateMenu) {
|
||||||
|
closeUpdateMenu();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
installButton.addEventListener('click', async () => {
|
||||||
|
try {
|
||||||
|
showPrompt("prompt.installing");
|
||||||
|
setTimeout(async () => {
|
||||||
|
await execCommand(`sh ${basePath}common/get_extra.sh --install-update`);
|
||||||
|
showPrompt("prompt.installed");
|
||||||
|
installButton.style.display = "none";
|
||||||
|
rebootButton.style.display = "flex";
|
||||||
|
}, 300);
|
||||||
|
} catch (error) {
|
||||||
|
showPrompt("prompt.install_fail", false);
|
||||||
|
console.error('Fail to execute installation script:', error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
rebootButton.addEventListener('click', async () => {
|
||||||
|
try {
|
||||||
|
showPrompt("prompt.rebooting");
|
||||||
|
setTimeout(async () => {
|
||||||
|
await execCommand("svc power reboot");
|
||||||
|
}, 1000);
|
||||||
|
} catch (error) {
|
||||||
|
showPrompt("prompt.reboot_fail", false);
|
||||||
|
console.error('Fail to reboot:', error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -30,13 +30,85 @@
|
|||||||
#update-available {
|
#update-available {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
text-align: center;
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#redirect-to-release {
|
#redirect-to-release {
|
||||||
|
text-align: center;
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.update-overlay {
|
||||||
|
display: none;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
z-index: 1800;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.update-menu {
|
||||||
|
position: relative;
|
||||||
|
width: 90vw;
|
||||||
|
max-width: 800px;
|
||||||
|
background-color: white;
|
||||||
|
padding: 10px 0;
|
||||||
|
border-radius: 15px;
|
||||||
|
text-align: left;
|
||||||
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.close-update {
|
||||||
|
position: absolute;
|
||||||
|
top: 15px;
|
||||||
|
right: 12px;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
font-size: 20px;
|
||||||
|
color: #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.update-content {
|
||||||
|
max-height: 85vh;
|
||||||
|
padding: 0 30px;
|
||||||
|
overflow-y: auto;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.update-button-container {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.install,
|
||||||
|
.reboot {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
color: #3B3B3B;
|
||||||
|
background-color: #fff;
|
||||||
|
border: none;
|
||||||
|
padding: 10px 15px;
|
||||||
|
border-radius: 50px 50px;
|
||||||
|
font-size: 18px;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.reboot {
|
||||||
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card {
|
.card {
|
||||||
@@ -243,9 +315,19 @@
|
|||||||
.update-card {
|
.update-card {
|
||||||
background-color: #4D4D4D;
|
background-color: #4D4D4D;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mode {
|
.mode {
|
||||||
background-color: #343434;
|
background-color: #343434;
|
||||||
border: 1px solid #6E6E6E;
|
border: 1px solid #6E6E6E;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.install,
|
||||||
|
.reboot {
|
||||||
|
background-color: #343434;
|
||||||
|
color: #C2C2C2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.update-menu {
|
||||||
|
background-color: #343434;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user