mirror of
https://github.com/kunkunsh/kunkun.git
synced 2025-04-21 05:59:16 +00:00
89 lines
2.4 KiB
TypeScript
89 lines
2.4 KiB
TypeScript
import { extensions } from "@/stores"
|
|
import { supabaseAPI } from "@/supabase"
|
|
import { isCompatible } from "@kksh/api"
|
|
import type { ExtPackageJsonExtra } from "@kksh/api/models"
|
|
import { greaterThan } from "@std/semver"
|
|
import { relaunch } from "@tauri-apps/plugin-process"
|
|
import { check } from "@tauri-apps/plugin-updater"
|
|
import { gt } from "semver"
|
|
import { toast } from "svelte-sonner"
|
|
import { get } from "svelte/store"
|
|
|
|
export async function checkUpdateAndInstall({ beta }: { beta?: boolean } = {}) {
|
|
const update = await check({
|
|
headers: {
|
|
"kk-updater-mode": beta ? "beta" : "stable"
|
|
}
|
|
})
|
|
if (update?.available) {
|
|
const confirmUpdate = await confirm(
|
|
`A new version ${update.version} is available. Do you want to install and relaunch?`
|
|
)
|
|
if (confirmUpdate) {
|
|
await update.downloadAndInstall()
|
|
await relaunch()
|
|
}
|
|
} else {
|
|
toast.info("You are on the latest version")
|
|
}
|
|
}
|
|
|
|
export async function checkSingleExtensionUpdate(
|
|
installedExt: ExtPackageJsonExtra,
|
|
autoupgrade: boolean
|
|
) {
|
|
const { data: sbExt, error } = await supabaseAPI.getLatestExtPublish(
|
|
installedExt.kunkun.identifier
|
|
)
|
|
if (error) {
|
|
return toast.error(`Failed to check update for ${installedExt.kunkun.identifier}: ${error}`)
|
|
}
|
|
|
|
if (!sbExt) {
|
|
return null
|
|
}
|
|
|
|
if (
|
|
gt(sbExt.version, installedExt.version) &&
|
|
(sbExt.api_version ? isCompatible(sbExt.api_version) : true)
|
|
) {
|
|
if (autoupgrade) {
|
|
await extensions
|
|
.upgradeStoreExtension(
|
|
sbExt.identifier,
|
|
supabaseAPI.translateExtensionFilePathToUrl(sbExt.tarball_path)
|
|
)
|
|
.then(() => {
|
|
toast.success(`${sbExt.name} upgraded`, {
|
|
description: `From ${installedExt.version} to ${sbExt.version}`
|
|
})
|
|
})
|
|
.catch((err) => {
|
|
toast.error(`Failed to upgrade ${sbExt.name}`, { description: err })
|
|
})
|
|
return true
|
|
} else {
|
|
console.log(`new version available ${installedExt.kunkun.identifier} ${sbExt.version}`)
|
|
toast.info(
|
|
`Extension ${installedExt.kunkun.identifier} has a new version ${sbExt.version}, you can upgrade in Store.`,
|
|
{ duration: 10_000 }
|
|
)
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
export async function checkExtensionUpdate(autoupgrade: boolean = false) {
|
|
let upgradedCount = 0
|
|
for (const ext of get(extensions)) {
|
|
const upgraded = await checkSingleExtensionUpdate(ext, autoupgrade)
|
|
if (upgraded) {
|
|
upgradedCount++
|
|
}
|
|
}
|
|
|
|
if (upgradedCount > 0) {
|
|
toast.info(`${upgradedCount} extensions have been upgraded`)
|
|
}
|
|
}
|