移动代码
This commit is contained in:
93
src/main/code-launchpad/code-launchpad.ts
Normal file
93
src/main/code-launchpad/code-launchpad.ts
Normal file
@@ -0,0 +1,93 @@
|
||||
import { BrowserWindow, screen, shell, Tray } from 'electron'
|
||||
import { settingsManager } from '../settings'
|
||||
import { codeLaunchpadIcon } from '../resources'
|
||||
import path from 'path'
|
||||
import { is } from '@electron-toolkit/utils'
|
||||
|
||||
/**
|
||||
* 创建代码启动台窗口。
|
||||
* @return 布尔值,表明创建是否成功
|
||||
*/
|
||||
export function createCodeLaunchpadWindow(closeOnBlur: boolean): boolean {
|
||||
// 不允许重复创建
|
||||
if (global.codeLaunchpadWindow !== null) {
|
||||
return false
|
||||
}
|
||||
|
||||
const windowWidth = settingsManager._settings?.codeLaunchpadWidth
|
||||
? settingsManager._settings?.codeLaunchpadWidth
|
||||
: 460
|
||||
const windowHeight = settingsManager._settings?.codeLaunchpadHeight
|
||||
? settingsManager._settings?.codeLaunchpadHeight
|
||||
: 760
|
||||
const position = settingsManager._settings?.codeLaunchpadPosition
|
||||
? settingsManager._settings.codeLaunchpadPosition
|
||||
: 'left top'
|
||||
|
||||
const codeLaunchpadWindow = new BrowserWindow({
|
||||
width: windowWidth,
|
||||
height: windowHeight,
|
||||
x:
|
||||
position === 'left top' || position === 'left bottom'
|
||||
? 0
|
||||
: screen.getPrimaryDisplay().workArea.width - windowWidth,
|
||||
y:
|
||||
position === 'left top' || position === 'right top'
|
||||
? 0
|
||||
: screen.getPrimaryDisplay().workArea.height - windowHeight,
|
||||
frame: false,
|
||||
show: false,
|
||||
autoHideMenuBar: true,
|
||||
// 代码启动台需要置顶
|
||||
alwaysOnTop: true,
|
||||
resizable: false,
|
||||
backgroundColor: '#1f1f1f',
|
||||
icon: codeLaunchpadIcon,
|
||||
webPreferences: {
|
||||
preload: path.join(__dirname, '../preload/index.mjs'),
|
||||
sandbox: false
|
||||
}
|
||||
})
|
||||
|
||||
codeLaunchpadWindow.on('ready-to-show', () => {
|
||||
codeLaunchpadWindow.show()
|
||||
})
|
||||
|
||||
// 如有必要,失去焦点时自动关闭
|
||||
if (closeOnBlur) {
|
||||
codeLaunchpadWindow.on('blur', () => {
|
||||
codeLaunchpadWindow.close()
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭代码启动台时
|
||||
codeLaunchpadWindow.on('close', () => {
|
||||
global.codeLaunchpadWindow = null
|
||||
})
|
||||
|
||||
codeLaunchpadWindow.webContents.setWindowOpenHandler((details) => {
|
||||
shell.openExternal(details.url)
|
||||
return { action: 'deny' }
|
||||
})
|
||||
|
||||
// 开发和生产环境的各自设置
|
||||
if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
|
||||
codeLaunchpadWindow.loadURL(process.env['ELECTRON_RENDERER_URL'] + '#/codeLaunchpad/IDEs')
|
||||
} else {
|
||||
codeLaunchpadWindow.loadFile(path.join(__dirname, '../renderer/index.html'), {
|
||||
hash: '/codeLaunchpad/IDEs'
|
||||
})
|
||||
}
|
||||
|
||||
global.codeLaunchpadWindow = codeLaunchpadWindow
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
export function createCodeLaunchpadTray(): Tray {
|
||||
const tray = new Tray(codeLaunchpadIcon)
|
||||
|
||||
tray.on('click', () => createCodeLaunchpadWindow(true))
|
||||
|
||||
return tray
|
||||
}
|
||||
@@ -6,8 +6,6 @@ import type {
|
||||
IDECode
|
||||
} from '@my-type/settings'
|
||||
import { execSync } from 'node:child_process'
|
||||
import { BrowserWindow, screen, shell, Tray } from 'electron'
|
||||
import { is } from '@electron-toolkit/utils'
|
||||
import path from 'path'
|
||||
import { loadJsonFile } from 'load-json-file'
|
||||
import os from 'os'
|
||||
@@ -17,7 +15,6 @@ import {
|
||||
JetBrainsStateDto
|
||||
} from '@my-type/jetbrains-state-tools'
|
||||
import { settingsManager } from '../settings'
|
||||
import { codeLaunchpadIcon } from '../resources'
|
||||
import { isNodeError } from '@my-type/node-error'
|
||||
import { JetBrainsDataProductDto } from '@my-type/jetbrains-data-products'
|
||||
|
||||
@@ -233,91 +230,3 @@ export async function checkIDEsVersion(): Promise<checkIDEsVersionDto> {
|
||||
global.installedIDEsVersion = result
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建代码启动台窗口。
|
||||
* @return 布尔值,表明创建是否成功
|
||||
*/
|
||||
export function createCodeLaunchpadWindow(closeOnBlur: boolean): boolean {
|
||||
// 不允许重复创建
|
||||
if (global.codeLaunchpadWindow !== null) {
|
||||
return false
|
||||
}
|
||||
|
||||
const windowWidth = settingsManager._settings?.codeLaunchpadWidth
|
||||
? settingsManager._settings?.codeLaunchpadWidth
|
||||
: 460
|
||||
const windowHeight = settingsManager._settings?.codeLaunchpadHeight
|
||||
? settingsManager._settings?.codeLaunchpadHeight
|
||||
: 760
|
||||
const position = settingsManager._settings?.codeLaunchpadPosition
|
||||
? settingsManager._settings.codeLaunchpadPosition
|
||||
: 'left top'
|
||||
|
||||
const codeLaunchpadWindow = new BrowserWindow({
|
||||
width: windowWidth,
|
||||
height: windowHeight,
|
||||
x:
|
||||
position === 'left top' || position === 'left bottom'
|
||||
? 0
|
||||
: screen.getPrimaryDisplay().workArea.width - windowWidth,
|
||||
y:
|
||||
position === 'left top' || position === 'right top'
|
||||
? 0
|
||||
: screen.getPrimaryDisplay().workArea.height - windowHeight,
|
||||
frame: false,
|
||||
show: false,
|
||||
autoHideMenuBar: true,
|
||||
// 代码启动台需要置顶
|
||||
alwaysOnTop: true,
|
||||
resizable: false,
|
||||
backgroundColor: '#1f1f1f',
|
||||
icon: codeLaunchpadIcon,
|
||||
webPreferences: {
|
||||
preload: path.join(__dirname, '../preload/index.mjs'),
|
||||
sandbox: false
|
||||
}
|
||||
})
|
||||
|
||||
codeLaunchpadWindow.on('ready-to-show', () => {
|
||||
codeLaunchpadWindow.show()
|
||||
})
|
||||
|
||||
// 如有必要,失去焦点时自动关闭
|
||||
if (closeOnBlur) {
|
||||
codeLaunchpadWindow.on('blur', () => {
|
||||
codeLaunchpadWindow.close()
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭代码启动台时
|
||||
codeLaunchpadWindow.on('close', () => {
|
||||
global.codeLaunchpadWindow = null
|
||||
})
|
||||
|
||||
codeLaunchpadWindow.webContents.setWindowOpenHandler((details) => {
|
||||
shell.openExternal(details.url)
|
||||
return { action: 'deny' }
|
||||
})
|
||||
|
||||
// 开发和生产环境的各自设置
|
||||
if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
|
||||
codeLaunchpadWindow.loadURL(process.env['ELECTRON_RENDERER_URL'] + '#/codeLaunchpad/IDEs')
|
||||
} else {
|
||||
codeLaunchpadWindow.loadFile(path.join(__dirname, '../renderer/index.html'), {
|
||||
hash: '/codeLaunchpad/IDEs'
|
||||
})
|
||||
}
|
||||
|
||||
global.codeLaunchpadWindow = codeLaunchpadWindow
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
export function createCodeLaunchpadTray(): Tray {
|
||||
const tray = new Tray(codeLaunchpadIcon)
|
||||
|
||||
tray.on('click', () => createCodeLaunchpadWindow(true))
|
||||
|
||||
return tray
|
||||
}
|
||||
|
||||
@@ -4,14 +4,14 @@ import { saveSettingsToLocal, updateSettingsFromLocal } from './settings'
|
||||
import {
|
||||
checkIDEs,
|
||||
checkIDEsVersion,
|
||||
createCodeLaunchpadTray,
|
||||
createCodeLaunchpadWindow,
|
||||
getIDEs,
|
||||
getIDEsVersion
|
||||
} from './code-launchpad/ide-versions-check'
|
||||
import { fanToolsIcon } from './resources'
|
||||
import path from 'path'
|
||||
import { getJetBrainsProjects, getVscodeProjects, openProject } from './code-launchpad/ide-projects'
|
||||
import { createCodeLaunchpadTray, createCodeLaunchpadWindow } from './code-launchpad/code-launchpad'
|
||||
import type { IDECode } from '@my-type/settings'
|
||||
|
||||
let mainWindow: BrowserWindow | null = null
|
||||
// @ts-ignore 保存引用,禁用报错
|
||||
@@ -131,7 +131,7 @@ app.whenReady().then(async () => {
|
||||
ipcMain.handle('codeLaunchpad:checkIDEsVersion', checkIDEsVersion)
|
||||
ipcMain.handle('codeLaunchpad:getVSCodeProjects', getVscodeProjects)
|
||||
ipcMain.handle('codeLaunchpad:getJetBrainsProjects', getJetBrainsProjects)
|
||||
ipcMain.handle('codeLaunchpad:openProject', (_, ide: string, path: string) => {
|
||||
ipcMain.handle('codeLaunchpad:openProject', (_, ide: IDECode, path: string) => {
|
||||
return openProject(ide, path)
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user