Skip to content

Commit

Permalink
Merge branch 'main' into feature/custom-themes
Browse files Browse the repository at this point in the history
  • Loading branch information
zamitto committed Feb 16, 2025
2 parents 543528b + 42ae8e7 commit b202daf
Show file tree
Hide file tree
Showing 18 changed files with 108 additions and 70 deletions.
2 changes: 2 additions & 0 deletions python_rpc/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,8 @@ def action():
downloader = downloads.get(game_id)
if downloader:
downloader.pause_download()

if downloading_game_id == game_id:
downloading_game_id = -1
elif action == 'cancel':
downloader = downloads.get(game_id)
Expand Down
5 changes: 4 additions & 1 deletion scripts/postinstall.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,10 @@ const copyAria2Macos = async () => {
};

const copyAria2 = () => {
if (fs.existsSync("aria2")) {
const aria2Path =
process.platform === "win32" ? "aria2/aria2c.exe" : "aria2/aria2c";

if (fs.existsSync(aria2Path)) {
console.log("Aria2 already exists, skipping download...");
return;
}
Expand Down
6 changes: 3 additions & 3 deletions src/main/events/library/add-game-to-library.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import type { Game, GameShop } from "@types";
import { steamGamesWorker } from "@main/workers";
import { createGame } from "@main/services/library-sync";
import { steamUrlBuilder } from "@shared";
import { updateLocalUnlockedAchivements } from "@main/services/achievements/update-local-unlocked-achivements";
import { updateLocalUnlockedAchievements } from "@main/services/achievements/update-local-unlocked-achivements";
import { downloadsSublevel, gamesSublevel, levelKeys } from "@main/level";

const addGameToLibrary = async (
Expand Down Expand Up @@ -46,9 +46,9 @@ const addGameToLibrary = async (

await gamesSublevel.put(levelKeys.game(shop, objectId), game);

updateLocalUnlockedAchivements(game);
await createGame(game).catch(() => {});

createGame(game).catch(() => {});
updateLocalUnlockedAchievements(game);
}
};

Expand Down
9 changes: 8 additions & 1 deletion src/main/events/torrenting/cancel-game-download.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,14 @@ const cancelGameDownload = async (

await DownloadManager.cancelDownload(downloadKey);

await downloadsSublevel.del(downloadKey);
const download = await downloadsSublevel.get(downloadKey);

if (!download) return;

await downloadsSublevel.put(downloadKey, {
...download,
status: "removed",
});
};

registerEvent("cancelGameDownload", cancelGameDownload);
1 change: 1 addition & 0 deletions src/main/events/torrenting/pause-game-seed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ const pauseGameSeed = async (

await downloadsSublevel.put(downloadKey, {
...download,
status: "complete",
shouldSeed: false,
});

Expand Down
6 changes: 4 additions & 2 deletions src/main/events/torrenting/resume-game-seed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ const resumeGameSeed = async (
shop: GameShop,
objectId: string
) => {
const download = await downloadsSublevel.get(levelKeys.game(shop, objectId));
const downloadKey = levelKeys.game(shop, objectId);
const download = await downloadsSublevel.get(downloadKey);

if (!download) return;

await downloadsSublevel.put(levelKeys.game(shop, objectId), {
await downloadsSublevel.put(downloadKey, {
...download,
status: "seeding",
shouldSeed: true,
});

Expand Down
6 changes: 3 additions & 3 deletions src/main/events/user/get-unlocked-achievements.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export const getUnlockedAchievements = async (

return achievementsData
.map((achievementData) => {
const unlockedAchiementData = unlockedAchievements.find(
const unlockedAchievementData = unlockedAchievements.find(
(localAchievement) => {
return (
localAchievement.name.toUpperCase() ==
Expand All @@ -45,11 +45,11 @@ export const getUnlockedAchievements = async (
? achievementData.icon
: achievementData.icongray;

if (unlockedAchiementData) {
if (unlockedAchievementData) {
return {
...achievementData,
unlocked: true,
unlockTime: unlockedAchiementData.unlockTime,
unlockTime: unlockedAchievementData.unlockTime,
};
}

Expand Down
20 changes: 9 additions & 11 deletions src/main/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,23 +49,21 @@ export const loadState = async () => {
.values()
.all()
.then((games) => {
return sortBy(
games.filter((game) => game.queued),
"timestamp",
"DESC"
);
return sortBy(games, "timestamp", "DESC");
});

const [nextItemOnQueue] = downloads;
const [nextItemOnQueue] = downloads.filter((game) => game.queued);

const downloadsToSeed = downloads.filter(
(download) =>
download.shouldSeed &&
download.downloader === Downloader.Torrent &&
download.progress === 1 &&
download.uri !== null
(game) =>
game.shouldSeed &&
game.downloader === Downloader.Torrent &&
game.progress === 1 &&
game.uri !== null
);

console.log("downloadsToSeed", downloadsToSeed);

await DownloadManager.startRPC(nextItemOnQueue, downloadsToSeed);

startMainLoop();
Expand Down
30 changes: 14 additions & 16 deletions src/main/services/achievements/merge-achievements.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,21 @@ const saveAchievementsOnLocal = async (
return gameAchievementsSublevel
.get(levelKey)
.then(async (gameAchievement) => {
if (gameAchievement) {
await gameAchievementsSublevel.put(levelKey, {
...gameAchievement,
unlockedAchievements: unlockedAchievements,
});
await gameAchievementsSublevel.put(levelKey, {
achievements: gameAchievement?.achievements ?? [],
unlockedAchievements: unlockedAchievements,
});

if (!sendUpdateEvent) return;
if (!sendUpdateEvent) return;

return getUnlockedAchievements(objectId, shop, true)
.then((achievements) => {
WindowManager.mainWindow?.webContents.send(
`on-update-achievements-${objectId}-${shop}`,
achievements
);
})
.catch(() => {});
}
return getUnlockedAchievements(objectId, shop, true)
.then((achievements) => {
WindowManager.mainWindow?.webContents.send(
`on-update-achievements-${objectId}-${shop}`,
achievements
);
})
.catch(() => {});
});
};

Expand Down Expand Up @@ -133,7 +131,7 @@ export const mergeAchievements = async (
);
})
.catch((err) => {
if (err! instanceof SubscriptionRequiredError) {
if (err instanceof SubscriptionRequiredError) {
achievementsLogger.log(
"Achievements not synchronized on API due to lack of subscription",
game.objectId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { parseAchievementFile } from "./parse-achievement-file";
import { mergeAchievements } from "./merge-achievements";
import type { Game, UnlockedAchievement } from "@types";

export const updateLocalUnlockedAchivements = async (game: Game) => {
export const updateLocalUnlockedAchievements = async (game: Game) => {
const gameAchievementFiles = findAchievementFiles(game);

const achievementFileInsideDirectory =
Expand Down
6 changes: 4 additions & 2 deletions src/main/services/download/download-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -219,8 +219,10 @@ export class DownloadManager {
} as PauseDownloadPayload)
.catch(() => {});

WindowManager.mainWindow?.setProgressBar(-1);
this.downloadingGameId = null;
if (downloadKey === this.downloadingGameId) {
WindowManager.mainWindow?.setProgressBar(-1);
this.downloadingGameId = null;
}
}

static async resumeDownload(download: Download) {
Expand Down
4 changes: 2 additions & 2 deletions src/main/services/library-sync/merge-with-remote-games.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export const mergeWithRemoteGames = async () => {
? game.playTimeInMilliseconds
: localGame.playTimeInMilliseconds;

gamesSublevel.put(levelKeys.game(game.shop, game.objectId), {
await gamesSublevel.put(levelKeys.game(game.shop, game.objectId), {
...localGame,
remoteId: game.id,
lastTimePlayed: updatedLastTimePlayed,
Expand All @@ -39,7 +39,7 @@ export const mergeWithRemoteGames = async () => {
? steamUrlBuilder.icon(game.objectId, steamGame.clientIcon)
: null;

gamesSublevel.put(levelKeys.game(game.shop, game.objectId), {
await gamesSublevel.put(levelKeys.game(game.shop, game.objectId), {
objectId: game.objectId,
title: steamGame?.name,
remoteId: game.id,
Expand Down
5 changes: 4 additions & 1 deletion src/renderer/src/components/sidebar/sidebar.scss
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
&__content {
display: flex;
flex-direction: column;
flex: 1;
padding: calc(globals.$spacing-unit * 2);
gap: calc(globals.$spacing-unit * 2);
width: 100%;
Expand Down Expand Up @@ -54,6 +55,7 @@
display: flex;
color: globals.$muted-color;
border-radius: 4px;

&:hover {
background-color: rgba(255, 255, 255, 0.15);
}
Expand Down Expand Up @@ -104,13 +106,14 @@
&__container {
display: flex;
flex-direction: column;
flex: 1;
overflow: hidden;
}

&__section {
gap: calc(globals.$spacing-unit * 2);
display: flex;
flex-direction: column;
gap: calc(globals.$spacing-unit * 2);
padding-bottom: globals.$spacing-unit;
}

Expand Down
2 changes: 1 addition & 1 deletion src/renderer/src/hooks/use-download.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export function useDownload() {
const pauseDownload = async (shop: GameShop, objectId: string) => {
await window.electron.pauseGameDownload(shop, objectId);
await updateLibrary();
dispatch(clearDownload());
if (lastPacket?.gameId === `${shop}:${objectId}`) dispatch(clearDownload());
};

const resumeDownload = async (shop: GameShop, objectId: string) => {
Expand Down
8 changes: 8 additions & 0 deletions src/renderer/src/pages/downloads/download-group.scss
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
flex-direction: column;
gap: calc(globals.$spacing-unit * 2);

&__details-with-article {
display: flex;
align-items: center;
gap: calc(globals.$spacing-unit / 2);
align-self: flex-start;
cursor: pointer;
}

&__header {
display: flex;
align-items: center;
Expand Down
28 changes: 20 additions & 8 deletions src/renderer/src/pages/downloads/download-group.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import {
DownloadIcon,
LinkIcon,
PlayIcon,
QuestionIcon,
ThreeBarsIcon,
TrashIcon,
UnlinkIcon,
Expand Down Expand Up @@ -123,8 +124,12 @@ export function DownloadGroup({
</p>

{download.downloader === Downloader.Torrent && (
<small>
<small
className="download-group__details-with-article"
data-open-article="peers-and-seeds"
>
{lastPacket?.numPeers} peers / {lastPacket?.numSeeds} seeds
<QuestionIcon size={12} />
</small>
)}
</>
Expand All @@ -137,7 +142,14 @@ export function DownloadGroup({
return download.status === "seeding" &&
download.downloader === Downloader.Torrent ? (
<>
<p>{t("seeding")}</p>
<p
data-open-article="seeding"
className="download-group__details-with-article"
>
{t("seeding")}

<QuestionIcon />
</p>
{uploadSpeed && <p>{uploadSpeed}/s</p>}
</>
) : (
Expand Down Expand Up @@ -175,7 +187,7 @@ export function DownloadGroup({

const deleting = isGameDeleting(game.id);

if (download?.progress === 1) {
if (game.download?.progress === 1) {
return [
{
label: t("install"),
Expand All @@ -190,8 +202,8 @@ export function DownloadGroup({
disabled: deleting,
icon: <UnlinkIcon />,
show:
download.status === "seeding" &&
download.downloader === Downloader.Torrent,
game.download?.status === "seeding" &&
game.download?.downloader === Downloader.Torrent,
onClick: () => {
pauseSeeding(game.shop, game.objectId);
},
Expand All @@ -201,8 +213,8 @@ export function DownloadGroup({
disabled: deleting,
icon: <LinkIcon />,
show:
download.status !== "seeding" &&
download.downloader === Downloader.Torrent,
game.download?.status !== "seeding" &&
game.download?.downloader === Downloader.Torrent,
onClick: () => {
resumeSeeding(game.shop, game.objectId);
},
Expand All @@ -218,7 +230,7 @@ export function DownloadGroup({
];
}

if (isGameDownloading || download?.status === "active") {
if (isGameDownloading) {
return [
{
label: t("pause"),
Expand Down
Loading

0 comments on commit b202daf

Please sign in to comment.