支持 linux

This commit is contained in:
fofolee 2020-06-05 19:45:38 +08:00
parent f4282a80a7
commit 02b80e839e
2 changed files with 62 additions and 28 deletions

View File

@ -3,7 +3,7 @@ const WINDOW_DEFAULT_ICON = './imgs/window.png'
CacheIcons = async tasks => { CacheIcons = async tasks => {
var noCaches = []; var noCaches = [];
if (window.isWin) { if (utools.isWindows()) {
for (var t of tasks) { for (var t of tasks) {
if (/^[A-z]:\\/.test(t.Path)) { if (/^[A-z]:\\/.test(t.Path)) {
if (localStorage[basename(t.Path, '.exe')] == undefined && !noCaches.includes(t.Path)) noCaches.push(t.Path) if (localStorage[basename(t.Path, '.exe')] == undefined && !noCaches.includes(t.Path)) noCaches.push(t.Path)
@ -15,7 +15,7 @@ CacheIcons = async tasks => {
localStorage[basename(i.path, '.exe')] = i.b64Ico; localStorage[basename(i.path, '.exe')] = i.b64Ico;
}); });
} }
} else { } else if(utools.isMacOs()){
for (var t of tasks) { for (var t of tasks) {
if (t.app) { if (t.app) {
if (localStorage[basename(t.app, '.app')] == undefined && !noCaches.includes(t.app)) noCaches.push(t.app) if (localStorage[basename(t.app, '.app')] == undefined && !noCaches.includes(t.app)) noCaches.push(t.app)
@ -31,16 +31,17 @@ CacheIcons = async tasks => {
} }
kill = async (pid, restart) => { kill = async (pid, restart) => {
await window.taskkill(pid, restart) if (window.taskkill(pid, restart)) {
tasks = await tasklist(); var tasks = await tasklist();
show(tasks, window.text); show(tasks, window.text);
}
} }
search = (t, text) => { search = (t, text) => {
text = text.toUpperCase(); text = text.toUpperCase();
var taskinfo = ''; var taskinfo = '';
var icon; var icon;
if (window.isWin) { if (utools.isWindows()) {
icon = WINDOW_DEFAULT_ICON icon = WINDOW_DEFAULT_ICON
if (/^[A-z]:\\/.test(t.Path)) { if (/^[A-z]:\\/.test(t.Path)) {
var cache = localStorage[basename(t.Path, '.exe')]; var cache = localStorage[basename(t.Path, '.exe')];
@ -97,7 +98,7 @@ utools.onPluginEnter( async ({ code, type, payload }) => {
} }
} }
// var initTime = new Date().getTime(); // var initTime = new Date().getTime();
tasks = await tasklist(); var tasks = await tasklist();
if (tasks) { if (tasks) {
window.text = ''; window.text = '';
// 读取进程耗时 // 读取进程耗时
@ -110,7 +111,7 @@ utools.onPluginEnter( async ({ code, type, payload }) => {
// iconsCachedTime -= (tasksLoadedTime + initTime); // iconsCachedTime -= (tasksLoadedTime + initTime);
// console.log(iconsCachedTime); // console.log(iconsCachedTime);
show(tasks, window.text); show(tasks, window.text);
var sign = isWin ? 'Alt' : '⌘'; var sign = utools.isMacOs() ? '⌘' : 'Alt';
$('.numbers').html(` $('.numbers').html(`
<div>${sign}+1</div> <div>${sign}+1</div>
<div>${sign}+2</div> <div>${sign}+2</div>
@ -127,7 +128,7 @@ utools.onPluginEnter( async ({ code, type, payload }) => {
utools.setSubInput(({ text }) => { utools.setSubInput(({ text }) => {
window.text = text; window.text = text;
show(tasks, text); show(tasks, text);
}, '左/右键 -> 关闭/重启进程; ctrl + c/e/r -> 复制路径/文件管理器中显示/重启'); }, '左/右键 -> 关闭/重启进程; ctrl + c/e/r -> 复制路径/文件管理器中显示/重启');
utools.onPluginOut(() => { utools.onPluginOut(() => {
var update = { _id: "iconCache", data: localStorage }; var update = { _id: "iconCache", data: localStorage };
if (db) update._rev = db._rev; if (db) update._rev = db._rev;
@ -164,8 +165,13 @@ Mousetrap.bind('ctrl+c', () => {
}); });
Mousetrap.bind('ctrl+e', () => { Mousetrap.bind('ctrl+e', () => {
var path = $(".select").children(".path").text(); var path
open(path); if (utools.isLinux()) {
path = getLinuxProcPath($(".select").attr('id'))
} else {
path = $(".select").children(".path").text();
}
if(path) open(path);
return false return false
}); });
@ -211,7 +217,7 @@ Mousetrap.bind('up', () => {
return false return false
}); });
key = isWin ? 'alt' : 'command' key = utools.isMacOs() ? 'command' : 'alt'
Mousetrap.bind([`${key}+1`], function (e) { Mousetrap.bind([`${key}+1`], function (e) {
var index = ($(window).scrollTop()) / 50; var index = ($(window).scrollTop()) / 50;

View File

@ -47,7 +47,6 @@ compileFile = script => {
} }
} }
isWin = os.platform() == 'win32' ? true : false;
totalMem = os.totalmem(); totalMem = os.totalmem();
@ -55,7 +54,7 @@ tasklist = () =>
new Promise((reslove, reject) => { new Promise((reslove, reject) => {
{ {
var tasklist = []; var tasklist = [];
if (isWin) { if (utools.isWindows()) {
var binPath = GetFilePath('ProcessKiller.exe'); var binPath = GetFilePath('ProcessKiller.exe');
if(!fs.existsSync(binPath)) compileFile('ProcessKiller.cs') if(!fs.existsSync(binPath)) compileFile('ProcessKiller.cs')
execFile(binPath, ['getProcess'], { encoding: 'buffer' },(err, stdout, stderr) => { execFile(binPath, ['getProcess'], { encoding: 'buffer' },(err, stdout, stderr) => {
@ -66,7 +65,7 @@ tasklist = () =>
}); });
reslove(data); reslove(data);
}) })
} else { } else if(utools.isMacOs()){
exec('ps -A -o pid -o %cpu -o %mem -o user -o comm | sed 1d | sort -rnk 3', (err, stdout, stderr) => { exec('ps -A -o pid -o %cpu -o %mem -o user -o comm | sed 1d | sort -rnk 3', (err, stdout, stderr) => {
if(err) reject(utools.showNotification(stderr)) if(err) reject(utools.showNotification(stderr))
lines = stdout.split('\n'); lines = stdout.split('\n');
@ -81,23 +80,52 @@ tasklist = () =>
}); });
reslove(tasklist); reslove(tasklist);
}); });
} else {
exec('ps -A -o pid -o %cpu -o %mem -o user -o comm:20 -o cmd | sed 1d | sort -rnk 3', (err, stdout, stderr) => {
if(err) reject(utools.showNotification(stderr))
lines = stdout.split('\n');
lines.forEach(line => {
if (line) {
l = /(\d+)\s+(\d+[\.|\,]\d+)\s+(\d+[\.|\,]\d+)\s+(.*?)\s+(.{20})\s+(.*)/.exec(line);
dict = { pid: l[1], cpu: l[2], mem: l[3], usr: l[4], path: l[6], nam: l[5].trim() }
tasklist.push(dict);
}
});
reslove(tasklist);
});
} }
} }
}) })
taskkill = (pid, restart) => getLinuxProcPath = pid => {
new Promise((reslove, reject) => { try {
return fs.readlinkSync(`/proc/${pid}/exe`)
} catch (error) {
utools.showNotification(error)
return false
}
}
taskkill = (pid, restart) => {
try {
process.kill(pid);
} catch (error) {
utools.showNotification('权限不足请以管理员权限运行uTools');
return false
}
if(restart){
var cmd = restart
if (!utools.isLinux()) cmd = '"' + cmd + '"'
try { try {
process.kill(pid); exec(cmd);
} catch (error) {
reject(utools.showNotification('权限不足请以管理员权限运行uTools'));
}
if(restart){
utools.showNotification('重启进程成功!') utools.showNotification('重启进程成功!')
exec(`"${restart}"`); } catch (error) {
utools.showNotification(error);
return false
} }
reslove(true); }
}) return true
}
findThirdIndex = (str, cha) => { findThirdIndex = (str, cha) => {
var x = str.indexOf(cha); var x = str.indexOf(cha);
@ -121,14 +149,14 @@ icns2Base64 = icns => {
GetIcons = PathList => GetIcons = PathList =>
new Promise((reslove, reject) => { new Promise((reslove, reject) => {
if (isWin) { if (utools.isWindows()) {
PathList = PathList.join("|").replace("\\", "/"); PathList = PathList.join("|").replace("\\", "/");
execFile(GetFilePath('ProcessKiller.exe'), ["getIcons", PathList],{ encoding: 'buffer' },(error, stdout, stderr) => { execFile(GetFilePath('ProcessKiller.exe'), ["getIcons", PathList],{ encoding: 'buffer' },(error, stdout, stderr) => {
if(error) reject(utools.showNotification(iconv.decode(stderr, 'gb18030'))); if(error) reject(utools.showNotification(iconv.decode(stderr, 'gb18030')));
data = JSON.parse(iconv.decode(stdout, 'gb18030')); data = JSON.parse(iconv.decode(stdout, 'gb18030'));
reslove(data); reslove(data);
}); });
} else { } else if(utools.isMacOs()){
data = [] data = []
PathList.forEach(p => { PathList.forEach(p => {
var InfoFile = path.join(p, 'Contents', 'Info.plist'); var InfoFile = path.join(p, 'Contents', 'Info.plist');
@ -145,4 +173,4 @@ GetIcons = PathList =>
}) })
reslove(data) reslove(data)
} }
}) })