diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bb484a682..bb93f7a67 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,16 +17,16 @@ jobs: os: windows-latest platform: win - kind: mac - os: macos-11 + os: macos-14 platform: osx steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: # The talk on the street says this might be a good version for building. - node-version: 14.20.1 + node-version: 20.16.0 cache: yarn - name: Install Yarn dependencies @@ -46,6 +46,11 @@ jobs: # DEBUG: electron-builder with: run: yarn build-${{ matrix.platform }} --publish=never + - name: Upload Artifacts + uses: actions/upload-artifact@v4 + with: + name: r2modman-${{ matrix.platform }} + path: dist/electron/Packaged - if: steps.build.outputs.stderr != '' name: Log stderr diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 386c69bf3..e7c02b483 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,7 +24,7 @@ jobs: uses: actions/setup-node@v4 with: # The talk on the street says this might be a good version for building. - node-version: 14.20.1 + node-version: 20.16.0 cache: yarn - name: Install Yarn dependencies diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f65a35076..32089f691 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,9 +1,9 @@ -name: Build +name: Test on: [push] jobs: - build: + test: name: Test on ${{ matrix.platform }} runs-on: ${{ matrix.os }} strategy: @@ -17,16 +17,16 @@ jobs: os: windows-latest platform: win - kind: mac - os: macos-11 + os: macos-14 platform: osx steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: # The talk on the street says this might be a good version for building. - node-version: 14.20.1 + node-version: 20.16.0 cache: yarn - name: Install Yarn dependencies diff --git a/package.json b/package.json index 6984b37ac..4ccf1cda0 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "build-osx": "quasar build --mode electron -T mac", "publish": "quasar build --mode electron --publish always", "publish-win": "quasar build --mode electron -T win32 --publish always", - "publish-linux": "quasar build --mode electron -T linux --publish always", + "publish-linux": "quasar build --mode electron -T linux --publish always", "test:unit": "jest --updateSnapshot", "test:unit:ci": "jest --ci", "test:unit:coverage": "jest --coverage", @@ -39,23 +39,19 @@ "bulma-switch": "^2.0.0", "core-js": "^3.6.5", "dexie": "^3.2.7", - "dot-prop": "^5.2.0", "electron-updater": "4.2.5", "elliptic": "^6.5.4", "floating-vue": "^1.0.0-beta.19", "fs-extra": "^8.1.0", "glob-parent": "^6.0.2", - "highlight.js": "^10.4.1", "lodash.debounce": "^4.0.8", - "moment": "^2.29.1", - "node-ipc": "^9.1.1", - "quasar": "^1.14.7", + "moment": "^2.30.1", + "node-gyp": "^10.2.0", + "node-ipc": "^12.0.0", + "quasar": "^1.22.10", "quill": "^1.3.7", "sanitize-filename": "^1.6.3", - "serialize-javascript": "^3.1.0", "tar": "^6.1.11", - "trim-newlines": "^4.0.2", - "unzipper": "^0.10.5", "vue-class-component": "^7.2.2", "vue-i18n": "^8.0.0", "vue-property-decorator": "^8.3.0", @@ -65,50 +61,48 @@ "devDependencies": { "@babel/core": "^7.4.0", "@babel/preset-typescript": "^7.14.5", - "@quasar/app": "^2.0.9", + "@quasar/app": "^2.4.4", "@quasar/quasar-app-extension-testing": "^1.0.3", "@quasar/quasar-app-extension-testing-unit-jest": "^2.2.2", "@quasar/quasar-app-extension-typescript": "^1.0.2", "@types/adm-zip": "^0.4.34", "@types/async-lock": "^1.1.2", "@types/chai": "^4.2.11", + "@types/electron": "^1.6.10", "@types/fs-extra": "^8.0.1", "@types/lodash.debounce": "^4.0.7", + "@types/mocha": "^10.0.7", "@types/node": "^12.12.12", "@types/quill": "^2.0.3", "@types/sinon": "^10.0.2", - "@types/unzipper": "^0.10.1", "@types/yaml": "^1.2.0", "@typescript-eslint/eslint-plugin": "^1.12.0", "@typescript-eslint/parser": "^1.12.0", "@vue/eslint-config-airbnb": "^4.0.0", "@vue/test-utils": "^1.2.1", - "babel-core": "^7.0.0-beta.3", "babel-eslint": "^10.0.1", "babel-jest": "^27.0.2", "chai": "^4.2.0", "devtron": "^1.4.0", - "electron": "^11.1.1", - "electron-builder": "22.10.5", + "electron": "31.3.1", + "electron-builder": "24.13.3", "electron-debug": "^3.0.1", - "electron-devtools-installer": "^3.0.0", - "electron-packager": "14.1.1", + "electron-devtools-installer": "^3.2.0", + "electron-packager": "17.1.2", "eslint": "^6.8.0", "eslint-config-prettier": "^6.0.0", "eslint-loader": "^2.1.1", "eslint-plugin-jest": "^24.1.0", "eslint-plugin-vue": "^5.0.0", - "identity-obj-proxy": "^3.0.0", "majestic": "^1.2.24", - "minimist": "^1.2.2", + "minimist": "^1.2.8", "mocha": "^8.0.1", - "mock-require": "^3.0.3", - "node-sass": "^4.13.1", + "sass": "^1.77.8", "sass-loader": "^10.2.1", "sinon": "^11.1.1", "ts-node": "^8.10.2", - "typescript": "^4.5.5", - "vue-jest": "^3.0.0", + "typescript": "^5.5.4", + "vue-jest": "^3.0.7", "wallaby-vue-compiler": "^1.0.3" }, "browserslist": [ @@ -122,9 +116,13 @@ "last 10 iOS versions", "last 5 Opera versions" ], + "resolutions": { + "deasync": "0.1.30" + }, "engines": { - "node": ">= 10.18.1", + "node": ">= 18", "npm": ">= 6.13.4", "yarn": ">= 1.21.1" - } + }, + "packageManager": "yarn@1.22.22" } diff --git a/quasar.conf.js b/quasar.conf.js index 7725b02ed..dd44d5de4 100644 --- a/quasar.conf.js +++ b/quasar.conf.js @@ -118,63 +118,6 @@ module.exports = configure(function(/* ctx */) { // https://quasar.dev/options/animations animations: [], - // https://quasar.dev/quasar-cli/developing-ssr/configuring-ssr - ssr: { - pwa: false - }, - - // https://quasar.dev/quasar-cli/developing-pwa/configuring-pwa - pwa: { - workboxPluginMode: 'GenerateSW', // 'GenerateSW' or 'InjectManifest' - workboxOptions: {}, // only for GenerateSW - manifest: { - name: `r2modmanPlus`, - short_name: `r2modmanPlus`, - description: `A simple and easy to use Risk of Rain 2 mod manager`, - display: 'standalone', - orientation: 'portrait', - background_color: '#ffffff', - theme_color: '#027be3', - icons: [ - { - src: 'icons/icon-128x128.png', - sizes: '128x128', - type: 'image/png' - }, - { - src: 'icons/icon-192x192.png', - sizes: '192x192', - type: 'image/png' - }, - { - src: 'icons/icon-256x256.png', - sizes: '256x256', - type: 'image/png' - }, - { - src: 'icons/icon-384x384.png', - sizes: '384x384', - type: 'image/png' - }, - { - src: 'icons/icon-512x512.png', - sizes: '512x512', - type: 'image/png' - } - ] - } - }, - - // Full list of options: https://quasar.dev/quasar-cli/developing-cordova-apps/configuring-cordova - cordova: { - // noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing - }, - - // Full list of options: https://quasar.dev/quasar-cli/developing-capacitor-apps/configuring-capacitor - capacitor: { - hideSplashscreen: true - }, - // Full list of options: https://quasar.dev/quasar-cli/developing-electron-apps/configuring-electron electron: { bundler: 'builder', // 'packager' or 'builder' diff --git a/src-electron/main-process/electron-main.dev.js b/src-electron/main-process/electron-main.dev.js index dda445d90..29d2139fa 100644 --- a/src-electron/main-process/electron-main.dev.js +++ b/src-electron/main-process/electron-main.dev.js @@ -17,24 +17,6 @@ app.whenReady().then(() => { // Install vuejs devtools installExtension(VUEJS_DEVTOOLS) - .then(name => { - console.log(`Added Extension: ${name}`) - // get main window - const win = BrowserWindow.getFocusedWindow() - if (win) { - win.webContents.on('did-frame-finish-load', () => { - win.webContents.once('devtools-opened', () => { - win.webContents.focus() - }) - // open electron debug - console.log('Opening dev tools') - win.webContents.openDevTools() - }) - } - }) - .catch(err => { - console.log('An error occurred: ', err) - }) }, 250) }) diff --git a/src-electron/main-process/electron-main.js b/src-electron/main-process/electron-main.js index 3b1a026e1..2537e99a5 100644 --- a/src-electron/main-process/electron-main.js +++ b/src-electron/main-process/electron-main.js @@ -1,4 +1,4 @@ -import { app, BrowserWindow, ipcMain, nativeTheme, protocol } from 'electron'; +import { app, BrowserWindow, ipcMain, protocol } from 'electron'; import Listeners from './ipcListeners'; import Persist from './window-state-persist'; import path from 'path'; @@ -7,13 +7,6 @@ import * as fs from 'fs'; app.allowRendererProcessReuse = true; -try { - if (process.platform === 'win32' && nativeTheme.shouldUseDarkColors === true) { - require('fs').unlinkSync(path.join(app.getPath('userData'), 'DevTools Extensions')); - } -} catch (_) { -} - /** * Set `__statics` path to static files in production; * The reason we are setting it here is that the path needs to be evaluated at runtime @@ -30,7 +23,6 @@ function createWindow() { /** * Initial window options */ - const windowSize = Persist.getSize(app, { defaultWidth: 1200, defaultHeight: 700 @@ -39,6 +31,8 @@ function createWindow() { mainWindow = new BrowserWindow({ width: windowSize.width, height: windowSize.height, + minWidth: 1200, + minHeight: 700, useContentSize: true, webPreferences: { nodeIntegration: true, @@ -47,7 +41,13 @@ function createWindow() { contextIsolation: false, }, icon: path.join(__dirname, 'icon.png'), - autoHideMenuBar: process.env.PROD + autoHideMenuBar: process.env.PROD, + frame: false, + show: false + }); + + mainWindow.once('ready-to-show', () => { + mainWindow.show(); }); if (windowSize.maximized) { diff --git a/src-electron/main-process/ipcListeners.js b/src-electron/main-process/ipcListeners.js index 6f64b2793..011981493 100644 --- a/src-electron/main-process/ipcListeners.js +++ b/src-electron/main-process/ipcListeners.js @@ -34,6 +34,19 @@ ipcMain.on('get-appData-directory', ()=>{ browserWindow.webContents.send('receive-appData-directory', app.getPath('appData')); }); +ipcMain.on('window-minimize', () => { + browserWindow.minimize(); +}) +ipcMain.on('window-maximize', () => { + if(browserWindow.isMaximized()) + browserWindow.unmaximize(); + else + browserWindow.maximize(); +}) +ipcMain.on('window-close', () => { + browserWindow.close(); +}) + ipcMain.on('get-is-portable', ()=>{ let isPortable = false; switch(process.platform){ @@ -68,4 +81,3 @@ ipcMain.on('show-open-dialog', (arg, fileOpts) => { browserWindow.webContents.send('receive-open-dialog', r); }); }); - diff --git a/src/App.vue b/src/App.vue index bff31f2db..b52069162 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,5 +1,30 @@