-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconvert2XML.js
121 lines (107 loc) · 4.3 KB
/
convert2XML.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
"use strict";
const fs = require("fs");
const xml2js = require("xml2js");
const downloadRSS = require("./src/downloadRSS");
let config = require("./configs/config.json");
const shell = require("shelljs");
let GetLatestVersion = JSON.parse(fs.readFileSync("./results/result.json")).rss.channel.item;
let latestversion;
if (GetLatestVersion.length == undefined){
latestversion = GetLatestVersion;
} else {
latestversion = GetLatestVersion[GetLatestVersion.length - 1];
}
let latestversionString = JSON.stringify(latestversion);
let runtimeOriginalURL = "http\:\/\/gms.yoyogames.com|https\:\/\/gms.yoyogames.com|http\:\/\/gm2016.yoyogames.com|http\:\/\/gm2016.yoyogames.com";
let runtimeMirrorURL = config.mirrorURL + "/" + config.channel + "/" + latestversion.enclosure.$['sparkle:version'];
let Reg = new RegExp(runtimeOriginalURL, "g");
let rssURL, rssPath;
const builder = new xml2js.Builder({
rootName: "item"
});
const parser = new xml2js.Parser({
explicitArray: false,
ignoreAttrs: false
});
function download(){
switch (config.channel) {
case "Stable":
rssURL = config.mirrorURL + "/" + "Zeus-Runtime.rss";
rssPath = "Zeus-Runtime.rss";
break;
case "NuBeta":
rssURL = config.mirrorURL + "/" + "Zeus-Runtime-NuBeta.rss";
rssPath = "Zeus-Runtime-NuBeta.rss";
break;
case "LTS":
rssURL = config.mirrorURL + "/" + "Zeus-Runtime-LTS.rss";
rssPath = "Zeus-Runtime-LTS.rss";
break;
default:
console.log("No file.")
break;
}
downloadRSS.downloadRSSFromMirror(rssURL, rssPath, function(){
console.log("Download successfully from Mirror.");
parseMirror();
});
}
function parseMirror() {
let xml = fs.readFileSync("./mirror/" + rssPath);
parser.parseString(xml, function(err, result){
let jsonmirror = JSON.stringify(result, null, "\t");
fs.writeFile("./mirror/original.json", jsonmirror, (err)=>{
console.log("Convert XML to JSON successfully.(Mirror)");
initMirror();
});
});
}
function initMirror(){
let latest = JSON.parse(fs.readFileSync("./mirror/latest.json"));
let original = JSON.parse(fs.readFileSync("./mirror/original.json"));
delete original.rss.channel.item[0];
original.rss.channel.item = original.rss.channel.item.filter(n => n);
original.rss.channel.item.push(latest);
let delete_original = JSON.stringify(original, null, "\t");
fs.writeFile("./mirror/deleted.json", delete_original, (err)=>{
console.log("Init to Mirror RSS successfully");
generateXML();
});
}
function generateXML () {
fs.access("./mirror/deleted.json", fs.constants.F_OK, (err) => {
let latest = fs.readFileSync("./mirror/deleted.json");
let latestJSON = JSON.parse(latest);
let xml = builder.buildObject(latestJSON);
fs.writeFile("./mirror/latest.xml", xml, (err) => {
console.log("Write XML successfully.");
shell.cd("mirror");
shell.exec("sed -i '2d' latest.xml");
shell.exec("sed -i '$d' latest.xml");
fs.unlinkSync(rssPath);
fs.renameSync("latest.xml", rssPath);
CopyAndGenerateTXT();
});
});
};
function CopyAndGenerateTXT() {
let modulesTXTArray = ["comment", "main", "desktop", "web", "mobile", "uwp", "console"];
fs.mkdirSync( __dirname + "/mirror/edition");
for (let i = 0; i < modulesTXTArray.length; i++) {
let srcTXT = __dirname + "/results/runtime/modules/edition/" + modulesTXTArray[i] + ".txt";
let destTXT = __dirname + "/mirror/edition/" + modulesTXTArray[i] + ".txt";
fs.copyFileSync(srcTXT, destTXT);
let mirrorTXT = fs.readFileSync(destTXT).toString();
console.log(mirrorTXT);
let final = mirrorTXT.replace(Reg, runtimeMirrorURL);
fs.writeFile(destTXT, final, (err) => {
console.log("Write mirror URL successfully.");
});
};
fs.copyFileSync(__dirname + "/results/runtime/version.txt", __dirname + "/mirror/edition/version.txt");
};
let final = latestversionString.replace(Reg, runtimeMirrorURL);
fs.writeFile("./mirror/latest.json", final, (err) => {
console.log("Change Mirror successfully.");
download();
});