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('无法连接更新服务,请检查网络后重试'))
|
||
})
|
||
})
|
||
}
|