ariaNgNativeElectronService.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. (function () {
  2. 'use strict';
  3. angular.module('ariaNg').factory('ariaNgNativeElectronService', ['ariaNgLogService', 'ariaNgLocalizationService', function (ariaNgLogService, ariaNgLocalizationService) {
  4. var electron = angular.isFunction(window.nodeRequire) ? nodeRequire('electron') : {};
  5. var remote = angular.isFunction(window.nodeRequire) ? nodeRequire('@electron/remote') : {
  6. require: function () {
  7. return {};
  8. }
  9. };
  10. var ipcRenderer = electron.ipcRenderer || {};
  11. var menu = remote.require('./menu') || {};
  12. var tray = remote.require('./tray') || {};
  13. var localfs = remote.require('./localfs') || {};
  14. var bittorrent = remote.require('./bittorrent') || {};
  15. var getSetting = function (item) {
  16. if (!remote || !remote.getGlobal) {
  17. return null;
  18. }
  19. var settings = remote.getGlobal('settings');
  20. if (!settings) {
  21. return null;
  22. }
  23. return settings[item];
  24. };
  25. var getCurrentWindow = function () {
  26. if (!remote || !remote.getCurrentWindow) {
  27. return {};
  28. }
  29. return remote.getCurrentWindow();
  30. };
  31. var onMainWindowEvent = function (event, callback) {
  32. getCurrentWindow().on && getCurrentWindow().on(event, callback);
  33. };
  34. var onMainProcessMessage = function (channel, callback) {
  35. ipcRenderer.on && ipcRenderer.on(channel, callback);
  36. };
  37. var removeMainProcessCallback = function (channel, callback) {
  38. ipcRenderer.removeListener && ipcRenderer.removeListener(channel, callback);
  39. };
  40. var invokeMainProcessMethod = function (channel, ...args) {
  41. ipcRenderer.send && ipcRenderer.send(channel, ...args);
  42. };
  43. var invokeSyncMainProcessMethod = function (channel, ...args) {
  44. if (!ipcRenderer.sendSync) {
  45. return null;
  46. }
  47. return ipcRenderer.sendSync(channel, ...args);
  48. };
  49. var invokeAsyncMainProcessMethod = function (channel, ...args) {
  50. if (!ipcRenderer.invoke) {
  51. return null;
  52. }
  53. return ipcRenderer.invoke(channel, ...args);
  54. };
  55. return {
  56. getRuntimeEnvironment: function () {
  57. if (!remote.process || !remote.process.versions) {
  58. return null;
  59. }
  60. var versions = remote.process.versions;
  61. var items = [];
  62. items.push({name: 'Electron', value: versions.electron});
  63. items.push({name: 'Node.js', value: versions.node});
  64. items.push({name: 'Chrome', value: versions.chrome});
  65. items.push({name: 'V8', value: versions.v8});
  66. return items;
  67. },
  68. getVersion: function() {
  69. return getSetting('version');
  70. },
  71. getAriaNgVersion: function() {
  72. return getSetting('ariaNgVersion');
  73. },
  74. isDevMode: function () {
  75. return !!getSetting('isDevMode');
  76. },
  77. useCustomAppTitle: function () {
  78. return !!getSetting('useCustomAppTitle');
  79. },
  80. getNativeConfig: function () {
  81. var config = invokeSyncMainProcessMethod('get-native-config');
  82. var cfg = {};
  83. for (var key in config) {
  84. if (!config.hasOwnProperty(key)) {
  85. continue;
  86. }
  87. cfg[key] = angular.copy(config[key]);
  88. }
  89. return cfg;
  90. },
  91. setDefaultPosition: function (value) {
  92. invokeMainProcessMethod('set-native-config-default-position', value);
  93. },
  94. setMinimizedToTray: function (value) {
  95. invokeMainProcessMethod('set-native-config-minimized-to-tray', value);
  96. },
  97. setMainWindowLanguage: function () {
  98. this.setApplicationMenu();
  99. this.setTrayMenu();
  100. },
  101. isLocalFSExists: function (fullpath) {
  102. return localfs.isExists(fullpath);
  103. },
  104. readPackageFile: function (path) {
  105. return localfs.readPackageFile(path);
  106. },
  107. parseBittorrentInfo: function (path) {
  108. var info = angular.copy(bittorrent.parseBittorrentInfo(path));
  109. info.type = 'bittorrent';
  110. ariaNgLogService.debug('[ariaNgNativeElectronService.parseBittorrentInfo] bittorrent info', info);
  111. return info;
  112. },
  113. openProjectLink: function () {
  114. invokeMainProcessMethod('open-external-url', 'https://github.com/mayswind/AriaNg-Native');
  115. },
  116. openProjectReleaseLink: function () {
  117. invokeMainProcessMethod('open-external-url', 'https://github.com/mayswind/AriaNg-Native/releases');
  118. },
  119. openFileInDirectory: function (dir, filename) {
  120. invokeMainProcessMethod('open-local-directory', dir, filename);
  121. },
  122. onMainWindowMaximize: function (callback) {
  123. onMainWindowEvent('maximize', callback);
  124. },
  125. onMainWindowUnmaximize: function (callback) {
  126. onMainWindowEvent('unmaximize', callback);
  127. },
  128. onMainProcessNavigateTo: function (callback) {
  129. onMainProcessMessage('navigate-to', callback);
  130. },
  131. onMainProcessShowError: function (callback) {
  132. onMainProcessMessage('show-error', callback);
  133. },
  134. onMainProcessNewTaskFromFile: function (callback) {
  135. onMainProcessMessage('new-task-from-file', callback);
  136. },
  137. onMainProcessNewTaskFromText: function (callback) {
  138. onMainProcessMessage('new-task-from-text', callback);
  139. },
  140. removeMainProcessNewTaskFromFileCallback: function (callback) {
  141. removeMainProcessCallback('new-task-from-file', callback);
  142. },
  143. removeMainProcessNewTaskFromTextCallback: function (callback) {
  144. removeMainProcessCallback('new-task-from-text', callback);
  145. },
  146. sendViewLoadedMessageToMainProcess: function (message) {
  147. invokeMainProcessMethod('view-content-loaded', message);
  148. },
  149. sendNewDropFileMessageToMainProcess: function (message) {
  150. invokeMainProcessMethod('new-drop-file', message);
  151. },
  152. sendNewDropTextMessageToMainProcess: function (message) {
  153. invokeMainProcessMethod('new-drop-text', message);
  154. },
  155. setApplicationMenu: function () {
  156. if (menu.setApplicationMenu) {
  157. menu.setApplicationMenu({
  158. labels: {
  159. AboutAriaNgNative: ariaNgLocalizationService.getLocalizedText('menu.AboutAriaNgNative'),
  160. Services: ariaNgLocalizationService.getLocalizedText('menu.Services'),
  161. HideAriaNgNative: ariaNgLocalizationService.getLocalizedText('menu.HideAriaNgNative'),
  162. HideOthers: ariaNgLocalizationService.getLocalizedText('menu.HideOthers'),
  163. ShowAll: ariaNgLocalizationService.getLocalizedText('menu.ShowAll'),
  164. QuitAriaNgNative: ariaNgLocalizationService.getLocalizedText('menu.QuitAriaNgNative'),
  165. Edit: ariaNgLocalizationService.getLocalizedText('menu.Edit'),
  166. Undo: ariaNgLocalizationService.getLocalizedText('menu.Undo'),
  167. Redo: ariaNgLocalizationService.getLocalizedText('menu.Redo'),
  168. Cut: ariaNgLocalizationService.getLocalizedText('menu.Cut'),
  169. Copy: ariaNgLocalizationService.getLocalizedText('menu.Copy'),
  170. Paste: ariaNgLocalizationService.getLocalizedText('menu.Paste'),
  171. Delete: ariaNgLocalizationService.getLocalizedText('menu.Delete'),
  172. SelectAll: ariaNgLocalizationService.getLocalizedText('menu.SelectAll'),
  173. Window: ariaNgLocalizationService.getLocalizedText('menu.Window'),
  174. Minimize: ariaNgLocalizationService.getLocalizedText('menu.Minimize'),
  175. Zoom: ariaNgLocalizationService.getLocalizedText('menu.Zoom'),
  176. BringAllToFront: ariaNgLocalizationService.getLocalizedText('menu.BringAllToFront')
  177. }
  178. });
  179. }
  180. },
  181. setTrayMenu: function () {
  182. if (tray.setContextMenu) {
  183. tray.setContextMenu({
  184. labels: {
  185. ShowAriaNgNative: ariaNgLocalizationService.getLocalizedText('tray.ShowAriaNgNative'),
  186. Exit: ariaNgLocalizationService.getLocalizedText('tray.Exit')
  187. }
  188. });
  189. }
  190. },
  191. setTrayToolTip: function (value) {
  192. if (tray.setToolTip) {
  193. tray.setToolTip(value);
  194. }
  195. },
  196. reload: function () {
  197. getCurrentWindow().reload && getCurrentWindow().reload();
  198. },
  199. isMaximized: function () {
  200. return getCurrentWindow().isMaximized && getCurrentWindow().isMaximized();
  201. },
  202. minimizeWindow: function () {
  203. getCurrentWindow().minimize && getCurrentWindow().minimize();
  204. },
  205. maximizeOrRestoreWindow: function () {
  206. if (!this.isMaximized()) {
  207. getCurrentWindow().maximize && getCurrentWindow().maximize();
  208. } else {
  209. getCurrentWindow().unmaximize && getCurrentWindow().unmaximize();
  210. }
  211. },
  212. exitApp: function () {
  213. getCurrentWindow().close && getCurrentWindow().close();
  214. }
  215. };
  216. }]);
  217. }());