import { CommonItem } from "../../../../types/item"; import { newCommonItem, newCommonItemData, } from "../../../../commons/utils/common"; import { calcIcon, fileExplorerIcon, networkSharingCenterIcon, powerIcon, } from "../../../commons/constants"; import { getCacheDataSqlite3 } from "../../../commons/betterSqlite3"; // 获取数据库 let db = getCacheDataSqlite3(); // 系统项目表名 let systenItemTableName = "system_item"; // 开始菜单项目表名 let startMenuItemTableName = "start_menu_item"; /** * 通用项目 */ function getCommonItem(row: any): CommonItem { let data = JSON.parse(row.data); return newCommonItem({ id: row.id, name: row.name, data: newCommonItemData({ target: data.target, params: data.params, icon: data.icon, htmlIcon: data.htmlIcon, }), }); } /** * 初始化系统项目表 */ function initSystemItemTable() { // sql let sql = `CREATE TABLE IF NOT EXISTS ${systenItemTableName} ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, data TEXT NOT NULL, \`order\` INTEGER NOT NULL)`; // 运行 db.exec(sql); } /** * 初始化系统项目 */ function initSystemItem() { // 初始化表 initSystemItemTable(); // 初始化数据 // 计算机 let computer = selectById(systenItemTableName, 1); if (!computer) { let icon: string | null = global.addon.getFileIcon( "shell:MyComputerFolder" ); if (icon) { add( systenItemTableName, newCommonItem({ id: 1, name: global.language.computer, data: newCommonItemData({ target: "shell:MyComputerFolder", icon: icon, }), order: 1, }) ); } } // 文档 let document = selectById(systenItemTableName, 2); if (!document) { let icon: string | null = global.addon.getFileIcon("shell:Local Documents"); if (icon) { add( systenItemTableName, newCommonItem({ id: 2, name: global.language.documents, data: newCommonItemData({ target: "shell:Local Documents", icon: icon, }), order: 2, }) ); } } // 控制面板 let controlPanel = selectById(systenItemTableName, 3); if (!controlPanel) { let icon: string | null = global.addon.getFileIcon( "shell:ControlPanelFolder" ); if (icon) { add( systenItemTableName, newCommonItem({ id: 3, name: global.language.controlPanel, data: newCommonItemData({ target: "shell:ControlPanelFolder", icon: icon, }), order: 3, }) ); } } // 网络和共享中心 let networkSharingCenter = selectById(systenItemTableName, 4); if (!networkSharingCenter) { add( systenItemTableName, newCommonItem({ id: 4, name: global.language.networkShareCenter, data: newCommonItemData({ target: "control.exe", params: "/name Microsoft.NetworkAndSharingCenter", icon: networkSharingCenterIcon, }), order: 4, }) ); } // 回收站 let recyleBin = selectById(systenItemTableName, 5); if (!recyleBin) { let icon: string | null = global.addon.getFileIcon( "shell:RecycleBinFolder" ); if (icon) { add( systenItemTableName, newCommonItem({ id: 5, name: global.language.recycleBin, data: newCommonItemData({ target: "shell:RecycleBinFolder", icon: icon, }), order: 5, }) ); } } // 文件资源管理器 let fileExplorer = selectById(systenItemTableName, 6); if (!fileExplorer) { add( systenItemTableName, newCommonItem({ id: 6, name: global.language.fileExplorer, data: newCommonItemData({ target: "control.exe", params: "folders", icon: fileExplorerIcon, }), order: 6, }) ); } // 程序和功能 let programFeatures = selectById(systenItemTableName, 7); if (!programFeatures) { let icon: string | null = global.addon.getFileIcon( "shell:ChangeRemoveProgramsFolder" ); if (icon) { add( systenItemTableName, newCommonItem({ id: 7, name: global.language.programsFeatures, data: newCommonItemData({ target: "shell:ChangeRemoveProgramsFolder", icon: icon, }), order: 7, }) ); } } // 文件资源管理器 let calc = selectById(systenItemTableName, 8); if (!calc) { add( systenItemTableName, newCommonItem({ id: 8, name: global.language.calculator, data: newCommonItemData({ target: "calc.exe", icon: calcIcon, }), order: 8, }) ); } // 服务 let services = selectById(systenItemTableName, 9); if (!services) { let path: string | null = global.addon.searchPath("services.msc"); if (path) { let icon: string | null = global.addon.getFileIcon(path); if (icon) { add( systenItemTableName, newCommonItem({ id: 9, name: global.language.services, data: newCommonItemData({ target: "services.msc", icon: icon, }), order: 9, }) ); } } } // 命令提示符 let cmd = selectById(systenItemTableName, 10); if (!cmd) { let path: string | null = global.addon.searchPath("cmd.exe"); if (path) { let icon: string | null = global.addon.getFileIcon(path); if (icon) { add( systenItemTableName, newCommonItem({ id: 10, name: global.language.commandPrompt, data: newCommonItemData({ target: "cmd.exe", icon: icon, }), order: 10, }) ); } } } // 任务管理器 let taskmgr = selectById(systenItemTableName, 11); if (!taskmgr) { let path: string | null = global.addon.searchPath("taskmgr.exe"); if (path) { let icon: string | null = global.addon.getFileIcon(path); if (icon) { add( systenItemTableName, newCommonItem({ id: 11, name: global.language.taskManager, data: newCommonItemData({ target: "taskmgr.exe", icon: icon, }), order: 11, }) ); } } } // 注册表编辑 let regedit = selectById(systenItemTableName, 12); if (!regedit) { let path: string | null = global.addon.searchPath("regedit.exe"); if (path) { let icon: string | null = global.addon.getFileIcon(path); if (icon) { add( systenItemTableName, newCommonItem({ id: 12, name: global.language.registryEditor, data: newCommonItemData({ target: "regedit.exe", icon: icon, }), order: 12, }) ); } } } // 电源选项 let powercfg = selectById(systenItemTableName, 13); if (!powercfg) { add( systenItemTableName, newCommonItem({ id: 13, name: global.language.powerOptions, data: newCommonItemData({ target: "control.exe", params: "powercfg.cpl", icon: powerIcon, }), order: 13, }) ); } // 资源监视器 let perfmon = selectById(systenItemTableName, 14); if (!perfmon) { let path: string | null = global.addon.searchPath("perfmon.exe"); if (path) { let icon: string | null = global.addon.getFileIcon(path); if (icon) { add( systenItemTableName, newCommonItem({ id: 14, name: global.language.resourceMonitor, data: newCommonItemData({ target: "perfmon.exe", params: "/res", icon: icon, }), order: 14, }) ); } } } // 计算机管理 let compmgmt = selectById(systenItemTableName, 15); if (!compmgmt) { let path: string | null = global.addon.searchPath("compmgmt.msc"); if (path) { let icon: string | null = global.addon.getFileIcon(path); if (icon) { add( systenItemTableName, newCommonItem({ id: 15, name: global.language.computerManagement, data: newCommonItemData({ target: "compmgmt.msc", params: "/s", icon: icon, }), order: 15, }) ); } } } // 关机 let shutdown = selectById(systenItemTableName, 16); if (!shutdown) { add( systenItemTableName, newCommonItem({ id: 16, name: global.language.shutdown, data: newCommonItemData({ target: "shutdown", params: "-s -t 0", htmlIcon: '', }), order: 16, }) ); } // 重启 let restart = selectById(systenItemTableName, 17); if (!restart) { add( systenItemTableName, newCommonItem({ id: 17, name: global.language.restart, data: newCommonItemData({ target: "shutdown", params: "-r -t 0", htmlIcon: '', }), order: 17, }) ); } // 睡眠 let sleep = selectById(systenItemTableName, 18); if (!sleep) { add( systenItemTableName, newCommonItem({ id: 18, name: global.language.sleep, data: newCommonItemData({ target: "rundll32.exe", params: "powrprof.dll, SetSuspendState Sleep", htmlIcon: '', }), order: 18, }) ); } // 锁定 let lock = selectById(systenItemTableName, 19); if (!lock) { add( systenItemTableName, newCommonItem({ id: 19, name: global.language.lock, data: newCommonItemData({ target: "rundll32.exe", params: "user32.dll LockWorkStation", htmlIcon: '', }), order: 19, }) ); } // 关闭显示器 let turnOffMonitor = selectById(systenItemTableName, 20); if (!turnOffMonitor) { add( systenItemTableName, newCommonItem({ id: 20, name: global.language.turnOffMonitor, data: newCommonItemData({ target: "static:TurnOffMonitor", htmlIcon: '', }), order: 20, }) ); } } /** * 初始化开始菜单项目表 */ function initStartMenuItemTable() { // sql let sql = `CREATE TABLE IF NOT EXISTS ${startMenuItemTableName} ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, data TEXT NOT NULL, \`order\` INTEGER NOT NULL)`; // 运行 db.exec(sql); } /** * 列表 * @param table */ function list(table: string) { // sql let sql = `SELECT id, name, data, \`order\` FROM ${table}`; // 查询 let list = db.prepare(sql).all(); // 返回 return list.map((row) => { return getCommonItem(row); }); } /** * 根据ID查询 * @param table * @param id */ function selectById(table: string, id: number): CommonItem | null { // SQL let sql = `SELECT id, name, data, \`order\` FROM ${table} WHERE id = ?`; // 运行 let row = db.prepare(sql).get(id); // 返回 if (row) { return getCommonItem(row); } else { return null; } } /** * 添加 * @param table * @param commonItem * @returns */ function add(table: string, commonItem: CommonItem) { // SQL let sql = `INSERT INTO ${table} (id, name, data, \`order\`) VALUES (?, ?, ?, ?)`; // 运行 db.prepare(sql).run( commonItem.id, commonItem.name, JSON.stringify(commonItem.data), commonItem.order ); } /** * 删除所有数据 * @param table */ function deleteAll(table: string) { // SQL let sql = `DELETE FROM ${table}`; // 运行 db.prepare(sql).run(); } /** * 批量添加 * @param list */ function batchAdd(list: Array) { // 开启事务 db.transaction(() => { // SQL let sql = `INSERT INTO ${startMenuItemTableName} VALUES(?, ?, ?, ?)`; // 添加到缓存表中 for (let i = 0; i < list.length; i++) { db.prepare(sql).run( i + 1, list[i].name, JSON.stringify(list[i].data), i + 1 ); } })(); } export { systenItemTableName, startMenuItemTableName, initSystemItem, initStartMenuItemTable, list, deleteAll, batchAdd, };