Skip to content

Commit 03cbbe8

Browse files
committed
feat(api): Delete old files when
1 parent 3775c93 commit 03cbbe8

3 files changed

Lines changed: 54 additions & 9 deletions

File tree

api/controllers/installations.controller.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ const { Sema } = require('async-sema');
55
const downloadSema = new Sema(1);
66

77
async function downloadServer(req, res) {
8-
await downloadSema.acquire();
9-
8+
await downloadSema.acquire();
9+
1010
try {
1111
await installationsService.downloadRouter(req.params.platform, req.params.version);
1212
res.status(201).send('Downloaded Successfully');

api/services/info.service.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const fs = require('fs');
22
const path = require('path');
33
const pidusage = require('pidusage')
44
const AdmZip = require('adm-zip');
5+
const consts = require('../consts');
56

67
let startTime = null;
78

@@ -56,7 +57,7 @@ function getDirectorySize(folderPath) {
5657
return sizeInMB;
5758
}
5859

59-
function getPlatform(jarPath) {
60+
function getPlatform(jarPath = consts.serverDirectory + "/" + consts.serverName) {
6061
const zip = new AdmZip(jarPath);
6162
const entries = zip.getEntries();
6263
const names = entries.map(e => e.entryName);
@@ -115,9 +116,8 @@ function getVersion(jarPath) {
115116
}
116117

117118
async function getUpTime() {
118-
if (getStartTime() === null) {
119+
if (getStartTime() === null)
119120
return { uptime: "0s" };
120-
}
121121

122122
const ms = Date.now() - getStartTime();
123123

@@ -139,7 +139,6 @@ async function getInfo(serverProcess, jarPath, folderPath) {
139139
let platform = null;
140140
let version = null;
141141
let directorySizeMB = null;
142-
let uptimeMs = null;
143142

144143
try {
145144
memoryUsage = await getMemoryUsage(serverProcess);

api/services/installations.service.js

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,55 @@
11
const urlFetcher = require("../utils/url_fetcher.util");
2+
const infoService = require('../services/info.service');
3+
const consts = require('../consts');
24
const { writeDownloadedFile } = require("../utils/installations.util");
5+
const fs = require('fs/promises');
6+
const path = require('path');
7+
8+
const preserveList = [
9+
"world",
10+
"world_nether",
11+
"world_the_end",
12+
"banned-ips.json",
13+
"banned-players.json",
14+
"ops.json",
15+
"whitelist.json"
16+
];
17+
18+
async function purgeServer(preserveList) {
19+
let folderPath = consts.serverDirectory;
20+
try {
21+
const entries = await fs.readdir(folderPath, { withFileTypes: true });
22+
23+
for (const entry of entries) {
24+
if (preserveList.includes(entry.name)) continue;
25+
26+
const fullPath = path.join(folderPath, entry.name);
27+
if (entry.isDirectory())
28+
await fs.rm(fullPath, { recursive: true, force: true });
29+
else
30+
await fs.unlink(fullPath);
31+
}
32+
33+
console.log(`Deleted everything in ${folderPath} except preserved items.`);
34+
} catch (err) {
35+
console.error(`Error cleaning folder ${folderPath}:`, err.message);
36+
}
37+
}
338

439
async function downloadRouter(platform, version) {
40+
const oldPlatform = infoService.getPlatform();
41+
42+
const comingFromModded = oldPlatform === "fabric" || oldPlatform === "forge";
43+
const currentPreserveList = comingFromModded
44+
? preserveList.slice(3) // delete worlds
45+
: preserveList; // keep everything
46+
47+
if (oldPlatform != platform)
48+
await purgeServer(currentPreserveList);
49+
550
let response;
651
try {
7-
switch(platform) {
52+
switch (platform) {
853
case "vanilla":
954
response = await fetch(await urlFetcher.fetchVanillaURL(version));
1055
break;
@@ -17,9 +62,10 @@ async function downloadRouter(platform, version) {
1762
case "forge":
1863
response = await fetch(await urlFetcher.fetchForgeURL(version));
1964
break;
20-
case _:
21-
throw new Error(`Invalid platform --> ${platform}`)
65+
default:
66+
throw new Error(`Invalid platform --> ${platform}`);
2267
}
68+
2369
await writeDownloadedFile(response, version, platform.toUpperCase());
2470
} catch (error) {
2571
console.error(error);

0 commit comments

Comments
 (0)