diff --git a/.gitignore b/.gitignore index 24bf56f8..84771ebb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ .vscode/ node_modules/ -fastlist.exe __pycache__ dist out diff --git a/src/locales/pt-BR/translation.json b/src/locales/pt-BR/translation.json index 7e783d5f..b3f4977d 100644 --- a/src/locales/pt-BR/translation.json +++ b/src/locales/pt-BR/translation.json @@ -199,8 +199,8 @@ "no_downloads_description": "Você ainda não baixou nada pelo Hydra, mas nunca é tarde para começar.", "checking_files": "Verificando arquivos…", "seeding": "Semeando", - "stop_seeding": "Parar semeio", - "resume_seeding": "Retomar semeio", + "stop_seeding": "Parar de semear", + "resume_seeding": "Semear", "options": "Gerenciar" }, "settings": { diff --git a/src/main/events/auth/sign-out.ts b/src/main/events/auth/sign-out.ts index 67692707..6b720015 100644 --- a/src/main/events/auth/sign-out.ts +++ b/src/main/events/auth/sign-out.ts @@ -2,6 +2,7 @@ import { registerEvent } from "../register-event"; import { DownloadManager, HydraApi, gamesPlaytime } from "@main/services"; import { dataSource } from "@main/data-source"; import { DownloadQueue, Game, UserAuth, UserSubscription } from "@main/entity"; +import { PythonRPC } from "@main/services/python-rpc"; const signOut = async (_event: Electron.IpcMainInvokeEvent) => { const databaseOperations = dataSource @@ -27,8 +28,7 @@ const signOut = async (_event: Electron.IpcMainInvokeEvent) => { DownloadManager.cancelDownload(); /* Disconnects libtorrent */ - // TODO - // TorrentDownloader.killTorrent(); + PythonRPC.kill(); HydraApi.handleSignOut(); diff --git a/src/main/events/profile/process-profile-image.ts b/src/main/events/profile/process-profile-image.ts index 485635dc..4b8079b3 100644 --- a/src/main/events/profile/process-profile-image.ts +++ b/src/main/events/profile/process-profile-image.ts @@ -1,11 +1,14 @@ import { registerEvent } from "../register-event"; +import { PythonRPC } from "@main/services/python-rpc"; const processProfileImage = async ( _event: Electron.IpcMainInvokeEvent, path: string ) => { - return path; - // return PythonInstance.processProfileImage(path); + return PythonRPC.rpc.post<{ imagePath: string; mimeType: string }>( + "/profile_image_processor/process_image", + { path } + ); }; registerEvent("processProfileImage", processProfileImage); diff --git a/src/main/events/torrenting/pause-game-seed.ts b/src/main/events/torrenting/pause-game-seed.ts index 3b38c626..9daa4d7b 100644 --- a/src/main/events/torrenting/pause-game-seed.ts +++ b/src/main/events/torrenting/pause-game-seed.ts @@ -8,11 +8,9 @@ const pauseGameSeed = async ( _event: Electron.IpcMainInvokeEvent, gameId: number ) => { - await dataSource.transaction(async (transactionalEntityManager) => { - await transactionalEntityManager - .getRepository(Game) - .update({ id: gameId }, { status: "complete", shouldSeed: false }); - }); + await dataSource + .getRepository(Game) + .update({ id: gameId }, { status: "complete", shouldSeed: false }); await DownloadManager.cancelDownload(gameId); }; diff --git a/src/main/events/torrenting/resume-game-seed.ts b/src/main/events/torrenting/resume-game-seed.ts index 93308f94..59a56012 100644 --- a/src/main/events/torrenting/resume-game-seed.ts +++ b/src/main/events/torrenting/resume-game-seed.ts @@ -20,11 +20,9 @@ const resumeGameSeed = async ( if (!game) return; - await dataSource.transaction(async (transactionalEntityManager) => { - await transactionalEntityManager - .getRepository(Game) - .update({ id: gameId }, { status: "seeding", shouldSeed: true }); - }); + await dataSource + .getRepository(Game) + .update({ id: gameId }, { status: "seeding", shouldSeed: true }); await DownloadManager.startDownload(game); }; diff --git a/src/main/main.ts b/src/main/main.ts index 3996996c..18b61c37 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -1,8 +1,5 @@ import { Ludusavi, startMainLoop } from "./services"; -import { - // downloadQueueRepository, - userPreferencesRepository, -} from "./repository"; +import { userPreferencesRepository } from "./repository"; import { UserPreferences } from "./entity"; import { RealDebridClient } from "./services/download/real-debrid"; import { HydraApi } from "./services/hydra-api"; @@ -25,24 +22,7 @@ const loadState = async (userPreferences: UserPreferences | null) => { uploadGamesBatch(); }); - // const [nextQueueItem] = await downloadQueueRepository.find({ - // order: { - // id: "DESC", - // }, - // relations: { - // game: true, - // }, - // }); - PythonRPC.spawn(); - // start download - - // if (nextQueueItem?.game.status === "active") { - // DownloadManager.startDownload(nextQueueItem.game); - // } else { - // PythonInstance.spawn(); - // } - startMainLoop(); }; diff --git a/src/main/services/download/download-manager.ts b/src/main/services/download/download-manager.ts index 7c57300e..a4106fef 100644 --- a/src/main/services/download/download-manager.ts +++ b/src/main/services/download/download-manager.ts @@ -84,7 +84,7 @@ export class DownloadManager { public static async watchDownloads() { const status = await this.getDownloadStatus(); - // // status = await RealDebridDownloader.getStatus(); + // status = await RealDebridDownloader.getStatus(); if (status) { const { gameId, progress } = status; @@ -180,61 +180,6 @@ export class DownloadManager { "on-seeding-status", JSON.parse(JSON.stringify(seedStatus.data)) ); - - // const gamesToSeed = await gameRepository.find({ - // where: { shouldSeed: true, isDeleted: false }, - // }); - // if (gamesToSeed.length === 0) return; - // const seedStatus = await PythonRPC.rpc - // .get("/seed-status") - // .then((results) => { - // if (results === null) return []; - // return results.data; - // }); - // if (!seedStatus.length === 0) { - // for (const game of gamesToSeed) { - // if (game.uri && game.downloadPath) { - // await this.resumeSeeding(game.id, game.uri, game.downloadPath); - // } - // } - // } - // const gameIds = seedStatus.map((status) => status.gameId); - // for (const gameId of gameIds) { - // const game = await gameRepository.findOne({ - // where: { id: gameId }, - // }); - // if (game) { - // const isNotDeleted = fs.existsSync( - // path.join(game.downloadPath!, game.folderName!) - // ); - // if (!isNotDeleted) { - // await this.pauseSeeding(game.id); - // await gameRepository.update(game.id, { - // status: "complete", - // shouldSeed: false, - // }); - // WindowManager.mainWindow?.webContents.send("on-hard-delete"); - // } - // } - // } - // const updateList = await gameRepository.find({ - // where: { - // id: In(gameIds), - // status: Not(In(["complete", "seeding"])), - // shouldSeed: true, - // isDeleted: false, - // }, - // }); - // if (updateList.length > 0) { - // await gameRepository.update( - // { id: In(updateList.map((game) => game.id)) }, - // { status: "seeding" } - // ); - // } - // WindowManager.mainWindow?.webContents.send( - // "on-seeding-status", - // JSON.parse(JSON.stringify(seedStatus)) - // ); } static async pauseDownload() { diff --git a/src/renderer/src/components/dropdown-menu/dropdown-menu.scss b/src/renderer/src/components/dropdown-menu/dropdown-menu.scss index 3c615116..0f73c608 100644 --- a/src/renderer/src/components/dropdown-menu/dropdown-menu.scss +++ b/src/renderer/src/components/dropdown-menu/dropdown-menu.scss @@ -4,7 +4,7 @@ &__content { background-color: globals.$dark-background-color; border: 1px solid globals.$border-color; - border-radius: 4px; + border-radius: 6px; min-width: 200px; flex-direction: column; align-items: center; diff --git a/src/renderer/src/pages/downloads/download-group.tsx b/src/renderer/src/pages/downloads/download-group.tsx index ae428c2c..e9ae8a82 100644 --- a/src/renderer/src/pages/downloads/download-group.tsx +++ b/src/renderer/src/pages/downloads/download-group.tsx @@ -20,7 +20,16 @@ import { DropdownMenu, DropdownMenuItem, } from "@renderer/components/dropdown-menu/dropdown-menu"; -import { ThreeBarsIcon } from "@primer/octicons-react"; +import { + ColumnsIcon, + DownloadIcon, + LinkIcon, + PlayIcon, + ThreeBarsIcon, + TrashIcon, + UnlinkIcon, + XCircleIcon, +} from "@primer/octicons-react"; export interface DownloadGroupProps { library: LibraryGame[]; @@ -168,10 +177,12 @@ export function DownloadGroup({ label: t("install"), disabled: deleting, onClick: () => openGameInstaller(game.id), + icon: , }, { label: t("stop_seeding"), disabled: deleting, + icon: , show: game.status === "seeding" && game.downloader === Downloader.Torrent, onClick: () => pauseSeeding(game.id), @@ -179,6 +190,7 @@ export function DownloadGroup({ { label: t("resume_seeding"), disabled: deleting, + icon: , show: game.status !== "seeding" && game.downloader === Downloader.Torrent, onClick: () => resumeSeeding(game.id), @@ -186,6 +198,7 @@ export function DownloadGroup({ { label: t("delete"), disabled: deleting, + icon: , onClick: () => openDeleteGameModal(game.id), }, ]; @@ -196,10 +209,12 @@ export function DownloadGroup({ { label: t("pause"), onClick: () => pauseDownload(game.id), + icon: , }, { label: t("cancel"), onClick: () => cancelDownload(game.id), + icon: , }, ]; } @@ -211,10 +226,12 @@ export function DownloadGroup({ game.downloader === Downloader.RealDebrid && !userPreferences?.realDebridApiToken, onClick: () => resumeDownload(game.id), + icon: , }, { label: t("cancel"), onClick: () => cancelDownload(game.id), + icon: , }, ]; }; @@ -290,7 +307,7 @@ export function DownloadGroup({