From 6d7605050f8d90cfa4f667dac92c57a7409b4153 Mon Sep 17 00:00:00 2001 From: C1XTZ Date: Sat, 4 May 2024 23:08:27 +0200 Subject: [PATCH] updater fix for 020, removed updater for <020 --- .github/img/updater.png | Bin 16472 -> 16761 bytes mobilephone/manifest.ini | 2 +- mobilephone/mobilephone.lua | 115 +++++++++++++++++++++--------------- 3 files changed, 69 insertions(+), 48 deletions(-) diff --git a/.github/img/updater.png b/.github/img/updater.png index bc0c005c3634f2fc1162b14e7bb8f7a04e97b8ad..c46e705054fc601633f6917ffc9318ca49298c5a 100644 GIT binary patch literal 16761 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 UT`vgyH-JY{V)CC#KI(h_FET0P761SM diff --git a/mobilephone/manifest.ini b/mobilephone/manifest.ini index 9640b75..5a4f446 100644 --- a/mobilephone/manifest.ini +++ b/mobilephone/manifest.ini @@ -1,7 +1,7 @@ [ABOUT] NAME = Mobilephone AUTHOR = C1XTZ, CheesyManiac -VERSION = 1.41 +VERSION = 1.42 DESCRIPTION = A phone that displays ingame chat, time and the current song. [WINDOW_...] diff --git a/mobilephone/mobilephone.lua b/mobilephone/mobilephone.lua index 06d9a26..7060d35 100644 --- a/mobilephone/mobilephone.lua +++ b/mobilephone/mobilephone.lua @@ -172,13 +172,29 @@ end setNotifiVolume() -local appFolder = ac.getFolder(ac.FolderID.ACApps) .. '/lua/mobilephone/' +local appName = 'mobilephone' +local appFolder = ac.getFolder(ac.FolderID.ACApps) .. '/lua/' .. appName .. '/' local manifest = ac.INIConfig.load(appFolder .. '/manifest.ini', ac.INIFormat.Extended) local appVersion = manifest:get('ABOUT', 'VERSION', 0.01) local releaseURL = 'https://api.github.com/repos/C1XTZ/ac-mobilephone/releases/latest' local doUpdate = (os.time() - settings.lastCheck) / 86400 > settings.updateInterval -local mainFile, assetFile = 'mobilephone.lua', 'mobilephone.zip' +local mainFile, assetFile = appName .. '.lua', appName .. '.zip' --xtz: The ingame updater idea was taken from tuttertep's comfy map app and rewritten to work with my github releases instead of pulling from the entire repository +--xtz: JSON.parse returns a different json on 0.2.0 for some reason, ill do this for now, might bump recommended version to 0.2.1 +function handle2651(latestRelease) + local tagName, releaseAssets, getDownloadUrl + if ac.getPatchVersionCode() <= 2651 then + tagName = latestRelease.author.tag_name + releaseAssets = latestRelease.author.assets + getDownloadUrl = function(asset) return asset.uploader.browser_download_url end + else + tagName = latestRelease.tag_name + releaseAssets = latestRelease.assets + getDownloadUrl = function(asset) return asset.browser_download_url end + end + return tagName, releaseAssets, getDownloadUrl +end + function updateCheckVersion(manual) settings.lastCheck = os.time() @@ -190,31 +206,35 @@ function updateCheckVersion(manual) end local latestRelease = JSON.parse(response.body) - if not (latestRelease.tag_name and latestRelease.tag_name:match('^v%d%d?%.%d%d?$')) then - error('URL unavailable or no Version recognized, aborted update') + local tagName, releaseAssets, getDownloadUrl = handle2651(latestRelease) + + if not (tagName and tagName:match('^v%d%d?%.%d%d?$')) then settings.updateStatus = 4 + error('URL unavailable or no Version recognized, aborted update') return end - local version = tonumber(latestRelease.tag_name:sub(2)) + local version = tonumber(tagName:sub(2)) if appVersion > version then settings.updateStatus = 3 + settings.updateAvailable = false return elseif appVersion == version then settings.updateStatus = 2 + settings.updateAvailable = false return else local downloadUrl - for _, asset in ipairs(latestRelease.assets) do + for _, asset in ipairs(releaseAssets) do if asset.name == assetFile then - downloadUrl = asset.browser_download_url + downloadUrl = getDownloadUrl(asset) break end end if not downloadUrl then - error('No matching asset found, aborted update') settings.updateStatus = 4 + error('No matching asset found, aborted update') return end @@ -244,7 +264,7 @@ function updateApplyUpdate(downloadUrl) if content then local filePath = file:match('(.*)') if filePath then - filePath = filePath:gsub('mobilephone/', '') + filePath = filePath:gsub(appName .. '/', '') if filePath == mainFile then mainFileContent = content else @@ -462,13 +482,9 @@ function onShowWindow() updateTime() runUpdate() - if settings.autoUpdate and doUpdate then + if (settings.autoUpdate and doUpdate) or settings.updateAvailable then updateCheckVersion() end - - if settings.updateAvailable then - sendAppMessage('UPDATE AVAILABLE IN THE SETTINGS!') - end end if settings.customColor then @@ -480,42 +496,47 @@ function script.windowMainSettings(dt) ui.tabBar('TabBar', function() if ac.getPatchVersionCode() < 2651 then ui.textColored('You are using a version of CSP older than 0.2.0!\nIf anything breaks update to the latest version\n ', rgbm.colors.red) + ui.newLine(-25) end - ui.tabItem('Update', function() - ui.text('Currrently running version ' .. appVersion) - if ui.checkbox('Automatically Check for Updates', settings.autoUpdate) then - settings.autoUpdate = not settings.autoUpdate - if settings.autoUpdate then updateCheckVersion() end - end - if settings.autoUpdate then - ui.text('\t') - ui.sameLine() - settings.updateInterval = ui.slider('##UpdateInterval', settings.updateInterval, 1, 60, 'Check for Update every ' .. '%.0f days') - end - if ui.button('Get Update') then - if settings.updateAvailable then - updateApplyUpdate(settings.updateURL) - else - updateCheckVersion(true) + if ac.getPatchVersionCode() >= 2651 then + ui.tabItem('Update', function() + ui.text('Currrently running version ' .. appVersion) + if ui.checkbox('Automatically Check for Updates', settings.autoUpdate) then + settings.autoUpdate = not settings.autoUpdate + if settings.autoUpdate then updateCheckVersion() end + end + if settings.autoUpdate then + ui.text('\t') + ui.sameLine() + settings.updateInterval = ui.slider('##UpdateInterval', settings.updateInterval, 1, 60, 'Check for Update every ' .. '%.0f days') end - end - if settings.updateStatus > 0 then - ui.textColored(updateStatusTable[settings.updateStatus], updateStatusColor[settings.updateStatus]) - - local diff = os.time() - settings.lastCheck - if diff > 600 then settings.updateStatus = 0 end - local units = { 'seconds', 'minutes', 'hours', 'days' } - local values = { 1, 60, 3600, 86400 } - local i = #values - while i > 1 and diff < values[i] do - i = i - 1 + local updateButtonText = settings.updateAvailable and 'Install Update' or 'Check for Update' + if ui.button(updateButtonText) then + if settings.updateAvailable then + updateCheckVersion(true) + else + updateCheckVersion(false) + end end + if settings.updateStatus > 0 then + ui.textColored(updateStatusTable[settings.updateStatus], updateStatusColor[settings.updateStatus]) - local timeAgo = math.floor(diff / values[i]) - ui.text('Last checked ' .. timeAgo .. ' ' .. units[i] .. ' ago') - end - end) + local diff = os.time() - settings.lastCheck + if diff > 600 then settings.updateStatus = 0 end + local units = { 'seconds', 'minutes', 'hours', 'days' } + local values = { 1, 60, 3600, 86400 } + + local i = #values + while i > 1 and diff < values[i] do + i = i - 1 + end + + local timeAgo = math.floor(diff / values[i]) + ui.text('Last checked ' .. timeAgo .. ' ' .. units[i] .. ' ago') + end + end) + end ui.tabItem('Display', function() if ui.checkbox('Custom Color', settings.customColor) then settings.customColor = not settings.customColor @@ -747,8 +768,8 @@ function script.windowMain(dt) ui.drawImage(phone.src.display, VecTR, VecBL, phone.color) ui.pushDWriteFont(phone.src.fontNoEm) - ui.setCursor(vec2(31, 54)) - ui.dwriteTextAligned(time.final, 16, -1, 0, vec2(60, 18), false, phone.txtColor) + ui.setCursor(vec2(31, 52)) + ui.dwriteTextAligned(time.final, 16, -1, 0, ui.measureDWriteText(time.final, 16), false, phone.txtColor) ui.popDWriteFont() if settings.nowPlaying then