mirror of
https://github.com/Drop-OSS/drop.git
synced 2025-11-13 00:02:37 +10:00
* feat: database redist support * feat: rearchitecture of database schemas, migration reset, and #180 * feat: import redists * fix: giantbomb logging bug * feat: partial user platform support + statusMessage -> message * feat: add user platform filters to store view * fix: sanitize svg uploads ... copilot suggested this I feel dirty. * feat: beginnings of platform & redist management * feat: add server side redist patching * fix: update drop-base commit * feat: import of custom platforms & file extensions * fix: redelete platform * fix: remove platform * feat: uninstall commands, new R UI * checkpoint: before migrating to nuxt v4 * update to nuxt 4 * fix: fixes for Nuxt v4 update * fix: remaining type issues * feat: initial feedback to import other kinds of versions * working commit * fix: lint * feat: redist import
66 lines
1.8 KiB
TypeScript
66 lines
1.8 KiB
TypeScript
import type { LibraryBackend } from "~~/prisma/client/enums";
|
|
|
|
export abstract class LibraryProvider<CFG> {
|
|
constructor(_config: CFG, _id: string) {
|
|
throw new Error("Library doesn't have a proper constructor");
|
|
}
|
|
|
|
/**
|
|
* @returns ID of the current library provider (fs, smb, s3, etc)
|
|
*/
|
|
abstract type(): LibraryBackend;
|
|
|
|
/**
|
|
* @returns the specific ID of this current provider
|
|
*/
|
|
abstract id(): string;
|
|
|
|
/**
|
|
* @returns list of (usually) top-level game folder names
|
|
*/
|
|
abstract listGames(): Promise<string[]>;
|
|
|
|
/**
|
|
* @param game folder name of the game to list versions for
|
|
* @returns list of version folder names
|
|
*/
|
|
abstract listVersions(game: string): Promise<string[]>;
|
|
|
|
/**
|
|
* @param game folder name of the game
|
|
* @param version folder name of the version
|
|
* @returns recursive list of all files in version, relative to the version folder (e.g. ./setup.exe)
|
|
*/
|
|
abstract versionReaddir(game: string, version: string): Promise<string[]>;
|
|
|
|
/**
|
|
* @param game folder name of the game
|
|
* @param version folder name of the version
|
|
* @returns string of JSON of the droplet manifest
|
|
*/
|
|
abstract generateDropletManifest(
|
|
game: string,
|
|
version: string,
|
|
progress: (err: Error | null, v: number) => void,
|
|
log: (err: Error | null, v: string) => void,
|
|
): Promise<string>;
|
|
|
|
abstract peekFile(
|
|
game: string,
|
|
version: string,
|
|
filename: string,
|
|
): Promise<{ size: number } | undefined>;
|
|
|
|
abstract readFile(
|
|
game: string,
|
|
version: string,
|
|
filename: string,
|
|
options?: { start?: number; end?: number },
|
|
): Promise<ReadableStream | undefined>;
|
|
|
|
abstract fsStats(): { freeSpace: number; totalSpace: number } | undefined;
|
|
}
|
|
|
|
export class GameNotFoundError extends Error {}
|
|
export class VersionNotFoundError extends Error {}
|