-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
87 lines (70 loc) · 2.2 KB
/
Copy pathindex.js
File metadata and controls
87 lines (70 loc) · 2.2 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
let zip = require("extract-zip")
let fs = require("fs")
let path = require("path")
let rimraf = require("rimraf")
let electron = require("electron")
let Octokit = require("@octokit/rest")
let gh = new Octokit()
let fetch = require("node-fetch")
let gameDir = path.join(__dirname, "game")
let gameZipPath = path.join(__dirname, "release.zip")
let versionFile = path.join(__dirname, "version.json")
function extractGameZip(path) {
if (fs.existsSync(gameDir)) rimraf.sync(gameDir)
zip(
path, {
dir: gameDir
},
(err) => {
runGame()
}
)
}
async function getLatestRelease() {
return (await gh.repos.listReleases({
owner: "Team-G4",
repo: "g4x"
})).data[0]
}
async function checkUpdate() {
try {
let version = JSON.parse(
fs.readFileSync(versionFile, "utf-8")
)
let ghRelease = await getLatestRelease()
let lastUpdateDate, newUpdateDate
newUpdateDate = new Date(ghRelease.published_at)
if (!version.releaseTimestamp) {
lastUpdateDate = new Date(0)
} else {
lastUpdateDate = new Date(version.releaseTimestamp)
}
if (newUpdateDate > lastUpdateDate || !fs.existsSync(gameDir)) {
console.log("UPDATE TIME!")
let asset = ghRelease.assets.find(a => a.name == "release.g4x")
if (!asset) throw "No asset!!"
let assetData = await fetch(asset.browser_download_url)
assetData = await assetData.buffer()
fs.writeFileSync(gameZipPath, assetData)
version.releaseTimestamp = newUpdateDate
version.justUpdated = true
fs.writeFileSync(versionFile, JSON.stringify(version), "utf-8")
extractGameZip(gameZipPath)
} else {
runGame()
}
} catch (e) {
runGame()
}
}
function runGame() {
if (fs.existsSync(gameDir)) {
require(path.join(gameDir, "main.js"))
} else {
electron.dialog.showErrorBox("G4X", "No game files found. Make sure you have a working internet connection.")
process.exit()
}
}
electron.app.on("ready", () => {
checkUpdate()
})