diff --git a/package.json b/package.json index d5c307d3..7b4c8d06 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "version": "0.2.0", "description": "Trufos - A cross-platform REST client", "main": ".vite/build/main.js", + "repository": "github:EXXETA/trufos", "scripts": { "start": "electron-forge start", "package": "electron-forge package", @@ -105,6 +106,7 @@ "template-replace-stream": "^2.2.0", "tmp": "^0.2.5", "undici": "^7.16.0", + "update-electron-app": "^3.1.1", "winston": "^3.18.3", "xml-formatter": "^3.6.7", "zustand": "^5.0.8" diff --git a/src/main/event/main-event-service.ts b/src/main/event/main-event-service.ts index 955b7e0b..eecd4cbd 100644 --- a/src/main/event/main-event-service.ts +++ b/src/main/event/main-event-service.ts @@ -10,6 +10,7 @@ import { PersistenceService } from '../persistence/service/persistence-service'; import './stream-events'; import { EnvironmentMap } from 'shim/objects/environment'; import { ImportService } from 'main/import/service/import-service'; +import { updateElectronApp } from 'update-electron-app'; const persistenceService = PersistenceService.instance; const environmentService = EnvironmentService.instance; @@ -171,4 +172,17 @@ export class MainEventService implements IEventService { async rename(object: Folder | TrufosRequest, newTitle: string): Promise { await persistenceService.rename(object, newTitle); } + + updateApp() { + const prefixMessage = (message: string) => `[UPDATER]: ${message}`; + updateElectronApp({ + logger: { + log: (message: string) => logger.info(prefixMessage(message)), + info: (message: string) => logger.info(prefixMessage(message)), + error: (message: string) => logger.error(prefixMessage(message)), + warn: (message: string) => logger.warn(prefixMessage(message)), + }, + updateInterval: '1 hour', + }); + } } diff --git a/src/main/main.ts b/src/main/main.ts index 15fb137a..d11b6c6c 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -9,6 +9,7 @@ import { SettingsService } from './persistence/service/settings-service'; import { once } from 'node:events'; import process from 'node:process'; import { ResponseBodyService } from 'main/network/service/response-body-service'; +import { MainEventService } from 'main/event/main-event-service'; declare const MAIN_WINDOW_VITE_DEV_SERVER_URL: string | undefined; declare const MAIN_WINDOW_VITE_NAME: string; @@ -32,6 +33,7 @@ const createWindow = async () => { // initialize services in correct order await SettingsService.instance.init(); await EnvironmentService.instance.init(); + MainEventService.instance.updateApp(); // check for updates in the background // create the browser window const mainWindow = new BrowserWindow({ diff --git a/src/renderer/services/event/renderer-event-service.ts b/src/renderer/services/event/renderer-event-service.ts index 31b7e0c2..c7ed00bd 100644 --- a/src/renderer/services/event/renderer-event-service.ts +++ b/src/renderer/services/event/renderer-event-service.ts @@ -64,4 +64,5 @@ export class RendererEventService implements IEventService { listCollections = createEventMethod('listCollections'); importCollection = createEventMethod('importCollection'); rename = createEventMethod('rename'); + updateApp = createEventMethod('updateApp'); } diff --git a/src/shim/event-service.ts b/src/shim/event-service.ts index fa1d304a..94555a68 100644 --- a/src/shim/event-service.ts +++ b/src/shim/event-service.ts @@ -161,4 +161,10 @@ export interface IEventService { * @param newTitle The new title. */ rename(object: Folder | TrufosRequest, newTitle: string): Promise; + + /** + * Trigger the application update process in the background. + * Will show a dialog to the user if an update is available. + */ + updateApp(): void; } diff --git a/yarn.lock b/yarn.lock index 6c49cfeb..1190940e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6649,6 +6649,15 @@ __metadata: languageName: node linkType: hard +"github-url-to-object@npm:^4.0.4": + version: 4.0.6 + resolution: "github-url-to-object@npm:4.0.6" + dependencies: + is-url: "npm:^1.1.0" + checksum: 10c0/b8ed9b2b93c55657299b7cc5ce9faf4441f143e59f995e126929d18f8fc692fc932d8530da9bde7655f35b29201beacbc17b066b7e26dbcc0dc983f8d3c918cf + languageName: node + linkType: hard + "glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -7440,6 +7449,13 @@ __metadata: languageName: node linkType: hard +"is-url@npm:^1.1.0": + version: 1.2.4 + resolution: "is-url@npm:1.2.4" + checksum: 10c0/0157a79874f8f95fdd63540e3f38c8583c2ef572661cd0693cda80ae3e42dfe8e9a4a972ec1b827f861d9a9acf75b37f7d58a37f94a8a053259642912c252bc3 + languageName: node + linkType: hard + "is-weakmap@npm:^2.0.2": version: 2.0.2 resolution: "is-weakmap@npm:2.0.2" @@ -11023,6 +11039,7 @@ __metadata: ts-node: "npm:^10.9.2" typescript: "npm:5.9.3" undici: "npm:^7.16.0" + update-electron-app: "npm:^3.1.1" vite: "npm:^7.1.12" vitest: "npm:^4.0.1" webpack: "npm:^5.102.1" @@ -11419,6 +11436,16 @@ __metadata: languageName: node linkType: hard +"update-electron-app@npm:^3.1.1": + version: 3.1.1 + resolution: "update-electron-app@npm:3.1.1" + dependencies: + github-url-to-object: "npm:^4.0.4" + ms: "npm:^2.1.1" + checksum: 10c0/b3c72bd13a02a7227d7116dc939b96a458545371d2dd25a26bf488cefb40d55af4a7c6c81ef025f14fd97f2d9c86256d3e200c7895a5fc4e3ddd3e5594f2ff12 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1"