mirror of
https://github.com/neosubhamoy/neodlp.git
synced 2025-12-19 01:32:57 +05:30
67 lines
3.0 KiB
TypeScript
67 lines
3.0 KiB
TypeScript
import { config } from "@/config";
|
|
import { check as checkAppUpdate, Update } from "@tauri-apps/plugin-updater";
|
|
import { relaunch as relaunchApp } from "@tauri-apps/plugin-process";
|
|
import { useSettingsPageStatesStore } from "@/services/store";
|
|
import { useLogger } from "@/helpers/use-logger";
|
|
import { sendNotification } from '@tauri-apps/plugin-notification';
|
|
|
|
export default function useAppUpdater() {
|
|
const setIsCheckingAppUpdate = useSettingsPageStatesStore(state => state.setIsCheckingAppUpdate);
|
|
const setAppUpdate = useSettingsPageStatesStore(state => state.setAppUpdate);
|
|
const setIsUpdating = useSettingsPageStatesStore(state => state.setIsUpdatingApp);
|
|
const setDownloadProgress = useSettingsPageStatesStore(state => state.setAppUpdateDownloadProgress);
|
|
const enableNotifications = useSettingsPageStatesStore(state => state.settings.enable_notifications);
|
|
const updateNotification = useSettingsPageStatesStore(state => state.settings.update_notification);
|
|
const LOG = useLogger();
|
|
|
|
const checkForAppUpdate = async () => {
|
|
setIsCheckingAppUpdate(true);
|
|
try {
|
|
const update = await checkAppUpdate();
|
|
if (update) {
|
|
setAppUpdate(update);
|
|
console.log(`app update available v${update.version}`);
|
|
LOG.info('NEODLP', `App update available v${update.version}`);
|
|
if (enableNotifications && updateNotification) {
|
|
sendNotification({
|
|
title: `Update Available (v${update.version})`,
|
|
body: `A newer version of ${config.appName} is available. Please update to the latest version for the best experience`,
|
|
});
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error(error);
|
|
} finally {
|
|
setIsCheckingAppUpdate(false);
|
|
}
|
|
}
|
|
|
|
const downloadAndInstallAppUpdate = async (update: Update) => {
|
|
setIsUpdating(true);
|
|
LOG.info('NEODLP', `Downloading and installing app update v${update.version}`);
|
|
let downloaded = 0;
|
|
let contentLength: number | undefined = 0;
|
|
await update.downloadAndInstall((event) => {
|
|
switch (event.event) {
|
|
case 'Started':
|
|
contentLength = event.data.contentLength;
|
|
console.log(`started downloading app update of ${event.data.contentLength} bytes`);
|
|
break;
|
|
case 'Progress':
|
|
downloaded += event.data.chunkLength;
|
|
const progress = (downloaded / (contentLength || 1)) * 100;
|
|
setDownloadProgress(Math.round(progress * 10) / 10);
|
|
console.log(`downloaded ${downloaded} bytes from ${contentLength} bytes of app update`);
|
|
break;
|
|
case 'Finished':
|
|
console.log('app update download finished');
|
|
setIsUpdating(false);
|
|
break;
|
|
}
|
|
});
|
|
await relaunchApp();
|
|
}
|
|
|
|
return { checkForAppUpdate, downloadAndInstallAppUpdate };
|
|
}
|