mirror of
https://github.com/hydralauncher/hydra.git
synced 2026-01-25 20:01:03 +00:00
84 lines
2.8 KiB
TypeScript
84 lines
2.8 KiB
TypeScript
import path from "node:path";
|
|
import fs from "node:fs";
|
|
|
|
import type { LibraryGame } from "@types";
|
|
import { registerEvent } from "../register-event";
|
|
import {
|
|
downloadsSublevel,
|
|
gameAchievementsSublevel,
|
|
gamesShopAssetsSublevel,
|
|
gamesSublevel,
|
|
} from "@main/level";
|
|
|
|
const getLibrary = async (): Promise<LibraryGame[]> => {
|
|
return gamesSublevel
|
|
.iterator()
|
|
.all()
|
|
.then((results) => {
|
|
return Promise.all(
|
|
results
|
|
.filter(([_key, game]) => game.isDeleted === false)
|
|
.map(async ([key, game]) => {
|
|
const download = await downloadsSublevel.get(key);
|
|
const gameAssets = await gamesShopAssetsSublevel.get(key);
|
|
|
|
let unlockedAchievementCount = game.unlockedAchievementCount ?? 0;
|
|
|
|
if (!game.unlockedAchievementCount) {
|
|
const achievements = await gameAchievementsSublevel.get(key);
|
|
|
|
unlockedAchievementCount =
|
|
achievements?.unlockedAchievements?.length ?? 0;
|
|
}
|
|
|
|
// Verify installer still exists, clear if deleted externally
|
|
let installerSizeInBytes = game.installerSizeInBytes;
|
|
if (installerSizeInBytes && download?.folderName) {
|
|
const installerPath = path.join(
|
|
download.downloadPath,
|
|
download.folderName
|
|
);
|
|
|
|
if (!fs.existsSync(installerPath)) {
|
|
installerSizeInBytes = null;
|
|
gamesSublevel.put(key, { ...game, installerSizeInBytes: null });
|
|
}
|
|
}
|
|
|
|
// Verify installed folder still exists, clear if deleted externally
|
|
let installedSizeInBytes = game.installedSizeInBytes;
|
|
if (installedSizeInBytes && game.executablePath) {
|
|
const executableDir = path.dirname(game.executablePath);
|
|
|
|
if (!fs.existsSync(executableDir)) {
|
|
installedSizeInBytes = null;
|
|
gamesSublevel.put(key, {
|
|
...game,
|
|
installerSizeInBytes,
|
|
installedSizeInBytes: null,
|
|
});
|
|
}
|
|
}
|
|
|
|
return {
|
|
id: key,
|
|
...game,
|
|
installerSizeInBytes,
|
|
installedSizeInBytes,
|
|
download: download ?? null,
|
|
unlockedAchievementCount,
|
|
achievementCount: game.achievementCount ?? 0,
|
|
// Spread gameAssets last to ensure all image URLs are properly set
|
|
...gameAssets,
|
|
// Preserve custom image URLs from game if they exist
|
|
customIconUrl: game.customIconUrl,
|
|
customLogoImageUrl: game.customLogoImageUrl,
|
|
customHeroImageUrl: game.customHeroImageUrl,
|
|
};
|
|
})
|
|
);
|
|
});
|
|
};
|
|
|
|
registerEvent("getLibrary", getLibrary);
|