Skip to content

Commit b5ceaed

Browse files
committed
🔨 Refactor: windowManager
1 parent 7e86618 commit b5ceaed

File tree

9 files changed

+40
-58
lines changed

9 files changed

+40
-58
lines changed

src/main/apis/app/shortKey/shortKeyHandler.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,18 @@
11
import bus from '@core/bus'
2-
import PicGoCore from '~/universal/types/picgo'
3-
import path from 'path'
42
import {
5-
app,
6-
globalShortcut,
7-
BrowserWindow
3+
globalShortcut
84
} from 'electron'
95
import logger from '@core/picgo/logger'
106
import GuiApi from '../../gui'
117
import db from '#/datastore'
8+
import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '#/events/constants'
129
import shortKeyService from './shortKeyService'
1310
import picgo from '@core/picgo'
1411

1512
class ShortKeyHandler {
1613
private isInModifiedMode: boolean = false
1714
constructor () {
18-
bus.on('toggleShortKeyModifiedMode', flag => {
15+
bus.on(TOGGLE_SHORTKEY_MODIFIED_MODE, flag => {
1916
this.isInModifiedMode = flag
2017
})
2118
}

src/main/apis/app/window/constants.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,3 @@ export const MINI_WINDOW_URL = isDevelopment
2222
export const RENAME_WINDOW_URL = process.env.NODE_ENV === 'development'
2323
? `${(process.env.WEBPACK_DEV_SERVER_URL as string)}#rename-page`
2424
: `picgo://./index.html#rename-page`
25-
26-
export const DELETE_WINDOW_EVENT = 'DELETE_WINDOW_EVENT'
27-
export const CREATE_WINDOW_EVENT = 'CREATE_WINDOW_EVENT'

src/main/apis/app/window/windowList.ts

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
import {
22
IWindowList,
3-
DELETE_WINDOW_EVENT,
4-
CREATE_WINDOW_EVENT,
53
SETTING_WINDOW_URL,
64
TRAY_WINDOW_URL,
75
MINI_WINDOW_URL,
86
RENAME_WINDOW_URL
97
} from './constants'
108
import { IWindowListItem } from '#/types/electron'
119
import bus from '@core/bus'
12-
import db from '#/datastore'
13-
import { getWindowId } from '@core/bus/apis'
14-
import { BrowserWindow, app } from 'electron'
1510
import { CREATE_APP_MENU } from '@core/bus/constants'
11+
import db from '#/datastore'
12+
import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '#/events/constants'
13+
import { app } from 'electron'
1614

1715
const windowList = new Map<IWindowList, IWindowListItem>()
1816

@@ -37,12 +35,7 @@ windowList.set(IWindowList.TRAY_WINDOW, {
3735
}
3836
},
3937
callback (window) {
40-
const id = window.id
4138
window.loadURL(TRAY_WINDOW_URL)
42-
window.on('closed', () => {
43-
bus.emit(DELETE_WINDOW_EVENT, id)
44-
})
45-
4639
window.on('blur', () => {
4740
window.hide()
4841
})
@@ -81,20 +74,18 @@ windowList.set(IWindowList.SETTING_WINDOW, {
8174
}
8275
return options
8376
},
84-
callback (window) {
85-
const id = window.id
77+
callback (window, windowManager) {
8678
window.loadURL(SETTING_WINDOW_URL)
8779
window.on('closed', () => {
88-
bus.emit('toggleShortKeyModifiedMode', false)
89-
bus.emit(DELETE_WINDOW_EVENT, id)
80+
bus.emit(TOGGLE_SHORTKEY_MODIFIED_MODE, false)
9081
if (process.platform === 'linux') {
9182
process.nextTick(() => {
9283
app.quit()
9384
})
9485
}
9586
})
9687
bus.emit(CREATE_APP_MENU)
97-
bus.emit(CREATE_WINDOW_EVENT, IWindowList.MINI_WINDOW)
88+
windowManager.create(IWindowList.MINI_WINDOW)
9889
}
9990
})
10091

@@ -125,11 +116,7 @@ windowList.set(IWindowList.MINI_WINDOW, {
125116
return obj
126117
},
127118
callback (window) {
128-
const id = window.id
129119
window.loadURL(MINI_WINDOW_URL)
130-
window.on('closed', () => {
131-
bus.emit(DELETE_WINDOW_EVENT, id)
132-
})
133120
}
134121
})
135122

@@ -158,10 +145,9 @@ windowList.set(IWindowList.RENAME_WINDOW, {
158145
}
159146
return options
160147
},
161-
async callback (window) {
148+
async callback (window, windowManager) {
162149
window.loadURL(RENAME_WINDOW_URL)
163-
const currentWindowId = await getWindowId()
164-
const currentWindow = BrowserWindow.fromId(currentWindowId)
150+
const currentWindow = windowManager.getAvailableWindow()
165151
if (currentWindow && currentWindow.isVisible()) {
166152
// bounds: { x: 821, y: 75, width: 800, height: 450 }
167153
const bounds = currentWindow.getBounds()

src/main/apis/app/window/windowManager.ts

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,41 +4,38 @@ import {
44
import { IWindowManager, IWindowListItem } from '#/types/electron'
55
import windowList from './windowList'
66
import {
7-
IWindowList,
8-
DELETE_WINDOW_EVENT,
9-
CREATE_WINDOW_EVENT
7+
IWindowList
108
} from './constants'
11-
import bus from '@core/bus'
129

1310
class WindowManager implements IWindowManager {
1411
private windowMap: Map<IWindowList | string, BrowserWindow> = new Map()
1512
private windowIdMap: Map<number, IWindowList | string> = new Map()
16-
constructor () {
17-
bus.on(DELETE_WINDOW_EVENT, this.deleteById)
18-
bus.on(CREATE_WINDOW_EVENT, this.create)
19-
}
20-
create = (name: IWindowList) => {
13+
create (name: IWindowList) {
2114
const windowConfig: IWindowListItem = windowList.get(name)!
2215
if (windowConfig.isValid) {
2316
if (!windowConfig.multiple) {
24-
if (this.windowMap.has(name)) return this.windowMap.get(name)!
17+
if (this.has(name)) return this.windowMap.get(name)!
2518
}
2619
const window = new BrowserWindow(windowConfig.options())
20+
const id = window.id
2721
if (windowConfig.multiple) {
2822
this.windowMap.set(`${name}_${window.id}`, window)
2923
this.windowIdMap.set(window.id, `${name}_${window.id}`)
3024
} else {
3125
this.windowMap.set(name, window)
3226
this.windowIdMap.set(window.id, name)
3327
}
34-
windowConfig.callback(window)
28+
windowConfig.callback(window, this)
29+
window.on('close', () => {
30+
this.deleteById(id)
31+
})
3532
return window
3633
} else {
3734
return null
3835
}
3936
}
4037
get (name: IWindowList) {
41-
if (this.windowMap.has(name)) {
38+
if (this.has(name)) {
4239
return this.windowMap.get(name)!
4340
} else {
4441
const window = this.create(name)
@@ -48,13 +45,14 @@ class WindowManager implements IWindowManager {
4845
has (name: IWindowList) {
4946
return this.windowMap.has(name)
5047
}
51-
delete = (name: IWindowList) => {
52-
const window = this.windowMap.get(name)
53-
if (window) {
54-
this.windowIdMap.delete(window.id)
55-
this.windowMap.delete(name)
56-
}
57-
}
48+
// useless
49+
// delete (name: IWindowList) {
50+
// const window = this.windowMap.get(name)
51+
// if (window) {
52+
// this.windowIdMap.delete(window.id)
53+
// this.windowMap.delete(name)
54+
// }
55+
// }
5856
deleteById = (id: number) => {
5957
const name = this.windowIdMap.get(id)
6058
if (name) {

src/main/apis/gui/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {
22
dialog,
33
BrowserWindow,
4-
clipboard,
54
Notification,
65
ipcMain
76
} from 'electron'
@@ -17,6 +16,7 @@ import {
1716
SHOW_INPUT_BOX
1817
} from '~/universal/events/constants'
1918

19+
// Cross-process support may be required in the future
2020
class GuiApi implements IGuiApi {
2121
private windowId: number = -1
2222
private settingWindowId: number = -1

src/main/events/ipcList.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {
22
app,
33
ipcMain,
4-
clipboard,
54
Notification,
65
IpcMainEvent
76
} from 'electron'
@@ -14,6 +13,7 @@ import server from '~/main/server'
1413
import getPicBeds from '~/main/utils/getPicBeds'
1514
import shortKeyHandler from 'apis/app/shortKey/shortKeyHandler'
1615
import bus from '@core/bus'
16+
import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '#/events/constants'
1717
import {
1818
uploadClipboardFiles,
1919
uploadChoosedFiles
@@ -132,8 +132,8 @@ export default {
132132
evt.returnValue = picBeds
133133
})
134134

135-
ipcMain.on('toggleShortKeyModifiedMode', (evt: IpcMainEvent, val: boolean) => {
136-
bus.emit('toggleShortKeyModifiedMode', val)
135+
ipcMain.on(TOGGLE_SHORTKEY_MODIFIED_MODE, (evt: IpcMainEvent, val: boolean) => {
136+
bus.emit(TOGGLE_SHORTKEY_MODIFIED_MODE, val)
137137
})
138138

139139
ipcMain.on('updateServer', () => {

src/renderer/pages/ShortKey.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@
9898
import { Component, Vue, Watch } from 'vue-property-decorator'
9999
import keyDetect from '@/utils/key-binding'
100100
import { ipcRenderer, IpcRendererEvent } from 'electron'
101+
import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '#/events/constants'
101102
102103
@Component({
103104
name: 'shortkey-page'
@@ -119,7 +120,7 @@ export default class extends Vue {
119120
}
120121
@Watch('keyBindingVisible')
121122
onKeyBindingVisibleChange (val: boolean) {
122-
ipcRenderer.send('toggleShortKeyModifiedMode', val)
123+
ipcRenderer.send(TOGGLE_SHORTKEY_MODIFIED_MODE, val)
123124
}
124125
calcOrigin (item: string) {
125126
const [origin] = item.split(':')
@@ -162,7 +163,7 @@ export default class extends Vue {
162163
})
163164
}
164165
beforeDestroy () {
165-
ipcRenderer.send('toggleShortKeyModifiedMode', false)
166+
ipcRenderer.send(TOGGLE_SHORTKEY_MODIFIED_MODE, false)
166167
}
167168
}
168169
</script>

src/universal/events/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export const SHOW_INPUT_BOX = 'SHOW_INPUT_BOX'
22
export const SHOW_INPUT_BOX_RESPONSE = 'SHOW_INPUT_BOX_RESPONSE'
3+
export const TOGGLE_SHORTKEY_MODIFIED_MODE = 'TOGGLE_SHORTKEY_MODIFIED_MODE'

src/universal/types/electron.d.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@ declare interface IWindowListItem {
99
isValid: boolean
1010
multiple: boolean
1111
options: () => IBrowserWindowOptions,
12-
callback: (window: BrowserWindow) => void
12+
callback: (window: BrowserWindow, windowManager: IWindowManager) => void
1313
}
1414

1515
declare interface IWindowManager {
1616
create: (name: IWindowList) => BrowserWindow | null
1717
get: (name: IWindowList) => BrowserWindow | null
18-
delete: (name: IWindowList) => void
18+
has: (name: IWindowList) => boolean
19+
// delete: (name: IWindowList) => void
20+
deleteById: (id: number) => void
1921
getAvailableWindow: () => BrowserWindow
2022
}

0 commit comments

Comments
 (0)