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