diff --git a/src/main/events/library/get-game-installer-action-type.ts b/src/main/events/library/get-game-installer-action-type.ts index 2e58968a..7d49c642 100644 --- a/src/main/events/library/get-game-installer-action-type.ts +++ b/src/main/events/library/get-game-installer-action-type.ts @@ -22,7 +22,6 @@ const getGameInstallerActionType = async ( ); if (!fs.existsSync(gamePath)) { - await downloadsSublevel.del(downloadKey); return "open-folder"; } diff --git a/src/main/events/library/open-game-installer.ts b/src/main/events/library/open-game-installer.ts index 9cf1d978..57feeb87 100644 --- a/src/main/events/library/open-game-installer.ts +++ b/src/main/events/library/open-game-installer.ts @@ -38,7 +38,6 @@ const openGameInstaller = async ( ); if (!fs.existsSync(gamePath)) { - await downloadsSublevel.del(downloadKey); return true; } diff --git a/src/main/events/torrenting/start-game-download.ts b/src/main/events/torrenting/start-game-download.ts index 71a0cc00..181dd532 100644 --- a/src/main/events/torrenting/start-game-download.ts +++ b/src/main/events/torrenting/start-game-download.ts @@ -2,7 +2,6 @@ import { registerEvent } from "../register-event"; import type { Download, StartGameDownloadPayload } from "@types"; import { DownloadManager, HydraApi, logger } from "@main/services"; import { createGame } from "@main/services/library-sync"; -import { parseBytes } from "@shared"; import { downloadsSublevel, gamesSublevel, levelKeys } from "@main/level"; import { handleDownloadError, prepareGameEntry } from "@main/helpers"; @@ -18,7 +17,6 @@ const startGameDownload = async ( downloader, uri, automaticallyExtract, - fileSize, } = payload; const gameKey = levelKeys.game(shop, objectId); @@ -48,7 +46,7 @@ const startGameDownload = async ( downloader, uri, folderName: null, - fileSize: parseBytes(fileSize ?? null), + fileSize: null, shouldSeed: false, timestamp: Date.now(), queued: true, diff --git a/src/main/services/download/download-manager.ts b/src/main/services/download/download-manager.ts index 7688ae66..71daf2d6 100644 --- a/src/main/services/download/download-manager.ts +++ b/src/main/services/download/download-manager.ts @@ -21,7 +21,7 @@ import { RealDebridClient } from "./real-debrid"; import path from "node:path"; import { logger } from "../logger"; import { db, downloadsSublevel, gamesSublevel, levelKeys } from "@main/level"; -import { sortBy } from "lodash-es"; +import { orderBy } from "lodash-es"; import { TorBoxClient } from "./torbox"; import { GameFilesManager } from "../game-files-manager"; import { HydraDebridClient } from "./hydra-debrid"; @@ -323,7 +323,8 @@ export class DownloadManager { this.sendProgressUpdate(progress, status, game); - if (progress === 1) { + const isComplete = progress === 1 || download.status === "complete"; + if (isComplete) { await this.handleDownloadCompletion(download, game, gameId); } } @@ -422,10 +423,10 @@ export class DownloadManager { .values() .all() .then((games) => - sortBy( + orderBy( games.filter((game) => game.status === "paused" && game.queued), - "timestamp", - "DESC" + ["timestamp"], + ["desc"] ) ); diff --git a/src/main/services/download/js-http-downloader.ts b/src/main/services/download/js-http-downloader.ts index c90c1a95..b488300b 100644 --- a/src/main/services/download/js-http-downloader.ts +++ b/src/main/services/download/js-http-downloader.ts @@ -320,10 +320,17 @@ export class JsHttpDownloader { return null; } + let progress = 0; + if (this.status === "complete") { + progress = 1; + } else if (this.fileSize > 0) { + progress = this.bytesDownloaded / this.fileSize; + } + return { folderName: this.folderName, fileSize: this.fileSize, - progress: this.fileSize > 0 ? this.bytesDownloaded / this.fileSize : 0, + progress, downloadSpeed: this.downloadSpeed, numPeers: 0, numSeeds: 0, diff --git a/src/renderer/src/pages/downloads/download-group.tsx b/src/renderer/src/pages/downloads/download-group.tsx index 6f969a2a..6a2dd478 100644 --- a/src/renderer/src/pages/downloads/download-group.tsx +++ b/src/renderer/src/pages/downloads/download-group.tsx @@ -47,9 +47,9 @@ function hexToRgb(hex: string): [number, number, number] { if (h.length === 3) { h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2]; } - const r = parseInt(h.substring(0, 2), 16) || 0; - const g = parseInt(h.substring(2, 4), 16) || 0; - const b = parseInt(h.substring(4, 6), 16) || 0; + const r = Number.parseInt(h.substring(0, 2), 16) || 0; + const g = Number.parseInt(h.substring(2, 4), 16) || 0; + const b = Number.parseInt(h.substring(4, 6), 16) || 0; return [r, g, b]; }