1 const { app, ipcMain, protocol, session, BrowserWindow, BrowserView, Menu, nativeImage, clipboard, dialog, Notification } = require('electron');
2 const path = require('path');
3 const fs = require('fs');
4 const url = require('url');
5 const os = require('os');
7 const { autoUpdater } = require('electron-updater');
9 const { extensionsMain } = require('electron-extensions');
10 const config = require('./Config');
12 const WindowManager = require('./WindowManager');
13 const windowManager = new WindowManager();
15 const protocolStr = 'flast';
16 const fileProtocolStr = `${protocolStr}-file`;
22 getBaseWindow = (width = 1100, height = 680, minWidth = 320, minHeight = 600, x, y, frame = false) => {
23 return new BrowserWindow({
24 width, height, minWidth, minHeight, x, y, 'titleBarStyle': 'hidden', frame, fullscreenable: true,
26 nodeIntegration: true,
29 experimentalFeatures: true,
30 contextIsolation: false,
35 module.exports = class Application {
37 protocol.registerSchemesAsPrivileged([
38 { scheme: protocolStr, privileges: { standard: true, bypassCSP: true, secure: true } },
39 { scheme: fileProtocolStr, privileges: { standard: false, bypassCSP: true, secure: true } }
42 autoUpdater.on('checking-for-update', () => {
43 console.log('Checking for update...')
45 autoUpdater.on('update-available', (info) => {
46 console.log('Update available.');
48 autoUpdater.on('update-not-available', (info) => {
49 console.log('Update not available.');
51 autoUpdater.on('error', (err) => {
52 console.log('Error in auto-updater. ' + err);
54 autoUpdater.on('download-progress', (progressObj) => {
55 console.log('Download speed: ' + progressObj.bytesPerSecond + ' - Downloaded ' + progressObj.percent + '% (' + progressObj.transferred + "/" + progressObj.total + ')');
57 autoUpdater.on('update-downloaded', (info) => {
58 console.log('Update downloaded.');
61 app.on('ready', () => {
62 process.env.GOOGLE_API_KEY = config.googleAPIKey;
64 session.defaultSession.setUserAgent(session.defaultSession.getUserAgent().replace(/ Electron\/[0-9\.]*/g, ''));
66 autoUpdater.checkForUpdatesAndNotify();
67 Menu.setApplicationMenu(null);
69 windowManager.addWindow();
70 // this.loadExtension('gmngpagflejjoblmmamaonmnkghjmebh');
71 // this.loadExtension('bdiadchoogngocfifcomfeakccmcecee');
74 app.on('window-all-closed', () => {
75 if (process.platform !== 'darwin') {
80 app.on('activate', () => {
83 app.on('login', (e, webContents, request, authInfo, callback) => {
86 subWindow = getBaseWindow(320, 230, 320, 230);
87 // subWindow.setParentWindow(mainWindow);
88 subWindow.setMovable(false);
89 subWindow.setResizable(false);
90 subWindow.setMinimizable(false);
91 subWindow.setMaximizable(false);
92 const startUrl = process.env.ELECTRON_START_URL || url.format({
93 pathname: path.join(__dirname, '/../build/index.html'),
96 hash: '/authentication',
99 subWindow.loadURL(startUrl);
100 loginCallback = callback;
103 ipcMain.on('authorization', (event, arg) => {
104 loginCallback(arg.username, arg.password);
109 loadExtension = (id) => {
110 const extensionDir = path.resolve(os.homedir(), 'AppData\\Local\\Google\\Chrome\\User Data\\Default\\Extensions');
112 const versions = fs.readdirSync(`${extensionDir}/${id}`).sort();
113 const version = versions.pop();
115 // BrowserWindow.addExtension(`${extensionDir}/${id}/${version}`);
116 // BrowserWindow.addDevToolsExtension(`${extensionDir}/${id}/${version}`);
117 extensionsMain.setSession(session.defaultSession);
118 extensionsMain.load(`${extensionDir}/${id}/${version}`);