mirror of
https://github.com/fofolee/uTools-quickcommand.git
synced 2025-06-07 21:46:12 +08:00
系统级弹窗添加Linux支持
This commit is contained in:
parent
8038ed28f4
commit
90e8ec7ff1
@ -1,7 +1,34 @@
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const { exec } = require("child_process");
|
||||
const { getQuickcommandFolderFile } = require("./getQuickcommandFile");
|
||||
|
||||
// 添加一个辅助函数来执行命令
|
||||
const execCommand = (cmd) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
exec(cmd, (error, stdout, stderr) => {
|
||||
if (error) {
|
||||
reject(stderr);
|
||||
} else {
|
||||
resolve(stdout);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
// 添加一个辅助函数来检查命令是否存在
|
||||
const checkZenity = async () => {
|
||||
try {
|
||||
await execCommand("which zenity");
|
||||
return true;
|
||||
} catch (error) {
|
||||
window.utools.showNotification(
|
||||
"请先安装 zenity:\nsudo apt install zenity 或\nsudo yum install zenity 或\nsudo pacman -S zenity"
|
||||
);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
// 定义通用样式
|
||||
const commonStyles = `
|
||||
static void ApplyModernStyle(Form form) {
|
||||
@ -121,6 +148,14 @@ const showSystemMessageBox = async function (content, title = "") {
|
||||
}
|
||||
}`;
|
||||
await this.runCsharp(csharpScript);
|
||||
} else if (window.utools.isLinux()) {
|
||||
if (!(await checkZenity())) return;
|
||||
try {
|
||||
const script = `zenity --info --title="${title}" --text="${content}" --width=400`;
|
||||
await execCommand(script);
|
||||
} catch (error) {
|
||||
console.error("执行 zenity 命令失败:", error);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -227,6 +262,21 @@ const showSystemInputBox = async function (placeholders, title = "") {
|
||||
}`;
|
||||
const result = await this.runCsharp(csharpScript);
|
||||
return result.trim() || null;
|
||||
} else if (window.utools.isLinux()) {
|
||||
if (!(await checkZenity())) return null;
|
||||
const results = [];
|
||||
for (let i = 0; i < placeholders.length; i++) {
|
||||
try {
|
||||
const script = `zenity --entry --title="${title}" --text="${placeholders[i]}" --width=400`;
|
||||
const result = await execCommand(script);
|
||||
if (!result) return null;
|
||||
results.push(result.trim());
|
||||
} catch (error) {
|
||||
console.error("执行 zenity 命令失败:", error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
};
|
||||
|
||||
@ -302,6 +352,15 @@ const showSystemConfirmBox = async function (content, title = "") {
|
||||
}`;
|
||||
const result = await this.runCsharp(csharpScript);
|
||||
return result.trim() === "True";
|
||||
} else if (window.utools.isLinux()) {
|
||||
if (!(await checkZenity())) return false;
|
||||
try {
|
||||
const script = `zenity --question --title="${title}" --text="${content}" --width=400`;
|
||||
await execCommand(script);
|
||||
return true;
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -391,6 +450,22 @@ const showSystemSelectList = async function (items, title = "") {
|
||||
return { id: parseInt(id), text };
|
||||
}
|
||||
return null;
|
||||
} else if (window.utools.isLinux()) {
|
||||
if (!(await checkZenity())) return null;
|
||||
try {
|
||||
const itemsList = items
|
||||
.map((item, index) => `"${index}" "${item}"`)
|
||||
.join(" ");
|
||||
const script = `zenity --list --title="${title}" --text="请选择:" --column="序号" --column="选项" ${itemsList} --width=400 --height=300`;
|
||||
const result = await execCommand(script);
|
||||
if (!result) return null;
|
||||
const text = result.trim();
|
||||
const id = items.findIndex((item) => item === text);
|
||||
return { id, text };
|
||||
} catch (error) {
|
||||
console.error("执行 zenity 命令失败:", error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -490,6 +565,25 @@ const showSystemButtonBox = async function (buttons, content, title = "") {
|
||||
return { id: parseInt(id), text };
|
||||
}
|
||||
return null;
|
||||
} else if (window.utools.isLinux()) {
|
||||
if (!(await checkZenity())) return null;
|
||||
try {
|
||||
const script1 = `zenity --info --title="${title}" --text="${content}" --width=400`;
|
||||
await execCommand(script1);
|
||||
|
||||
const itemsList = buttons
|
||||
.map((btn, index) => `"${index}" "${btn}"`)
|
||||
.join(" ");
|
||||
const script2 = `zenity --list --title="${title}" --text="请选择:" --column="序号" --column="选项" ${itemsList} --width=400 --height=300`;
|
||||
const result = await execCommand(script2);
|
||||
if (!result) return null;
|
||||
const text = result.trim();
|
||||
const id = buttons.findIndex((btn) => btn === text);
|
||||
return { id, text };
|
||||
} catch (error) {
|
||||
console.error("执行 zenity 命令失败:", error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -578,6 +672,16 @@ const showSystemTextArea = async function (
|
||||
}`;
|
||||
const result = await this.runCsharp(csharpScript);
|
||||
return result.trim() || null;
|
||||
} else if (window.utools.isLinux()) {
|
||||
if (!(await checkZenity())) return null;
|
||||
try {
|
||||
const script = `zenity --text-info --title="${title}" --text="${placeholder}" --editable --width=450 --height=350 --filename=<(echo "${defaultText}")`;
|
||||
const result = await execCommand(script);
|
||||
return result ? result.trim() : null;
|
||||
} catch (error) {
|
||||
console.error("执行 zenity 命令失败:", error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user