diff --git a/module/common/get_extra.sh b/module/common/get_extra.sh
index 9d37736..a5a6505 100644
--- a/module/common/get_extra.sh
+++ b/module/common/get_extra.sh
@@ -65,9 +65,7 @@ get_unnecessary() {
check_update() {
[ -f "$MODDIR/disable" ] && rm -f "$MODDIR/disable"
- JSON=$(download --fetch "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 ' ')
- LOCAL_VERSION=$(grep -o 'versionCode=[0-9]*' "$MODPATH/update/module.prop" | awk -F= '{print $2}')
+ LOCAL_VERSION=$(grep '^versionCode=' "$MODPATH/update/module.prop" | awk -F= '{print $2}')
if [ "$REMOTE_VERSION" -gt "$LOCAL_VERSION" ] && [ ! -f "/data/adb/modules/TA_utl/update" ]; then
if [ "$MAGISK" = "true" ]; then
[ -d "/data/adb/modules/TA_utl" ] && rm -rf "/data/adb/modules/TA_utl"
@@ -89,12 +87,8 @@ uninstall() {
}
get_update() {
- JSON=$(download --fetch "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
- echo "$JSON" | grep '"version"' | sed 's/.*: "//; s/".*//' > "$MODPATH/tmp/version" || exit 1
- download --output "$ZIP_URL" "$MODPATH/tmp/module.zip" || exit 1
- download --output "$CHANGELOG_URL" "$MODPATH/tmp/changelog.md" || exit 1
+ download --output "$ZIP_URL" "$MODPATH/tmp/module.zip"
+ [ -s "$MODPATH/tmp/module.zip" ] || exit 1
}
install_update() {
@@ -114,7 +108,6 @@ install_update() {
}
release_note() {
- VERSION=$(grep 'v' "$MODPATH/tmp/version")
awk -v header="### $VERSION" '
$0 == header {
print;
@@ -171,7 +164,8 @@ case "$1" in
get_xposed
exit
;;
---update)
+--check-update)
+ REMOTE_VERSION="$2"
check_update
exit
;;
@@ -180,6 +174,7 @@ case "$1" in
exit
;;
--get-update)
+ ZIP_URL="$2"
get_update
exit
;;
@@ -188,6 +183,7 @@ case "$1" in
exit
;;
--release-note)
+ VERSION="$2"
release_note
exit
;;
diff --git a/module/webui/scripts/update.js b/module/webui/scripts/update.js
index 18e7afc..4294669 100644
--- a/module/webui/scripts/update.js
+++ b/module/webui/scripts/update.js
@@ -8,27 +8,86 @@ const releaseNotes = document.querySelector('.changelog');
const installButton = document.querySelector('.install');
const rebootButton = document.querySelector('.reboot');
-// Function to run the update check
+let remoteVersionCode, remoteVersion, zipURL, changelogURL, downloading = false;
+
+// Function to download file
+function downloadFile(targetURL, fileName) {
+ return new Promise((resolve, reject) => {
+ fetch(targetURL)
+ .then(response => {
+ if (!response.ok) {
+ throw new Error(`HTTP error! status: ${response.status}`);
+ }
+ return response.blob();
+ })
+ .then(blob => {
+ const file = new File([blob], fileName, { type: blob.type });
+ const reader = new FileReader();
+ reader.onload = async function() {
+ const base64Data = reader.result.split(',')[1];
+ try {
+ await execCommand(`echo ${base64Data} | base64 -d > ${basePath}common/tmp/${fileName}`);
+ resolve();
+ } catch (error) {
+ reject(error);
+ }
+ };
+ reader.readAsDataURL(file);
+ })
+ .catch(reject);
+ });
+}
+
+// Function to check for updates
export async function updateCheck() {
try {
- const output = await execCommand(`sh ${basePath}common/get_extra.sh --update`);
- console.log("update script executed successfully.");
+ const response = await fetch("https://raw.githubusercontent.com/KOWX712/Tricky-Addon-Update-Target-List/main/update.json");
+ if (!response.ok) {
+ throw new Error(`HTTP error! status: ${response.status}`);
+ }
noConnection.style.display = "none";
- if (output.includes("update")) {
- console.log("Update detected from extra script.");
- showPrompt("prompt.new_update", true, 2000);
+ const data = await response.json();
+ remoteVersionCode = data.versionCode;
+ remoteVersion = data.version;
+ zipURL = data.zipUrl;
+ changelogURL = data.changelog;
+
+ const updateAvailable = await execCommand(`sh ${basePath}common/get_extra.sh --check-update ${remoteVersionCode}`);
+ if (updateAvailable.includes("update")) {
+ showPrompt("prompt.new_update", true, 1500);
updateCard.style.display = "flex";
setupUpdateMenu();
- } else {
- console.log("No update detected from extra script.");
}
} catch (error) {
- console.error("Failed to execute update script:", error);
+ console.error("Error fetching JSON or executing command:", error);
showPrompt("prompt.no_internet", false);
noConnection.style.display = "flex";
}
}
+// Function to render changelog
+async function renderChangelog() {
+ const changelog = await execCommand(`sh ${basePath}common/get_extra.sh --release-note ${remoteVersion}`);
+ window.linkRedirect = linkRedirect;
+ marked.setOptions({
+ sanitize: true,
+ walkTokens(token) {
+ if (token.type === 'link') {
+ const href = token.href;
+ token.href = "javascript:void(0);";
+ token.type = "html";
+ token.text = `${token.text}`;
+ }
+ }
+ });
+ const cleanedChangelog = changelog
+ .split('\n')
+ .filter(line => line.trim() !== '')
+ .join('\n');
+ const formattedChangelog = marked.parse(cleanedChangelog);
+ releaseNotes.innerHTML = formattedChangelog;
+}
+
// Function to setup update menu
function setupUpdateMenu() {
function openUpdateMenu() {
@@ -45,46 +104,59 @@ function setupUpdateMenu() {
UpdateMenu.style.display = "none";
}, 200);
}
+
+ // Update card
updateCard.addEventListener('click', async () => {
try {
- const module = await execCommand(`[ -f ${basePath}common/tmp/module.zip ] || echo "false"`);
- if (module.trim() === "false") {
+ const module = await execCommand(`
+ [ -f ${basePath}common/tmp/module.zip ] || echo "noModule"
+ [ -f ${basePath}common/tmp/changelog.md ] || echo "noChangelog"
+ [ ! -f /data/adb/modules/TA_utl/update ] || echo "updated"
+ `);
+ if (module.trim().includes("updated")) {
+ installButton.style.display = "none";
+ rebootButton.style.display = "flex";
+ openUpdateMenu();
+ } else if (module.trim().includes("noChangelog")) {
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`);
- window.linkRedirect = linkRedirect;
- marked.setOptions({
- sanitize: true,
- walkTokens(token) {
- if (token.type === 'link') {
- const href = token.href;
- token.href = "javascript:void(0);";
- token.type = "html";
- token.text = `${token.text}`;
- }
+ await downloadFile(changelogURL, "changelog.md");
+ await renderChangelog();
+ openUpdateMenu();
+ setTimeout(() => {
+ updateCard.click();
+ }, 200);
+ } else if (module.trim().includes("noModule")) {
+ if (downloading) return;
+ downloading = true;
+ try {
+ await execCommand(`sh ${basePath}common/get_extra.sh --get-update ${zipURL}`);
+ showPrompt("prompt.downloaded");
+ installButton.style.display = "flex";
+ downloading = false;
+ } catch (error) {
+ showPrompt("prompt.download_fail", false);
+ downloading = false;
}
- });
- const cleanedChangelog = changelog
- .split('\n')
- .filter(line => line.trim() !== '')
- .join('\n');
- const formattedChangelog = marked.parse(cleanedChangelog);
- releaseNotes.innerHTML = formattedChangelog;
- openUpdateMenu();
+ } else {
+ installButton.style.display = "flex";
+ await renderChangelog();
+ openUpdateMenu();
+ }
} catch (error) {
showPrompt("prompt.download_fail", false);
console.error('Error download module update:', error);
}
});
+
+ // Close update menu
closeUpdate.addEventListener("click", closeUpdateMenu);
UpdateMenu.addEventListener("click", (event) => {
if (event.target === UpdateMenu) {
closeUpdateMenu();
}
});
+
+ // Install button
installButton.addEventListener('click', async () => {
try {
showPrompt("prompt.installing");
@@ -99,6 +171,8 @@ function setupUpdateMenu() {
console.error('Fail to execute installation script:', error);
}
});
+
+ // Reboot button
rebootButton.addEventListener('click', async () => {
try {
showPrompt("prompt.rebooting");
diff --git a/module/webui/styles/applist.css b/module/webui/styles/applist.css
index 3ac72d2..8d81ccb 100644
--- a/module/webui/styles/applist.css
+++ b/module/webui/styles/applist.css
@@ -122,6 +122,7 @@
.install,
.reboot {
+ display: none;
margin-top: 10px;
margin-bottom: 15px;
font-weight: bold;
@@ -138,7 +139,6 @@
}
.reboot {
- display: none;
color: #fff;
background-color: #007bff;
border: 1px solid #007bff;