electron launcher
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

212 lines
7.5 KiB

4 years ago
  1. const {BrowserWindow} = require('electron');
  2. const ipc = require('electron').ipcMain;
  3. // const screen = require('electron').screen;
  4. const store = require('./windows/lib/store');
  5. const {create: createMainWindow} = require('./windows/main')
  6. // const { create: createLoginWindow } = require('./windows/login')
  7. // const { create: createAppWindow } = require('./windows/app')
  8. const {MAIN_WINDOW_FLAG, SUSPENSION_WINDOW_FLAG} = require('./constant');
  9. // const installApp = require('./ipc/installApp');
  10. // const getApps = require('./ipc/getApps');
  11. // const removeApp = require('./ipc/removeApp');
  12. module.exports = () => {
  13. let winStartPostion = {x: 0, y: 0};
  14. let mouseStartPosition = {x: 0, y: 0};
  15. let movingInterVal = null;
  16. ipc.on('getUnReadMessage', (events, callback) => {
  17. const msg = store.get('unReadMessage');
  18. // console.log('msg', msg);
  19. const windows = BrowserWindow.getAllWindows()
  20. const found = windows.find((window) => {
  21. return window[SUSPENSION_WINDOW_FLAG]
  22. });
  23. found.webContents.send("getUnReadMessage", [msg])
  24. });
  25. ipc.on('setUnReadMessage', (events, message) => {
  26. // console.log('set', message);
  27. store.set('unReadMessage', message);
  28. // 消息需要实时同步
  29. const windows = BrowserWindow.getAllWindows()
  30. const win = windows.find((window) => {
  31. return window[SUSPENSION_WINDOW_FLAG]
  32. });
  33. if (win) {
  34. // let winWidth = win.getSize()[0];
  35. let areaSize = require('electron').screen.getPrimaryDisplay().workAreaSize;
  36. const x = win.getPosition()[0];
  37. const y = win.getPosition()[1];
  38. let sWidth = areaSize.width;
  39. // console.log(sWidth - x);
  40. if (sWidth - x === 130) {
  41. win.setSize(640, 130, true);
  42. win.setPosition(sWidth - 660, y, true);
  43. }
  44. win.webContents.send("getUnReadMessage", [message])
  45. }
  46. });
  47. ipc.on("showSuspensionWindow",()=>{
  48. let areaSize = require('electron').screen.getPrimaryDisplay().workAreaSize;
  49. const windows = BrowserWindow.getAllWindows()
  50. const win = windows.find((window) => {
  51. return window[SUSPENSION_WINDOW_FLAG]
  52. });
  53. console.log('恢复原始大小')
  54. win.setSize(640, 130, true);
  55. const y = win.getPosition()[1];
  56. win.setPosition(areaSize.width - win.getSize()[0], y, true);
  57. win.webContents.send("winResize", [win.getSize()])
  58. })
  59. ipc.on('resizeWindow', () => {
  60. let areaSize = require('electron').screen.getPrimaryDisplay().workAreaSize;
  61. const windows = BrowserWindow.getAllWindows()
  62. const win = windows.find((window) => {
  63. return window[SUSPENSION_WINDOW_FLAG]
  64. });
  65. const startWidth = win.getSize()[0];
  66. if(startWidth < 640){
  67. const x = win.getPosition()[0];
  68. const y = win.getPosition()[1];
  69. win.setSize(640, 130, true);
  70. if(x > areaSize.width - win.getSize()[0] ){
  71. win.setPosition(areaSize.width - win.getSize()[0] - 50, y, true);
  72. }
  73. }
  74. });
  75. ipc.on('windowMoveHandle', (events, canMoving) => {
  76. const windows = BrowserWindow.getAllWindows()
  77. const win = windows.find((window) => {
  78. return window[SUSPENSION_WINDOW_FLAG]
  79. });
  80. const screen = require('electron').screen;
  81. /**
  82. * 窗口移动事件
  83. */
  84. if (canMoving) {
  85. if (!win) return;
  86. //读取原位置
  87. const winPosition = win.getPosition();
  88. winStartPostion = {x: winPosition[0], y: winPosition[1]};
  89. mouseStartPosition = screen.getCursorScreenPoint();
  90. //清除
  91. if (movingInterVal) {
  92. clearInterval(movingInterVal);
  93. }
  94. //新开
  95. movingInterVal = setInterval(() => {
  96. const cursorPosition = screen.getCursorScreenPoint();
  97. const x = winStartPostion.x + cursorPosition.x - mouseStartPosition.x;
  98. const y = winStartPostion.y + cursorPosition.y - mouseStartPosition.y;
  99. win.setPosition(x, y, true)
  100. }, 20)
  101. } else {
  102. clearInterval(movingInterVal);
  103. let areaSize = require('electron').screen.getPrimaryDisplay().workAreaSize;
  104. const x = win.getPosition()[0];
  105. const y = win.getPosition()[1];
  106. store.set("position",{x,y});
  107. let sWidth = areaSize.width;
  108. let winWidth = win.getSize()[0];
  109. // console.log(x + winWidth >= sWidth, sWidth - x - winWidth);
  110. // 靠边吸附效果
  111. console.log("0000000",x + winWidth >= sWidth,sWidth - x - winWidth <= 20)
  112. if (x + winWidth >= sWidth || sWidth - x - winWidth <= 20) {
  113. win.setResizable(true);
  114. win.setSize(130,130,true)
  115. win.setPosition(sWidth - 130, y, true);
  116. win.setResizable(false);
  117. console.log("靠边吸附",win.getSize(),win.getPosition())
  118. //通知渲染进程大小发生改变
  119. }else{
  120. win.setSize(650,130,true)
  121. }
  122. win.webContents.send("winResize", [win.getSize()])
  123. movingInterVal = null;
  124. }
  125. });
  126. ipc.on('showMainWindow', (event, arg) => {
  127. const windows = BrowserWindow.getAllWindows()
  128. const found = windows.find((window) => {
  129. return window[MAIN_WINDOW_FLAG]
  130. })
  131. if (found) {
  132. found.restore();
  133. found.show();
  134. } else {
  135. createMainWindow()
  136. }
  137. return true
  138. });
  139. ipc.on('hideMainWindow', () => {
  140. const windows = BrowserWindow.getAllWindows()
  141. const found = windows.find((window) => {
  142. return window[MAIN_WINDOW_FLAG]
  143. })
  144. if (found) {
  145. found.hide();
  146. }
  147. return true
  148. });
  149. ipc.on('minimize', () => {
  150. const windows = BrowserWindow.getAllWindows()
  151. const found = windows.find((window) => {
  152. return window[MAIN_WINDOW_FLAG]
  153. })
  154. if (found) {
  155. found.minimize();
  156. }
  157. return true
  158. });
  159. ipc.on('hideSuspensionWindow', (event, arg) => {
  160. const windows = BrowserWindow.getAllWindows()
  161. const found = windows.find((window) => {
  162. return window[SUSPENSION_WINDOW_FLAG]
  163. });
  164. if (found) {
  165. found.close()
  166. }
  167. return true
  168. });
  169. ipc.on('openDevTools', (event, arg) => {
  170. event.sender.webContents.openDevTools()
  171. return true
  172. });
  173. ipc.on('exitSystem', () => {
  174. const windows = BrowserWindow.getAllWindows()
  175. const mainWindow = windows.find((window) => {
  176. return window[MAIN_WINDOW_FLAG]
  177. })
  178. const suspWindow = windows.find((window) => {
  179. return window[SUSPENSION_WINDOW_FLAG]
  180. });
  181. store.delete("unReadMessage");
  182. mainWindow && mainWindow.close();
  183. suspWindow && suspWindow.close();
  184. });
  185. // ipcMain.handle('openWidget', (event, widget = {}) => {
  186. // createAppWindow(widget)
  187. // return true
  188. // });
  189. //
  190. // ipcMain.handle('openDevTools', (event, arg) => {
  191. // event.sender.webContents.openDevTools()
  192. // return true
  193. // });
  194. // ipcMain.handle('installApp', installApp);
  195. //
  196. // ipcMain.handle('getApps', getApps);
  197. //
  198. // ipcMain.handle('removeApp', removeApp);
  199. }