mirror of
https://github.com/baairon/torlink.git
synced 2026-07-08 18:28:22 +02:00
44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import { promises as fs } from "node:fs";
|
|
import { configFile, defaultDownloadDir } from "./paths";
|
|
import { serializeWrites, writeJsonAtomic } from "../util/atomic";
|
|
|
|
export interface Config {
|
|
downloadDir: string;
|
|
trackers: string[];
|
|
}
|
|
|
|
export const defaultConfig: Config = {
|
|
downloadDir: defaultDownloadDir,
|
|
trackers: [],
|
|
};
|
|
|
|
export async function loadConfig(): Promise<Config> {
|
|
let raw: string;
|
|
try {
|
|
raw = await fs.readFile(configFile, "utf8");
|
|
} catch {
|
|
return { ...defaultConfig, trackers: [] };
|
|
}
|
|
try {
|
|
const parsed = JSON.parse(raw) as Partial<Config>;
|
|
const cfg: Config = {
|
|
downloadDir:
|
|
typeof parsed.downloadDir === "string" && parsed.downloadDir
|
|
? parsed.downloadDir
|
|
: defaultDownloadDir,
|
|
trackers: Array.isArray(parsed.trackers)
|
|
? parsed.trackers.filter((t): t is string => typeof t === "string" && t.length > 0)
|
|
: [],
|
|
};
|
|
return cfg;
|
|
} catch {
|
|
return { ...defaultConfig, trackers: [] };
|
|
}
|
|
}
|
|
|
|
const write = serializeWrites();
|
|
|
|
export function saveConfig(config: Config): Promise<void> {
|
|
return write(() => writeJsonAtomic(configFile, config));
|
|
}
|