Use ES modules and single-instance, and update default config
This commit is contained in:
parent
6b771982f9
commit
3abd3dfd5e
10
package.json
10
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "tabs",
|
"name": "tabs",
|
||||||
"version": "0.0.1",
|
"version": "0.0.2",
|
||||||
"description": "Persistent and separate browser tabs in one window",
|
"description": "Persistent and separate browser tabs in one window",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Alice Gaudon",
|
"name": "Alice Gaudon",
|
||||||
@ -8,7 +8,8 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://gitlab.com/ArisuOngaku/tabs",
|
"homepage": "https://gitlab.com/ArisuOngaku/tabs",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"main": "src/main.js",
|
"main": "tabs.js",
|
||||||
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "electron .",
|
"start": "electron .",
|
||||||
"dev": "electron . --dev",
|
"dev": "electron . --dev",
|
||||||
@ -17,6 +18,11 @@
|
|||||||
"pack": "electron-builder --dir",
|
"pack": "electron-builder --dir",
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
},
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ejs": "^3.0.1",
|
||||||
|
"esm": "^3.2.25",
|
||||||
|
"single-instance": "^0.0.1"
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"electron": "^6.0.10",
|
"electron": "^6.0.10",
|
||||||
"electron-builder": "^21.2.0"
|
"electron-builder": "^21.2.0"
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
const fs = require('fs');
|
import fs from "fs";
|
||||||
const path = require('path');
|
import path from "path";
|
||||||
|
import {homedir} from "os";
|
||||||
|
|
||||||
const Service = require('./Service');
|
import Service from "./Service";
|
||||||
|
|
||||||
const configDir = path.resolve(__dirname, '../config');
|
const configDir = path.resolve(homedir(), '.tabs-app');
|
||||||
const configFile = path.resolve(configDir, 'config.json');
|
const configFile = path.resolve(configDir, 'config.json');
|
||||||
|
|
||||||
class Config {
|
export default class Config {
|
||||||
constructor() {
|
constructor() {
|
||||||
// Load data from config file
|
// Load data from config file
|
||||||
let data = {};
|
let data = {};
|
||||||
@ -28,8 +29,7 @@ class Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.services.length === 0) {
|
if (this.services.length === 0) {
|
||||||
this.services.push(new Service('webmail', 'WebMail', 'far fa-envelope', false, 'https://mail.arisu.fr/', true));
|
this.services.push(new Service('welcome', 'Welcome', 'fas fa-rocket', false, 'https://gitlab.com/ArisuOngaku/tabs', false));
|
||||||
this.services.push(new Service('arisucloud', 'Arisu Cloud', 'arisucloud.svg', true, 'https://cloud.arisu.fr/', true));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.save();
|
this.save();
|
||||||
@ -38,6 +38,4 @@ class Config {
|
|||||||
save() {
|
save() {
|
||||||
fs.writeFileSync(configFile, JSON.stringify(this, null, 4));
|
fs.writeFileSync(configFile, JSON.stringify(this, null, 4));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Config;
|
|
@ -35,4 +35,4 @@ Service.requiredProperties = {
|
|||||||
'useFavicon': true,
|
'useFavicon': true,
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = Service;
|
export default Service;
|
29
src/main.js
29
src/main.js
@ -1,15 +1,11 @@
|
|||||||
const {
|
import fs from "fs";
|
||||||
app,
|
import path from "path";
|
||||||
BrowserWindow,
|
import {app, BrowserWindow, ipcMain, Menu, Tray} from "electron";
|
||||||
ipcMain,
|
|
||||||
Tray,
|
import Config from "./Config";
|
||||||
Menu,
|
|
||||||
} = require('electron');
|
|
||||||
const fs = require('fs');
|
|
||||||
const path = require('path');
|
|
||||||
const Config = require('./Config');
|
|
||||||
|
|
||||||
const resourcesDir = path.resolve(__dirname, '../resources');
|
const resourcesDir = path.resolve(__dirname, '../resources');
|
||||||
|
const iconPath = path.resolve(resourcesDir, 'logo.png');
|
||||||
|
|
||||||
const config = new Config();
|
const config = new Config();
|
||||||
|
|
||||||
@ -33,7 +29,7 @@ function toggleMainWindow() {
|
|||||||
|
|
||||||
function createWindow() {
|
function createWindow() {
|
||||||
// System tray
|
// System tray
|
||||||
tray = new Tray(path.resolve(resourcesDir, 'logo.png'));
|
tray = new Tray(iconPath);
|
||||||
tray.setToolTip('Tabs');
|
tray.setToolTip('Tabs');
|
||||||
tray.setContextMenu(Menu.buildFromTemplate([
|
tray.setContextMenu(Menu.buildFromTemplate([
|
||||||
{label: 'Tabs', enabled: false},
|
{label: 'Tabs', enabled: false},
|
||||||
@ -51,6 +47,7 @@ function createWindow() {
|
|||||||
webviewTag: true,
|
webviewTag: true,
|
||||||
},
|
},
|
||||||
autoHideMenuBar: true,
|
autoHideMenuBar: true,
|
||||||
|
icon: iconPath,
|
||||||
});
|
});
|
||||||
window.maximize();
|
window.maximize();
|
||||||
window.on('closed', () => {
|
window.on('closed', () => {
|
||||||
@ -103,6 +100,9 @@ function createWindow() {
|
|||||||
mode: 'right'
|
mode: 'right'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
addServiceWindow.webContents.on('dom-ready', () => {
|
||||||
|
addServiceWindow.webContents.send('syncIcons', listIcons('brands'), listIcons('solid'));
|
||||||
|
});
|
||||||
addServiceWindow.loadFile(path.resolve(resourcesDir, 'add-service.html'))
|
addServiceWindow.loadFile(path.resolve(resourcesDir, 'add-service.html'))
|
||||||
.catch(console.error);
|
.catch(console.error);
|
||||||
}
|
}
|
||||||
@ -117,4 +117,11 @@ function setActiveService(index) {
|
|||||||
selectedService = index;
|
selectedService = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function listIcons(set) {
|
||||||
|
const directory = path.resolve(resourcesDir, 'icons/' + set);
|
||||||
|
const icons = [];
|
||||||
|
fs.readdirSync(directory).forEach(i => icons.push(i.split('.svg')[0]));
|
||||||
|
return icons;
|
||||||
|
}
|
||||||
|
|
||||||
app.on('ready', createWindow);
|
app.on('ready', createWindow);
|
10
tabs.js
Normal file
10
tabs.js
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/electron
|
||||||
|
const SingleInstance = require('single-instance');
|
||||||
|
const lock = new SingleInstance('tabs-app');
|
||||||
|
lock.lock().then(() => {
|
||||||
|
require = require("esm")(module);
|
||||||
|
module.exports = require("./src/main.js");
|
||||||
|
}).catch(error => {
|
||||||
|
console.error(error);
|
||||||
|
process.exit(0);
|
||||||
|
});
|
22
yarn.lock
22
yarn.lock
@ -492,6 +492,11 @@ ejs@^2.6.2:
|
|||||||
resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba"
|
resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba"
|
||||||
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
|
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
|
||||||
|
|
||||||
|
ejs@^3.0.1:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.0.1.tgz#30c8f6ee9948502cc32e85c37a3f8b39b5a614a5"
|
||||||
|
integrity sha512-cuIMtJwxvzumSAkqaaoGY/L6Fc/t6YvoP9/VIaK0V/CyqKLEQ8sqODmYfy/cjXEdZ9+OOL8TecbJu+1RsofGDw==
|
||||||
|
|
||||||
electron-builder@^21.2.0:
|
electron-builder@^21.2.0:
|
||||||
version "21.2.0"
|
version "21.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-21.2.0.tgz#b68ec4def713fc0b8602654ce842f972432f50c5"
|
resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-21.2.0.tgz#b68ec4def713fc0b8602654ce842f972432f50c5"
|
||||||
@ -577,6 +582,11 @@ escape-string-regexp@^1.0.5:
|
|||||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||||
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||||
|
|
||||||
|
esm@^3.2.25:
|
||||||
|
version "3.2.25"
|
||||||
|
resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10"
|
||||||
|
integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==
|
||||||
|
|
||||||
esprima@^4.0.0:
|
esprima@^4.0.0:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
|
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
|
||||||
@ -1508,6 +1518,11 @@ responselike@^1.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
lowercase-keys "^1.0.0"
|
lowercase-keys "^1.0.0"
|
||||||
|
|
||||||
|
rsvp@^3.1.0:
|
||||||
|
version "3.6.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a"
|
||||||
|
integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==
|
||||||
|
|
||||||
safe-buffer@^5.0.1, safe-buffer@^5.1.2:
|
safe-buffer@^5.0.1, safe-buffer@^5.1.2:
|
||||||
version "5.2.0"
|
version "5.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
|
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
|
||||||
@ -1574,6 +1589,13 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
|
|||||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
||||||
integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
|
integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
|
||||||
|
|
||||||
|
single-instance@^0.0.1:
|
||||||
|
version "0.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/single-instance/-/single-instance-0.0.1.tgz#ef0f0673fe9800b6753445d97058d253f5d4b8ed"
|
||||||
|
integrity sha1-7w8Gc/6YALZ1NEXZcFjSU/XUuO0=
|
||||||
|
dependencies:
|
||||||
|
rsvp "^3.1.0"
|
||||||
|
|
||||||
single-line-log@^1.1.2:
|
single-line-log@^1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364"
|
resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364"
|
||||||
|
Loading…
Reference in New Issue
Block a user