Electron 11
This commit is contained in:
		
							parent
							
								
									1f065ce53e
								
							
						
					
					
						commit
						4321f76b0f
					
				@ -56,7 +56,9 @@
 | 
				
			|||||||
      CharacterPreviewHelper, RenderStyle
 | 
					      CharacterPreviewHelper, RenderStyle
 | 
				
			||||||
    } from './helper';
 | 
					    } from './helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    import {Point, WebviewTag, remote} from 'electron';
 | 
					    import {Point, WebviewTag} from 'electron';
 | 
				
			||||||
 | 
					    import * as remote from '@electron/remote';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    import Timer = NodeJS.Timer;
 | 
					    import Timer = NodeJS.Timer;
 | 
				
			||||||
    import IpcMessageEvent = Electron.IpcMessageEvent;
 | 
					    import IpcMessageEvent = Electron.IpcMessageEvent;
 | 
				
			||||||
    import CharacterPreview from './CharacterPreview.vue';
 | 
					    import CharacterPreview from './CharacterPreview.vue';
 | 
				
			||||||
 | 
				
			|||||||
@ -110,6 +110,7 @@
 | 
				
			|||||||
    import { Component, Hook, Watch } from '@f-list/vue-ts';
 | 
					    import { Component, Hook, Watch } from '@f-list/vue-ts';
 | 
				
			||||||
    import Axios from 'axios';
 | 
					    import Axios from 'axios';
 | 
				
			||||||
    import * as electron from 'electron';
 | 
					    import * as electron from 'electron';
 | 
				
			||||||
 | 
					    import * as remote from '@electron/remote';
 | 
				
			||||||
    import log from 'electron-log'; //tslint:disable-line:match-default-export-name
 | 
					    import log from 'electron-log'; //tslint:disable-line:match-default-export-name
 | 
				
			||||||
    import * as fs from 'fs';
 | 
					    import * as fs from 'fs';
 | 
				
			||||||
    import * as path from 'path';
 | 
					    import * as path from 'path';
 | 
				
			||||||
@ -143,11 +144,11 @@
 | 
				
			|||||||
    // import Connection from '../fchat/connection';
 | 
					    // import Connection from '../fchat/connection';
 | 
				
			||||||
    // import Notifications from './notifications';
 | 
					    // import Notifications from './notifications';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const webContents = electron.remote.getCurrentWebContents();
 | 
					    const webContents = remote.getCurrentWebContents();
 | 
				
			||||||
    const parent = electron.remote.getCurrentWindow().webContents;
 | 
					    const parent = remote.getCurrentWindow().webContents;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Allow requests to imgur.com
 | 
					    // Allow requests to imgur.com
 | 
				
			||||||
    const session = electron.remote.session;
 | 
					    const session = remote.session;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* tslint:disable:no-unsafe-any no-any no-unnecessary-type-assertion */
 | 
					    /* tslint:disable:no-unsafe-any no-any no-unnecessary-type-assertion */
 | 
				
			||||||
    session!.defaultSession!.webRequest!.onBeforeSendHeaders(
 | 
					    session!.defaultSession!.webRequest!.onBeforeSendHeaders(
 | 
				
			||||||
@ -453,7 +454,7 @@
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        async openProfileInBrowser(): Promise<void> {
 | 
					        async openProfileInBrowser(): Promise<void> {
 | 
				
			||||||
            await electron.remote.shell.openExternal(`https://www.f-list.net/c/${this.profileName}`);
 | 
					            await remote.shell.openExternal(`https://www.f-list.net/c/${this.profileName}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // tslint:disable-next-line: no-any no-unsafe-any
 | 
					            // tslint:disable-next-line: no-any no-unsafe-any
 | 
				
			||||||
            (this.$refs.profileViewer as any).hide();
 | 
					            (this.$refs.profileViewer as any).hide();
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@
 | 
				
			|||||||
                <i class="fa fa-cog"></i>
 | 
					                <i class="fa fa-cog"></i>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <ul class="nav nav-tabs" style="border-bottom:0;margin-bottom:-1px;margin-top:1px" ref="tabs">
 | 
					            <ul class="nav nav-tabs" style="border-bottom:0;margin-bottom:-1px;margin-top:1px" ref="tabs">
 | 
				
			||||||
                <li v-for="tab in tabs" :key="tab.view.id" class="nav-item" @click.middle="remove(tab)">
 | 
					                <li v-for="(tab,index) in tabs" :key="'tab-' + index" class="nav-item" @click.middle="remove(tab)">
 | 
				
			||||||
                    <a href="#" @click.prevent="show(tab)" class="nav-link tab"
 | 
					                    <a href="#" @click.prevent="show(tab)" class="nav-link tab"
 | 
				
			||||||
                        :class="{active: tab === activeTab, hasNew: tab.hasNew && tab !== activeTab}">
 | 
					                        :class="{active: tab === activeTab, hasNew: tab.hasNew && tab !== activeTab}">
 | 
				
			||||||
                        <img v-if="tab.user" :src="'https://static.f-list.net/images/avatar/' + tab.user.toLowerCase() + '.png'"/>
 | 
					                        <img v-if="tab.user" :src="'https://static.f-list.net/images/avatar/' + tab.user.toLowerCase() + '.png'"/>
 | 
				
			||||||
@ -38,6 +38,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    import {Component, Hook} from '@f-list/vue-ts';
 | 
					    import {Component, Hook} from '@f-list/vue-ts';
 | 
				
			||||||
    import * as electron from 'electron';
 | 
					    import * as electron from 'electron';
 | 
				
			||||||
 | 
					    import * as remote from '@electron/remote';
 | 
				
			||||||
    import * as fs from 'fs';
 | 
					    import * as fs from 'fs';
 | 
				
			||||||
    import * as path from 'path';
 | 
					    import * as path from 'path';
 | 
				
			||||||
    import * as url from 'url';
 | 
					    import * as url from 'url';
 | 
				
			||||||
@ -47,7 +48,7 @@
 | 
				
			|||||||
    import { getSafeLanguages, updateSupportedLanguages } from './language';
 | 
					    import { getSafeLanguages, updateSupportedLanguages } from './language';
 | 
				
			||||||
    import log from 'electron-log'; // tslint:disable-line: match-default-export-name
 | 
					    import log from 'electron-log'; // tslint:disable-line: match-default-export-name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const browserWindow = electron.remote.getCurrentWindow();
 | 
					    const browserWindow = remote.getCurrentWindow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // void browserWindow.webContents.setVisualZoomLevelLimits(1, 5);
 | 
					    // void browserWindow.webContents.setVisualZoomLevelLimits(1, 5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -60,7 +61,43 @@
 | 
				
			|||||||
    function destroyTab(tab: Tab): void {
 | 
					    function destroyTab(tab: Tab): void {
 | 
				
			||||||
        if(tab.user !== undefined) electron.ipcRenderer.send('disconnect', tab.user);
 | 
					        if(tab.user !== undefined) electron.ipcRenderer.send('disconnect', tab.user);
 | 
				
			||||||
        tab.tray.destroy();
 | 
					        tab.tray.destroy();
 | 
				
			||||||
        tab.view.destroy();
 | 
					
 | 
				
			||||||
 | 
					        tab.view.webContents.stop();
 | 
				
			||||||
 | 
					        tab.view.webContents.stopPainting();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					          if ((tab.view.webContents as any).destroy) {
 | 
				
			||||||
 | 
					            (tab.view.webContents as any).destroy();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        } catch (err) {
 | 
				
			||||||
 | 
					          console.log(err);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					          if ((tab.view.webContents as any).close) {
 | 
				
			||||||
 | 
					            (tab.view.webContents as any).close();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        } catch (err) {
 | 
				
			||||||
 | 
					          console.log(err);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					          if ((tab.view as any).destroy) {
 | 
				
			||||||
 | 
					            (tab.view as any).destroy();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        } catch (err) {
 | 
				
			||||||
 | 
					          console.log(err);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					          if ((tab.view as any).close) {
 | 
				
			||||||
 | 
					            (tab.view as any).close();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        } catch (err) {
 | 
				
			||||||
 | 
					          console.log(err);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // tab.view.destroy();
 | 
				
			||||||
        electron.ipcRenderer.send('tab-closed');
 | 
					        electron.ipcRenderer.send('tab-closed');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -145,7 +182,7 @@
 | 
				
			|||||||
                tab.tray.setToolTip(`${l('title')} - ${tab.user}`);
 | 
					                tab.tray.setToolTip(`${l('title')} - ${tab.user}`);
 | 
				
			||||||
                const menu = this.createTrayMenu(tab);
 | 
					                const menu = this.createTrayMenu(tab);
 | 
				
			||||||
                menu.unshift({label: tab.user, enabled: false}, {type: 'separator'});
 | 
					                menu.unshift({label: tab.user, enabled: false}, {type: 'separator'});
 | 
				
			||||||
                tab.tray.setContextMenu(electron.remote.Menu.buildFromTemplate(menu));
 | 
					                tab.tray.setContextMenu(remote.Menu.buildFromTemplate(menu));
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            electron.ipcRenderer.on('disconnect', (_e: Event, id: number) => {
 | 
					            electron.ipcRenderer.on('disconnect', (_e: Event, id: number) => {
 | 
				
			||||||
                const tab = this.tabMap[id];
 | 
					                const tab = this.tabMap[id];
 | 
				
			||||||
@ -155,7 +192,7 @@
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                tab.user = undefined;
 | 
					                tab.user = undefined;
 | 
				
			||||||
                tab.tray.setToolTip(l('title'));
 | 
					                tab.tray.setToolTip(l('title'));
 | 
				
			||||||
                tab.tray.setContextMenu(electron.remote.Menu.buildFromTemplate(this.createTrayMenu(tab)));
 | 
					                tab.tray.setContextMenu(remote.Menu.buildFromTemplate(this.createTrayMenu(tab)));
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            electron.ipcRenderer.on('has-new', (_e: Event, id: number, hasNew: boolean) => {
 | 
					            electron.ipcRenderer.on('has-new', (_e: Event, id: number, hasNew: boolean) => {
 | 
				
			||||||
                const tab = this.tabMap[id];
 | 
					                const tab = this.tabMap[id];
 | 
				
			||||||
@ -252,11 +289,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        async addTab(): Promise<void> {
 | 
					        async addTab(): Promise<void> {
 | 
				
			||||||
            if(this.lockTab) return;
 | 
					            if(this.lockTab) return;
 | 
				
			||||||
            const tray = new electron.remote.Tray(trayIcon);
 | 
					            const tray = new remote.Tray(trayIcon);
 | 
				
			||||||
            tray.setToolTip(l('title'));
 | 
					            tray.setToolTip(l('title'));
 | 
				
			||||||
            tray.on('click', (_e) => this.trayClicked(tab));
 | 
					            tray.on('click', (_e) => this.trayClicked(tab));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const view = new electron.remote.BrowserView(
 | 
					            const view = new remote.BrowserView(
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                webPreferences: {
 | 
					                webPreferences: {
 | 
				
			||||||
                  webviewTag: true,
 | 
					                  webviewTag: true,
 | 
				
			||||||
@ -277,7 +314,7 @@
 | 
				
			|||||||
            view.setAutoResize({width: true, height: true});
 | 
					            view.setAutoResize({width: true, height: true});
 | 
				
			||||||
            electron.ipcRenderer.send('tab-added', view.webContents.id);
 | 
					            electron.ipcRenderer.send('tab-added', view.webContents.id);
 | 
				
			||||||
            const tab = {active: false, view, user: undefined, hasNew: false, tray};
 | 
					            const tab = {active: false, view, user: undefined, hasNew: false, tray};
 | 
				
			||||||
            tray.setContextMenu(electron.remote.Menu.buildFromTemplate(this.createTrayMenu(tab)));
 | 
					            tray.setContextMenu(remote.Menu.buildFromTemplate(this.createTrayMenu(tab)));
 | 
				
			||||||
            this.tabs.push(tab);
 | 
					            this.tabs.push(tab);
 | 
				
			||||||
            this.tabMap[view.webContents.id] = tab;
 | 
					            this.tabMap[view.webContents.id] = tab;
 | 
				
			||||||
            this.show(tab);
 | 
					            this.show(tab);
 | 
				
			||||||
@ -332,7 +369,7 @@
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        openMenu(): void {
 | 
					        openMenu(): void {
 | 
				
			||||||
            electron.remote.Menu.getApplicationMenu()!.popup({});
 | 
					            remote.Menu.getApplicationMenu()!.popup({});
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
				
			|||||||
@ -30,6 +30,9 @@
 | 
				
			|||||||
 * @see {@link https://github.com/f-list/exported|GitHub repo}
 | 
					 * @see {@link https://github.com/f-list/exported|GitHub repo}
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// tslint:disable-next-line:no-submodule-imports no-import-side-effect
 | 
				
			||||||
 | 
					import 'core-js/es7/global';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// import { DebugLogger } from './debug-logger';
 | 
					// import { DebugLogger } from './debug-logger';
 | 
				
			||||||
// // @ts-ignore
 | 
					// // @ts-ignore
 | 
				
			||||||
// const dl = new DebugLogger('chat');
 | 
					// const dl = new DebugLogger('chat');
 | 
				
			||||||
@ -37,6 +40,7 @@
 | 
				
			|||||||
import Axios from 'axios';
 | 
					import Axios from 'axios';
 | 
				
			||||||
import {exec, execSync} from 'child_process';
 | 
					import {exec, execSync} from 'child_process';
 | 
				
			||||||
import * as electron from 'electron';
 | 
					import * as electron from 'electron';
 | 
				
			||||||
 | 
					import * as remote from '@electron/remote';
 | 
				
			||||||
import * as path from 'path';
 | 
					import * as path from 'path';
 | 
				
			||||||
import * as qs from 'querystring';
 | 
					import * as qs from 'querystring';
 | 
				
			||||||
import {getKey} from '../chat/common';
 | 
					import {getKey} from '../chat/common';
 | 
				
			||||||
@ -60,7 +64,7 @@ log.debug('init.chat');
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
document.addEventListener('keydown', (e: KeyboardEvent) => {
 | 
					document.addEventListener('keydown', (e: KeyboardEvent) => {
 | 
				
			||||||
    if(e.ctrlKey && e.shiftKey && getKey(e) === Keys.KeyI)
 | 
					    if(e.ctrlKey && e.shiftKey && getKey(e) === Keys.KeyI)
 | 
				
			||||||
        electron.remote.getCurrentWebContents().toggleDevTools();
 | 
					        remote.getCurrentWebContents().toggleDevTools();
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* process.env.SPELLCHECKER_PREFER_HUNSPELL = '1';
 | 
					/* process.env.SPELLCHECKER_PREFER_HUNSPELL = '1';
 | 
				
			||||||
@ -76,12 +80,12 @@ const sc = nativeRequire<{
 | 
				
			|||||||
const spellchecker = new sc.Spellchecker();*/
 | 
					const spellchecker = new sc.Spellchecker();*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Axios.defaults.params = {__fchat: `desktop/${electron.remote.app.getVersion()}`};
 | 
					Axios.defaults.params = {__fchat: `desktop/${remote.app.getVersion()}`};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(process.env.NODE_ENV === 'production') {
 | 
					if(process.env.NODE_ENV === 'production') {
 | 
				
			||||||
    // setupRaven('https://a9239b17b0a14f72ba85e8729b9d1612@sentry.f-list.net/2', electron.remote.app.getVersion());
 | 
					    // setupRaven('https://a9239b17b0a14f72ba85e8729b9d1612@sentry.f-list.net/2', remote.app.getVersion());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    electron.remote.getCurrentWebContents().on('devtools-opened', () => {
 | 
					    remote.getCurrentWebContents().on('devtools-opened', () => {
 | 
				
			||||||
        console.log(`%c${l('consoleWarning.head')}`, 'background: red; color: yellow; font-size: 30pt');
 | 
					        console.log(`%c${l('consoleWarning.head')}`, 'background: red; color: yellow; font-size: 30pt');
 | 
				
			||||||
        console.log(`%c${l('consoleWarning.body')}`, 'font-size: 16pt; color:red');
 | 
					        console.log(`%c${l('consoleWarning.body')}`, 'font-size: 16pt; color:red');
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
@ -106,7 +110,7 @@ function openIncognito(url: string): void {
 | 
				
			|||||||
    exec(`start ${start} ${url}`);
 | 
					    exec(`start ${start} ${url}`);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const webContents = electron.remote.getCurrentWebContents();
 | 
					const webContents = remote.getCurrentWebContents();
 | 
				
			||||||
const wordPosSearch = new WordPosSearch();
 | 
					const wordPosSearch = new WordPosSearch();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
webContents.on('context-menu', (_, props) => {
 | 
					webContents.on('context-menu', (_, props) => {
 | 
				
			||||||
@ -200,12 +204,12 @@ webContents.on('context-menu', (_, props) => {
 | 
				
			|||||||
        );
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(menuTemplate.length > 0) electron.remote.Menu.buildFromTemplate(menuTemplate).popup({});
 | 
					    if(menuTemplate.length > 0) remote.Menu.buildFromTemplate(menuTemplate).popup({});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    log.debug('context.text', { linkText: props.linkText, misspelledWord: props.misspelledWord, selectionText: props.selectionText, titleText: props.titleText });
 | 
					    log.debug('context.text', { linkText: props.linkText, misspelledWord: props.misspelledWord, selectionText: props.selectionText, titleText: props.titleText });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let dictDir = path.join(electron.remote.app.getPath('userData'), 'spellchecker');
 | 
					let dictDir = path.join(remote.app.getPath('userData'), 'spellchecker');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(process.platform === 'win32') //get the path in DOS (8-character) format as special characters cause problems otherwise
 | 
					if(process.platform === 'win32') //get the path in DOS (8-character) format as special characters cause problems otherwise
 | 
				
			||||||
    exec(`for /d %I in ("${dictDir}") do @echo %~sI`, (_, stdout) => dictDir = stdout.trim());
 | 
					    exec(`for /d %I in ("${dictDir}") do @echo %~sI`, (_, stdout) => dictDir = stdout.trim());
 | 
				
			||||||
@ -244,7 +248,7 @@ onSettings(settings);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
log.debug('init.chat.core');
 | 
					log.debug('init.chat.core');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const connection = new Connection(`F-Chat 3.0 (${process.platform})`, electron.remote.app.getVersion(), Socket);
 | 
					const connection = new Connection(`F-Chat 3.0 (${process.platform})`, remote.app.getVersion(), Socket);
 | 
				
			||||||
initCore(connection, settings, Logs, SettingsStore, Notifications);
 | 
					initCore(connection, settings, Logs, SettingsStore, Notifications);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
log.debug('init.chat.vue');
 | 
					log.debug('init.chat.vue');
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,6 @@
 | 
				
			|||||||
 | 
					// tslint:disable-next-line:no-submodule-imports no-import-side-effect
 | 
				
			||||||
 | 
					import 'core-js/es7/global';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import * as electron from 'electron';
 | 
					import * as electron from 'electron';
 | 
				
			||||||
import * as path from 'path';
 | 
					import * as path from 'path';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
import * as electron from 'electron';
 | 
					import * as remote from '@electron/remote';
 | 
				
			||||||
import * as fs from 'fs';
 | 
					import * as fs from 'fs';
 | 
				
			||||||
import * as path from 'path';
 | 
					import * as path from 'path';
 | 
				
			||||||
import {promisify} from 'util';
 | 
					import {promisify} from 'util';
 | 
				
			||||||
@ -17,12 +17,12 @@ declare module '../chat/interfaces' {
 | 
				
			|||||||
const dayMs = 86400000;
 | 
					const dayMs = 86400000;
 | 
				
			||||||
const read = promisify(fs.read);
 | 
					const read = promisify(fs.read);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function writeFile(p: fs.PathLike | number, data: string | object | number,
 | 
					function writeFile(p: fs.PathLike | number, data: string | NodeJS.ArrayBufferView,
 | 
				
			||||||
                   options?: {encoding?: string | null; mode?: number | string; flag?: string} | string | null): void {
 | 
					                   options?: fs.WriteFileOptions): void {
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
        fs.writeFileSync(p, data, options);
 | 
					        fs.writeFileSync(p, data, options);
 | 
				
			||||||
    } catch(e) {
 | 
					    } catch(e) {
 | 
				
			||||||
        electron.remote.dialog.showErrorBox(l('fs.error'), (<Error>e).message);
 | 
					        remote.dialog.showErrorBox(l('fs.error'), (<Error>e).message);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -35,6 +35,8 @@
 | 
				
			|||||||
// const dl = new DebugLogger('main');
 | 
					// const dl = new DebugLogger('main');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import * as electron from 'electron';
 | 
					import * as electron from 'electron';
 | 
				
			||||||
 | 
					import * as remoteMain from '@electron/remote/main';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import log from 'electron-log'; //tslint:disable-line:match-default-export-name
 | 
					import log from 'electron-log'; //tslint:disable-line:match-default-export-name
 | 
				
			||||||
import * as fs from 'fs';
 | 
					import * as fs from 'fs';
 | 
				
			||||||
import * as path from 'path';
 | 
					import * as path from 'path';
 | 
				
			||||||
@ -43,13 +45,13 @@ import l from '../chat/localize';
 | 
				
			|||||||
import {defaultHost, GeneralSettings} from './common';
 | 
					import {defaultHost, GeneralSettings} from './common';
 | 
				
			||||||
import { getSafeLanguages, knownLanguageNames, updateSupportedLanguages } from './language';
 | 
					import { getSafeLanguages, knownLanguageNames, updateSupportedLanguages } from './language';
 | 
				
			||||||
import * as windowState from './window_state';
 | 
					import * as windowState from './window_state';
 | 
				
			||||||
import BrowserWindow = Electron.BrowserWindow;
 | 
					// import BrowserWindow = electron.BrowserWindow;
 | 
				
			||||||
import MenuItem = Electron.MenuItem;
 | 
					import MenuItem = electron.MenuItem;
 | 
				
			||||||
import { ElectronBlocker } from '@cliqz/adblocker-electron';
 | 
					import { ElectronBlocker } from '@cliqz/adblocker-electron';
 | 
				
			||||||
import fetch from 'node-fetch';
 | 
					import fetch from 'node-fetch';
 | 
				
			||||||
import MenuItemConstructorOptions = Electron.MenuItemConstructorOptions;
 | 
					import MenuItemConstructorOptions = electron.MenuItemConstructorOptions;
 | 
				
			||||||
import * as _ from 'lodash';
 | 
					import * as _ from 'lodash';
 | 
				
			||||||
import DownloadItem = Electron.DownloadItem;
 | 
					import DownloadItem = electron.DownloadItem;
 | 
				
			||||||
import { AdCoordinatorHost } from '../chat/ads/ad-coordinator-host';
 | 
					import { AdCoordinatorHost } from '../chat/ads/ad-coordinator-host';
 | 
				
			||||||
import { IpcMainEvent } from 'electron';
 | 
					import { IpcMainEvent } from 'electron';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -59,9 +61,11 @@ const pck = require('./package.json');
 | 
				
			|||||||
// Module to control application life.
 | 
					// Module to control application life.
 | 
				
			||||||
const app = electron.app;
 | 
					const app = electron.app;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					remoteMain.initialize();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Keep a global reference of the window object, if you don't, the window will
 | 
					// Keep a global reference of the window object, if you don't, the window will
 | 
				
			||||||
// be closed automatically when the JavaScript object is garbage collected.
 | 
					// be closed automatically when the JavaScript object is garbage collected.
 | 
				
			||||||
const windows: Electron.BrowserWindow[] = [];
 | 
					const windows: electron.BrowserWindow[] = [];
 | 
				
			||||||
const characters: string[] = [];
 | 
					const characters: string[] = [];
 | 
				
			||||||
let tabCount = 0;
 | 
					let tabCount = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -141,7 +145,7 @@ function setGeneralSettings(value: GeneralSettings): void {
 | 
				
			|||||||
    log.transports.console.level = settings.risingSystemLogLevel;
 | 
					    log.transports.console.level = settings.risingSystemLogLevel;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function addSpellcheckerItems(menu: Electron.Menu): Promise<void> {
 | 
					async function addSpellcheckerItems(menu: electron.Menu): Promise<void> {
 | 
				
			||||||
    const selected = getSafeLanguages(settings.spellcheckLang);
 | 
					    const selected = getSafeLanguages(settings.spellcheckLang);
 | 
				
			||||||
    const langs = electron.session.defaultSession.availableSpellCheckerLanguages;
 | 
					    const langs = electron.session.defaultSession.availableSpellCheckerLanguages;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -162,7 +166,7 @@ async function addSpellcheckerItems(menu: Electron.Menu): Promise<void> {
 | 
				
			|||||||
        }));
 | 
					        }));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function setUpWebContents(webContents: Electron.WebContents): void {
 | 
					function setUpWebContents(webContents: electron.WebContents): void {
 | 
				
			||||||
    const openLinkExternally = (e: Event, linkUrl: string) => {
 | 
					    const openLinkExternally = (e: Event, linkUrl: string) => {
 | 
				
			||||||
        e.preventDefault();
 | 
					        e.preventDefault();
 | 
				
			||||||
        const profileMatch = linkUrl.match(/^https?:\/\/(www\.)?f-list.net\/c\/([^/#]+)\/?#?/);
 | 
					        const profileMatch = linkUrl.match(/^https?:\/\/(www\.)?f-list.net\/c\/([^/#]+)\/?#?/);
 | 
				
			||||||
@ -177,12 +181,16 @@ function setUpWebContents(webContents: Electron.WebContents): void {
 | 
				
			|||||||
    webContents.on('new-window', openLinkExternally);
 | 
					    webContents.on('new-window', openLinkExternally);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function createWindow(): Electron.BrowserWindow | undefined {
 | 
					function createWindow(): electron.BrowserWindow | undefined {
 | 
				
			||||||
    if(tabCount >= 3) return;
 | 
					    if(tabCount >= 3) return;
 | 
				
			||||||
    const lastState = windowState.getSavedWindowState();
 | 
					    const lastState = windowState.getSavedWindowState();
 | 
				
			||||||
    const windowProperties: Electron.BrowserWindowConstructorOptions & {maximized: boolean} = {
 | 
					
 | 
				
			||||||
 | 
					    const windowProperties: electron.BrowserWindowConstructorOptions & {maximized: boolean} = {
 | 
				
			||||||
        ...lastState, center: lastState.x === undefined, show: false,
 | 
					        ...lastState, center: lastState.x === undefined, show: false,
 | 
				
			||||||
        webPreferences: { webviewTag: true, nodeIntegration: true, nodeIntegrationInWorker: true, spellcheck: true, enableRemoteModule: true }
 | 
					        webPreferences: {
 | 
				
			||||||
 | 
					          webviewTag: true, nodeIntegration: true, nodeIntegrationInWorker: true, spellcheck: true,
 | 
				
			||||||
 | 
					          enableRemoteModule: true, contextIsolation: false
 | 
				
			||||||
 | 
					        } as any
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(process.platform === 'darwin') {
 | 
					    if(process.platform === 'darwin') {
 | 
				
			||||||
@ -416,11 +424,11 @@ function onReady(): void {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    const viewItem = {
 | 
					    const viewItem = {
 | 
				
			||||||
        label: `&${l('action.view')}`,
 | 
					        label: `&${l('action.view')}`,
 | 
				
			||||||
        submenu: <Electron.MenuItemConstructorOptions[]>[
 | 
					        submenu: <electron.MenuItemConstructorOptions[]>[
 | 
				
			||||||
            // {role: 'resetZoom'},
 | 
					            // {role: 'resetZoom'},
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                label: 'Reset Zoom',
 | 
					                label: 'Reset Zoom',
 | 
				
			||||||
                click: (_m: Electron.MenuItem, _w: Electron.BrowserWindow) => {
 | 
					                click: (_m: electron.MenuItem, _w: electron.BrowserWindow) => {
 | 
				
			||||||
                    // log.info('MENU ZOOM0');
 | 
					                    // log.info('MENU ZOOM0');
 | 
				
			||||||
                    // w.webContents.setZoomLevel(0);
 | 
					                    // w.webContents.setZoomLevel(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -434,7 +442,7 @@ function onReady(): void {
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                // role: 'zoomIn',
 | 
					                // role: 'zoomIn',
 | 
				
			||||||
                label: 'Zoom In',
 | 
					                label: 'Zoom In',
 | 
				
			||||||
                click: (_m: Electron.MenuItem, w: Electron.BrowserWindow) => {
 | 
					                click: (_m: electron.MenuItem, w: electron.BrowserWindow) => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    // log.info('MENU ZOOM+');
 | 
					                    // log.info('MENU ZOOM+');
 | 
				
			||||||
                    zoomLevel = Math.min(zoomLevel + w.webContents.getZoomFactor()/2, 6);
 | 
					                    zoomLevel = Math.min(zoomLevel + w.webContents.getZoomFactor()/2, 6);
 | 
				
			||||||
@ -448,7 +456,7 @@ function onReady(): void {
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                // role: 'zoomIn',
 | 
					                // role: 'zoomIn',
 | 
				
			||||||
                label: 'Zoom Out',
 | 
					                label: 'Zoom Out',
 | 
				
			||||||
                click: (_m: Electron.MenuItem, w: Electron.BrowserWindow) => {
 | 
					                click: (_m: electron.MenuItem, w: electron.BrowserWindow) => {
 | 
				
			||||||
                    // log.info('MENU ZOOM-');
 | 
					                    // log.info('MENU ZOOM-');
 | 
				
			||||||
                    zoomLevel = Math.max(0, zoomLevel - w.webContents.getZoomFactor()/2);
 | 
					                    zoomLevel = Math.max(0, zoomLevel - w.webContents.getZoomFactor()/2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -493,14 +501,14 @@ function onReady(): void {
 | 
				
			|||||||
                },
 | 
					                },
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    label: l('action.newTab'),
 | 
					                    label: l('action.newTab'),
 | 
				
			||||||
                    click: (_m: Electron.MenuItem, w: Electron.BrowserWindow) => {
 | 
					                    click: (_m: electron.MenuItem, w: electron.BrowserWindow) => {
 | 
				
			||||||
                        if((hasCompletedUpgrades) && (tabCount < 3)) w.webContents.send('open-tab');
 | 
					                        if((hasCompletedUpgrades) && (tabCount < 3)) w.webContents.send('open-tab');
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    accelerator: 'CmdOrCtrl+t'
 | 
					                    accelerator: 'CmdOrCtrl+t'
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    label: l('settings.logDir'),
 | 
					                    label: l('settings.logDir'),
 | 
				
			||||||
                    click: (_m, window: BrowserWindow) => {
 | 
					                    click: (_m, window: electron.BrowserWindow) => {
 | 
				
			||||||
                        const dir = electron.dialog.showOpenDialogSync(
 | 
					                        const dir = electron.dialog.showOpenDialogSync(
 | 
				
			||||||
                            {defaultPath: settings.logDirectory, properties: ['openDirectory']});
 | 
					                            {defaultPath: settings.logDirectory, properties: ['openDirectory']});
 | 
				
			||||||
                        if(dir !== undefined) {
 | 
					                        if(dir !== undefined) {
 | 
				
			||||||
@ -522,13 +530,13 @@ function onReady(): void {
 | 
				
			|||||||
                },
 | 
					                },
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    label: l('settings.closeToTray'), type: 'checkbox', checked: settings.closeToTray,
 | 
					                    label: l('settings.closeToTray'), type: 'checkbox', checked: settings.closeToTray,
 | 
				
			||||||
                    click: (item: Electron.MenuItem) => {
 | 
					                    click: (item: electron.MenuItem) => {
 | 
				
			||||||
                        settings.closeToTray = item.checked;
 | 
					                        settings.closeToTray = item.checked;
 | 
				
			||||||
                        setGeneralSettings(settings);
 | 
					                        setGeneralSettings(settings);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }, {
 | 
					                }, {
 | 
				
			||||||
                    label: l('settings.profileViewer'), type: 'checkbox', checked: settings.profileViewer,
 | 
					                    label: l('settings.profileViewer'), type: 'checkbox', checked: settings.profileViewer,
 | 
				
			||||||
                    click: (item: Electron.MenuItem) => {
 | 
					                    click: (item: electron.MenuItem) => {
 | 
				
			||||||
                        settings.profileViewer = item.checked;
 | 
					                        settings.profileViewer = item.checked;
 | 
				
			||||||
                        setGeneralSettings(settings);
 | 
					                        setGeneralSettings(settings);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@ -544,7 +552,7 @@ function onReady(): void {
 | 
				
			|||||||
                    }))
 | 
					                    }))
 | 
				
			||||||
                }, {
 | 
					                }, {
 | 
				
			||||||
                    label: l('settings.hwAcceleration'), type: 'checkbox', checked: settings.hwAcceleration,
 | 
					                    label: l('settings.hwAcceleration'), type: 'checkbox', checked: settings.hwAcceleration,
 | 
				
			||||||
                    click: (item: Electron.MenuItem) => {
 | 
					                    click: (item: electron.MenuItem) => {
 | 
				
			||||||
                        settings.hwAcceleration = item.checked;
 | 
					                        settings.hwAcceleration = item.checked;
 | 
				
			||||||
                        setGeneralSettings(settings);
 | 
					                        setGeneralSettings(settings);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@ -552,7 +560,7 @@ function onReady(): void {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                // {
 | 
					                // {
 | 
				
			||||||
                //     label: l('settings.beta'), type: 'checkbox', checked: settings.beta,
 | 
					                //     label: l('settings.beta'), type: 'checkbox', checked: settings.beta,
 | 
				
			||||||
                //     click: async(item: Electron.MenuItem) => {
 | 
					                //     click: async(item: electron.MenuItem) => {
 | 
				
			||||||
                //         settings.beta = item.checked;
 | 
					                //         settings.beta = item.checked;
 | 
				
			||||||
                //         setGeneralSettings(settings);
 | 
					                //         setGeneralSettings(settings);
 | 
				
			||||||
                //         // electron.autoUpdater.setFeedURL({url: updaterUrl+(item.checked ? '?channel=beta' : ''), serverType: 'json'});
 | 
					                //         // electron.autoUpdater.setFeedURL({url: updaterUrl+(item.checked ? '?channel=beta' : ''), serverType: 'json'});
 | 
				
			||||||
@ -561,7 +569,7 @@ function onReady(): void {
 | 
				
			|||||||
                // },
 | 
					                // },
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    label: l('fixLogs.action'),
 | 
					                    label: l('fixLogs.action'),
 | 
				
			||||||
                    click: (_m, window: BrowserWindow) => window.webContents.send('fix-logs')
 | 
					                    click: (_m, window: electron.BrowserWindow) => window.webContents.send('fix-logs')
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                {type: 'separator'},
 | 
					                {type: 'separator'},
 | 
				
			||||||
@ -583,7 +591,7 @@ function onReady(): void {
 | 
				
			|||||||
                },
 | 
					                },
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    label: 'Show/hide current profile',
 | 
					                    label: 'Show/hide current profile',
 | 
				
			||||||
                    click: (_m: Electron.MenuItem, w: Electron.BrowserWindow) => {
 | 
					                    click: (_m: electron.MenuItem, w: electron.BrowserWindow) => {
 | 
				
			||||||
                        w.webContents.send('reopen-profile');
 | 
					                        w.webContents.send('reopen-profile');
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    accelerator: 'CmdOrCtrl+p'
 | 
					                    accelerator: 'CmdOrCtrl+p'
 | 
				
			||||||
@ -595,7 +603,7 @@ function onReady(): void {
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    accelerator: process.platform === 'darwin' ? 'Cmd+Q' : undefined,
 | 
					                    accelerator: process.platform === 'darwin' ? 'Cmd+Q' : undefined,
 | 
				
			||||||
                    label: l('action.quit'),
 | 
					                    label: l('action.quit'),
 | 
				
			||||||
                    click(_m: Electron.MenuItem, window: Electron.BrowserWindow): void {
 | 
					                    click(_m: electron.MenuItem, window: electron.BrowserWindow): void {
 | 
				
			||||||
                        if(characters.length === 0) return app.quit();
 | 
					                        if(characters.length === 0) return app.quit();
 | 
				
			||||||
                        const button = electron.dialog.showMessageBoxSync(window, {
 | 
					                        const button = electron.dialog.showMessageBoxSync(window, {
 | 
				
			||||||
                            message: l('chat.confirmLeave'),
 | 
					                            message: l('chat.confirmLeave'),
 | 
				
			||||||
@ -663,7 +671,7 @@ function onReady(): void {
 | 
				
			|||||||
        settings.host = host;
 | 
					        settings.host = host;
 | 
				
			||||||
        setGeneralSettings(settings);
 | 
					        setGeneralSettings(settings);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    electron.ipcMain.on('connect', (e: Event & {sender: Electron.WebContents}, character: string) => {
 | 
					    electron.ipcMain.on('connect', (e: Event & {sender: electron.WebContents}, character: string) => {
 | 
				
			||||||
        if(characters.indexOf(character) !== -1) return e.returnValue = false;
 | 
					        if(characters.indexOf(character) !== -1) return e.returnValue = false;
 | 
				
			||||||
        characters.push(character);
 | 
					        characters.push(character);
 | 
				
			||||||
        e.returnValue = true;
 | 
					        e.returnValue = true;
 | 
				
			||||||
@ -695,9 +703,9 @@ function onReady(): void {
 | 
				
			|||||||
        path.join(__dirname, <string>require('./build/badge.png').default)
 | 
					        path.join(__dirname, <string>require('./build/badge.png').default)
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    electron.ipcMain.on('has-new', (e: Event & {sender: Electron.WebContents}, hasNew: boolean) => {
 | 
					    electron.ipcMain.on('has-new', (e: Event & {sender: electron.WebContents}, hasNew: boolean) => {
 | 
				
			||||||
        if(process.platform === 'darwin') app.dock.setBadge(hasNew ? '!' : '');
 | 
					        if(process.platform === 'darwin') app.dock.setBadge(hasNew ? '!' : '');
 | 
				
			||||||
        const window = electron.BrowserWindow.fromWebContents(e.sender) as BrowserWindow | undefined;
 | 
					        const window = electron.BrowserWindow.fromWebContents(e.sender) as electron.BrowserWindow | undefined;
 | 
				
			||||||
        if(window !== undefined) window.setOverlayIcon(hasNew ? badge : emptyBadge, hasNew ? 'New messages' : '');
 | 
					        if(window !== undefined) window.setOverlayIcon(hasNew ? badge : emptyBadge, hasNew ? 'New messages' : '');
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -707,9 +715,9 @@ function onReady(): void {
 | 
				
			|||||||
        for(const w of electron.webContents.getAllWebContents()) w.send('rising-upgrade-complete');
 | 
					        for(const w of electron.webContents.getAllWebContents()) w.send('rising-upgrade-complete');
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    electron.ipcMain.on('update-zoom', (_e, zoomLevel: number) => {
 | 
					    electron.ipcMain.on('update-zoom', (_e, zl: number) => {
 | 
				
			||||||
        // log.info('MENU ZOOM UPDATE', zoomLevel);
 | 
					        // log.info('MENU ZOOM UPDATE', zoomLevel);
 | 
				
			||||||
        for(const w of electron.webContents.getAllWebContents()) w.send('update-zoom', zoomLevel);
 | 
					        for(const w of electron.webContents.getAllWebContents()) w.send('update-zoom', zl);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    createWindow();
 | 
					    createWindow();
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
import {remote} from 'electron';
 | 
					import * as remote from '@electron/remote';
 | 
				
			||||||
import core from '../chat/core';
 | 
					import core from '../chat/core';
 | 
				
			||||||
import {Conversation} from '../chat/interfaces';
 | 
					import {Conversation} from '../chat/interfaces';
 | 
				
			||||||
//tslint:disable-next-line:match-default-export-name
 | 
					//tslint:disable-next-line:match-default-export-name
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,8 @@ const mainConfig = {
 | 
				
			|||||||
    entry: [path.join(__dirname, 'main.ts'), path.join(__dirname, 'package.json')],
 | 
					    entry: [path.join(__dirname, 'main.ts'), path.join(__dirname, 'package.json')],
 | 
				
			||||||
    output: {
 | 
					    output: {
 | 
				
			||||||
        path: __dirname + '/app',
 | 
					        path: __dirname + '/app',
 | 
				
			||||||
        filename: 'main.js'
 | 
					        filename: 'main.js',
 | 
				
			||||||
 | 
					        globalObject: 'global'
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    context: __dirname,
 | 
					    context: __dirname,
 | 
				
			||||||
    target: 'electron-main',
 | 
					    target: 'electron-main',
 | 
				
			||||||
@ -31,6 +32,7 @@ const mainConfig = {
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    node: {
 | 
					    node: {
 | 
				
			||||||
 | 
					        global: true,
 | 
				
			||||||
        __dirname: false,
 | 
					        __dirname: false,
 | 
				
			||||||
        __filename: false
 | 
					        __filename: false
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@ -104,6 +106,7 @@ const mainConfig = {
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    node: {
 | 
					    node: {
 | 
				
			||||||
 | 
					        global: true,
 | 
				
			||||||
        __dirname: false,
 | 
					        __dirname: false,
 | 
				
			||||||
        __filename: false
 | 
					        __filename: false
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@ -156,8 +159,13 @@ const storeWorkerEndpointConfig = _.assign(
 | 
				
			|||||||
            filename: 'storeWorkerEndpoint.js',
 | 
					            filename: 'storeWorkerEndpoint.js',
 | 
				
			||||||
            globalObject: 'this'
 | 
					            globalObject: 'this'
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        target: 'electron-renderer',
 | 
					        target: 'electron-renderer',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        node: {
 | 
				
			||||||
 | 
					            global: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        module: {
 | 
					        module: {
 | 
				
			||||||
            rules: [
 | 
					            rules: [
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,6 @@
 | 
				
			|||||||
 | 
					// tslint:disable-next-line:no-submodule-imports no-import-side-effect
 | 
				
			||||||
 | 
					import 'core-js/es7/global';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import * as qs from 'querystring';
 | 
					import * as qs from 'querystring';
 | 
				
			||||||
import log from 'electron-log'; //tslint:disable-line:match-default-export-name
 | 
					import log from 'electron-log'; //tslint:disable-line:match-default-export-name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -18,7 +21,7 @@ log.transports.file.maxSize = 5 * 1024 * 1024;
 | 
				
			|||||||
log.info('init.window.vue');
 | 
					log.info('init.window.vue');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//tslint:disable-next-line:no-unused-expression
 | 
					//tslint:disable-next-line:no-unused-expression
 | 
				
			||||||
new Window({
 | 
					export default new Window({
 | 
				
			||||||
    el: '#app',
 | 
					    el: '#app',
 | 
				
			||||||
    data: {settings}
 | 
					    data: {settings}
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										17
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								package.json
									
									
									
									
									
								
							@ -5,12 +5,13 @@
 | 
				
			|||||||
  "description": "A heavily modded F-Chat 3.0 client for F-List",
 | 
					  "description": "A heavily modded F-Chat 3.0 client for F-List",
 | 
				
			||||||
  "license": "MIT",
 | 
					  "license": "MIT",
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
 | 
					    "@electron/remote": "^1.2.1",
 | 
				
			||||||
    "@f-list/fork-ts-checker-webpack-plugin": "^3.1.1",
 | 
					    "@f-list/fork-ts-checker-webpack-plugin": "^3.1.1",
 | 
				
			||||||
    "@f-list/vue-ts": "^1.0.3",
 | 
					    "@f-list/vue-ts": "^1.0.3",
 | 
				
			||||||
    "@fortawesome/fontawesome-free": "^5.15.1",
 | 
					    "@fortawesome/fontawesome-free": "^5.15.1",
 | 
				
			||||||
    "@types/bluebird": "^3.5.33",
 | 
					    "@types/bluebird": "^3.5.33",
 | 
				
			||||||
    "@types/lodash": "^4.14.164",
 | 
					    "@types/lodash": "^4.14.164",
 | 
				
			||||||
    "@types/node": "^12.12.47",
 | 
					    "@types/node": "^14.17.0",
 | 
				
			||||||
    "@types/node-fetch": "^2.5.12",
 | 
					    "@types/node-fetch": "^2.5.12",
 | 
				
			||||||
    "@types/qs": "^6.9.5",
 | 
					    "@types/qs": "^6.9.5",
 | 
				
			||||||
    "@types/request-promise": "^4.1.46",
 | 
					    "@types/request-promise": "^4.1.46",
 | 
				
			||||||
@ -24,10 +25,10 @@
 | 
				
			|||||||
    "copy-webpack-plugin": "^6.2.1",
 | 
					    "copy-webpack-plugin": "^6.2.1",
 | 
				
			||||||
    "css-loader": "^5.0.0",
 | 
					    "css-loader": "^5.0.0",
 | 
				
			||||||
    "date-fns": "^2.16.1",
 | 
					    "date-fns": "^2.16.1",
 | 
				
			||||||
    "electron": "^10.1.5",
 | 
					    "electron": "^11.5.0",
 | 
				
			||||||
    "electron-log": "^4.2.4",
 | 
					    "electron-log": "^4.4.1",
 | 
				
			||||||
    "electron-packager": "^15.1.0",
 | 
					    "electron-packager": "~15.1.0",
 | 
				
			||||||
    "electron-rebuild": "^2.3.2",
 | 
					    "electron-rebuild": "^3.2.3",
 | 
				
			||||||
    "extract-loader": "^5.1.0",
 | 
					    "extract-loader": "^5.1.0",
 | 
				
			||||||
    "file-loader": "^6.2.0",
 | 
					    "file-loader": "^6.2.0",
 | 
				
			||||||
    "lodash": "^4.17.20",
 | 
					    "lodash": "^4.17.20",
 | 
				
			||||||
@ -49,10 +50,10 @@
 | 
				
			|||||||
    "vue": "2.6.12",
 | 
					    "vue": "2.6.12",
 | 
				
			||||||
    "vue-loader": "^15.9.8",
 | 
					    "vue-loader": "^15.9.8",
 | 
				
			||||||
    "vue-template-compiler": "2.6.12",
 | 
					    "vue-template-compiler": "2.6.12",
 | 
				
			||||||
    "webpack": "^5.3.2"
 | 
					    "webpack": "5.8.0"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@cliqz/adblocker-electron": "^1.20.5",
 | 
					    "@cliqz/adblocker-electron": "^1.22.5",
 | 
				
			||||||
    "jquery": "^3.6.0",
 | 
					    "jquery": "^3.6.0",
 | 
				
			||||||
    "keytar": "~7.5.0",
 | 
					    "keytar": "~7.5.0",
 | 
				
			||||||
    "node-fetch": "^2.6.2"
 | 
					    "node-fetch": "^2.6.2"
 | 
				
			||||||
@ -60,7 +61,7 @@
 | 
				
			|||||||
  "optionalDependencies": {
 | 
					  "optionalDependencies": {
 | 
				
			||||||
    "appdmg": "^0.6.0",
 | 
					    "appdmg": "^0.6.0",
 | 
				
			||||||
    "electron-squirrel-startup": "^1.0.0",
 | 
					    "electron-squirrel-startup": "^1.0.0",
 | 
				
			||||||
    "electron-winstaller": "^4.0.1"
 | 
					    "electron-winstaller": "^5.0.0"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "resolutions": {
 | 
					  "resolutions": {
 | 
				
			||||||
    "vue": "2.6.12",
 | 
					    "vue": "2.6.12",
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user