85 lines
2.7 KiB
JavaScript
85 lines
2.7 KiB
JavaScript
const GITEE_LATEST_RELEASE_API = 'https://gitee.com/api/v5/repos/li-hua-88/scanapp/releases/latest'
|
||||
|
|
const AUTO_UPDATE_CHECK_DATE_KEY = 'scanapp_auto_update_check_date'
|
|||
|
|
|
|||
|
|
export function getCurrentAppVersion() {
|
|||
|
|
// #ifdef APP-PLUS
|
|||
|
|
return plus.runtime.version || '1.0.0'
|
|||
|
|
// #endif
|
|||
|
|
try {
|
|||
|
|
return uni.getSystemInfoSync().appVersion || '1.0.0'
|
|||
|
|
} catch (error) {
|
|||
|
|
return '1.0.0'
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export function compareVersions(leftVersion, rightVersion) {
|
|||
|
|
const left = String(leftVersion || '0').replace(/^v/i, '').split('.')
|
|||
|
|
const right = String(rightVersion || '0').replace(/^v/i, '').split('.')
|
|||
|
|
const length = Math.max(left.length, right.length)
|
|||
|
|
for (let index = 0; index < length; index += 1) {
|
|||
|
|
const leftPart = Number(left[index] || 0)
|
|||
|
|
const rightPart = Number(right[index] || 0)
|
|||
|
|
if (leftPart > rightPart) return 1
|
|||
|
|
if (leftPart < rightPart) return -1
|
|||
|
|
}
|
|||
|
|
return 0
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export function getReleaseUpdateInfo(release) {
|
|||
|
|
const latestVersion = String(release?.tag_name || release?.name || '').replace(/^v/i, '')
|
|||
|
|
if (!latestVersion) throw new Error('未获取到有效的版本号')
|
|||
|
|
const apkAsset = (release.assets || []).find((asset) => /\.apk(?:\?|$)/i.test(asset.name || asset.browser_download_url || ''))
|
|||
|
|
return {
|
|||
|
|
latestVersion,
|
|||
|
|
apkUrl: apkAsset?.browser_download_url || '',
|
|||
|
|
releaseUrl: release.html_url || 'https://gitee.com/li-hua-88/scanapp/releases/latest',
|
|||
|
|
updateNote: String(release.body || '修复已知问题并优化使用体验').replace(/\r?\n/g, '\n').trim()
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export function getTodayUpdateCheckKey() {
|
|||
|
|
const now = new Date()
|
|||
|
|
const year = now.getFullYear()
|
|||
|
|
const month = String(now.getMonth() + 1).padStart(2, '0')
|
|||
|
|
const day = String(now.getDate()).padStart(2, '0')
|
|||
|
|
return `${year}-${month}-${day}`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export function shouldAutoCheckForUpdate() {
|
|||
|
|
return uni.getStorageSync(AUTO_UPDATE_CHECK_DATE_KEY) !== getTodayUpdateCheckKey()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export function markAutoUpdateChecked() {
|
|||
|
|
uni.setStorageSync(AUTO_UPDATE_CHECK_DATE_KEY, getTodayUpdateCheckKey())
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
export function getLatestRelease() {
|
|||
|
|
return new Promise((resolve, reject) => {
|
|||
|
|
uni.request({
|
|||
|
|
url: GITEE_LATEST_RELEASE_API,
|
|||
|
|
method: 'GET',
|
|||
|
|
timeout: 15000,
|
|||
|
|
header: {
|
|||
|
|
Accept: 'application/json'
|
|||
|
|
},
|
|||
|
|
success: (res) => {
|
|||
|
|
let release = res.data
|
|||
|
|
if (typeof release === 'string') {
|
|||
|
|
try {
|
|||
|
|
release = JSON.parse(release)
|
|||
|
|
} catch (error) {
|
|||
|
|
release = null
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (res.statusCode >= 200 && res.statusCode < 300 && release && typeof release === 'object') {
|
|||
|
|
resolve(release)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
reject(new Error(`更新服务请求失败(HTTP ${res.statusCode || 0})`))
|
|||
|
|
},
|
|||
|
|
fail: () => reject(new Error('无法连接更新服务,请检查网络后重试'))
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
}
|