ariaNgNativeElectronService.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. (function () {
  2. 'use strict';
  3. angular.module('ariaNg').factory('ariaNgNativeElectronService', ['$q', 'ariaNgLogService', 'ariaNgLocalizationService', function ($q, ariaNgLogService, ariaNgLocalizationService) {
  4. var electron = angular.isFunction(window.nodeRequire) ? nodeRequire('electron') : {};
  5. var ipcRenderer = electron.ipcRenderer || {};
  6. var onMainProcessEvent = function (channel, callback) {
  7. ipcRenderer.on && ipcRenderer.on(channel, callback);
  8. };
  9. var removeMainProcessEvent = function (channel, callback) {
  10. ipcRenderer.removeListener && ipcRenderer.removeListener(channel, callback);
  11. };
  12. var invokeMainProcessMethod = function (channel, ...args) {
  13. ipcRenderer.send && ipcRenderer.send(channel, ...args);
  14. };
  15. var invokeMainProcessMethodSync = function (channel, ...args) {
  16. if (!ipcRenderer.sendSync) {
  17. return null;
  18. }
  19. return ipcRenderer.sendSync(channel, ...args);
  20. };
  21. var invokeMainProcessMethodAsync = function (channel, ...args) {
  22. if (!ipcRenderer.invoke) {
  23. return null;
  24. }
  25. return ipcRenderer.invoke(channel, ...args);
  26. };
  27. onMainProcessEvent('on-main-log-debug', function (event, msg, obj) {
  28. ariaNgLogService.debug(msg, obj);
  29. });
  30. onMainProcessEvent('on-main-log-info', function (event, msg, obj) {
  31. ariaNgLogService.info(msg, obj);
  32. });
  33. onMainProcessEvent('on-main-log-warn', function (event, msg, obj) {
  34. ariaNgLogService.warn(msg, obj);
  35. });
  36. onMainProcessEvent('on-main-log-error', function (event, msg, obj) {
  37. ariaNgLogService.error(msg, obj);
  38. });
  39. return {
  40. getRuntimeEnvironment: function () {
  41. return invokeMainProcessMethodSync('render-sync-get-runtime-environment');
  42. },
  43. getVersion: function() {
  44. return invokeMainProcessMethodSync('render-sync-get-global-setting', 'version');
  45. },
  46. getAriaNgVersion: function() {
  47. return invokeMainProcessMethodSync('render-sync-get-global-setting', 'ariaNgVersion');
  48. },
  49. isDevMode: function () {
  50. return invokeMainProcessMethodSync('render-sync-get-global-setting', 'isDevMode');
  51. },
  52. useCustomAppTitle: function () {
  53. return invokeMainProcessMethodSync('render-sync-get-global-setting', 'useCustomAppTitle');
  54. },
  55. getWindowMaximizedAsync: function (callback) {
  56. return invokeMainProcessMethodAsync('render-get-native-window-maximized')
  57. .then(function onReceive(maximized) {
  58. if (callback) {
  59. callback(maximized);
  60. }
  61. });
  62. },
  63. minimizeWindow: function () {
  64. invokeMainProcessMethod('render-minimize-native-window');
  65. },
  66. maximizeOrRestoreWindow: function () {
  67. invokeMainProcessMethod('render-maximize-or-restore-native-window');
  68. },
  69. reload: function () {
  70. invokeMainProcessMethod('render-reload-native-window');
  71. },
  72. exitApp: function () {
  73. invokeMainProcessMethod('render-exit-native-app');
  74. },
  75. setApplicationMenu: function () {
  76. invokeMainProcessMethod('render-update-app-menu-label', {
  77. AboutAriaNgNative: ariaNgLocalizationService.getLocalizedText('menu.AboutAriaNgNative'),
  78. Services: ariaNgLocalizationService.getLocalizedText('menu.Services'),
  79. HideAriaNgNative: ariaNgLocalizationService.getLocalizedText('menu.HideAriaNgNative'),
  80. HideOthers: ariaNgLocalizationService.getLocalizedText('menu.HideOthers'),
  81. ShowAll: ariaNgLocalizationService.getLocalizedText('menu.ShowAll'),
  82. QuitAriaNgNative: ariaNgLocalizationService.getLocalizedText('menu.QuitAriaNgNative'),
  83. Edit: ariaNgLocalizationService.getLocalizedText('menu.Edit'),
  84. Undo: ariaNgLocalizationService.getLocalizedText('menu.Undo'),
  85. Redo: ariaNgLocalizationService.getLocalizedText('menu.Redo'),
  86. Cut: ariaNgLocalizationService.getLocalizedText('menu.Cut'),
  87. Copy: ariaNgLocalizationService.getLocalizedText('menu.Copy'),
  88. Paste: ariaNgLocalizationService.getLocalizedText('menu.Paste'),
  89. Delete: ariaNgLocalizationService.getLocalizedText('menu.Delete'),
  90. SelectAll: ariaNgLocalizationService.getLocalizedText('menu.SelectAll'),
  91. Window: ariaNgLocalizationService.getLocalizedText('menu.Window'),
  92. Minimize: ariaNgLocalizationService.getLocalizedText('menu.Minimize'),
  93. Zoom: ariaNgLocalizationService.getLocalizedText('menu.Zoom'),
  94. BringAllToFront: ariaNgLocalizationService.getLocalizedText('menu.BringAllToFront')
  95. });
  96. },
  97. setTrayMenu: function () {
  98. invokeMainProcessMethod('render-update-tray-menu-label', {
  99. ShowAriaNgNative: ariaNgLocalizationService.getLocalizedText('tray.ShowAriaNgNative'),
  100. Exit: ariaNgLocalizationService.getLocalizedText('tray.Exit')
  101. });
  102. },
  103. setTrayToolTip: function (value) {
  104. invokeMainProcessMethod('render-update-tray-tip', value);
  105. },
  106. setMainWindowLanguage: function () {
  107. this.setApplicationMenu();
  108. this.setTrayMenu();
  109. },
  110. getNativeConfig: function () {
  111. var config = invokeMainProcessMethodSync('render-sync-get-native-config');
  112. var cfg = {};
  113. for (var key in config) {
  114. if (!config.hasOwnProperty(key)) {
  115. continue;
  116. }
  117. cfg[key] = angular.copy(config[key]);
  118. }
  119. return cfg;
  120. },
  121. setDefaultPosition: function (value) {
  122. invokeMainProcessMethod('render-set-native-config-default-position', value);
  123. },
  124. setMinimizedToTray: function (value) {
  125. invokeMainProcessMethod('render-set-native-config-minimized-to-tray', value);
  126. },
  127. requestHttp: function (requestContext) {
  128. var deferred = $q.defer();
  129. invokeMainProcessMethodAsync('render-request-http', requestContext)
  130. .then(function onReceive(result) {
  131. if (result && result.success) {
  132. deferred.resolve(result.response);
  133. } else {
  134. deferred.reject(result.response);
  135. }
  136. }).catch(function onError() {
  137. deferred.reject({});
  138. });
  139. return deferred.promise;
  140. },
  141. openProjectLink: function () {
  142. invokeMainProcessMethod('render-open-external-url', 'https://github.com/mayswind/AriaNg-Native');
  143. },
  144. openProjectReleaseLink: function () {
  145. invokeMainProcessMethod('render-open-external-url', 'https://github.com/mayswind/AriaNg-Native/releases');
  146. },
  147. readPackageFile: function (path) {
  148. return invokeMainProcessMethodSync('render-sync-get-package-file-content', path);
  149. },
  150. getLocalFSExistsAsync: function (fullpath, callback) {
  151. return invokeMainProcessMethodAsync('render-get-localfs-exists', fullpath)
  152. .then(function onReceive(exists) {
  153. if (callback) {
  154. callback(exists);
  155. }
  156. });
  157. },
  158. openFileInDirectory: function (dir, filename) {
  159. invokeMainProcessMethod('render-open-local-directory', dir, filename);
  160. },
  161. parseBittorrentInfo: function (data) {
  162. var info = angular.copy(invokeMainProcessMethodSync('render-sync-parse-bittorrent-info', data));
  163. info.type = 'bittorrent';
  164. ariaNgLogService.debug('[ariaNgNativeElectronService.parseBittorrentInfo] bittorrent info', info);
  165. return info;
  166. },
  167. notifyMainProcessViewLoaded: function (locationPath) {
  168. invokeMainProcessMethod('on-render-view-content-loaded', locationPath);
  169. },
  170. notifyMainProcessorNewDropFile: function (message) {
  171. invokeMainProcessMethod('on-render-new-drop-file', message);
  172. },
  173. notifyMainProcessorNewDropText: function (message) {
  174. invokeMainProcessMethod('on-render-new-drop-text', message);
  175. },
  176. onMainWindowMaximize: function (callback) {
  177. onMainProcessEvent('on-main-window-maximized', callback);
  178. },
  179. onMainWindowUnmaximize: function (callback) {
  180. onMainProcessEvent('on-main-window-unmaximized', callback);
  181. },
  182. onMainProcessShowError: function (callback) {
  183. onMainProcessEvent('on-main-show-error', callback);
  184. },
  185. onMainProcessNavigateTo: function (callback) {
  186. onMainProcessEvent('on-main-navigate-to', callback);
  187. },
  188. onMainProcessNewTaskFromFile: function (callback) {
  189. onMainProcessEvent('on-main-new-task-from-file', callback);
  190. },
  191. onMainProcessNewTaskFromText: function (callback) {
  192. onMainProcessEvent('on-main-new-task-from-text', callback);
  193. },
  194. removeMainProcessNewTaskFromFileCallback: function (callback) {
  195. removeMainProcessEvent('on-main-new-task-from-file', callback);
  196. },
  197. removeMainProcessNewTaskFromTextCallback: function (callback) {
  198. removeMainProcessEvent('on-main-new-task-from-text', callback);
  199. }
  200. };
  201. }]);
  202. }());