mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-06-02 20:17:18 +01:00
6cf7d1ab5f
* ports the chat settings update * . * . * follow up changes * zod * migration changes from jl * this will blow up badly * yuck * . * . * order * . * : * be gone * . * . * logging * dix logging * move to its own atom * fix settings import * . * fix audio * tgui fix * . * archiving as atom * more changes from JL * bring back default archive all * no stale state * no need to run twice * - * we need both anyway * dep up * . * build fixes port * Fix file path replacement in build script * backend update * . * . * use the tg method * only use as unchunked fallback for say etc * . * linter errors * tg's chunking methód should be sane enough * sadly still not * update for tg chunking * force those * jl suggestion * . * needs game atom * push * have this * we only want to store if a page was changed or added * only store what we really care about * fixes import port * we need settings first * recoloring shouldn't be a pain * partial * . * some type fixing * . * no throw of events * ree map might not be there yet * . * always store our settings * this is a valid crash * ss early assets * saver image access * missed unsafe access * . * move chat loading order * . * . * . * . * missing unregs * keep the ref map name, just don't bother * await the asset like redux did before * try that? * . * use await * biome up * better handling as JL did on tg * rename * last dep up * major bump here * major bump --------- Co-authored-by: Cameron Lennox <killer65311@gmail.com>
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import fs from 'node:fs';
|
|
import https from 'node:https';
|
|
import Juke from '../juke/index.js';
|
|
|
|
export function downloadFile(url: string, file: string): Promise<string> {
|
|
return new Promise((resolve, reject) => {
|
|
const file_stream = fs.createWriteStream(file);
|
|
https
|
|
.get(url, (response) => {
|
|
if (response.statusCode === 302 && response.headers.location) {
|
|
file_stream.close();
|
|
downloadFile(response.headers.location, file).then(() =>
|
|
resolve('ok'),
|
|
);
|
|
return;
|
|
}
|
|
if (response.statusCode !== 200) {
|
|
Juke.logger.error(
|
|
`Failed to download ${url}: Status ${response.statusCode}`,
|
|
);
|
|
file_stream.close();
|
|
reject();
|
|
return;
|
|
}
|
|
response.pipe(file_stream);
|
|
|
|
// after download completed close filestream
|
|
file_stream.on('finish', () => {
|
|
file_stream.close();
|
|
resolve('ok');
|
|
});
|
|
})
|
|
.on('error', (err) => {
|
|
file_stream.close();
|
|
Juke.logger.error(`Failed to download ${url}: ${err.message}`);
|
|
reject();
|
|
});
|
|
});
|
|
}
|