hydra/src/types/index.ts

115 lines
2.3 KiB
TypeScript
Raw Normal View History

2024-04-21 05:26:29 +00:00
export type GameShop = "steam" | "epic";
export type CatalogueCategory = "recently_added" | "trending";
export interface SteamGenre {
id: string;
name: string;
}
export interface SteamScreenshot {
id: number;
path_thumbnail: string;
path_full: string;
}
export interface SteamAppDetails {
name: string;
detailed_description: string;
about_the_game: string;
short_description: string;
publishers: string[];
genres: SteamGenre[];
screenshots: SteamScreenshot[];
pc_requirements: {
minimum: string;
recommended: string;
};
mac_requirements: {
minimum: string;
recommended: string;
};
linux_requirmenets: {
minimum: string;
recommended: string;
};
release_date: {
coming_soon: boolean;
date: string;
};
}
export type ShopDetails = SteamAppDetails & {
objectID: string;
repacks: GameRepack[];
};
export interface GameRepack {
id: number;
title: string;
magnet: string;
page: number;
repacker: string;
fileSize: string | null;
uploadDate: Date | string | null;
createdAt: Date;
updatedAt: Date;
}
export interface TorrentFile {
path: string;
length: number;
}
/* Used by the catalogue */
export interface CatalogueEntry {
objectID: string;
shop: GameShop;
title: string;
/* Epic Games covers cannot be guessed with objectID */
cover: string;
repacks: GameRepack[];
}
/* Used by the library */
export interface Game extends Omit<CatalogueEntry, "cover"> {
id: number;
title: string;
iconUrl: string;
status: string;
folderName: string;
downloadPath: string | null;
repacks: GameRepack[];
repack: GameRepack;
progress: number;
fileVerificationProgress: number;
bytesDownloaded: number;
playTimeInMilliseconds: number;
executablePath: string | null;
lastTimePlayed: Date | null;
fileSize: number;
createdAt: Date;
updatedAt: Date;
}
export interface TorrentProgress {
downloadSpeed: number;
timeRemaining: number;
numPeers: number;
numSeeds: number;
game: Omit<Game, "repacks">;
}
export interface UserPreferences {
downloadsPath: string | null;
language: string;
downloadNotificationsEnabled: boolean;
repackUpdatesNotificationsEnabled: boolean;
telemetryEnabled: boolean;
}
export interface HowLongToBeatCategory {
title: string;
duration: string;
accuracy: string;
}