diff --git a/package-lock.json b/package-lock.json index 9ff9dc4..9c393be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "qobuz-desktop-player", - "version": "0.1.1", + "version": "0.1.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "qobuz-desktop-player", - "version": "0.1.1", + "version": "0.1.3", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -15,7 +15,9 @@ "babel-register": "^6.26.0", "discord-rpc": "^4.0.1", "electron-config": "^1.0.0", - "electron-settings": "^4.0.2" + "electron-log": "^5.2.3", + "electron-settings": "^4.0.2", + "electron-updater": "^6.3.9" }, "devDependencies": { "electron": "^33.0.2", @@ -1363,7 +1365,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, "license": "Python-2.0" }, "node_modules/assert-plus": { @@ -2182,7 +2183,6 @@ "version": "9.2.10", "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz", "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==", - "dev": true, "license": "MIT", "dependencies": { "debug": "^4.3.4", @@ -2196,7 +2196,6 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -2214,7 +2213,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/builder-util/node_modules/ansi-styles": { @@ -3445,6 +3443,14 @@ "conf": "^1.0.0" } }, + "node_modules/electron-log": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.2.3.tgz", + "integrity": "sha512-BabCiEV+p362LzY0EFE8hyzeGknzKDWSbhS0VFfRYQGA4FHWXWSfaKJlvTR9LFepNoORXxc/BWvqBXIPgsVFgA==", + "engines": { + "node": ">= 14" + } + }, "node_modules/electron-packager": { "version": "17.1.2", "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-17.1.2.tgz", @@ -3796,6 +3802,64 @@ "typedarray-to-buffer": "^3.1.5" } }, + "node_modules/electron-updater": { + "version": "6.3.9", + "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.3.9.tgz", + "integrity": "sha512-2PJNONi+iBidkoC5D1nzT9XqsE8Q1X28Fn6xRQhO3YX8qRRyJ3mkV4F1aQsuRnYPqq6Hw+E51y27W75WgDoofw==", + "dependencies": { + "builder-util-runtime": "9.2.10", + "fs-extra": "^10.1.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "lodash.escaperegexp": "^4.1.2", + "lodash.isequal": "^4.5.0", + "semver": "^7.6.3", + "tiny-typed-emitter": "^2.1.0" + } + }, + "node_modules/electron-updater/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-updater/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-updater/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-updater/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -5134,7 +5198,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -5220,7 +5283,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", - "dev": true, "license": "MIT" }, "node_modules/lazystream": { @@ -5334,6 +5396,11 @@ "license": "MIT", "peer": true }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" + }, "node_modules/lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", @@ -5349,6 +5416,11 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -6818,7 +6890,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "dev": true, "license": "ISC" }, "node_modules/semver": { @@ -7431,6 +7502,11 @@ "node": ">= 10.0.0" } }, + "node_modules/tiny-typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", + "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==" + }, "node_modules/tmp": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", diff --git a/package.json b/package.json index 8e3a8b4..a55b213 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "qobuz-desktop-player", "productName": "Qobuz Desktop player", - "version": "0.1.3", + "version": "0.1.4", "description": "Qobuz desktop player avec Discord RPC", "main": "index.js", "scripts": { @@ -23,7 +23,9 @@ "babel-register": "^6.26.0", "discord-rpc": "^4.0.1", "electron-config": "^1.0.0", - "electron-settings": "^4.0.2" + "electron-log": "^5.2.3", + "electron-settings": "^4.0.2", + "electron-updater": "^6.3.9" }, "devDependencies": { "electron": "^33.0.2", @@ -32,13 +34,32 @@ }, "build": { "appId": "lewarpy.qobuz.desktop.player", + "win": { + "target": [ + "nsis" + ], + "arch": [ + "x64", + "ia32" + ] + }, "mac": { - "category": "public.app-category.music" - }, + "category": "public.app-category.music" + }, "linux": { "target": [ "AppImage" ] + }, + "publish": { + "provider": "github", + "releaseType": "release" + }, + "nsis": { + "oneClick": true, + "allowToChangeInstallationDirectory": false, + "createDesktopShortcut": true, + "runAfterFinish": true } } } diff --git a/src/electron/component/menu.js b/src/electron/component/menu.js deleted file mode 100644 index 2f9d4b1..0000000 --- a/src/electron/component/menu.js +++ /dev/null @@ -1,45 +0,0 @@ -import { Menu, shell } from 'electron'; - -const appMenu = (config, mainActions) => { - const menu = new Menu(); - - const actions = mainActions.getActions(); - - const contextMenu = Menu.buildFromTemplate([ - { - label: 'Player', - submenu: [ - actions.play, - actions.pause, - actions.previous, - actions.next, - ] - }, - { - label: 'Window', - submenu: [ - { label: 'Minimize', accelerator: 'CmdOrCtrl+M', role: 'minimize' }, - actions.quit - ] - }, - { - label: 'Help', - submenu: [ - { - label: 'Issues', - click: () => shell.openExternal('https://github.com/nlarche/qobuz-desktop-player/issues'), - }, - { - label: 'Learn More', - click: () => shell.openExternal('https://github.com/nlarche/qobuz-desktop-player'), - }, - { label: `Version ${config.version}` }, - ] - } - ]) - Menu.setApplicationMenu(contextMenu) - - return menu; -} - -export default appMenu; \ No newline at end of file diff --git a/src/electron/main.js b/src/electron/main.js index d6b4691..84bb348 100644 --- a/src/electron/main.js +++ b/src/electron/main.js @@ -1,12 +1,14 @@ import { app, ipcMain, BrowserWindow } from 'electron'; +import { autoUpdater } from 'electron-updater'; import path from 'path'; import url from 'url'; import getConfig from './config'; import appTray from './component/tray'; -import appMenu from './component/menu'; import Action from './component/action'; +autoUpdater.logger = require("electron-log") +autoUpdater.logger.transports.file.level = "info" const RPC = require('discord-rpc'); const clientId = '1309120404027080706'; @@ -55,16 +57,18 @@ function createWindow() { const action = new Action(mainWindow, config); tray = appTray(config, action); - appMenu(config, action); - } +autoUpdater.autoDownload = true; + // This method will be called when Electron has finished // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. app.on('ready', () => { createWindow(); + autoUpdater.checkForUpdatesAndNotify(); + rpc.on('ready', () => { console.log('RPC connected'); }); @@ -72,7 +76,7 @@ app.on('ready', () => { ipcMain.on('update-discord-rpc', (event, data) => { if (data) { const icon = data.paused ? 'pause_bw' : 'play_bw'; - const playing = data.paused ? 'En paused' : 'En lecture'; + const playing = data.paused ? 'En pause' : 'En lecture'; rpc.setActivity({ details: `${data.trackName} - ${data.artist}`, @@ -112,4 +116,9 @@ app.on('before-quit', () => willQuitApp = true);; // In this file you can include the rest of your app's specific main process // code. You can also put them in separate files and require them here. -rpc.login({ clientId }).catch(console.error); \ No newline at end of file +rpc.login({ clientId }).catch(console.error); + +ipcMain.handle('relaunch-app', () => { + app.relaunch(); + app.exit(); +}); \ No newline at end of file