mirror of
https://github.com/rubickCenter/rubick
synced 2025-06-20 19:22:43 +08:00
commit
ee2a23a421
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "rubick2",
|
"name": "rubick2",
|
||||||
"version": "0.0.3-beta.4",
|
"version": "0.0.3-beta.5",
|
||||||
"author": "muwoo <2424880409@qq.com>",
|
"author": "muwoo <2424880409@qq.com>",
|
||||||
"description": "An electron-vue project",
|
"description": "An electron-vue project",
|
||||||
"license": null,
|
"license": null,
|
||||||
@ -81,6 +81,7 @@
|
|||||||
"robotjs": "git+https://github.com/Toinane/robotjs.git",
|
"robotjs": "git+https://github.com/Toinane/robotjs.git",
|
||||||
"semver": "^7.3.5",
|
"semver": "^7.3.5",
|
||||||
"sudo-prompt": "^9.2.1",
|
"sudo-prompt": "^9.2.1",
|
||||||
|
"systeminformation": "^5.8.0",
|
||||||
"unzip": "^0.1.11",
|
"unzip": "^0.1.11",
|
||||||
"uuid": "^8.3.2",
|
"uuid": "^8.3.2",
|
||||||
"vue": "^2.5.16",
|
"vue": "^2.5.16",
|
||||||
|
BIN
src/main/common/icons/charger.png
Normal file
BIN
src/main/common/icons/charger.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.5 KiB |
BIN
src/main/common/icons/chip.png
Normal file
BIN
src/main/common/icons/chip.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.4 KiB |
BIN
src/main/common/icons/hard-disk-drive.png
Normal file
BIN
src/main/common/icons/hard-disk-drive.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 876 B |
BIN
src/main/common/icons/internet.png
Normal file
BIN
src/main/common/icons/internet.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.5 KiB |
BIN
src/main/common/icons/power.png
Normal file
BIN
src/main/common/icons/power.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
BIN
src/main/common/icons/ram.png
Normal file
BIN
src/main/common/icons/ram.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
@ -6,6 +6,7 @@ import ioHook from 'iohook';
|
|||||||
import {throttle, commonConst} from './utils';
|
import {throttle, commonConst} from './utils';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
|
import mito from './monitor';
|
||||||
|
|
||||||
const browsers = require("../browsers")();
|
const browsers = require("../browsers")();
|
||||||
const {picker, separator, superPanel} = browsers;
|
const {picker, separator, superPanel} = browsers;
|
||||||
@ -85,7 +86,13 @@ class Listener {
|
|||||||
|
|
||||||
init(mainWindow) {
|
init(mainWindow) {
|
||||||
this.fn = throttle(({x, y}, picker) => {
|
this.fn = throttle(({x, y}, picker) => {
|
||||||
const img = robot.screen.capture(parseInt(x) - 5, parseInt(y) - 5, 9, 9);
|
const { scaleFactor } = screen.getDisplayNearestPoint({x, y});
|
||||||
|
const img = robot.screen.capture(
|
||||||
|
x - parseInt(5 / scaleFactor),
|
||||||
|
y - parseInt(5 / scaleFactor),
|
||||||
|
10,
|
||||||
|
10
|
||||||
|
);
|
||||||
|
|
||||||
const colors = {}
|
const colors = {}
|
||||||
|
|
||||||
@ -233,10 +240,21 @@ class Listener {
|
|||||||
showCloseButton: true
|
showCloseButton: true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const monitor = new TouchBarPopover({
|
||||||
|
items: mito.touchBar,
|
||||||
|
label: '系统监控',
|
||||||
|
showCloseButton: true
|
||||||
|
});
|
||||||
|
|
||||||
const touchBar = new TouchBar({
|
const touchBar = new TouchBar({
|
||||||
items: [plugin, ...system]
|
items: [
|
||||||
|
plugin,
|
||||||
|
monitor,
|
||||||
|
...system
|
||||||
|
]
|
||||||
});
|
});
|
||||||
mainWindow.setTouchBar(touchBar);
|
mainWindow.setTouchBar(touchBar);
|
||||||
|
mito.start(mainWindow);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
124
src/main/common/monitor.js
Normal file
124
src/main/common/monitor.js
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
const {TouchBar} = require('electron')
|
||||||
|
const path = require('path')
|
||||||
|
const si = require('systeminformation');
|
||||||
|
const spawn = require('child_process').spawn;
|
||||||
|
|
||||||
|
const {TouchBarButton, TouchBarSpacer} = TouchBar;
|
||||||
|
|
||||||
|
const LOAD_NORMAL = "#2ecc71";
|
||||||
|
const LOAD_MEDIUM = "#f1c40f";
|
||||||
|
const LOAD_HIGH = "#d35400";
|
||||||
|
const LOAD_SEVERE = "#e74c3c";
|
||||||
|
|
||||||
|
const cpu = new TouchBarButton({
|
||||||
|
label: '',
|
||||||
|
backgroundColor: "#bdc3c7",
|
||||||
|
icon: path.join(__dirname, 'icons/chip.png'),
|
||||||
|
iconPosition: "left",
|
||||||
|
click: () => {
|
||||||
|
spawn("/System/Applications/Utilities/Activity Monitor.app/Contents/MacOS/Activity\ Monitor", []);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const memory = new TouchBarButton({
|
||||||
|
label: '',
|
||||||
|
backgroundColor: "#bdc3c7",
|
||||||
|
icon: path.join(__dirname, 'icons/ram.png'),
|
||||||
|
iconPosition: "left"
|
||||||
|
});
|
||||||
|
|
||||||
|
const network = new TouchBarButton({
|
||||||
|
label: '',
|
||||||
|
backgroundColor: '#3498db',
|
||||||
|
icon: path.join(__dirname, 'icons/internet.png'),
|
||||||
|
iconPosition: "left"
|
||||||
|
});
|
||||||
|
|
||||||
|
const battery = new TouchBarButton({
|
||||||
|
label: '',
|
||||||
|
backgroundColor: "#bdc3c7",
|
||||||
|
icon: path.join(__dirname, 'icons/power.png'),
|
||||||
|
iconPosition: "left"
|
||||||
|
});
|
||||||
|
|
||||||
|
const updateData = () => {
|
||||||
|
si.currentLoad(function(data) {
|
||||||
|
if (typeof data !== 'undefined' && data){
|
||||||
|
const load = data.currentLoad.toFixed(0)
|
||||||
|
cpu.label = load+"%"
|
||||||
|
if (load <= 20) cpu.backgroundColor = LOAD_NORMAL;
|
||||||
|
else if (load > 20 && load <= 40) cpu.backgroundColor = LOAD_MEDIUM;
|
||||||
|
else if (load > 40 && load <= 80) cpu.backgroundColor = LOAD_HIGH;
|
||||||
|
else if (load > 80 && load <= 100) cpu.backgroundColor = LOAD_SEVERE;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
si.mem(function(data) {
|
||||||
|
if (typeof data !== 'undefined' && data){
|
||||||
|
const load = ((100* data.active ) / data.total).toFixed(0)
|
||||||
|
memory.label = load+"%"
|
||||||
|
if (load <= 20) memory.backgroundColor = LOAD_NORMAL;
|
||||||
|
else if (load > 20 && load <= 40) memory.backgroundColor = LOAD_MEDIUM;
|
||||||
|
else if (load > 40 && load <= 80) memory.backgroundColor = LOAD_HIGH;
|
||||||
|
else if (load > 80 && load <= 100) memory.backgroundColor = LOAD_SEVERE;
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
si.networkStats("", function(data) {
|
||||||
|
if (typeof data !== 'undefined' && data){
|
||||||
|
const kbtx = (data[0].tx_sec * 0.001).toFixed(0)
|
||||||
|
const kbrx = (data[0].rx_sec * 0.001).toFixed(0)
|
||||||
|
const l = (kbtx+kbrx).toString().length
|
||||||
|
|
||||||
|
network.label = "⇡"+ (kbtx*0.001).toFixed(2)
|
||||||
|
+" ⇣"+ (kbrx*0.001).toFixed(2) +" MB/s"
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
si.battery( function(data) {
|
||||||
|
if (typeof data !== 'undefined' && data){
|
||||||
|
if (data.ischarging){
|
||||||
|
battery.icon = path.join(__dirname, 'icons/charger.png')
|
||||||
|
}else{
|
||||||
|
battery.icon = path.join(__dirname, 'icons/power.png')
|
||||||
|
}
|
||||||
|
const load = data.percent.toFixed(0)
|
||||||
|
battery.label = load+"%"
|
||||||
|
if (load <= 20) battery.backgroundColor = LOAD_SEVERE;
|
||||||
|
else if (load > 20 && load <= 40) battery.backgroundColor = LOAD_HIGH;
|
||||||
|
else if (load > 40 && load <= 80) battery.backgroundColor = LOAD_MEDIUM;
|
||||||
|
else if (load > 80 && load <= 100) battery.backgroundColor = LOAD_NORMAL
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const touchBar = new TouchBar({
|
||||||
|
items: [
|
||||||
|
cpu,
|
||||||
|
new TouchBarSpacer({size: 'small'}),
|
||||||
|
memory,
|
||||||
|
new TouchBarSpacer({size: 'small'}),
|
||||||
|
network,
|
||||||
|
new TouchBarSpacer({size: 'small'}),
|
||||||
|
battery,
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
let intervalObj;
|
||||||
|
|
||||||
|
const start = (window) => {
|
||||||
|
window.on('blur', () => {
|
||||||
|
clearInterval(intervalObj);
|
||||||
|
});
|
||||||
|
window.on('focus', () => {
|
||||||
|
intervalObj = setInterval(() => {
|
||||||
|
updateData();
|
||||||
|
}, 1000);
|
||||||
|
});
|
||||||
|
updateData();
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
start,
|
||||||
|
touchBar,
|
||||||
|
}
|
@ -4,6 +4,7 @@ const path = require('path');
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const { spawn } = require ('child_process');
|
const { spawn } = require ('child_process');
|
||||||
const mineType = require("mime-types");
|
const mineType = require("mime-types");
|
||||||
|
const {extend} = require('../../utils');
|
||||||
|
|
||||||
new Vue({
|
new Vue({
|
||||||
el: '#app',
|
el: '#app',
|
||||||
@ -116,7 +117,8 @@ new Vue({
|
|||||||
this.targetOptions = this.options.common;
|
this.targetOptions = this.options.common;
|
||||||
} else {
|
} else {
|
||||||
// 有文件选择
|
// 有文件选择
|
||||||
this.targetOptions = JSON.parse(JSON.stringify(this.options.selected));
|
this.targetOptions = [];
|
||||||
|
extend(this.targetOptions, this.options.selected, true);
|
||||||
// 检测上传
|
// 检测上传
|
||||||
(this.selectData.optionPlugin || []).forEach(plugin => {
|
(this.selectData.optionPlugin || []).forEach(plugin => {
|
||||||
plugin.features.forEach(fe => {
|
plugin.features.forEach(fe => {
|
||||||
|
@ -20,8 +20,31 @@ function getData(path, defaultValue) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const isArray = Array.isArray ||
|
||||||
|
function(object){ return object instanceof Array }
|
||||||
|
|
||||||
|
function isPlainObject(obj) {
|
||||||
|
return isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype
|
||||||
|
}
|
||||||
|
|
||||||
|
function isObject(obj) { return typeof obj == "object" }
|
||||||
|
|
||||||
|
|
||||||
|
function extend(target, source, deep) {
|
||||||
|
for (let key in source)
|
||||||
|
if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {
|
||||||
|
if (isPlainObject(source[key]) && !isPlainObject(target[key]))
|
||||||
|
target[key] = {}
|
||||||
|
if (isArray(source[key]) && !isArray(target[key]))
|
||||||
|
target[key] = []
|
||||||
|
extend(target[key], source[key], deep)
|
||||||
|
}
|
||||||
|
else if (source[key] !== undefined) target[key] = source[key]
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getlocalDataFile,
|
getlocalDataFile,
|
||||||
saveData,
|
saveData,
|
||||||
getData
|
getData,
|
||||||
|
extend
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user