-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsdloader.js
124 lines (119 loc) · 4.74 KB
/
sdloader.js
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
//se nella cartella c'è un _init va installato solo quello, eseguito con data = cartella su sd e poi cancellato. init installerà gli altri script (cft deleteScript e getEvent().getData())
var scriptFolder = "/sdcard/LightningLauncher/script";
var importPath = "/";
bindClass("java.io.FileReader");
bindClass("java.io.BufferedReader");
bindClass("java.io.File");
bindClass("java.lang.StringBuilder");
bindClass("android.widget.Toast");
bindClass("java.util.regex.Matcher");
bindClass("java.util.regex.Pattern");
var activeScreen = getActiveScreen();
var context = activeScreen.getContext();
writeToLogFile("Loading from sd\n", false);
function read(filePath) {
try {
var r = new BufferedReader(new FileReader(filePath));
var s = new StringBuilder();
var l;
while ((l = r.readLine()) != null) s.append(l + "\n");
return s;
} catch (e) {
alert(e);
return "";
}
}
function updateScripts(folder) {
var lstupd = {"@":[]};
folder.listFiles().forEach(function(file) {
var fileName = file.getName();
var length = fileName.length;
if (file.isDirectory()) {
updateScripts(file);
} else if (fileName.substring(length - 3, length) == ".js") {
var baseName = fileName.slice(0, -3);
if (baseName.charAt(0)=='_') {
var p = Pattern.compile("^_([^_]+)_(.*)"),m = p.matcher(baseName);
if (m.find()) {
var rname = m.group(1);
var dt;
if (typeof lstupd[rname] == "undefined") {
lstupd[rname] = 0;
}
if (lstupd[rname]<(dt = file.lastModified()))
lstupd[rname] = dt;
}
else
lstupd["@"].push({"f":baseName,"date":file.lastModified()});
}
else
lstupd["@"].push({"f":baseName,"date":file.lastModified()});
}
});
var folderPath = folder.getPath();
var basePath = folderPath.substring(scriptFolder.length);
var processScript = function(baseName,tagName,lmdate) {
writeToLogFile("Loading bn = "+baseName+" bp = "+basePath+" tag = "+tagName+" dt = "+lmdate+"\n", true);
var tagScript = getScriptByPathAndName(basePath, tagName);
var tagdate;
if (tagScript == null) {
writeToLogFile("sdloader: "+tagName+" not found creating\n", true);
Toast.makeText(context, "creating new script: " + tagName, Toast.LENGTH_SHORT).show();
tagdate = 0;
} else {
tagdate = tagScript.getTag("lmdate");
}
if (lmdate > tagdate || typeof tagdate == "undefined") {
updatedScripts.push(tagName);
var installScript;
if (tagScript==null || tagName!=baseName)
installScript = createScript(basePath, baseName, "", 0);
else
installScript = tagScript;
var txt;
installScript.setText(txt = read(folderPath + "/" + baseName + ".js"));
//writeToLogFile(baseName+" Script "+txt+"\n", true);
if (tagName!=baseName) {
if (tagScript==null)
tagScript = createScript(basePath, tagName, "", 0);
writeToLogFile(baseName+" Running script\n", true);
installScript.run(activeScreen,JSON.stringify({"fold":folderPath,"base":basePath,"tag":tagName}));
//deleteScript(script);
//script = getScriptByPathAndName(basePath, tagName);
}
else
tagScript = installScript;
tagScript.setTag("lmdate", time);
}
};
Object.keys(lstupd).forEach(function(key) {
var obj = lstupd[key],baseName,tagName,dt;
if (key=="@") {
for (var i = 0; i<obj.length; i++) {
baseName = obj[i].f;
tagName = baseName;
dt = obj[i].date;
processScript(baseName,tagName,dt);
}
}
else {
baseName = "_"+key+"_init";
tagName = key;
dt = obj;
processScript(baseName,tagName,dt);
}
});
}
var time = new Date().getTime();
var updatedScripts = [];
var folder = new File(scriptFolder);
var run = function() {
//var scriptNames = []
updateScripts(folder);
if (updatedScripts.length > 0) Toast.makeText(context, "Updated scripts: " + JSON.stringify(updatedScripts), Toast.LENGTH_SHORT).show();
};
var data = getEvent().getData(),v = 0;
if (!data || (v = parseInt(data,10))<=0)
run();
else
setTimeout(run,v);