mirror of
https://github.com/fanchenio/DawnLauncher.git
synced 2025-07-13 12:52:10 +08:00
337 lines
10 KiB
TypeScript
337 lines
10 KiB
TypeScript
import { Menu, MenuItem, ipcMain, dialog } from "electron";
|
|
import { Classification } from "../../../types/classification";
|
|
import {
|
|
createAddEditWindow,
|
|
createAssociateFolderWindow,
|
|
createSetIconWindow,
|
|
getItemLayoutMenu,
|
|
getItemSortMenu,
|
|
getItemColumnNumber,
|
|
setAssociateFolder,
|
|
getItemIconSize,
|
|
addClassificationByDirectory,
|
|
getItemShowOnly,
|
|
createAggregateWindow,
|
|
updateAggregate,
|
|
updateExcludeSearch,
|
|
} from "./index";
|
|
import {
|
|
add,
|
|
del,
|
|
list,
|
|
selectById,
|
|
update,
|
|
updateOrder,
|
|
updateIcon,
|
|
hasChildClassification,
|
|
batchUpdateFixed,
|
|
} from "./data";
|
|
import { setShortcutKey } from "../setting";
|
|
import { closeWindow, getDot, sendToWebContent } from "../commons/index";
|
|
|
|
export default function () {
|
|
// 获取分类列表
|
|
ipcMain.on("getClassificationList", (event) => {
|
|
event.returnValue = list(null);
|
|
});
|
|
// 根据ID查询分类
|
|
ipcMain.on("getClassificationById", (event, args) => {
|
|
event.returnValue = selectById(args.id);
|
|
});
|
|
// 添加分类
|
|
ipcMain.on("addClassification", (event, args) => {
|
|
let classification = add(
|
|
args.parentId,
|
|
args.name,
|
|
args.shortcutKey,
|
|
args.globalShortcutKey
|
|
);
|
|
setShortcutKey();
|
|
event.returnValue = classification;
|
|
});
|
|
// 更新分类
|
|
ipcMain.on("updateClassification", (event, args) => {
|
|
let res = update(args);
|
|
setShortcutKey();
|
|
event.returnValue = res;
|
|
});
|
|
// 更新序号
|
|
ipcMain.on("updateClassificationOrder", (event, args) => {
|
|
event.returnValue = updateOrder(args.fromId, args.toId, args.parentId);
|
|
});
|
|
// 更新图标
|
|
ipcMain.on("updateClassificationIcon", (event, args) => {
|
|
event.returnValue = updateIcon(args.id, args.icon);
|
|
});
|
|
// 显示新增/修改窗口
|
|
ipcMain.on("showClassificationAddEditWindow", () => {
|
|
if (global.classificationAddEditWindow) {
|
|
global.classificationAddEditWindow.show();
|
|
}
|
|
});
|
|
// 关闭新增/修改窗口
|
|
ipcMain.on("closeClassificationAddEditWindow", () => {
|
|
closeWindow(global.classificationAddEditWindow);
|
|
});
|
|
// 显示设置图标窗口
|
|
ipcMain.on("showClassificationSetIconWindow", () => {
|
|
if (global.classificationSetIconWindow) {
|
|
global.classificationSetIconWindow.show();
|
|
}
|
|
});
|
|
// 关闭设置图标窗口
|
|
ipcMain.on("closeClassificationSetIconWindow", () => {
|
|
closeWindow(global.classificationSetIconWindow);
|
|
});
|
|
// 右键菜单
|
|
ipcMain.on("showClassificationRightMenu", (event, args) => {
|
|
// 锁定/解锁分类
|
|
let lockClassification: boolean = args.lockClassification;
|
|
// 分类
|
|
let classification: Classification | null = args.classification;
|
|
// 菜单
|
|
let menuList: Array<MenuItem> = [];
|
|
// 组装菜单
|
|
if (!classification) {
|
|
menuList.push(
|
|
new MenuItem({
|
|
label: global.language.newClassification,
|
|
click: () => {
|
|
// 创建窗口
|
|
createAddEditWindow(null, null);
|
|
},
|
|
}),
|
|
new MenuItem({ type: "separator" }),
|
|
new MenuItem({
|
|
label: !lockClassification
|
|
? global.language.lockClassification
|
|
: global.language.unlockClassification,
|
|
click: () => {
|
|
sendToWebContent("mainWindow", "onLockClassification", []);
|
|
},
|
|
})
|
|
);
|
|
} else {
|
|
if (!classification.parentId && classification.type === 0) {
|
|
menuList.push(
|
|
new MenuItem({
|
|
label: global.language.newSubclassification,
|
|
click: () => {
|
|
// 创建窗口
|
|
createAddEditWindow(null, classification.id);
|
|
},
|
|
}),
|
|
new MenuItem({ type: "separator" })
|
|
);
|
|
}
|
|
menuList.push(
|
|
new MenuItem({
|
|
label: global.language.fixedClassification,
|
|
icon: classification.data.fixed ? getDot() : null,
|
|
click: () => {
|
|
batchUpdateFixed(
|
|
classification.data.fixed ? null : classification.id
|
|
);
|
|
sendToWebContent(
|
|
"mainWindow",
|
|
"onUpdateClassificationFixed",
|
|
classification.data.fixed ? null : classification.id
|
|
);
|
|
},
|
|
})
|
|
);
|
|
if (classification.type === 0 || classification.type === 1) {
|
|
menuList.push(
|
|
new MenuItem({
|
|
label: global.language.excludeSearch,
|
|
icon: classification.data.excludeSearch ? getDot() : null,
|
|
click: () => {
|
|
updateExcludeSearch(
|
|
classification.id,
|
|
!classification.data.excludeSearch
|
|
);
|
|
sendToWebContent(
|
|
"mainWindow",
|
|
"onUpdateClassificationExcludeSearch",
|
|
{
|
|
id: classification.id,
|
|
value: !classification.data.excludeSearch,
|
|
}
|
|
);
|
|
},
|
|
})
|
|
);
|
|
}
|
|
menuList.push(new MenuItem({ type: "separator" }));
|
|
menuList.push(
|
|
new MenuItem({
|
|
label: global.language.setIcon,
|
|
click: () => {
|
|
// 创建窗口
|
|
createSetIconWindow(classification.id);
|
|
},
|
|
}),
|
|
new MenuItem({
|
|
label: global.language.deleteIcon,
|
|
click: () => {
|
|
let res = updateIcon(classification.id, null);
|
|
if (res) {
|
|
sendToWebContent("mainWindow", "onUpdateClassificationIcon", {
|
|
id: classification.id,
|
|
icon: null,
|
|
});
|
|
}
|
|
},
|
|
})
|
|
);
|
|
// 子分类、没有子分类的父级分类可以显示
|
|
if (
|
|
classification.parentId ||
|
|
(!classification.parentId && !hasChildClassification(classification.id))
|
|
) {
|
|
menuList.push(new MenuItem({ type: "separator" }));
|
|
if (classification.type === 0 || classification.type === 1) {
|
|
menuList.push(
|
|
new MenuItem({
|
|
label: global.language.associateFolder,
|
|
click: () => {
|
|
// 创建窗口
|
|
createAssociateFolderWindow(classification.id);
|
|
},
|
|
})
|
|
);
|
|
}
|
|
if (classification.type === 0 || classification.type === 2) {
|
|
menuList.push(
|
|
new MenuItem({
|
|
label: global.language.aggregateClassification,
|
|
click: () => {
|
|
// 创建窗口
|
|
createAggregateWindow(classification.id);
|
|
},
|
|
})
|
|
);
|
|
}
|
|
}
|
|
// 分割线
|
|
menuList.push(new MenuItem({ type: "separator" }));
|
|
if (classification.type !== 2) {
|
|
// 排序
|
|
menuList.push(getItemSortMenu(classification));
|
|
}
|
|
// 布局
|
|
menuList.push(getItemLayoutMenu(classification));
|
|
// 列数
|
|
if (
|
|
!hasChildClassification(classification.id) &&
|
|
(classification.data.itemLayout === "list" ||
|
|
(global.setting.item.layout === "list" &&
|
|
classification.data.itemLayout === "default"))
|
|
) {
|
|
// 只有子级分类或没有子级分类的父级分类并且布局是列表的才显示列数
|
|
menuList.push(getItemColumnNumber(classification));
|
|
}
|
|
// 图标
|
|
menuList.push(getItemIconSize(classification));
|
|
// 显示
|
|
menuList.push(getItemShowOnly(classification));
|
|
// 编辑/删除
|
|
menuList.push(
|
|
new MenuItem({ type: "separator" }),
|
|
new MenuItem({
|
|
label: global.language.edit,
|
|
click: () => {
|
|
// 创建窗口
|
|
createAddEditWindow(classification.id, null);
|
|
},
|
|
}),
|
|
new MenuItem({
|
|
label: global.language.delete,
|
|
click: () => {
|
|
let res = dialog.showMessageBoxSync(global.mainWindow, {
|
|
message: global.language.deleteClassificationPrompt,
|
|
buttons: [global.language.ok, global.language.cancel],
|
|
type: "question",
|
|
noLink: true,
|
|
cancelId: 1,
|
|
});
|
|
if (res === 0) {
|
|
// 删除数据
|
|
if (del(classification.id)) {
|
|
// 快捷键
|
|
setShortcutKey();
|
|
// 通知前端删除数据
|
|
sendToWebContent(
|
|
"mainWindow",
|
|
"onDeleteClassification",
|
|
classification.id
|
|
);
|
|
}
|
|
}
|
|
},
|
|
})
|
|
);
|
|
}
|
|
// 载入菜单
|
|
let menu = Menu.buildFromTemplate(menuList);
|
|
// 菜单显示
|
|
menu.on("menu-will-show", () => {
|
|
global.classificationRightMenu = true;
|
|
});
|
|
// 菜单关闭
|
|
menu.on("menu-will-close", () => {
|
|
global.classificationRightMenu = false;
|
|
});
|
|
// 显示
|
|
menu.popup();
|
|
});
|
|
// 显示关联文件夹窗口
|
|
ipcMain.on("showClassificationAssociateFolderWindow", () => {
|
|
if (global.classificationAssociateFolderWindow) {
|
|
global.classificationAssociateFolderWindow.show();
|
|
}
|
|
});
|
|
// 关闭关联文件夹窗口
|
|
ipcMain.on("closeClassificationAssociateFolderWindow", () => {
|
|
closeWindow(global.classificationAssociateFolderWindow);
|
|
});
|
|
// 设置关联文件夹
|
|
ipcMain.on("setClassificationAssociateFolder", (event, args) => {
|
|
// 分类ID
|
|
let id: number = args.id;
|
|
// 文件夹路径
|
|
let dir: string | null = args.dir;
|
|
if (!dir || dir.trim() === "") {
|
|
dir = null;
|
|
}
|
|
// 隐藏项
|
|
let hiddenItems: string | null = args.hiddenItems;
|
|
// 设置
|
|
event.returnValue = setAssociateFolder(id, dir, hiddenItems);
|
|
});
|
|
// 是否拥有子分类
|
|
ipcMain.on("hasChildClassification", (event, args) => {
|
|
event.returnValue = hasChildClassification(args);
|
|
});
|
|
// 根据文件夹创建分类
|
|
ipcMain.on("addClassificationByDirectory", (event, args) => {
|
|
let res = addClassificationByDirectory(args);
|
|
// 通知页面
|
|
sendToWebContent("mainWindow", "onAddClassificationByDirectory", res);
|
|
});
|
|
// 显示聚合分类窗口
|
|
ipcMain.on("showClassificationAggregateWindow", () => {
|
|
if (global.classificationAggregateWindow) {
|
|
global.classificationAggregateWindow.show();
|
|
}
|
|
});
|
|
// 关闭聚合分类窗口
|
|
ipcMain.on("closeClassificationAggregateWindow", () => {
|
|
closeWindow(global.classificationAggregateWindow);
|
|
});
|
|
// 更新聚合分类
|
|
ipcMain.on("updateClassificationAggregate", (event, args) => {
|
|
event.returnValue = updateAggregate(args.id, args.sort, args.itemCount);
|
|
});
|
|
}
|