Files
YG-Datasets/easy-dataset-main/electron/modules/menu.js

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
};