forked from sleepy-project/sleepy
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathautoxjs_device.js
More file actions
138 lines (126 loc) · 3.95 KB
/
autoxjs_device.js
File metadata and controls
138 lines (126 loc) · 3.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
autoxjs_device.js
使用 Autox.js 编写的安卓自动更新状态脚本
by wyf9. all rights reserved. (?)
Co-authored-by: NyaOH-Nahida - 新增捕捉退出事件,将退出脚本状态上报到服务器。
*/
// config start
const API_URL = 'https://sleepy.wyf9.top/device/set'; // 你的完整 API 地址,以 `/device/set` 结尾
const SECRET = '绝对猜不出来的密码'; // 你的 secret
const ID = 'a-device'; // 你的设备 id, 唯一
const SHOW_NAME = '一个设备'; // 你的设备名称, 将显示在网页上
const CHECK_INTERVAL = '3000'; // 检查间隔 (毫秒, 1000ms=1s)
const SKIPPED_NAMES = ['系统界面', '系统界面组件', '手机管家', '平板管家', 'System UI', 'Security tools'] // 获取到的软件名包含列表中之一时忽略
// config end
auto.waitFor(); // 等待无障碍
// 替换了 secret 的日志, 同时添加前缀
function log(msg) {
try {
console.log(`[sleepyc] ${msg.replace(SECRET, '[REPLACED]')}`);
} catch (e) {
console.log(`[sleepyc] ${msg}`);
}
}
function error(msg) {
try {
console.error(msg.replace(SECRET, '[REPLACED]'));
} catch (e) {
console.error(msg);
}
}
var last_status = '';
function check_status() {
/*
检查状态并返回 app_name (如 未亮屏/获取不到应用名 则返回空)
[Tip] 如有调试需要可自行取消 log 注释
*/
// log(`[check] screen status: ${device.isScreenOn()}`);
if (!device.isScreenOn()) {
return ('');
}
var app_package = currentPackage(); // 应用包名
// log(`[check] app_package: '${app_package}'`);
var app_name = app.getAppName(app_package); // 应用名称
// log(`[check] app_name: '${app_name}'`);
var battery = device.getBattery(); // 电池百分比
// log(`[check] battery: ${battery}%`);
// 判断设备充电状态
if (device.isCharging()) {
var retname = `[${battery}% +] ${app_name}`;
} else {
var retname = `[${battery}%] ${app_name}`;
}
if (!app_name) {
retname = '';
}
return (retname);
}
function send_status() {
/*
发送 check_status() 的返回
*/
var app_name = check_status();
log(`ret app_name: '${app_name}'`);
// 判断是否与上次相同
if (app_name == last_status) {
log('same as last status, bypass request');
return;
}
// 判断是否在忽略列表中
for (let i = 0; i < SKIPPED_NAMES.length; i++) {
if (app_name.includes(SKIPPED_NAMES[i])) {
log(`bypass because of: '${SKIPPED_NAMES[i]}'`);
return;
}
}
last_status = app_name;
// 判断 using
if (app_name == '') {
log('using: false');
var using = false;
} else {
log('using: true');
var using = true;
}
// POST to api
log(`Status string: '${app_name}'`);
log(`POST ${API_URL}`);
r = http.postJson(API_URL, {
'secret': SECRET,
'id': ID,
'show_name': SHOW_NAME,
'using': using,
'app_name': app_name
});
log(`response: ${r.body.string()}`);
}
// 程序退出后上报停止事件
events.on("exit", function () {
log("Script exits, uploading using = false");
toast("[sleepy] 脚本已停止, 上报中");
// POST to api
log(`POST ${API_URL}`);
try {
r = http.postJson(API_URL, {
'secret': SECRET,
'id': ID,
'show_name': SHOW_NAME,
'using': false,
'app_name': '[Client Exited]' // using 为 false 时前端不会显示这个, 而是 '未在使用'
});
log(`response: ${r.body.string()}`);
toast("[sleepy] 上报成功");
} catch (e) {
error(`Error when uploading: ${e}`);
toast(`[sleepy] 上报失败! 请检查控制台日志`);
}
});
while (true) {
log('---------- Run\n');
try {
send_status();
} catch (e) {
error(`ERROR sending status: ${e}`);
}
sleep(CHECK_INTERVAL);
}