Initial commit

This commit is contained in:
2025-06-26 11:28:55 +08:00
commit e11c59cdc2
167 changed files with 6029 additions and 0 deletions

186
src/main/tray.js Normal file
View File

@@ -0,0 +1,186 @@
import { Tray, Menu, app, BrowserWindow } 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 fs from 'fs'
let tray = null
import {checkForUpdates} from "./utils/updateUtils"
async function clearBrowserCache() {
try {
// 清除所有窗口的浏览器缓存
const windows = BrowserWindow.getAllWindows()
for (const window of windows) {
const session = window.webContents.session
await session.clearStorageData({
storages: [
'appcache',
'cookies',
'filesystem',
'indexdb',
'localstorage',
'shadercache',
'websql',
'serviceworkers',
'cachestorage'
]
})
}
logger.info('浏览器缓存清除成功')
} catch (error) {
logger.error('清除浏览器缓存失败:', error)
}
}
export function createTray() {
// 创建托盘图标
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()
// 删除配置文件
try {
const userDataPath = app.getPath('userData')
const configPath = join(userDataPath, 'config.json')
if (fs.existsSync(configPath)) {
fs.unlinkSync(configPath)
logger.info('配置文件删除成功')
}
} catch (error) {
logger.error('删除配置文件失败:', error)
}
// 重新加载所有窗口
const windows = BrowserWindow.getAllWindows()
for (const window of windows) {
window.reload()
}
}
},
{ 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) {
tray.destroy()
tray = null
}
}