Skip to content

Commit

Permalink
Merge branch 'main' into #228-sorting-list-library
Browse files Browse the repository at this point in the history
  • Loading branch information
Barraki authored May 23, 2024
2 parents 6a86c96 + 48cebe7 commit 00d2d2e
Show file tree
Hide file tree
Showing 25 changed files with 516 additions and 23 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build
name: Release

on:
push:
Expand Down
182 changes: 182 additions & 0 deletions README.es.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
<br>

<div align="center">

[<img src="./resources/icon.png" width="144"/>](https://hydralauncher.site)

<h1 align="center">Hydra Launcher</h1>

<p align="center">
<strong>Hydra es un launcher de juegos con su propio cliente de bittorrent y gestor propio de repacks.</strong>
</p>

[![build](https://img.shields.io/github/actions/workflow/status/hydralauncher/hydra/build.yml)](https://github.com/hydralauncher/hydra/actions)
[![release](https://img.shields.io/github/package-json/v/hydralauncher/hydra)](https://github.com/hydralauncher/hydra/releases)

[![be](https://img.shields.io/badge/lang-be-orange)](README.be.md)
[![pl](https://img.shields.io/badge/lang-pl-white)](README.pl.md)
[![pt-BR](https://img.shields.io/badge/lang-pt--BR-green.svg)](README.pt-BR.md)
[![ru](https://img.shields.io/badge/lang-ru-yellow.svg)](README.ru.md)
[![uk-UA](https://img.shields.io/badge/lang-uk--UA-blue)](README.uk-UA.md)
[![es](https://img.shields.io/badge/lang-es-red)](README.es.md)

![Hydra Catalogue](./docs/screenshot.png)

</div>

## Tabla de Contenidos

- [Acerca de](#acerca-de)
- [Características](#caracteristicas)
- [Instalación](#Instalacion)
- [Contribuir](#contribuir)
- [Únete a nuestro Telegram](#unete-a-nuestro-telegram)
- [Haz un fork y clona tu repositorio](#haz-un-fork-y-clona-tu-repositorio)
- [Maneras en las que puedes contribuir](#maneras-en-las-que-puedes-contribuir)
- [Estructura del proyecto](#estructura-del-proyecto)
- [Compilar desde el código fuente](#compilar-desde-el-código-fuente)
- [Instalar Node.js](#instalar-nodejs)
- [Instalar Yarn](#instalar-yarn)
- [Instalar Dependencias de Node](#instalar-dependencias-de-node)
- [Instalar Python 3.9](#instalar-python-39)
- [Instalar Dependencias de Python](#Instalar-dependencias-de-python)
- [Variables del Entorno](#variables-del-entorno)
- [Ejecución](#ejecucion)
- [Compilación](#compilacion)
- [Compilar el cliente de bittorrent](#compilar-el-cliente-de-bittorrent)
- [Compilar la aplicación Electron](#compilar-la-aplicacion-electron)
- [Colaboradores](#colaboradores)

## Acerca de

**Hydra** es un **Launcher de Juegos** con su propio **Cliente Bittorrent** y **autogestor de Repacks**.
<br>
El launcher está escrito en TypeScript (Electron) y Python, el cuál se encarga del sistema de torrent usando libtorrent.

## Caracteristicas

- Buscador e instalador autogestionado de repacks a través de las páginas más confiables en él [Megahilo](https://www.reddit.com/r/Piracy/wiki/megathread/)
- Cliente propio de bittorrent integrado
- Integración de How Long To Beat (HLTB) en la página del juego
- Customización de rutas de descargas
- Notificaciones en actualizaciones a listas de repacks
- Soporte a Windows y Linux
- En constante actualización
- Y mucho más ...

## Instalacion

Sigue los pasos de abajo para instalar:

1. Descarga la última versión de Hydra desde la página de [Releases](https://github.com/hydralauncher/hydra/releases/latest).
- Descarga solo el .exe si quieres instalar Hydra en Windows.
- Descarga el .deb o .rpm o .zip si quieres instalar Hydra en Linux. (Depende de tu distro de Linux)
2. Ejecuta el archivo descargado.
3. ¡Disfruta de Hydra!

## <a name="contribuir"> Contribuir

### <a name="unete-a-nuestro-telegram"></a> Unete a nuestro Telegram

Puedes unirte a nuestra conversación y discusiones en nuestro canal de [Telegram](https://t.me/hydralauncher).

### Haz un fork y clona tu repositorio

1. Rea;iza un fork del repositorio [(Haz click acá para hacer un fork ahora)](https://github.com/hydralauncher/hydra/fork)
2. Clona el código forkeado `git clone https://github.com/tu_nombredeusuario/hydra`
3. Crea una nueva rama
4. Sube tus commits
5. Envía nuevas solicitudes de pull

### Maneras en las que puedes contribuir

- Traducción: Queremos que Hydra esté disponible para todas las personas que sean posible. Siéntete libre de ayudarnos a traducirlo a nuevos lenguajes o actualizar y mejorar las ya disponibles en Hydra.
- Código: Hydra está hecho con Typescript, Electron y un poquito de Python. Si quieres contribuir, ¡únete a nuestro [Telegram](https://t.me/hydralauncher)!

### Estructura del proyecto

- torrent-client: Usamos libtorrent, una librería de Python que se encarga de manejar las descargas torrent
- src/renderer: El UI de la aplicación
- src/main: El resto de la lógica va acá.

## Compilar desde el código fuente

### Instalar Node.js

Asegúrate que tienes Node.js instalado en tú máquina. Si no es así, puedes descargarlo e instalarlo desde [nodejs.org](https://nodejs.org/).

### Instalar Yarn

Yarn es un gestor de paquetes para Node.js. Si no tienes aún instalado Yarn todavía, puedes hacerlo siguiendo las instrucciones en [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/).

### Instalar Dependencias de Node

Dirígete hasta el directorio del proyecto e instala las dependencias de Node usando Yarn:

```bash
cd hydra
yarn
```

### Instalar Python 3.9

Asegúrate que tienes Python 3.9 instalado en tu máquina. Puedes descargarlo e instalarlo desde [python.org](https://www.python.org/downloads/release/python-3913/).

### Instalar Dependencias de Python

Instala las dependencias de Python requeridas usando pip:

```bash
pip install -r requirements.txt
```

## Variables del Entorno

Necesitas una llave API de SteamGridDB para así poder obtener los íconos de los juegos en la instalación.
Si quieres también tener los repacks de onlinefix, necesitarás añadir tus credenciales al .env

Una vez que los tengas, puedes copiar o renombrar el archivo `.env.example` cómo `.env` y colocarlo en `STEAMGRIDDB_API_KEY`, `ONLINEFIX_USERNAME`, `ONLINEFIX_PASSWORD`.

## Ejecucion

Una vez que tengas todas las cosas listas, puedes ejecutar el siguiente comando para así iniciar el proceso de Electron y el cliente de bittorrent:

```bash
yarn dev
```

## Compilacion

### Compilar el cliente de bittorrent

Crea el cliente bittorrent usando este comando:

```bash
python torrent-client/setup.py build
```

### Compilar la aplicacion Electron

Crea la aplicación de Electron usando este comando:

En Windows:

```bash
yarn build:win
```

En Linux:

```bash
yarn build:linux
```

## Colaboradores

<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
</a>

## Licencia

Hydra está licenciado bajo la [MIT License](LICENSE).
Binary file modified hydra.db
Binary file not shown.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "hydra",
"name": "hydralauncher",
"version": "1.2.3",
"description": "Hydra",
"main": "./out/main/index.js",
Expand Down
6 changes: 6 additions & 0 deletions src/locales/en/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -181,5 +181,11 @@
},
"modal": {
"close": "Close button"
},
"splash": {
"downloading_version": "Downloading version {{version}}",
"searching_updates": "Searching for updates",
"update_found": "Update {{version}} found",
"restarting_and_applying": "Restarting and applying update"
}
}
6 changes: 6 additions & 0 deletions src/locales/es/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -176,5 +176,11 @@
},
"modal": {
"close": "Botón de cierre"
},
"splash": {
"downloading_version": "Descargando versión {{version}}",
"searching_updates": "Buscando actualizaciones",
"update_found": "Actualización {{version}} encontrada",
"restarting_and_applying": "Reiniciando y aplicando actualización"
}
}
6 changes: 6 additions & 0 deletions src/locales/pt/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -176,5 +176,11 @@
},
"modal": {
"close": "Botão de fechar"
},
"splash": {
"downloading_version": "Baixando versão {{version}}",
"searching_updates": "Buscando atualizações",
"update_found": "Versão {{version}} encontrada",
"restarting_and_applying": "Reiniciando e aplicando atualização"
}
}
2 changes: 1 addition & 1 deletion src/main/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export const defaultDownloadsPath = app.getPath("downloads");

export const databasePath = path.join(
app.getPath("appData"),
app.getName(),
"hydra",
"hydra.db"
);

Expand Down
48 changes: 48 additions & 0 deletions src/main/events/autoupdater/check-for-updates.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import { AppUpdaterEvents } from "@types";
import { registerEvent } from "../register-event";
import updater, { ProgressInfo, UpdateInfo } from "electron-updater";
import { WindowManager } from "@main/services";
import { app } from "electron";

const { autoUpdater } = updater;

const sendEvent = (event: AppUpdaterEvents) => {
WindowManager.splashWindow?.webContents.send("autoUpdaterEvent", event);
};

const mockValuesForDebug = async () => {
sendEvent({ type: "update-downloaded" });
};

const checkForUpdates = async (_event: Electron.IpcMainInvokeEvent) => {
autoUpdater
.addListener("error", () => {
sendEvent({ type: "error" });
})
.addListener("checking-for-update", () => {
sendEvent({ type: "checking-for-updates" });
})
.addListener("update-not-available", () => {
sendEvent({ type: "update-not-available" });
})
.addListener("update-available", (info: UpdateInfo) => {
sendEvent({ type: "update-available", info });
})
.addListener("update-downloaded", () => {
sendEvent({ type: "update-downloaded" });
})
.addListener("download-progress", (info: ProgressInfo) => {
sendEvent({ type: "download-progress", info });
})
.addListener("update-cancelled", () => {
sendEvent({ type: "update-cancelled" });
});

if (app.isPackaged) {
autoUpdater.checkForUpdates();
} else {
await mockValuesForDebug();
}
};

registerEvent("checkForUpdates", checkForUpdates);
12 changes: 12 additions & 0 deletions src/main/events/autoupdater/continue-to-main-window.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { WindowManager } from "@main/services";
import { registerEvent } from "../register-event";
import updater from "electron-updater";

const { autoUpdater } = updater;

const continueToMainWindow = async (_event: Electron.IpcMainInvokeEvent) => {
autoUpdater.removeAllListeners();
WindowManager.prepareMainWindowAndCloseSplash();
};

registerEvent("continueToMainWindow", continueToMainWindow);
17 changes: 17 additions & 0 deletions src/main/events/autoupdater/restart-and-install-update.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { app } from "electron";
import { registerEvent } from "../register-event";
import updater from "electron-updater";
import { WindowManager } from "@main/services";

const { autoUpdater } = updater;

const restartAndInstallUpdate = async (_event: Electron.IpcMainInvokeEvent) => {
if (app.isPackaged) {
autoUpdater.quitAndInstall(true, true);
} else {
autoUpdater.removeAllListeners();
WindowManager.prepareMainWindowAndCloseSplash();
}
};

registerEvent("restartAndInstallUpdate", restartAndInstallUpdate);
3 changes: 3 additions & 0 deletions src/main/events/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ import "./torrenting/start-game-download";
import "./user-preferences/get-user-preferences";
import "./user-preferences/update-user-preferences";
import "./user-preferences/auto-launch";
import "./autoupdater/check-for-updates";
import "./autoupdater/restart-and-install-update";
import "./autoupdater/continue-to-main-window";

ipcMain.handle("ping", () => "pong");
ipcMain.handle("getVersion", () => app.getVersion());
Expand Down
11 changes: 4 additions & 7 deletions src/main/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@ import updater from "electron-updater";
import i18n from "i18next";
import path from "node:path";
import { electronApp, optimizer } from "@electron-toolkit/utils";
import { resolveDatabaseUpdates, WindowManager } from "@main/services";
import { logger, resolveDatabaseUpdates, WindowManager } from "@main/services";
import { dataSource } from "@main/data-source";
import * as resources from "@locales";
import { userPreferencesRepository } from "@main/repository";

const { autoUpdater } = updater;

autoUpdater.setFeedURL({
Expand All @@ -16,6 +15,8 @@ autoUpdater.setFeedURL({
repo: "hydra",
});

autoUpdater.logger = logger;

const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) app.quit();

Expand Down Expand Up @@ -63,12 +64,8 @@ app.whenReady().then(() => {
where: { id: 1 },
});

WindowManager.createMainWindow();
WindowManager.createSplashScreen();
WindowManager.createSystemTray(userPreferences?.language || "en");

WindowManager.mainWindow?.on("ready-to-show", () => {
autoUpdater.checkForUpdatesAndNotify();
});
});
});

Expand Down
3 changes: 2 additions & 1 deletion src/main/services/repack-tracker/online-fix.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,10 @@ export const getNewRepacksFromOnlineFix = async (
);

if (!newRepacks.length) return;
if (page === totalPages) return;

await savePage(newRepacks);

if (page === totalPages) return;

return getNewRepacksFromOnlineFix(existingRepacks, page + 1, cookieJar);
};
3 changes: 2 additions & 1 deletion src/main/services/repack-tracker/xatab.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,10 @@ export const getNewRepacksFromXatab = async (
);

if (!newRepacks.length) return;
if (page === totalPages) return;

await savePage(newRepacks);

if (page === totalPages) return;

return getNewRepacksFromXatab(existingRepacks, page + 1);
};
Loading

0 comments on commit 00d2d2e

Please sign in to comment.