import { unlinkSync } from "fs"; import { JSONFileSync, LowSync } from "lowdb"; import path from "path"; import rimraf from "rimraf"; import { appDir, createAppDir } from "./configuration.js"; import { Decision } from "./constants.js"; createAppDir(); export interface SearcheeEntry { infoHash?: string; firstSearched: number; lastSearched: number; } export interface DecisionEntry { decision: Decision; firstSeen: number; lastSeen: number; infoHash?: string; } export interface TorrentEntry { filepath: string; infoHash: string; name: string; } export interface Schema { searchees: Record<string, SearcheeEntry>; decisions: Record<string, Record<string, DecisionEntry>>; indexedTorrents: TorrentEntry[]; dbVersion: number; } const emptyDatabase = { searchees: {}, decisions: {}, indexedTorrents: [], dbVersion: 3, }; const db = new LowSync<Schema>( new JSONFileSync<Schema>(path.join(appDir(), "cache.json")) ); db.read(); db.data ??= emptyDatabase; const dbVersion = db.data.dbVersion; if (!dbVersion || dbVersion < emptyDatabase.dbVersion) { db.data = emptyDatabase; } db.write(); export function dropDatabase(): void { db.data = emptyDatabase; db.write(); unlinkSync(path.join(appDir(), "cache.json")); rimraf.sync(path.join(appDir(), "torrent_cache")); } export default db;