Add simple settings window with update checking
This commit is contained in:
parent
645a485daa
commit
5562841a19
6
dev-app-update.yml
Normal file
6
dev-app-update.yml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
owner: ArisuOngaku
|
||||||
|
repo: tabs
|
||||||
|
provider: github
|
||||||
|
updaterCacheDirName: tabs-updater
|
||||||
|
publisherName:
|
||||||
|
- Alice Gaudon
|
@ -17,12 +17,12 @@ const icons = [];
|
|||||||
let services = [];
|
let services = [];
|
||||||
let selectedService = null;
|
let selectedService = null;
|
||||||
let statusButton, homeButton, forwardButton, backButton, reloadButton;
|
let statusButton, homeButton, forwardButton, backButton, reloadButton;
|
||||||
let addButton;
|
let addButton, settingsButton;
|
||||||
let emptyPage;
|
let emptyPage;
|
||||||
let urlPreview;
|
let urlPreview;
|
||||||
|
|
||||||
let lastDragPosition;
|
// Service reordering
|
||||||
let oldActiveService; // For service reordering
|
let lastDragPosition, oldActiveService;
|
||||||
|
|
||||||
// Service context menu
|
// Service context menu
|
||||||
function openServiceContextMenu(event, serviceId) {
|
function openServiceContextMenu(event, serviceId) {
|
||||||
@ -380,6 +380,9 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
|
|
||||||
addButton = document.getElementById('add-button');
|
addButton = document.getElementById('add-button');
|
||||||
addButton.addEventListener('click', () => ipcRenderer.send('openServiceSettings', null));
|
addButton.addEventListener('click', () => ipcRenderer.send('openServiceSettings', null));
|
||||||
|
|
||||||
|
settingsButton = document.getElementById('settings-button');
|
||||||
|
settingsButton.addEventListener('click', () => ipcRenderer.send('openSettings', null));
|
||||||
});
|
});
|
||||||
|
|
||||||
function setActiveService(serviceId) {
|
function setActiveService(serviceId) {
|
||||||
|
29
resources/js/settings.js
Normal file
29
resources/js/settings.js
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
const {ipcRenderer, remote} = require('electron');
|
||||||
|
|
||||||
|
let currentVersion;
|
||||||
|
let updateStatus;
|
||||||
|
|
||||||
|
ipcRenderer.on('current-version', (e, version) => {
|
||||||
|
currentVersion.innerText = `Version: ${version.version}`;
|
||||||
|
});
|
||||||
|
|
||||||
|
ipcRenderer.on('updateStatus', (e, available, version) => {
|
||||||
|
if (available) {
|
||||||
|
updateStatus.innerHTML = `A new update is available! <a href="https://github.com/ArisuOngaku/tabs/releases/v${version}">Click here to download manually</a>.`;
|
||||||
|
} else {
|
||||||
|
updateStatus.innerText = 'Tabs is up to date.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function save() {
|
||||||
|
const formData = new FormData(document.querySelector('form'));
|
||||||
|
remote.getCurrentWindow().close();
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
currentVersion = document.getElementById('current-version');
|
||||||
|
updateStatus = document.getElementById('update-status');
|
||||||
|
|
||||||
|
ipcRenderer.send('syncSettings');
|
||||||
|
ipcRenderer.send('checkForUpdates');
|
||||||
|
});
|
40
resources/settings.html
Normal file
40
resources/settings.html
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Service settings</title>
|
||||||
|
|
||||||
|
<meta http-equiv="Content-Security-Policy"
|
||||||
|
content="style-src 'self' 'unsafe-inline' https://use.fontawesome.com; font-src 'self' https://use.fontawesome.com; script-src 'self' 'unsafe-inline'">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.2/css/all.css"
|
||||||
|
integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay" crossorigin="anonymous">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="style/layout.css">
|
||||||
|
<link rel="stylesheet" href="style/service-settings.css">
|
||||||
|
|
||||||
|
<script src="js/settings.js" defer></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<form action="javascript: save();">
|
||||||
|
<div class="form-header">
|
||||||
|
<h1>Settings</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-body">
|
||||||
|
<div class="updates">
|
||||||
|
<p id="current-version"></p>
|
||||||
|
<p id="update-status">Loading...</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-footer">
|
||||||
|
<div class="form-group" id="buttons">
|
||||||
|
<button id="cancel-button">Cancel</button>
|
||||||
|
<button type="submit">Save</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
36
src/Updater.js
Normal file
36
src/Updater.js
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import {autoUpdater} from "electron-updater";
|
||||||
|
|
||||||
|
export default class Updater {
|
||||||
|
#callback = (available, data) => {
|
||||||
|
console.log('Update:', available, data);
|
||||||
|
};
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
autoUpdater.autoDownload = false;
|
||||||
|
autoUpdater.on('error', err => {
|
||||||
|
this.#callback(false, err);
|
||||||
|
});
|
||||||
|
autoUpdater.on('update-available', v => {
|
||||||
|
this.#callback(true, v);
|
||||||
|
});
|
||||||
|
autoUpdater.on('update-not-available', () => {
|
||||||
|
this.#callback(false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Function} callback
|
||||||
|
*/
|
||||||
|
checkForUpdates(callback) {
|
||||||
|
this.#callback = callback;
|
||||||
|
autoUpdater.checkForUpdates().then(r => {
|
||||||
|
this.#callback(false, r.updateInfo);
|
||||||
|
}).catch(err => {
|
||||||
|
this.#callback(false, err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
getCurrentVersion() {
|
||||||
|
return autoUpdater.currentVersion;
|
||||||
|
}
|
||||||
|
}
|
47
src/main.js
47
src/main.js
@ -6,11 +6,13 @@ import Meta from "./Meta";
|
|||||||
import Config from "./Config";
|
import Config from "./Config";
|
||||||
import Service from "./Service";
|
import Service from "./Service";
|
||||||
import {autoUpdater} from "electron-updater";
|
import {autoUpdater} from "electron-updater";
|
||||||
|
import Updater from "./Updater";
|
||||||
|
|
||||||
const resourcesDir = path.resolve(__dirname, '../resources');
|
const resourcesDir = path.resolve(__dirname, '../resources');
|
||||||
const iconPath = path.resolve(resourcesDir, 'logo.png');
|
const iconPath = path.resolve(resourcesDir, 'logo.png');
|
||||||
|
|
||||||
const config = new Config();
|
const config = new Config();
|
||||||
|
const updater = new Updater();
|
||||||
|
|
||||||
const devMode = Meta.isDevMode();
|
const devMode = Meta.isDevMode();
|
||||||
|
|
||||||
@ -22,7 +24,7 @@ let selectedService = 0;
|
|||||||
|
|
||||||
let tray;
|
let tray;
|
||||||
let window;
|
let window;
|
||||||
let serviceSettingsWindow;
|
let serviceSettingsWindow, settingsWindow;
|
||||||
|
|
||||||
function toggleMainWindow() {
|
function toggleMainWindow() {
|
||||||
if (window != null) {
|
if (window != null) {
|
||||||
@ -201,6 +203,49 @@ async function createWindow() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Open add service window
|
||||||
|
ipcMain.on('openSettings', (e) => {
|
||||||
|
if (!settingsWindow) {
|
||||||
|
console.log('Opening settings');
|
||||||
|
settingsWindow = new BrowserWindow({
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
|
enableRemoteModule: true,
|
||||||
|
webviewTag: true,
|
||||||
|
},
|
||||||
|
parent: window,
|
||||||
|
modal: true,
|
||||||
|
autoHideMenuBar: true,
|
||||||
|
height: 850,
|
||||||
|
});
|
||||||
|
settingsWindow.on('close', () => {
|
||||||
|
settingsWindow = null;
|
||||||
|
});
|
||||||
|
if (devMode) {
|
||||||
|
settingsWindow.webContents.openDevTools({
|
||||||
|
mode: 'right'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
let syncListener;
|
||||||
|
ipcMain.on('syncSettings', syncListener = () => {
|
||||||
|
settingsWindow.webContents.send('current-version', updater.getCurrentVersion());
|
||||||
|
});
|
||||||
|
|
||||||
|
let checkForUpdatesListener;
|
||||||
|
ipcMain.on('checkForUpdates', checkForUpdatesListener = (e) => {
|
||||||
|
updater.checkForUpdates((available, version) => {
|
||||||
|
ipcMain.emit('updateStatus', available, version);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
settingsWindow.on('close', () => {
|
||||||
|
ipcMain.removeListener('sync-settings', syncListener);
|
||||||
|
ipcMain.removeListener('checkForUpdates', checkForUpdatesListener);
|
||||||
|
});
|
||||||
|
settingsWindow.loadFile(path.resolve(resourcesDir, 'settings.html'))
|
||||||
|
.catch(console.error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
console.log('> App started');
|
console.log('> App started');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user