| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- 'use strict';
- const fs = require('fs');
- const path = require('path');
- const url = require('url');
- const electron = require('electron');
- const pkgfile = require('../package');
- const core = require('./core');
- const config = require('./config');
- const menu = require('./menu');
- const tray = require('./tray');
- const localfs = require('./localfs');
- const bittorrent = require('./bittorrent');
- const shell = electron.shell;
- const ipcMain = electron.ipcMain;
- const supportedFileExtensions = {
- '.torrent': 'torrent',
- '.meta4': 'metalink',
- '.metalink': 'metalink'
- };
- let isContainsSupportedFileArg = function (arg) {
- if (!arg) {
- return false;
- }
- let fileExtension = path.extname(arg);
- if (!supportedFileExtensions[fileExtension]) {
- return false;
- }
- return fs.existsSync(arg);
- };
- let getIndexUrl = function () {
- return url.format({
- protocol: 'file',
- slashes: true,
- pathname: path.join(__dirname, '..', pkgfile.entry)
- });
- };
- let loadIndexUrl = function () {
- core.mainWindow.loadURL(getIndexUrl());
- };
- let loadNewTaskUrl = function () {
- core.mainWindow.loadURL(getIndexUrl() + '#!/new');
- };
- let notifyRenderProcessWindowMaximized = function (maximized) {
- core.mainWindow.webContents.send('on-main-window-maximized', maximized);
- };
- let notifyRenderProcessWindowUnmaximized = function (maximized) {
- core.mainWindow.webContents.send('on-main-window-unmaximized', maximized);
- };
- let notifyRenderProcessShowErrorMessage = function (message) {
- core.mainWindow.webContents.send('on-main-show-error', message);
- };
- let notifyRenderProcessNavigateToPath = function (routeUrl) {
- core.mainWindow.webContents.send('on-main-navigate-to', routeUrl);
- };
- let notifyRenderProcessNavigateToNewTask = function () {
- notifyRenderProcessNavigateToPath('/new');
- };
- let notifyRenderProcessNavigateToAriaNgSettings = function () {
- notifyRenderProcessNavigateToPath('/settings/ariang');
- };
- let notifyRenderProcessNewTaskFromFile = function (filePath, async) {
- let fileExtension = path.extname(filePath);
- if (!supportedFileExtensions[fileExtension]) {
- notifyRenderProcessShowErrorMessage('The selected file type is invalid!');
- return;
- }
- let result = null;
- try {
- let fileContent = fs.readFileSync(filePath);
- result = {
- type: supportedFileExtensions[fileExtension],
- fileName: path.basename(filePath),
- base64Content: Buffer.from(fileContent).toString('base64'),
- async: !!async
- };
- } catch (e) {
- result = {
- exception: e
- }
- }
- core.mainWindow.webContents.send('on-main-new-task-from-file', result);
- };
- let notifyRenderProcessNewTaskFromText = function (text, async) {
- let result = {
- text: text,
- async: !!async
- };
- core.mainWindow.webContents.send('on-main-new-task-from-text', result);
- };
- let notifyRenderProcessNewNewTaskFromFileAfterViewLoaded = function (filePath) {
- if (!filePath) {
- return;
- }
- ipcMain.once('on-render-view-content-loaded', (event, arg) => {
- notifyRenderProcessNewTaskFromFile(filePath, true);
- });
- };
- let notifyRenderProcessNewNewTaskFromTextAfterViewLoaded = function (text) {
- if (!text) {
- return;
- }
- ipcMain.once('on-render-view-content-loaded', (event, arg) => {
- notifyRenderProcessNewTaskFromText(text, true);
- });
- };
- let onRenderProcessNewDropFile = function (callback) {
- ipcMain.on('on-render-new-drop-file', callback);
- };
- let onRenderProcessNewDropText = function (callback) {
- ipcMain.on('on-render-new-drop-text', callback);
- };
- ipcMain.on('render-sync-get-runtime-environment', (event) => {
- if (!process || !process.versions) {
- return null;
- }
- var versions = process.versions;
- event.returnValue = [
- {
- name: 'Electron',
- value: versions.electron
- },
- {
- name: 'Node.js',
- value: versions.node
- },
- {
- name: 'Chrome',
- value: versions.chrome
- },
- {
- name: 'V8',
- value: versions.v8
- }
- ];
- });
- ipcMain.on('render-sync-get-global-setting', (event, key) => {
- event.returnValue = global.settings[key];
- });
- ipcMain.handle('render-get-native-window-maximized', (event) => {
- return core.mainWindow.isMaximized();
- });
- ipcMain.on('render-minimize-native-window', (event) => {
- core.mainWindow.minimize();
- });
- ipcMain.on('render-maximize-or-restore-native-window', (event) => {
- if (!core.mainWindow.isMaximized()) {
- core.mainWindow.maximize();
- } else {
- core.mainWindow.unmaximize();
- }
- });
- ipcMain.on('render-reload-native-window', (event) => {
- core.mainWindow.reload();
- });
- ipcMain.on('render-exit-native-app', (event) => {
- core.mainWindow.close();
- });
- ipcMain.on('render-update-app-menu-label', (event, labels) => {
- menu.setApplicationMenu({
- labels: labels
- });
- });
- ipcMain.on('render-update-tray-menu-label', (event, labels) => {
- tray.setContextMenu({
- labels: labels
- });
- });
- ipcMain.on('render-update-tray-tip', (event, tooltip) => {
- tray.setToolTip(tooltip);
- });
- ipcMain.on('render-sync-get-native-config', (event) => {
- event.returnValue = {
- defaultPosition: config.defaultPosition,
- minimizedToTray: config.minimizedToTray
- };
- });
- ipcMain.on('render-set-native-config-default-position', (event, value) => {
- config.defaultPosition = value;
- config.save('defaultPosition');
- });
- ipcMain.on('render-set-native-config-minimized-to-tray', (event, value) => {
- config.minimizedToTray = !!value;
- config.save('minimizedToTray');
- });
- ipcMain.on('render-open-external-url', (event, url) => {
- shell.openExternal(url);
- });
- ipcMain.on('render-sync-get-package-file-content', (event, path) => {
- event.returnValue = localfs.readPackageFile(path);
- });
- ipcMain.handle('render-get-localfs-exists', (event, fullpath) => {
- return localfs.isExists(fullpath);
- });
- ipcMain.on('render-open-local-directory', (event, dir, filename) => {
- let fullpath = localfs.getFullPath(dir, filename);
- if (localfs.isExists(fullpath)) {
- shell.showItemInFolder(fullpath);
- } else {
- shell.openItem(dir);
- }
- });
- ipcMain.on('render-sync-parse-bittorrent-info', (event, data) => {
- event.returnValue = bittorrent.parseBittorrentInfo(data);
- });
- module.exports = {
- isContainsSupportedFileArg: isContainsSupportedFileArg,
- loadIndexUrl: loadIndexUrl,
- loadNewTaskUrl: loadNewTaskUrl,
- notifyRenderProcessWindowMaximized: notifyRenderProcessWindowMaximized,
- notifyRenderProcessWindowUnmaximized: notifyRenderProcessWindowUnmaximized,
- notifyRenderProcessShowErrorMessage: notifyRenderProcessShowErrorMessage,
- notifyRenderProcessNavigateToNewTask: notifyRenderProcessNavigateToNewTask,
- notifyRenderProcessNavigateToAriaNgSettings: notifyRenderProcessNavigateToAriaNgSettings,
- notifyRenderProcessNewTaskFromFile: notifyRenderProcessNewTaskFromFile,
- notifyRenderProcessNewTaskFromText: notifyRenderProcessNewTaskFromText,
- notifyRenderProcessNewNewTaskFromFileAfterViewLoaded: notifyRenderProcessNewNewTaskFromFileAfterViewLoaded,
- notifyRenderProcessNewNewTaskFromTextAfterViewLoaded: notifyRenderProcessNewNewTaskFromTextAfterViewLoaded,
- onRenderProcessNewDropFile: onRenderProcessNewDropFile,
- onRenderProcessNewDropText: onRenderProcessNewDropText
- };
|