137 lines
4.0 KiB
JavaScript
137 lines
4.0 KiB
JavaScript
const { Menu, dialog, shell, app } = require('electron');
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
const os = require('os');
|
|
const { getAppVersion } = require('../util');
|
|
|
|
/**
|
|
* 创建应用菜单
|
|
* @param {BrowserWindow} mainWindow 主窗口
|
|
* @param {Function} clearCache 清除缓存函数
|
|
*/
|
|
function createMenu(mainWindow, clearCache) {
|
|
const template = [
|
|
{
|
|
label: 'File',
|
|
submenu: [{ role: 'quit', label: 'Quit' }]
|
|
},
|
|
{
|
|
label: 'Edit',
|
|
submenu: [
|
|
{ role: 'undo', label: 'Undo' },
|
|
{ role: 'redo', label: 'Redo' },
|
|
{ type: 'separator' },
|
|
{ role: 'cut', label: 'Cut' },
|
|
{ role: 'copy', label: 'Copy' },
|
|
{ role: 'paste', label: 'Paste' }
|
|
]
|
|
},
|
|
{
|
|
label: 'View',
|
|
submenu: [
|
|
{ role: 'reload', label: 'Refresh' },
|
|
{ type: 'separator' },
|
|
{ role: 'resetzoom', label: 'Reset Zoom' },
|
|
{ role: 'zoomin', label: 'Zoom In' },
|
|
{ role: 'zoomout', label: 'Zoom Out' },
|
|
{ type: 'separator' },
|
|
{ role: 'togglefullscreen', label: 'Fullscreen' }
|
|
]
|
|
},
|
|
{
|
|
label: 'Help',
|
|
submenu: [
|
|
{
|
|
label: 'About',
|
|
click: () => {
|
|
dialog.showMessageBox(mainWindow, {
|
|
title: 'About Easy Dataset',
|
|
message: `Easy Dataset v${getAppVersion()}`,
|
|
detail: 'An application for creating fine-tuning datasets for large models.',
|
|
buttons: ['OK']
|
|
});
|
|
}
|
|
},
|
|
{
|
|
label: 'Visit GitHub',
|
|
click: () => {
|
|
shell.openExternal('https://github.com/ConardLi/easy-dataset');
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
label: 'More',
|
|
submenu: [
|
|
{ role: 'toggledevtools', label: 'Developer Tools' },
|
|
{
|
|
label: 'Open Logs Directory',
|
|
click: () => {
|
|
const logsDir = path.join(app.getPath('userData'), 'logs');
|
|
if (!fs.existsSync(logsDir)) {
|
|
fs.mkdirSync(logsDir, { recursive: true });
|
|
}
|
|
shell.openPath(logsDir);
|
|
}
|
|
},
|
|
{
|
|
label: 'Open Data Directory',
|
|
click: () => {
|
|
const dataDir = path.join(app.getPath('userData'), 'local-db');
|
|
if (!fs.existsSync(dataDir)) {
|
|
fs.mkdirSync(dataDir, { recursive: true });
|
|
}
|
|
shell.openPath(dataDir);
|
|
}
|
|
},
|
|
{
|
|
label: 'Open Data Directory (History)',
|
|
click: () => {
|
|
const dataDir = path.join(os.homedir(), '.easy-dataset-db');
|
|
if (!fs.existsSync(dataDir)) {
|
|
fs.mkdirSync(dataDir, { recursive: true });
|
|
}
|
|
shell.openPath(dataDir);
|
|
}
|
|
},
|
|
{
|
|
label: 'Clear Cache',
|
|
click: async () => {
|
|
try {
|
|
const response = await dialog.showMessageBox(mainWindow, {
|
|
type: 'question',
|
|
buttons: ['Cancel', 'Confirm'],
|
|
defaultId: 1,
|
|
title: 'Clear Cache',
|
|
message: 'Are you sure you want to clear the cache?',
|
|
detail:
|
|
'This will delete all files in the logs directory and local database cache files (excluding main database files).'
|
|
});
|
|
|
|
if (response.response === 1) {
|
|
// User clicked confirm
|
|
await clearCache();
|
|
dialog.showMessageBox(mainWindow, {
|
|
type: 'info',
|
|
title: 'Cleared Successfully',
|
|
message: 'Cache has been cleared successfully'
|
|
});
|
|
}
|
|
} catch (error) {
|
|
global.appLog(`Failed to clear cache: ${error.message}`, 'error');
|
|
dialog.showErrorBox('Failed to clear cache', error.message);
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
];
|
|
|
|
const menu = Menu.buildFromTemplate(template);
|
|
Menu.setApplicationMenu(menu);
|
|
}
|
|
|
|
module.exports = {
|
|
createMenu
|
|
};
|