import type { Downloader } from "@shared"; import type { GameShop, SteamAchievement, UnlockedAchievement, } from "./game.types"; import type { DownloadStatus } from "./download.types"; export type SubscriptionStatus = "active" | "pending" | "cancelled"; export interface Subscription { id: string; status: SubscriptionStatus; plan: { id: string; name: string }; expiresAt: string | null; paymentMethod: "pix" | "paypal"; } export interface Auth { accessToken: string; refreshToken: string; tokenExpirationTimestamp: number; featurebaseJwt: string; workwondersJwt: string; } export interface User { id: string; displayName: string; profileImageUrl: string | null; backgroundImageUrl: string | null; subscription: Subscription | null; } export interface Game { title: string; iconUrl: string | null; libraryHeroImageUrl: string | null; logoImageUrl: string | null; customIconUrl?: string | null; customLogoImageUrl?: string | null; customHeroImageUrl?: string | null; originalIconPath?: string | null; originalLogoPath?: string | null; originalHeroPath?: string | null; customOriginalIconPath?: string | null; customOriginalLogoPath?: string | null; customOriginalHeroPath?: string | null; playTimeInMilliseconds: number; unsyncedDeltaPlayTimeInMilliseconds?: number; lastTimePlayed: Date | null; objectId: string; shop: GameShop; remoteId: string | null; isDeleted: boolean; winePrefixPath?: string | null; executablePath?: string | null; launchOptions?: string | null; favorite?: boolean; isPinned?: boolean; achievementCount?: number; unlockedAchievementCount?: number; pinnedDate?: Date | null; automaticCloudSync?: boolean; hasManuallyUpdatedPlaytime?: boolean; newDownloadOptionsCount?: number; } export interface Download { shop: GameShop; objectId: string; uri: string; folderName: string | null; downloadPath: string; progress: number; downloader: Downloader; bytesDownloaded: number; fileSize: number | null; shouldSeed: boolean; status: DownloadStatus | null; queued: boolean; timestamp: number; extracting: boolean; automaticallyExtract: boolean; extractionProgress: number; } export interface GameAchievement { achievements: SteamAchievement[]; unlockedAchievements: UnlockedAchievement[]; updatedAt: number | undefined; language: string | undefined; } export type AchievementCustomNotificationPosition = | "top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right"; export interface UserPreferences { downloadsPath?: string | null; ggDealsApiKey?: string | null; language?: string; realDebridApiToken?: string | null; torBoxApiToken?: string | null; preferQuitInsteadOfHiding?: boolean; runAtStartup?: boolean; startMinimized?: boolean; disableNsfwAlert?: boolean; enableAutoInstall?: boolean; seedAfterDownloadComplete?: boolean; showHiddenAchievementsDescription?: boolean; showDownloadSpeedInMegabits?: boolean; downloadNotificationsEnabled?: boolean; repackUpdatesNotificationsEnabled?: boolean; achievementNotificationsEnabled?: boolean; achievementCustomNotificationsEnabled?: boolean; achievementCustomNotificationPosition?: AchievementCustomNotificationPosition; achievementSoundVolume?: number; friendRequestNotificationsEnabled?: boolean; friendStartGameNotificationsEnabled?: boolean; showDownloadSpeedInMegabytes?: boolean; extractFilesByDefault?: boolean; enableSteamAchievements?: boolean; autoplayGameTrailers?: boolean; hideToTrayOnGameStart?: boolean; } export interface ScreenState { x?: number; y?: number; height: number; width: number; isMaximized: boolean; }