215 lines
5.1 KiB
JavaScript
215 lines
5.1 KiB
JavaScript
import { Tray, Menu, app, BrowserWindow, shell } from 'electron'
|
|
import { join } from 'path'
|
|
import icon from '../../resources/icon.png?asset'
|
|
import { getMainWindow, createWindow, createApiConfigWindow, createConfigWindow ,getDragWindow} from './window.js'
|
|
import { getStoreValue, setStoreValue, clearStore } from './store.js'
|
|
import { createDrageWindow, getDrageWindow } from './window.js'
|
|
import logger from './utils/logger'
|
|
import { clearAllWindowsCache } from './utils/cacheUtils.js'
|
|
import fs from 'fs'
|
|
import path from 'path'
|
|
|
|
let tray = null
|
|
|
|
import {checkForUpdates} from "./utils/updateUtils"
|
|
|
|
// 安全重启应用函数
|
|
function safeRestartApp() {
|
|
return new Promise((resolve) => {
|
|
try {
|
|
logger.info('开始安全重启应用')
|
|
|
|
// 标记为正在重启,避免其他退出逻辑干扰
|
|
app.isRestarting = true
|
|
|
|
// 确保所有窗口都被正确关闭
|
|
const windows = BrowserWindow.getAllWindows()
|
|
logger.info(`准备关闭 ${windows.length} 个窗口`)
|
|
|
|
windows.forEach(window => {
|
|
if (!window.isDestroyed()) {
|
|
try {
|
|
window.close()
|
|
logger.info('窗口关闭成功')
|
|
} catch (error) {
|
|
logger.warn('关闭窗口时出错:', error)
|
|
}
|
|
}
|
|
})
|
|
|
|
// 延迟执行重启,确保窗口关闭完成
|
|
setTimeout(() => {
|
|
try {
|
|
logger.info('执行应用重启')
|
|
app.relaunch()
|
|
app.exit(0)
|
|
resolve(true)
|
|
} catch (error) {
|
|
logger.error('重启应用失败,尝试强制退出:', error)
|
|
try {
|
|
app.quit()
|
|
} catch (quitError) {
|
|
logger.error('强制退出也失败:', quitError)
|
|
process.exit(0)
|
|
}
|
|
resolve(false)
|
|
}
|
|
}, 1000) // 增加延迟时间到1秒
|
|
|
|
} catch (error) {
|
|
logger.error('安全重启失败:', error)
|
|
try {
|
|
app.quit()
|
|
} catch (quitError) {
|
|
logger.error('强制退出失败:', quitError)
|
|
process.exit(0)
|
|
}
|
|
resolve(false)
|
|
}
|
|
})
|
|
}
|
|
|
|
export async function clearBrowserCache() {
|
|
try {
|
|
// 使用统一的缓存清理函数
|
|
await clearAllWindowsCache('tray-clear-cache');
|
|
} catch (error) {
|
|
logger.error('清除浏览器缓存失败:', error)
|
|
}
|
|
}
|
|
|
|
export function createTray() {
|
|
// 防止重复创建托盘
|
|
if (tray) {
|
|
logger.info('托盘已存在,跳过创建')
|
|
return
|
|
}
|
|
|
|
logger.info('开始创建托盘图标')
|
|
// 创建托盘图标
|
|
tray = new Tray(icon)
|
|
|
|
// 设置托盘图标的提示文本
|
|
tray.setToolTip('Dify Market Manager')
|
|
|
|
// 创建右键菜单
|
|
const contextMenu = Menu.buildFromTemplate([
|
|
{
|
|
label: '显示主窗口',
|
|
click: () => {
|
|
const mainWindow = getMainWindow()
|
|
if (mainWindow) {
|
|
mainWindow.show()
|
|
} else {
|
|
createWindow()
|
|
}
|
|
}
|
|
},
|
|
{
|
|
label: '隐藏主窗口',
|
|
click: () => {
|
|
const mainWindow = getMainWindow()
|
|
if (mainWindow) {
|
|
mainWindow.hide()
|
|
}
|
|
}
|
|
},
|
|
{ type: 'separator' },
|
|
{
|
|
label: '配置',
|
|
submenu: [
|
|
{ type: 'separator' },
|
|
{
|
|
label: '配置客户端地址',
|
|
click: () => {
|
|
createConfigWindow()
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{ type: 'separator' },
|
|
{
|
|
label: '显示隐藏桌面悬浮',
|
|
click: () => {
|
|
const drageWindow = getDrageWindow()
|
|
if (!drageWindow) {
|
|
createDrageWindow()
|
|
} else {
|
|
if (drageWindow.isVisible()) {
|
|
drageWindow.hide()
|
|
setStoreValue('showDrageWindow', false)
|
|
} else {
|
|
drageWindow.show()
|
|
setStoreValue('showDrageWindow', true)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
},
|
|
{ type: 'separator' },
|
|
{
|
|
label: '检查更新',
|
|
click: async (menuItem) => {
|
|
checkForUpdates(menuItem,true)
|
|
}
|
|
},
|
|
|
|
|
|
{ type: 'separator' },
|
|
{
|
|
label: '退出登录',
|
|
click: async () => {
|
|
await clearBrowserCache()
|
|
// 重新加载主窗口
|
|
const mainWindow = getMainWindow()
|
|
if (mainWindow) {
|
|
mainWindow.reload()
|
|
}
|
|
logger.info('用户已退出登录')
|
|
}
|
|
},
|
|
{ type: 'separator' },
|
|
{
|
|
label: '退出应用',
|
|
click: () => {
|
|
app.isQuiting = true
|
|
// 确保所有窗口都被关闭
|
|
BrowserWindow.getAllWindows().forEach(window => {
|
|
window.destroy()
|
|
})
|
|
app.quit()
|
|
}
|
|
}
|
|
])
|
|
|
|
// 设置托盘图标的右键菜单
|
|
tray.setContextMenu(contextMenu)
|
|
|
|
// 点击托盘图标时显示/隐藏主窗口
|
|
tray.on('click', () => {
|
|
const mainWindow = getMainWindow()
|
|
if (mainWindow) {
|
|
if (mainWindow.isVisible()) {
|
|
mainWindow.hide()
|
|
} else {
|
|
mainWindow.show()
|
|
}
|
|
} else {
|
|
createWindow()
|
|
}
|
|
})
|
|
}
|
|
|
|
export function destroyTray() {
|
|
if (tray) {
|
|
logger.info('销毁托盘图标')
|
|
tray.destroy()
|
|
tray = null
|
|
logger.info('托盘图标已销毁')
|
|
} else {
|
|
logger.info('托盘图标不存在,无需销毁')
|
|
}
|
|
}
|