mirror of
https://github.com/hydralauncher/hydra.git
synced 2026-01-09 12:56:19 +00:00
ci: updating build to support ws url
This commit is contained in:
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -48,6 +48,7 @@ jobs:
|
||||
MAIN_VITE_API_URL: ${{ vars.MAIN_VITE_STAGING_API_URL }}
|
||||
MAIN_VITE_AUTH_URL: ${{ vars.MAIN_VITE_STAGING_AUTH_URL }}
|
||||
MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_STAGING_CHECKOUT_URL }}
|
||||
MAIN_VITE_WS_URL: ${{ vars.MAIN_VITE_STAGING_WS_URL }}
|
||||
RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -63,6 +64,7 @@ jobs:
|
||||
MAIN_VITE_API_URL: ${{ vars.MAIN_VITE_STAGING_API_URL }}
|
||||
MAIN_VITE_AUTH_URL: ${{ vars.MAIN_VITE_STAGING_AUTH_URL }}
|
||||
MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_STAGING_CHECKOUT_URL }}
|
||||
MAIN_VITE_WS_URL: ${{ vars.MAIN_VITE_STAGING_WS_URL }}
|
||||
RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@@ -51,6 +51,7 @@ jobs:
|
||||
MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_CHECKOUT_URL }}
|
||||
RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
MAIN_VITE_WS_URL: ${{ vars.MAIN_VITE_STAGING_WS_URL }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||
RENDERER_VITE_SENTRY_DSN: ${{ vars.SENTRY_DSN }}
|
||||
@@ -66,6 +67,7 @@ jobs:
|
||||
MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_CHECKOUT_URL }}
|
||||
RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
MAIN_VITE_WS_URL: ${{ vars.MAIN_VITE_STAGING_WS_URL }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||
RENDERER_VITE_SENTRY_DSN: ${{ vars.SENTRY_DSN }}
|
||||
|
||||
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
[submodule "proto"]
|
||||
path = proto
|
||||
url = https://github.com/hydralauncher/hydra-protos.git
|
||||
174
README.md
174
README.md
@@ -1,5 +1,3 @@
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[<img src="./resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
@@ -7,180 +5,28 @@
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra is a game launcher with its own embedded bittorrent client.</strong>
|
||||
<strong>Hydra Launcher is an open-source gaming platform created to be the single tool that you need in order to manage your gaming library. Hydra is written in Node.js (Electron, React, Typescript) and Python.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](./docs/README.pt-BR.md)
|
||||
[](./README.md)
|
||||
[](./docs/README.ru.md)
|
||||
[](./docs/README.uk-UA.md)
|
||||
[](./docs/README.be.md)
|
||||
[](./docs/README.es.md)
|
||||
[](./docs/README.fr.md)
|
||||
[](./docs/README.de.md)
|
||||
[](./docs/README.it.md)
|
||||
[](./docs/README.cs.md)
|
||||
[](./docs/README.da.md)
|
||||
[](./docs/README.nb.md)
|
||||
[](./docs/README.et.md)
|
||||
[](./docs/README.tr.md)
|
||||
|
||||

|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Table of Contents](#table-of-contents)
|
||||
- [About](#about)
|
||||
- [Features](#features)
|
||||
- [Installation](#installation)
|
||||
- [Contributing](#-contributing)
|
||||
- [Join our Telegram](#-join-our-telegram)
|
||||
- [Fork and clone your repository](#fork-and-clone-your-repository)
|
||||
- [Ways you can contribute](#ways-you-can-contribute)
|
||||
- [Project Structure](#project-structure)
|
||||
- [Build from source](#build-from-source)
|
||||
- [Install Node.js](#install-nodejs)
|
||||
- [Install Yarn](#install-yarn)
|
||||
- [Install Node Dependencies](#install-node-dependencies)
|
||||
- [Install Python 3.9](#install-python-39)
|
||||
- [Install Python Dependencies](#install-python-dependencies)
|
||||
- [Environment variables](#environment-variables)
|
||||
- [Running](#running)
|
||||
- [Build](#build)
|
||||
- [Build the bittorrent client](#build-the-bittorrent-client)
|
||||
- [Build the Electron application](#build-the-electron-application)
|
||||
- [Contributors](#contributors)
|
||||
- [License](#license)
|
||||
|
||||
## About
|
||||
|
||||
**Hydra** is a **Game Launcher** with its own embedded **BitTorrent Client**.
|
||||
<br>
|
||||
The launcher is written in TypeScript (Electron) and Python, which handles the torrenting system by using libtorrent.
|
||||
|
||||
## Features
|
||||
|
||||
- Own embedded bittorrent client
|
||||
- How Long To Beat (HLTB) integration on game page
|
||||
- Downloads path customization
|
||||
- Windows and Linux support
|
||||
- Constantly updated
|
||||
- And more ...
|
||||
- Add games that you own to your library
|
||||
- Have a nice profile that shows what you are playing to your friends
|
||||
- Save your game progress in the cloud with Hydra Cloud
|
||||
- Unlock achievements
|
||||
- Navigate through a rich catalogue with a powerful suggestion algorithm
|
||||
- Discover new games that you haven't played before
|
||||
|
||||
## Installation
|
||||
## Build from source and contributing
|
||||
|
||||
Follow the steps below to install:
|
||||
|
||||
1. Download the latest version of Hydra from the [Releases](https://github.com/hydralauncher/hydra/releases/latest) page.
|
||||
- Download only .exe if you want to install Hydra on Windows.
|
||||
- Download .deb or .rpm or .zip if you want to install Hydra on Linux. (depends on your Linux distro)
|
||||
2. Run the downloaded file.
|
||||
3. Enjoy Hydra!
|
||||
|
||||
## <a name="contributing"> Contributing
|
||||
|
||||
### <a name="join-our-telegram"></a> Join our Telegram
|
||||
|
||||
We concentrate our discussions on our [Telegram](https://t.me/hydralauncher) channel.
|
||||
|
||||
### Fork and clone your repository
|
||||
|
||||
1. Fork the repository [(click here to fork now)](https://github.com/hydralauncher/hydra/fork)
|
||||
2. Clone your forked code `git clone https://github.com/your_username/hydra`
|
||||
3. Create a new branch
|
||||
4. Push your commits
|
||||
5. Submit a new Pull Request
|
||||
|
||||
### Ways you can contribute
|
||||
|
||||
- Translation: We want Hydra to be available to as many people as possible. Feel free to help translate to new languages or update and improve the ones that are already available on Hydra.
|
||||
- Code: Hydra is built with Typescript, Electron and a little bit of Python. If you want to contribute, join our [Telegram](https://t.me/hydralauncher)!
|
||||
|
||||
### Project Structure
|
||||
|
||||
- torrent-client: We use libtorrent, a Python library, to manage torrent downloads
|
||||
- src/renderer: the UI of the application
|
||||
- src/main: all the logic rests here.
|
||||
|
||||
## Build from source
|
||||
|
||||
### Install Node.js
|
||||
|
||||
Ensure you have Node.js installed on your machine. If not, download and install it from [nodejs.org](https://nodejs.org/).
|
||||
|
||||
### Install Yarn
|
||||
|
||||
Yarn is a package manager for Node.js. If you haven't installed Yarn yet, you can do so by following the instructions on [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/).
|
||||
|
||||
### Install Node Dependencies
|
||||
|
||||
Navigate to the project directory and install the Node dependencies using Yarn:
|
||||
|
||||
```bash
|
||||
cd hydra
|
||||
yarn
|
||||
```
|
||||
|
||||
### Install OpenSSL 1.1
|
||||
|
||||
[OpenSSL 1.1](https://slproweb.com/download/Win64OpenSSL-1_1_1w.exe) is required by libtorrent in Windows environments.
|
||||
|
||||
### Install Python 3.9
|
||||
|
||||
Ensure you have Python 3.9 installed on your machine. You can download and install it from [python.org](https://www.python.org/downloads/release/python-3913/).
|
||||
|
||||
### Install Python Dependencies
|
||||
|
||||
Install the required Python dependencies using pip:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Environment variables
|
||||
|
||||
You'll need an SteamGridDB API Key in order to fetch the game icons on installation.
|
||||
|
||||
Once you have it, you can copy or rename the `.env.example` file to `.env` and put it on`STEAMGRIDDB_API_KEY`.
|
||||
|
||||
## Running
|
||||
|
||||
Once you've got all things set up, you can run the following command to start both the Electron process and the bittorrent client:
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## Build
|
||||
|
||||
### Build the bittorrent client
|
||||
|
||||
Build the bittorrent client by using this command:
|
||||
|
||||
```bash
|
||||
python torrent-client/setup.py build
|
||||
```
|
||||
|
||||
### Build the Electron application
|
||||
|
||||
Build the Electron application by using this command:
|
||||
|
||||
On Windows:
|
||||
|
||||
```bash
|
||||
yarn build:win
|
||||
```
|
||||
|
||||
On Linux:
|
||||
|
||||
```bash
|
||||
yarn build:linux
|
||||
```
|
||||
Please, refer to our Documentation pages: [docs.hydralauncher.gg](https://docs.hydralauncher.gg/getting-started)
|
||||
|
||||
## Contributors
|
||||
|
||||
|
||||
@@ -1,191 +0,0 @@
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra - гэта гульнявы лаўнчар з уласным убудаваным кліентам BitTorrent.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](README.pt-BR.md)
|
||||
[](../README.md)
|
||||
[](README.ru.md)
|
||||
[](README.uk-UA.md)
|
||||
[](README.be.md)
|
||||
[](README.es.md)
|
||||
[](README.fr.md)
|
||||
[](README.de.md)
|
||||
[](README.it.md)
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## Змест
|
||||
|
||||
- [Змест](#змест)
|
||||
- [Апісанне](#апісанне)
|
||||
- [Асаблівасці](#асаблівасці)
|
||||
- [Усталёўка](#усталёўка)
|
||||
- [Уклад](#-уклад)
|
||||
- [Далучайцеся да нашага Telegram](#-далучайцеся-да-нашага-telegram)
|
||||
- [Форк і кланаванне рэпазітара](#форк-і-кланаванне-рэпазітара)
|
||||
- [Спосабы ўнесці свой уклад](#спосабы-ўнесці-свой-уклад)
|
||||
- [Структура праекту](#структура-праекту)
|
||||
- [Зборка з зыходнага коду](#зборка-з-зыходнага-коду)
|
||||
- [Усталёўка Node.js](#усталёўка-nodejs)
|
||||
- [Усталёўка Yarn](#усталёўка-yarn)
|
||||
- [Усталёўка залежнасцяў Node](#усталёўка-залежнасцяў-node)
|
||||
- [Усталёўка Python 3.9](#усталёўка-python-39)
|
||||
- [Усталёўка залежнасцяў Python](#усталёўка-залежнасцяў-python)
|
||||
- [Пераменныя асяроддзі](#пераменныя-асяроддзі)
|
||||
- [Запуск](#запуск)
|
||||
- [Зборка](#зборка)
|
||||
- [Зборка кліента BitTorrent](#зборка-кліента-bittorrent)
|
||||
- [Зборка прыкладання Electron](#зборка-прыкладання-electron)
|
||||
- [Удзельнікі](#удзельнікі)
|
||||
- [Ліцэнзія](#ліцэнзія)
|
||||
|
||||
## Апісанне
|
||||
|
||||
**Hydra** - гэта **гульнявы лаўнчар** з уласным убудаваным **кліентам BitTorrent** і **самастойным scraper`ом для рэпакаў**.
|
||||
<br>
|
||||
Лаўнчар напісаны на TypeScript (Electron) і Python, які кіруе сістэмай торэнтаў з дапамогай libtorrent.
|
||||
|
||||
## Асаблівасці
|
||||
|
||||
- Самастойны scraper рэпакаў сярод усіх найбольш надзейных вэб-сайтаў у [Megathread](https://www.reddit.com/r/Piracy/wiki/megathread/)
|
||||
- Убудаваны кліент BitTorrent
|
||||
- Інтэграцыя How Long To Beat (HLTB) на старонцы гульні
|
||||
- Настройка шляху сцягвання
|
||||
- Паведамленні аб абнаўленні спісу рэпакаў
|
||||
- Падтрымка Windows і Linux
|
||||
- Рэгулярныя абнаўленні
|
||||
- І многае іншае...
|
||||
|
||||
## Усталёўка
|
||||
|
||||
Каб усталяваць, выканайце наступныя крокі:
|
||||
|
||||
1. Спампуйце апошнюю версію Hydra з [старонкі рэлізаў](https://github.com/hydralauncher/hydra/releases/latest).
|
||||
- Загрузіце толькі .exe, калі жадаеце ўсталяваць Hydra на Windows.
|
||||
- Загрузіце .deb ці .rpm ці .zip, калі жадаеце ўсталяваць Hydra на Linux (у залежнасці ад вашага дыстрыбутыва Linux).
|
||||
2. Запусціце спампаваны файл.
|
||||
3. Атрымлівайце асалоду ад Hydra!
|
||||
|
||||
## <a name="contributing"> Уклад
|
||||
|
||||
### <a name="join-our-telegram"></a> Далучайцеся да нашага Telegram
|
||||
|
||||
Мы засяроджваем нашы абмеркаванні ў нашым канале [Telegram](https://t.me/hydralauncher).
|
||||
|
||||
### Форк і кланаванне рэпазітара
|
||||
|
||||
1. Форкніце рэпазітар [(націсніце тут, каб зрабіць форк зараз)](https://github.com/hydralauncher/hydra/fork)
|
||||
2. Склануйце свой форкнуты код `git clone https://github.com/ваше_имя_пользователя/hydra`
|
||||
3. Стварыце новую галіну
|
||||
4. Адпраўце свае каміты
|
||||
5. Адпраўце Pull Request
|
||||
|
||||
### Спосабы ўнесці свой уклад
|
||||
|
||||
- Пераклад: Мы хочам, каб Hydra была даступная як мага большай колькасці людзей. Не саромейцеся дапамагаць перакладаць на новыя мовы ці абнаўляць і паляпшаць тыя, якія ўжо даступныя ў Hydra.
|
||||
- Код: Hydra створаны з выкарыстаннем TypeScript, Electron і крыху Python. Калі хочаце ўнесці свой уклад, далучайцеся да нашага канала [Telegram](https://t.me/hydralauncher)!
|
||||
|
||||
### Структура праекту
|
||||
|
||||
- torrent-client: Мы выкарыстоўваем libtorrent, бібліятэку Python, для кіравання торэнт-загрузкамі.
|
||||
- src/renderer: Карыстацкі інтэрфейс прыкладання.
|
||||
- src/main: Увесь асноўны функцыянал тут.
|
||||
|
||||
## Зборка з зыходнага коду
|
||||
|
||||
### Усталёўка Node.js
|
||||
|
||||
Упэўніцеся, што ў вас усталяваны Node.js на вашым кампутары. Калі не, загрузіце і ўсталюйце яго з [nodejs.org](https://nodejs.org/).
|
||||
|
||||
### Усталёўка Yarn
|
||||
|
||||
Yarn - мэнэджэр пакетаў для Node.js. Калі вы яшчэ не ўсталявалі Yarn, зрабіце гэта, прытрымліваючыся інструкцыям на [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/).
|
||||
|
||||
### Усталёўка залежнасцяў Node
|
||||
|
||||
Перайдзіце ў каталог праекта і ўсталюйце залежнасці Node, выкарыстоўваючы Yarn:
|
||||
|
||||
```bash
|
||||
cd hydra
|
||||
yarn
|
||||
```
|
||||
|
||||
### Усталёўка Python 3.9
|
||||
|
||||
Упэўніцеся, што ў вас усталяваны Python 3.9 на вашым кампутары. Вы можаце загрузіць і ўсталяваць яго з [python.org](https://www.python.org/downloads/release/python-3913/).
|
||||
|
||||
### Усталёўка залежнасцяў Python
|
||||
|
||||
Усталюйце неабходныя залежнасці Python, выкарыстоўваючы pip:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Пераменныя асяроддзі
|
||||
|
||||
Вам спатрэбіцца ключ API SteamGridDB, каб атрымаць значкі гульняў пры ўсталёўкі.
|
||||
|
||||
Як толькі вы атрымаеце ключ, вы зможаце скапіяваць або пераназваць файл `.env.example` у `.env` і змясціць у яго `STEAMGRIDDB_API_KEY`.
|
||||
|
||||
## Запуск
|
||||
|
||||
Пасля таго як усё наладжана, вы можаце выканаць наступную каманду, каб запусціць працэс Electron і кліента BitTorrent:
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## Зборка
|
||||
|
||||
### Зборка кліента BitTorrent
|
||||
|
||||
Збярыце кліент BitTorrent з дапамогай гэтай каманды:
|
||||
|
||||
```bash
|
||||
python torrent-client/setup.py build
|
||||
```
|
||||
|
||||
### Зборка прыкладання Electron
|
||||
|
||||
Збярыце прыкладанне Electron, выкарыстоўваючы гэтую каманду:
|
||||
|
||||
На Windows:
|
||||
|
||||
```bash
|
||||
yarn build:win
|
||||
```
|
||||
|
||||
На Linux:
|
||||
|
||||
```bash
|
||||
yarn build:linux
|
||||
```
|
||||
|
||||
## Удзельнікі
|
||||
|
||||
<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
|
||||
</a>
|
||||
|
||||
## Ліцэнзія
|
||||
|
||||
Hydra ліцэнзавана ў адпаведнасці з [MIT License](LICENSE).
|
||||
@@ -1,189 +0,0 @@
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra je herní launcher s vlastním vestavěným Bittorrent klientem.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](README.pt-BR.md)
|
||||
[](../README.md)
|
||||
[](README.ru.md)
|
||||
[](README.uk-UA.md)
|
||||
[](README.be.md)
|
||||
[](README.es.md)
|
||||
[](README.fr.md)
|
||||
[](README.de.md)
|
||||
[](README.it.md)
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## Seznam obsahu
|
||||
|
||||
- [Seznam obsahu](#seznam-obsahu)
|
||||
- [O projektu](#o-projektu)
|
||||
- [Funkce](#funkce)
|
||||
- [Instalace](#instalace)
|
||||
- [Přispívání](#přispívání)
|
||||
- [Připoj se na náš telegram](#připoj-se-na-náš-telegram)
|
||||
- [Vytvořte fork a naklonujte svůj repozitář](#vytvořte-fork-a-naklonujte-svůj-repozitář)
|
||||
- [Způsoby jak můžete přispět](#způsoby-jak-můžete-přispět)
|
||||
- [Struktura projektu](#struktura-projektu)
|
||||
- [Sestavení ze zdroje](#sestavení-ze-zdroje)
|
||||
- [Instalace Node.js](#instalace-nodejs)
|
||||
- [Instalace Yarn](#instalace-yarn)
|
||||
- [Instalace Požadavků pro Node.js](#instalace-požadavků-pro-nodejs)
|
||||
- [Instalace Pythonu 3.9](#instalace-pythonu-39)
|
||||
- [Instalace Požadavků pro Python](#instalace-požadavků-pro-python)
|
||||
- [Proměnné prostředí](#proměnné-prostředí)
|
||||
- [Spuštění](#spuštění)
|
||||
- [Sestavení](#sestavení)
|
||||
- [Sestavení bittorrent klientu](#sestavení-bittorrent-klientu)
|
||||
- [Sestavení electron aplikace](#sestavení-electron-aplikace)
|
||||
- [Přispěvatelé](#přispěvatelé)
|
||||
- [Licence](#licence)
|
||||
|
||||
## O projektu
|
||||
|
||||
**Hydra** je **Herní Launcher** s jeho vlastním vestavěným **BitTorrent Klientem**.
|
||||
<br>
|
||||
Launcher je napsán v TypeScriptu (Electron) a Pythonu, který má na starosti torrentovací systém za pomocí knihovny libtorrent.
|
||||
|
||||
## Funkce
|
||||
|
||||
- Vlastní vestavěný BitTorrent klient
|
||||
- How Long To Beat (HLTB) integrace na stránce hry
|
||||
- Vlastní místa pro uložení hry
|
||||
- Windows a Linux podpora
|
||||
- Časté aktualizace
|
||||
- A další ...
|
||||
|
||||
## Instalace
|
||||
|
||||
Následuj kroky:
|
||||
|
||||
1. Stáhni nejnovější verzi Hydry ze stránky [Vydání](https://github.com/hydralauncher/hydra/releases/latest).
|
||||
- Stáhni .exe, pokud chceš instalovat Hydru na Windows.
|
||||
- Stáhni .deb nebo .rpm nebo .zip, pokud chceš instalovat Hydru na Linux. (záleží na tvé Linux distribuci)
|
||||
2. Spusť stažený instalační soubor.
|
||||
3. Užívej Hydru!
|
||||
|
||||
## <a name="contributing"> Přispívání
|
||||
|
||||
### <a name="join-our-telegram"></a> Připoj se na náš telegram
|
||||
|
||||
Vedeme diskuzi v našem [Telegramovém](https://t.me/hydralauncher) kanálu.
|
||||
|
||||
### Vytvořte fork a naklonujte svůj repozitář
|
||||
|
||||
1. Vytvoř fork repozitáře [(klikni sem pro vytvoření forku)](https://github.com/hydralauncher/hydra/fork)
|
||||
2. Naklonuj kód forku `git clone https://github.com/tvoje_jméno/hydra`
|
||||
3. Vytvoř nové odvětví (branch)
|
||||
4. Odešli svoje změny
|
||||
5. Odešli nový Pull Request
|
||||
|
||||
### Způsoby jak můžete přispět
|
||||
|
||||
- Překládání: Chceme, aby Hydra byla co nejvíce dostupná. Můžete přispět novým jazykem, nebo úpravou současného!
|
||||
- Kód: Hydra je postavena na Typescriptu, Electronu a trochou Pythonu. Pokud chceš přispět, připoj se na náš [Telegram](https://t.me/hydralauncher)!
|
||||
|
||||
### Struktura projektu
|
||||
|
||||
- torrent-client: Používáme libtorrent, Pythonovou knihovnu, pro správu torrent stahování
|
||||
- src/renderer: uživatelské rozhraní aplikace (UI)
|
||||
- src/main: celá logika projektu
|
||||
|
||||
## Sestavení ze zdroje
|
||||
|
||||
### Instalace Node.js
|
||||
|
||||
Ujistěte se, že máte Node.js nainstalován na svém zařízení. Pokud ne, stáhněte ho, a nainstalujte z [nodejs.org](https://nodejs.org/).
|
||||
|
||||
### Instalace Yarn
|
||||
|
||||
Yarn je balíčkový správce pro Node.js. Pokud ještě nemáte yarn, můžete ho stáhnout za pomoci pokynů na [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/).
|
||||
|
||||
### Instalace Požadavků pro Node.js
|
||||
|
||||
Jděte do složky projektu, otevřte v ní konzole a nainstalujte požadavky pro Node pomocí Yarn:
|
||||
|
||||
```bash
|
||||
cd hydra
|
||||
yarn
|
||||
```
|
||||
|
||||
### Instalace Pythonu 3.9
|
||||
|
||||
Ujistěte se, že máte Python 3.9 nainstalován na svém zařízení. Můžete ho stáhnout z [python.org](https://www.python.org/downloads/release/python-3913/).
|
||||
|
||||
### Instalace Požadavků pro Python
|
||||
|
||||
Nainstalujte požadavky pro Python za pomoci pip:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Proměnné prostředí
|
||||
|
||||
Budete potřebovat SteamGridDB API klíč, abyste mohli načítat ikony u her.
|
||||
|
||||
Jakmile ho máte, můžete zkopírovat, nebo přejmenovat `.env.example` soubor na `.env` a dát ho do `STEAMGRIDDB_API_KEY`.
|
||||
|
||||
## Spuštění
|
||||
|
||||
Jakmile máte vše nastaveno, můžete spustit jak Electron proces tak bittorrent client:
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## Sestavení
|
||||
|
||||
### Sestavení bittorrent klientu
|
||||
|
||||
Sestavit bittorrent klient můžete pomocí:
|
||||
|
||||
```bash
|
||||
python torrent-client/setup.py build
|
||||
```
|
||||
|
||||
### Sestavení electron aplikace
|
||||
|
||||
Sestavit Electron aplikaci můžete pomocí následujících kroků:
|
||||
|
||||
Na Windows:
|
||||
|
||||
```bash
|
||||
yarn build:win
|
||||
```
|
||||
|
||||
Na Linux:
|
||||
|
||||
```bash
|
||||
yarn build:linux
|
||||
```
|
||||
|
||||
## Přispěvatelé
|
||||
|
||||
<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
|
||||
</a>
|
||||
|
||||
## Licence
|
||||
|
||||
Hydra je licencována pod [MIT Licencí](LICENSE).
|
||||
@@ -1,188 +0,0 @@
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra er en spil launcher med sin egen indbyggede bittorrent klient.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](README.pt-BR.md)
|
||||
[](../README.md)
|
||||
[](README.ru.md)
|
||||
[](README.uk-UA.md)
|
||||
[](README.be.md)
|
||||
[](README.es.md)
|
||||
[](README.fr.md)
|
||||
[](README.de.md)
|
||||
[](README.it.md)
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## Indholdsfortegnelse
|
||||
|
||||
- [Indholdsfortegnelse](#indholdsfortegnelse)
|
||||
- [Om](#om)
|
||||
- [Funktioner](#funktioner)
|
||||
- [Installation](#installation)
|
||||
- [Bidrag](#-bidrag)
|
||||
- [Bliv medlem af vores Telegram kanal](#-join-our-telegram)
|
||||
- [Fork og klon dit repo](#fork-and-clone-your-repository)
|
||||
- [Måder du kan bidrage](#ways-you-can-contribute)
|
||||
- [Projekt Struktur](#project-structure)
|
||||
- [Byg fra kildekode](#build-from-source)
|
||||
- [Installér Node.js](#install-nodejs)
|
||||
- [Installér Yarn](#install-yarn)
|
||||
- [Installér Node Afhængigheder](#install-node-dependencies)
|
||||
- [Installér Python 3.9](#install-python-39)
|
||||
- [Installér Python Afhængigheder](#install-python-dependencies)
|
||||
- [Miljøvariabler](#environment-variables)
|
||||
- [Køre](#running)
|
||||
- [Bygge](#build)
|
||||
- [Bygge bittorrent klienten](#build-the-bittorrent-client)
|
||||
- [Bygge Electron applikationen](#build-the-electron-application)
|
||||
- [Bidragere](#contributors)
|
||||
- [Licens](#license)
|
||||
|
||||
## Om
|
||||
|
||||
**Hydra** er en **Spil Launcher** med sin egen indbyggede **BitTorrent Klient**.
|
||||
<br>
|
||||
Launcheren er skrevet i TypeScript (Electron) og Python, som håndterer torrenting system ved brug af libtorrent.
|
||||
|
||||
## Funktioner
|
||||
|
||||
- Sin egen indbyggede bittorrent klient
|
||||
- How Long To Beat (HLTB) integration på spil siden
|
||||
- Downloadsti tilpasning
|
||||
- Windows og Linux understøttelse
|
||||
- Konstant opdateret
|
||||
- Og mere ...
|
||||
|
||||
## Installation
|
||||
|
||||
Følg trinene her under for at installere:
|
||||
|
||||
1. Download den seneste version af Hydra fra [Releases](https://github.com/hydralauncher/hydra/releases/latest) siden.
|
||||
- Download kun .exe hvis du vil installere Hydra på Windows.
|
||||
- Download .deb, .rpm eller .zip hvis du vil installere Hydra på Linux. (afhænger af din Linux distro)
|
||||
2. Kør den downloadede fil.
|
||||
3. Nyd Hydra!
|
||||
|
||||
## <a name="bidrag"> Bidrag
|
||||
|
||||
### <a name="join-our-telegram"></a> Bliv medlem af vores Telegram kanal
|
||||
|
||||
Vi holder vores diskusioner i vores [Telegram](https://t.me/hydralauncher) kanal.
|
||||
|
||||
### Fork og klon dit repo
|
||||
|
||||
1. Fork repoet [(klik her for at forke nu)](https://github.com/hydralauncher/hydra/fork)
|
||||
2. Klon din forkede kode `git clone https://github.com/dit_brugernavn/hydra`
|
||||
3. Lav en ny branch
|
||||
4. Skub dine commits
|
||||
5. Indsend en ny Pull Request
|
||||
|
||||
### Måder du kan bidrage
|
||||
|
||||
- Oversættelse: Vi vil gerne have at Hydra er tilgængeligt for så mange folk som overhovedet muligt. Du er velkommen til at hjælpe med at oversætte til nye sprog eller at opdatere og forbedre de sprog som allerede er tilgængelige i Hydra.
|
||||
- Kode: Hydra er lavet med Typescript, Electron og en lille smule Python. Hvis du har lyst til at bidrage, kan du blive medlem af vores [Telegram](https://t.me/hydralauncher) kanal! (Alt kommunikation foregår hovedsageligt på Engelsk, Brasiliansk eller Russisk)
|
||||
|
||||
### Projekt struktur
|
||||
|
||||
- torrent-client: Vi bruger libtorrent, et Python bibliotek, til at administrere torrent downloads
|
||||
- src/renderer: UI'en i applikationen
|
||||
- src/main: her har vi al logikken
|
||||
|
||||
## Byg fra kildekode
|
||||
|
||||
### Installér Node.js
|
||||
|
||||
Vær sikker på at du har Node.js installeret på din maskine. Hvis ikke, kan du downloade og installere det fra [nodejs.org](https://nodejs.org/).
|
||||
|
||||
### Installér Yarn
|
||||
|
||||
Yarn er et pakkehåndteringsprogram til Node.js. Hvis du ikke har installeret Yarn endnu, så kan du gøre det ved at følge instruktionerne på [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/).
|
||||
|
||||
### Installér Node Afhængigheder
|
||||
|
||||
Navigér til projekt mappen og installér Node afhængighederne ved bruge af Yarn:
|
||||
|
||||
```bash
|
||||
cd hydra
|
||||
yarn
|
||||
```
|
||||
|
||||
### Installér Python 3.9
|
||||
|
||||
Vær sikker på at du har Python 3.9 installeret på din maskine. Du kan downloade og installere det her: [python.org](https://www.python.org/downloads/release/python-3913/).
|
||||
|
||||
### Installér Python Afhængigheder
|
||||
|
||||
Installér de påkrævede Python afhængigheder ved brug af pip:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Miljøvariabler
|
||||
|
||||
Du får brug for en SteamGridDB API nøgle for at kunne hente spil ikonerne under installationen.
|
||||
|
||||
Når du har det, kan du kopiere og omdøbe `.env.example` filen til `.env` og indsætte nøglen som `STEAMGRIDDB_API_KEY`.
|
||||
|
||||
## Køre
|
||||
|
||||
Når alt er sat op, kan du køre den følgende kommando for at starte både Electron processen og bittorrent klienten:
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## Bygge
|
||||
|
||||
### Byg bittorrent klienten
|
||||
|
||||
Byg bittorrent klienten ved brug af følgende kommando:
|
||||
|
||||
```bash
|
||||
python torrent-client/setup.py build
|
||||
```
|
||||
|
||||
### Byg Electron applikationen
|
||||
|
||||
Byg Electron applikationen ved brug af følgende kommando:
|
||||
|
||||
På Windows:
|
||||
|
||||
```bash
|
||||
yarn build:win
|
||||
```
|
||||
|
||||
På Linux:
|
||||
|
||||
```bash
|
||||
yarn build:linux
|
||||
```
|
||||
|
||||
## Bidragere
|
||||
|
||||
<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
|
||||
</a>
|
||||
|
||||
## Licens
|
||||
|
||||
Hydra benytter sig af [MIT Licensen](LICENSE).
|
||||
@@ -1,187 +0,0 @@
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra ist ein Launcher für Spiele mit einem eigenen eingebetteten BitTorrent-Client.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](../README.md)
|
||||
[](README.be.md)
|
||||
[](README.pl.md)
|
||||
[](README.pt-BR.md)
|
||||
[](README.ru.md)
|
||||
[](README.uk-UA.md)
|
||||
[](README.es.md)
|
||||
[](README.fr.md)
|
||||
[](README.de.md)
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## Inhaltsverzeichnis
|
||||
|
||||
- [Über Hydra](#über-hydra)
|
||||
- [Eigenschaften](#eigenschaften)
|
||||
- [Installation](#installation)
|
||||
- [Mitwirken](#mitwirken)
|
||||
- [Tritt uns auf Telegram bei](#tritt-uns-auf-telegram-bei)
|
||||
- [Forke und klone dein Repo](#forke-und-klone-dein-repo)
|
||||
- [Wie du mitwirken kannst](#wie-du-mitwirken-kannst)
|
||||
- [Projektstruktur](#projektstruktur)
|
||||
- [Den Quellcode kompilieren](#den-quellcode-kompilieren)
|
||||
- [Installiere Node.js](#installiere-nodejs)
|
||||
- [Installiere Yarn](#installiere-yarn)
|
||||
- [Installiere Node-Abhängigkeiten](#installiere-node-abhängigkeiten)
|
||||
- [Installiere Python 3.9](#installiere-python-39)
|
||||
- [Installiere Python-Abhängigkeiten](#installiere-python-abhängigkeiten)
|
||||
- [Umgebungsvariablen](#umgebungsvariablen)
|
||||
- [Ausführung](#ausführung)
|
||||
- [Kompilation](#kompilation)
|
||||
- [Kompiliere den BitTorrent-Client](#kompiliere-den-bittorrent-client)
|
||||
- [Kompiliere die Electron-Applikation](#kompiliere-die-electron-applikation)
|
||||
- [Mitwirkende](#mitwirkende)
|
||||
|
||||
## Über Hydra
|
||||
|
||||
**Hydra** ist ein **Launcher für Spiele** mit einem eigenen eingebetteten **BitTorrent-Client**.
|
||||
<br>
|
||||
Der Launcher ist in TypeScript (Electron) und Python, womit das Torrentingsystem durch Einsatz von libtorrent geregelt ist, geschrieben.
|
||||
|
||||
## Eigenschaften
|
||||
|
||||
- Eigener eingebetteter BitTorrent-Client
|
||||
- How Long to Beat (HLTB) Integration auf der Spielseite
|
||||
- Anpassbarkeit des Downloadverzeichnisses
|
||||
- Unterstützung von Windows und Linux
|
||||
- Regelmäßig aktualisiert
|
||||
- Und mehr ...
|
||||
|
||||
## Installation
|
||||
|
||||
Die folgenden Schritte beschreiben den Installationsprozess:
|
||||
|
||||
1. Lade die neueste Version von Hydra von der [Releases](https://github.com/hydralauncher/hydra/releases/latest) Seite herunter.
|
||||
- Für die Installation von Hydra auf Windows, wähle die .exe Datei.
|
||||
- Für die Installation von Hydra auf Linux, wähle die .deb, .rpm oder .zip Datei. (Abhängig von deiner Linux-Distribution)
|
||||
2. Führe die heruntergeladene Datei aus.
|
||||
3. Genieße Hydra!
|
||||
|
||||
## Mitwirken
|
||||
|
||||
### Tritt uns auf Telegram bei
|
||||
|
||||
Wir konzentrieren unsere Diskussionen in unserem [Telegram](https://t.me/hydralauncher) Kanal.
|
||||
|
||||
### Forke und klone dein Repo
|
||||
|
||||
1. Forke das Repo [(Klicke hier, um direkt zu forken)](https://github.com/hydralauncher/hydra/fork)
|
||||
2. Klone deinen geforketen Code `git clone https://github.com/dein_nutzername/hydra`
|
||||
3. Erstelle einen neuen Branch
|
||||
4. Pushe deine Commits
|
||||
5. Stelle eine neue Pull-Anfrage
|
||||
|
||||
### Wie du mitwirken kannst
|
||||
|
||||
- Übersetzung: Wir wollen Hydra so vielen Menschen wie möglich zugänglich machen. Gerne kannst du uns helfen neue Sprachen zu übersetzen oder für Hydra bereits verfügbare Sprachen zu aktualisieren und verbessern.
|
||||
- Code: Hydra ist mit TypeScript, Electron und etwas Python gebaut. Wenn du mitwirken möchtest, tritt unserem [Telegram](https://t.me/hydralauncher) bei!
|
||||
|
||||
### Projektstruktur
|
||||
|
||||
- torrent-client: Wir verwenden die Python-Bibliothek libtorrent zur Verwaltung von Torrent-Downloads.
|
||||
- src/renderer: die UI der Applikation.
|
||||
- src/main: sämtliche Logik liegt hier.
|
||||
|
||||
## Den Quellcode kompilieren
|
||||
|
||||
### Installiere Node.js
|
||||
|
||||
Stelle sicher, dass du Node.js auf deinem System installiert hast. Falls nicht, installiere es von [nodejs.org](https://nodejs.org/).
|
||||
|
||||
### Installiere Yarn
|
||||
|
||||
Yarn ist ein Packetmanager für Node.js. Sollte er dir fehlen, installiere ihn mithilfe der Anleitung auf [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/).
|
||||
|
||||
### Installiere Node-Abhängigkeiten
|
||||
|
||||
Navigiere zum Projektverzeichnis und installiere die Node-Abhängigkeiten mit Yarn:
|
||||
|
||||
```bash
|
||||
cd hydra
|
||||
yarn
|
||||
```
|
||||
|
||||
### Installiere Python 3.9
|
||||
|
||||
Stelle sicher, dass du Python 3.9 auf deinem System installiert hast. Ansonsten kannst du es von [python.org](https://www.python.org/downloads/release/python-3913/) herunterladen und installieren.
|
||||
|
||||
### Installiere Python-Abhängigkeiten
|
||||
|
||||
Installiere die benötigten Python-Abhängigkeiten mit pip:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Umgebungsvariablen
|
||||
|
||||
Du wirst einen SteamGridDB API Schlüssel benötigen, um die Spielicons bei Installation abzurufen.
|
||||
|
||||
Sobald du einen hast, kannst du die .env.example Datei zu .env kopieren oder umbenennen und den Schlüssel bei STEAMGRIDDB_API_KEY einfügen.
|
||||
|
||||
## Ausführung
|
||||
|
||||
Sobald du alles eingerichtet hast, kannst du den folgenden Befehl nutzen, um sowohl den Electron-Prozess als auch den BitTorrent-Client zu starten:
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## Kompilation
|
||||
|
||||
### Kompiliere den BitTorrent-Client
|
||||
|
||||
Kompiliere den BitTorrent-Client mit folgendem Befehl:
|
||||
|
||||
```bash
|
||||
python torrent-client/setup.py build
|
||||
```
|
||||
|
||||
### Kompiliere die Electron-Applikation
|
||||
|
||||
Kompiliere die Electron-Applikation mit folgendem Befehl:
|
||||
|
||||
Auf Windows:
|
||||
|
||||
```bash
|
||||
yarn build:win
|
||||
```
|
||||
|
||||
Auf Linux:
|
||||
|
||||
```bash
|
||||
yarn build:linux
|
||||
```
|
||||
|
||||
## Mitwirkende
|
||||
|
||||
<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
|
||||
</a>
|
||||
|
||||
## Lizenz
|
||||
|
||||
Hydra ist unter der [MIT Lizenz](LICENSE) lizensiert.
|
||||
@@ -1,189 +0,0 @@
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra es un launcher de juegos con su propio cliente de bittorrent.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](README.pt-BR.md)
|
||||
[](../README.md)
|
||||
[](README.ru.md)
|
||||
[](README.uk-UA.md)
|
||||
[](README.be.md)
|
||||
[](README.es.md)
|
||||
[](README.fr.md)
|
||||
[](README.de.md)
|
||||
[](README.it.md)
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## Tabla de Contenidos
|
||||
|
||||
- [Tabla de Contenidos](#tabla-de-contenidos)
|
||||
- [Acerca de](#acerca-de)
|
||||
- [Caracteristicas](#caracteristicas)
|
||||
- [Instalacion](#instalacion)
|
||||
- [Contribuir](#-contribuir)
|
||||
- [Unete 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)
|
||||
- [Ejecucion](#ejecucion)
|
||||
- [Compilacion](#compilacion)
|
||||
- [Compilar el cliente de bittorrent](#compilar-el-cliente-de-bittorrent)
|
||||
- [Compilar la aplicacion Electron](#compilar-la-aplicacion-electron)
|
||||
- [Colaboradores](#colaboradores)
|
||||
- [Licencia](#licencia)
|
||||
|
||||
## Acerca de
|
||||
|
||||
**Hydra** es un **Launcher de Juegos** con su propio **Cliente Bittorrent**.
|
||||
<br>
|
||||
El launcher está escrito en TypeScript (Electron) y Python, el cuál se encarga del sistema de torrent usando libtorrent.
|
||||
|
||||
## Caracteristicas
|
||||
|
||||
- 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
|
||||
- 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. Realiza 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.
|
||||
|
||||
Una vez que los tengas, puedes copiar o renombrar el archivo `.env.example` cómo `.env` y colocarlo en `STEAMGRIDDB_API_KEY`.
|
||||
|
||||
## 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).
|
||||
@@ -1,187 +0,0 @@
|
||||
<div align="center">
|
||||
|
||||
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra on mängulauncher oma sisseehitatud bittorrenti kliendiga.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](README.pt-BR.md)
|
||||
[](../README.md)
|
||||
[](README.ru.md)
|
||||
[](README.uk-UA.md)
|
||||
[](README.be.md)
|
||||
[](README.es.md)
|
||||
[](README.fr.md)
|
||||
[](README.de.md)
|
||||
[](README.it.md)
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## Sisukord
|
||||
|
||||
- [Sisukord](#sisukord)
|
||||
- [Tutvustus](#tutvustus)
|
||||
- [Funktsioonid](#funktsioonid)
|
||||
- [Paigaldamine](#paigaldamine)
|
||||
- [Panustamine](#panustamine)
|
||||
- [Liitu meie Telegramiga](#liitu-meie-telegramiga)
|
||||
- [Forki ja klooni oma repositoorium](#forki-ja-klooni-oma-repositoorium)
|
||||
- [Viisid panustamiseks](#viisid-panustamiseks)
|
||||
- [Projekti Struktuur](#projekti-struktuur)
|
||||
- [Lähtekoodi kompileerimine](#lähtekoodi-kompileerimine)
|
||||
- [Node.js paigaldamine](#nodejs-paigaldamine)
|
||||
- [Yarn'i paigaldamine](#yarni-paigaldamine)
|
||||
- [Node sõltuvuste paigaldamine](#node-sõltuvuste-paigaldamine)
|
||||
- [Python 3.9 paigaldamine](#python-39-paigaldamine)
|
||||
- [Python'i sõltuvuste paigaldamine](#pythoni-sõltuvuste-paigaldamine)
|
||||
- [Keskkonna muutujad](#keskkonna-muutujad)
|
||||
- [Käivitamine](#käivitamine)
|
||||
- [Kompileerimine](#kompileerimine)
|
||||
- [Bittorrenti kliendi kompileerimine](#bittorrenti-kliendi-kompileerimine)
|
||||
- [Electron rakenduse kompileerimine](#electron-rakenduse-kompileerimine)
|
||||
- [Panustajad](#panustajad)
|
||||
- [Litsents](#litsents)
|
||||
|
||||
## Tutvustus
|
||||
|
||||
**Hydra** on **Mängulauncher** oma sisseehitatud **BitTorrent Kliendiga**.
|
||||
<br>
|
||||
Launcher on kirjutatud TypeScriptis (Electron) ja Pythonis, mis haldab torrentide süsteemi kasutades libtorrenti.
|
||||
|
||||
## Funktsioonid
|
||||
|
||||
- Sisseehitatud bittorrenti klient
|
||||
- How Long To Beat (HLTB) integratsioon mängu lehel
|
||||
- Allalaadimiste kausta kohandamine
|
||||
- Windowsi ja Linuxi tugi
|
||||
- Pidevad uuendused
|
||||
- Ja palju muud ...
|
||||
|
||||
## Paigaldamine
|
||||
|
||||
Järgi paigaldamiseks järgmisi samme:
|
||||
|
||||
1. Lae alla Hydra uusim versioon [Releases](https://github.com/hydralauncher/hydra/releases/latest) lehelt.
|
||||
- Lae alla ainult .exe fail, kui soovid paigaldada Hydrat Windowsile.
|
||||
- Lae alla .deb või .rpm või .zip fail, kui soovid paigaldada Hydrat Linuxile. (sõltub sinu Linuxi distrost)
|
||||
2. Käivita allalaaditud fail.
|
||||
3. Naudi Hydrat!
|
||||
|
||||
## Panustamine
|
||||
|
||||
### Liitu meie Telegramiga
|
||||
|
||||
Me keskendume aruteludele meie [Telegrami](https://t.me/hydralauncher) kanalis.
|
||||
|
||||
### Forki ja klooni oma repositoorium
|
||||
|
||||
1. Forki repositoorium [(klõpsa siia forkimiseks)](https://github.com/hydralauncher/hydra/fork)
|
||||
2. Klooni oma forkitud kood `git clone https://github.com/your_username/hydra`
|
||||
3. Loo uus haru
|
||||
4. Pushi oma commitid
|
||||
5. Esita uus Pull Request
|
||||
|
||||
### Viisid panustamiseks
|
||||
|
||||
- Tõlkimine: Me soovime, et Hydra oleks kättesaadav võimalikult paljudele inimestele. Võid aidata tõlkida uutesse keeltesse või uuendada ja parandada juba olemasolevaid tõlkeid Hydras.
|
||||
- Kood: Hydra on ehitatud kasutades TypeScripti, Electroni ja natuke Pythonit. Kui soovid panustada, liitu meie [Telegramiga](https://t.me/hydralauncher)!
|
||||
|
||||
### Projekti Struktuur
|
||||
|
||||
- torrent-client: Kasutame libtorrenti, Pythoni teeki, torrentide allalaadimiste haldamiseks
|
||||
- src/renderer: rakenduse kasutajaliides
|
||||
- src/main: kogu loogika asub siin.
|
||||
|
||||
## Lähtekoodi kompileerimine
|
||||
|
||||
### Node.js paigaldamine
|
||||
|
||||
Veendu, et Node.js on sinu arvutisse paigaldatud. Kui ei ole, lae alla ja paigalda see [nodejs.org](https://nodejs.org/) lehelt.
|
||||
|
||||
### Yarn'i paigaldamine
|
||||
|
||||
Yarn on Node.js paketihaldur. Kui sa pole Yarni veel paigaldanud, saad seda teha järgides juhiseid [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/) lehel.
|
||||
|
||||
### Node sõltuvuste paigaldamine
|
||||
|
||||
Liigu projekti kausta ja paigalda Node sõltuvused kasutades Yarni:
|
||||
|
||||
```bash
|
||||
cd hydra
|
||||
yarn
|
||||
```
|
||||
|
||||
### Python 3.9 paigaldamine
|
||||
|
||||
Veendu, et Python 3.9 on sinu arvutisse paigaldatud. Saad selle alla laadida ja paigaldada [python.org](https://www.python.org/downloads/release/python-3913/) lehelt.
|
||||
|
||||
### Python'i sõltuvuste paigaldamine
|
||||
|
||||
Paigalda vajalikud Pythoni sõltuvused kasutades pip'i:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Keskkonna muutujad
|
||||
|
||||
Sul on vaja SteamGridDB API võtit, et laadida alla mängude ikoone paigaldamisel.
|
||||
|
||||
Kui sul on see olemas, saad kopeerida või ümber nimetada `.env.example` faili `.env` failiks ja lisada sinna `STEAMGRIDDB_API_KEY`.
|
||||
|
||||
## Käivitamine
|
||||
|
||||
Kui kõik on seadistatud, saad käivitada järgmise käsu, et käivitada nii Electroni protsess kui ka bittorrenti klient:
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## Kompileerimine
|
||||
|
||||
### Bittorrenti kliendi kompileerimine
|
||||
|
||||
Kompileeri bittorrenti klient kasutades järgmist käsku:
|
||||
|
||||
```bash
|
||||
python torrent-client/setup.py build
|
||||
```
|
||||
|
||||
### Electron rakenduse kompileerimine
|
||||
|
||||
Kompileeri Electron rakendus kasutades järgmist käsku:
|
||||
|
||||
Windowsil:
|
||||
|
||||
```bash
|
||||
yarn build:win
|
||||
```
|
||||
|
||||
Linuxil:
|
||||
|
||||
```bash
|
||||
yarn build:linux
|
||||
```
|
||||
|
||||
## Panustajad
|
||||
|
||||
<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
|
||||
</a>
|
||||
|
||||
## Litsents
|
||||
|
||||
Hydra on litsentseeritud [MIT Litsentsi](LICENSE) all.
|
||||
@@ -1,189 +0,0 @@
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra est un lanceur de jeux avec son propre client bittorrent intégré.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](README.pt-BR.md)
|
||||
[](../README.md)
|
||||
[](README.ru.md)
|
||||
[](README.uk-UA.md)
|
||||
[](README.be.md)
|
||||
[](README.es.md)
|
||||
[](README.fr.md)
|
||||
[](README.de.md)
|
||||
[](README.it.md)
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## Table des Matières
|
||||
|
||||
- [Table des Matières](#table-des-matières)
|
||||
- [À propos](#à-propos)
|
||||
- [Fonctionnalités](#fonctionnalités)
|
||||
- [Installation](#installation)
|
||||
- [Contribuer](#contribuer)
|
||||
- [Rejoindre notre Telegram](#rejoindre-notre-telegram)
|
||||
- [Fork et Cloner votre dépôt](#fork-et-cloner-votre-dépôt)
|
||||
- [Manières de contribuer](#manières-de-contribuer)
|
||||
- [Structure du projet](#structure-du-projet)
|
||||
- [Compiler depuis les sources](#compiler-depuis-les-sources)
|
||||
- [Installer Node.js](#installer-nodejs)
|
||||
- [Installer Yarn](#installer-yarn)
|
||||
- [Installer les dépendances Node](#installer-les-dépendances-node)
|
||||
- [Installer Python 3.9](#installer-python-39)
|
||||
- [Installer les dépendances Python](#installer-les-dépendances-python)
|
||||
- [Variables d'environnement](#variables-denvironnement)
|
||||
- [Lancement](#lancement)
|
||||
- [Compilation](#compilation)
|
||||
- [Compiler le client bittorrent](#compiler-le-client-bittorrent)
|
||||
- [Compiler l'application Electron](#compiler-lapplication-electron)
|
||||
- [Contributeurs](#contributeurs)
|
||||
- [License](#license)
|
||||
|
||||
## À propos
|
||||
|
||||
**Hydra** est un **lanceur de jeux** avec son propre **client BitTorrent** intégré.
|
||||
<br>
|
||||
Le lanceur est écrit en TypeScript (Electron) et Python, qui gère le système de torrent en utilisant libtorrent.
|
||||
|
||||
## Fonctionnalités
|
||||
|
||||
- Client bittorrent intégré
|
||||
- Intégration How Long To Beat (HLTB) sur la page du jeu
|
||||
- Personnalisation des chemins de téléchargement
|
||||
- Support pour Windows et Linux
|
||||
- Constamment mis à jour
|
||||
- Et plus encore ...
|
||||
|
||||
## Installation
|
||||
|
||||
Suivez les étapes ci-dessous pour installer :
|
||||
|
||||
1. Téléchargez la dernière version de Hydra depuis la page [Releases](https://github.com/hydralauncher/hydra/releases/latest).
|
||||
- Téléchargez uniquement le .exe si vous voulez installer Hydra sur Windows.
|
||||
- Téléchargez .deb ou .rpm ou .zip si vous voulez installer Hydra sur Linux (cela dépend de votre distribution Linux).
|
||||
2. Exécutez le fichier téléchargé.
|
||||
3. Profitez de Hydra !
|
||||
|
||||
## Contribuer
|
||||
|
||||
### Rejoindre notre Telegram
|
||||
|
||||
Nous concentrons nos discussions sur notre [Telegram](https://t.me/hydralauncher).
|
||||
|
||||
### Fork et Cloner votre dépôt
|
||||
|
||||
1. Forkez le dépôt [(cliquez ici pour forker maintenant)](https://github.com/hydralauncher/hydra/fork)
|
||||
2. Clonez votre code forké `git clone https://github.com/votre_nom_utilisateur/hydra`
|
||||
3. Créez une nouvelle branche
|
||||
4. Pushez vos commits
|
||||
5. Créez une nouvelle Pull Request
|
||||
|
||||
### Manières de contribuer
|
||||
|
||||
- Traduction : Nous voulons que Hydra soit disponible pour le plus grand nombre de personnes possible. N'hésitez pas à aider à traduire dans de nouvelles langues ou à mettre à jour et améliorer celles qui sont déjà disponibles sur Hydra.
|
||||
- Code : Hydra est construit avec Typescript, Electron et un peu de Python. Si vous voulez contribuer, rejoignez notre [Telegram](https://t.me/hydralauncher) !
|
||||
|
||||
### Structure du projet
|
||||
|
||||
- torrent-client : Nous utilisons libtorrent, une bibliothèque Python, pour gérer les téléchargements torrent.
|
||||
- src/renderer : l'interface utilisateur de l'application.
|
||||
- src/main : toute la logique repose ici.
|
||||
|
||||
## Compiler depuis les sources
|
||||
|
||||
### Installer Node.js
|
||||
|
||||
Assurez-vous que Node.js est installé sur votre machine. Sinon, téléchargez et installez-le depuis [nodejs.org](https://nodejs.org/).
|
||||
|
||||
### Installer Yarn
|
||||
|
||||
Yarn est un gestionnaire de paquets pour Node.js. Si vous n'avez pas encore installé Yarn, vous pouvez le faire en suivant les instructions sur [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/).
|
||||
|
||||
### Installer les dépendances Node
|
||||
|
||||
Naviguez vers le répertoire du projet et installez les dépendances Node en utilisant Yarn :
|
||||
|
||||
```bash
|
||||
cd hydra
|
||||
yarn
|
||||
```
|
||||
|
||||
### Installer Python 3.9
|
||||
|
||||
Assurez-vous que Python 3.9 est installé sur votre machine. Vous pouvez le télécharger et l'installer depuis [python.org](https://www.python.org/downloads/release/python-3913/).
|
||||
|
||||
### Installer les dépendances Python
|
||||
|
||||
Installez les dépendances Python requises en utilisant pip :
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Variables d'environnement
|
||||
|
||||
Vous aurez besoin d'une clé API SteamGridDB pour récupérer les icônes de jeux lors de l'installation.
|
||||
|
||||
Une fois que vous l'avez, vous pouvez copier ou renommer le fichier `.env.example` en `.env` et y mettre `STEAMGRIDDB_API_KEY`.
|
||||
|
||||
## Lancement
|
||||
|
||||
Une fois que vous avez tout configuré, vous pouvez exécuter la commande suivante pour démarrer à la fois le processus Electron et le client bittorrent :
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## Compilation
|
||||
|
||||
### Compiler le client bittorrent
|
||||
|
||||
Compilez le client bittorrent en utilisant cette commande :
|
||||
|
||||
```bash
|
||||
python torrent-client/setup.py build
|
||||
```
|
||||
|
||||
### Compiler l'application Electron
|
||||
|
||||
Compilez l'application Electron en utilisant cette commande :
|
||||
|
||||
Sur Windows :
|
||||
|
||||
```bash
|
||||
yarn build:win
|
||||
```
|
||||
|
||||
Sur Linux :
|
||||
|
||||
```bash
|
||||
yarn build:linux
|
||||
```
|
||||
|
||||
## Contributeurs
|
||||
|
||||
<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
|
||||
</a>
|
||||
|
||||
## License
|
||||
|
||||
Hydra est sous [License MIT](LICENSE).
|
||||
@@ -1,189 +0,0 @@
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[<img src="./resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra è un game launcher con il proprio client bittorrent.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](README.pt-BR.md)
|
||||
[](README.md)
|
||||
[](README.ru.md)
|
||||
[](README.uk-UA.md)
|
||||
[](README.be.md)
|
||||
[](README.es.md)
|
||||
[](README.fr.md)
|
||||
[](README.de.md)
|
||||
[](README.it.md)
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Table of Contents](#table-of-contents)
|
||||
- [A proposito](#a-proposito)
|
||||
- [Caratteristiche](#caratteristiche)
|
||||
- [Installazione](#installazione)
|
||||
- [Contribuire](#-contribuire)
|
||||
- [Unisciti su Telegram](#-unisciti-su-telegram)
|
||||
- [Forka e Clona la repository](#forka-e-clona-la-repository)
|
||||
- [Modi in cui contribuire](#modi-in-cui-contribuire)
|
||||
- [Struttura del Progetto](#struttura-del-progetto)
|
||||
- [Compilazione](#compilazione)
|
||||
- [Installa Node.js](#installa-nodejs)
|
||||
- [Installa Yarn](#installa-yarn)
|
||||
- [Installa le dipendenze Node](#installa-le-dipendenze-node)
|
||||
- [Installa Python 3.9](#installa-python-39)
|
||||
- [Installa le Dipendenze Python](#installa-le-dipendenze-python)
|
||||
- [Variabili d'ambiente](#variabili-dambiente)
|
||||
- [Esecuzione](#esecuzione)
|
||||
- [Compilazione](#compilazione-1)
|
||||
- [Compila il bittorrent](#compila-il-bittorrent)
|
||||
- [Compila l'applicazione Electron](#compila-lapplicazione-electron)
|
||||
- [Collaboratori](#collaboratori)
|
||||
- [Licenza](#licenza)
|
||||
|
||||
## A proposito
|
||||
|
||||
**Hydra** è un **Game Launcher** con il proprio **Client BitTorrent**.
|
||||
<br>
|
||||
Il launcher è scritto in TypeScript (Electron) and Python, che gestisce il sistema di torrenting appoggiandosi a libtorrent.
|
||||
|
||||
## Caratteristiche
|
||||
|
||||
- Client Bittorrent integrato
|
||||
- Integrazione How Long To Beat (HLTB) nella pagina del gioco
|
||||
- Percorso del download Personalizzato
|
||||
- Supporto Windows e Linux
|
||||
- Costantemente Aggiornato
|
||||
- E molto altro ...
|
||||
|
||||
## Installazione
|
||||
|
||||
Segui i seguenti passi:
|
||||
|
||||
1. Scarica l'ultima versione di Hydra dalla pagina [Releases](https://github.com/hydralauncher/hydra/releases/latest).
|
||||
- Scarica solo il file .exe per installare Hydra su Windows.
|
||||
- Scarica il file .deb o .rpm o .zip per Linux. (Dipende dalla tua distro Linux)
|
||||
2. Esegui il file scaricato.
|
||||
3. Goditi Hydra!
|
||||
|
||||
## <a name="contribuire"> Contribuire
|
||||
|
||||
### <a name="unisciti-su-telegram"></a> Unisciti su Telegram
|
||||
|
||||
Puoi unirti alle nostre conversazioni sul canale [Telegram](https://t.me/hydralauncher).
|
||||
|
||||
### Forka e Clona la repository
|
||||
|
||||
1. Forka la repository [(clicca qui per forkare)](https://github.com/hydralauncher/hydra/fork)
|
||||
2. Clona il tuo codice forkato `git clone https://github.com/your_username/hydra`
|
||||
3. Crea un nuovo branch
|
||||
4. Aggiungi le modifiche (push)
|
||||
5. Invia la richiesta di pull
|
||||
|
||||
### Modi in cui contribuire
|
||||
|
||||
- Traduzione: Vogliamo rendere Hydra disponibile a più persone possibile. Sentiti libero di tradurre in altre lingue o aggiornare e migliorare quelle già disponibili su Hydra.
|
||||
- Programmazione: Hydra è programmato in TypeScript, Electron e un po' di Python. Se intendi contribuire unisciti al nostro [Telegram](https://t.me/hydralauncher)!
|
||||
|
||||
### Struttura del Progetto
|
||||
|
||||
- client-torrent: Usiamo libtorrent, una libreria Python, per gestire i download dei torrent
|
||||
- src/renderer: l'UI dell'applicazione
|
||||
- src/main: tutta la logica qui.
|
||||
|
||||
## Compilazione
|
||||
|
||||
### Installa Node.js
|
||||
|
||||
Assicurati di avere Node.js installato sulla tua macchina. Scaricalo e installalo da [nodejs.org](https://nodejs.org/).
|
||||
|
||||
### Installa Yarn
|
||||
|
||||
Yarn è un gestore di pacchetti per Node.js. Se non hai ancora installato Yarn segui le istruzioni su [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/).
|
||||
|
||||
### Installa le dipendenze Node
|
||||
|
||||
Naviga alla cartella del progetto e installa le dipendenze Node con Yarn:
|
||||
|
||||
```bash
|
||||
cd hydra
|
||||
yarn
|
||||
```
|
||||
|
||||
### Installa Python 3.9
|
||||
|
||||
Assicurati di avere Python 3.9 installato. Puoi scaricarlo da [python.org](https://www.python.org/downloads/release/python-3913/).
|
||||
|
||||
### Installa le Dipendenze Python
|
||||
|
||||
Installa le dipendenze con pip:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Variabili d'ambiente
|
||||
|
||||
Avrai bisogno di una chiave API SteamGridDB per poter caricare le icone di gioco.
|
||||
|
||||
Una volta ottenuta, puoi copiare e rinominare il file `.env.example` a `.env` e metterlo in `STEAMGRIDDB_API_KEY`.
|
||||
|
||||
## Esecuzione
|
||||
|
||||
Una volta impostato tutto, puoi eseguire il seguente comando per avviare il processo Electron e il client bittorrent:
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## Compilazione
|
||||
|
||||
### Compila il bittorrent
|
||||
|
||||
Usa il comando:
|
||||
|
||||
```bash
|
||||
python torrent-client/setup.py build
|
||||
```
|
||||
|
||||
### Compila l'applicazione Electron
|
||||
|
||||
Usa il comando:
|
||||
|
||||
Per Windows:
|
||||
|
||||
```bash
|
||||
yarn build:win
|
||||
```
|
||||
|
||||
Per Linux:
|
||||
|
||||
```bash
|
||||
yarn build:linux
|
||||
```
|
||||
|
||||
## Collaboratori
|
||||
|
||||
<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
|
||||
</a>
|
||||
|
||||
## Licenza
|
||||
|
||||
Hydra è concesso in licenza secondo la [MIT License](LICENSE).
|
||||
@@ -1,189 +0,0 @@
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra er en spill launcher sin egen innebygt bittorrent klient.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](README.pt-BR.md)
|
||||
[](../README.md)
|
||||
[](README.ru.md)
|
||||
[](README.uk-UA.md)
|
||||
[](README.be.md)
|
||||
[](README.es.md)
|
||||
[](README.fr.md)
|
||||
[](README.de.md)
|
||||
[](README.it.md)
|
||||
[](README.cs.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## Innhold
|
||||
|
||||
- [Innhold](#innhold)
|
||||
- [Om](#om)
|
||||
- [Funksjoner](#funksjoner)
|
||||
- [Installasjon](#installasjon)
|
||||
- [Bidra](#-bidra)
|
||||
- [Bli med i Telegram kanalen vår](#-join-our-telegram)
|
||||
- [Forke og klone repoet ditt](#fork-and-clone-your-repository)
|
||||
- [Måter du kan bidra](#ways-you-can-contribute)
|
||||
- [Prosjekt Struktur](#project-structure)
|
||||
- [Bygg fra kilden](#build-from-source)
|
||||
- [Installere Node.js](#install-nodejs)
|
||||
- [Installere Yarn](#install-yarn)
|
||||
- [Installere Node-avhengigheter](#install-node-dependencies)
|
||||
- [Installere Python 3.9](#install-python-39)
|
||||
- [Installere Python-avhengigheter](#install-python-dependencies)
|
||||
- [Miljøvariabler](#environment-variables)
|
||||
- [Kjøre](#running)
|
||||
- [Bygge](#build)
|
||||
- [Bygg bittorrent klienten](#build-the-bittorrent-client)
|
||||
- [Bygg Electron applikationen](#build-the-electron-application)
|
||||
- [Bidragsytere](#contributors)
|
||||
- [Lisens](#license)
|
||||
|
||||
## Om
|
||||
|
||||
**Hydra** er en **Spill Launcher** sin egne innbygte **BitTorrent Klient**.
|
||||
<br>
|
||||
Launcheren er skrevet i TypeScript (Electron) og Python, som håndterer torrent systemet ved bruk av libtorrent.
|
||||
|
||||
## Funksjoner
|
||||
|
||||
- Sin egen innebyggte bittorrent klient
|
||||
- How Long To Beat (HLTB) integrasjon på spillsiden
|
||||
- Nedlastingssti tilpasning
|
||||
- Windows og Linux understøttelse
|
||||
- Konstant oppdatert
|
||||
- Og mer ...
|
||||
|
||||
## Installasjon
|
||||
|
||||
Følg trinnene her under for å innstallere:
|
||||
|
||||
1. Last ned den seneste versjonen av Hydra fra [Releases](https://github.com/hydralauncher/hydra/releases/latest) siden.
|
||||
- Last kun .exe filen ned om du vil installere Hydra på Windows.
|
||||
- Last kun .deb, .rpm eller .zip ned om du vil installere Hydra på Linux. (kommer an på Linux distroen din)
|
||||
2. Kjør den nedlastede filen.
|
||||
3. Nyt Hydra!
|
||||
|
||||
## <a name="contributing"> Bidra
|
||||
|
||||
### <a name="join-our-telegram"></a> Bli med i Telegram kanalen vår
|
||||
|
||||
Vi holder diskusjonene våres i [Telegram](https://t.me/hydralauncher) kanalen.
|
||||
|
||||
### Forke og klone repoet ditt
|
||||
|
||||
1. Fork repoet [(trykk her for å forke nå)](https://github.com/hydralauncher/hydra/fork)
|
||||
2. Klon den forkede koden `git clone https://github.com/brukernavnet_ditt/hydra`
|
||||
3. Lag en ny branch
|
||||
4. Skyv committene dine
|
||||
5. Send inn en ny Pull-forespørsel.
|
||||
|
||||
### Måter du kan bidra
|
||||
|
||||
- Oversetting: Vi har lyst at Hydra skal bli tilgjengelig for så mange som mulig. Hjelp gjerne med å oversette til nye språk eller oppdater og forbedre de som allerede er tilgjengelige i Hydra.
|
||||
- Code: Hydra is built with Typescript, Electron and a little bit of Python. If you want to contribute, join our [Telegram](https://t.me/hydralauncher)!
|
||||
- Kode: Hydra er laget med Typescript, Electron og lite gran Pythong. Hvis du har lyst på å bidra, bli med i [Telegram](https://t.me/hydralauncher) kanalen vår!
|
||||
|
||||
### Prosjektstruktur
|
||||
|
||||
- torrent-client: Vi bruker libtorrent, et Python-bibliotek, til å håndtere torrent nedlastinger.
|
||||
- src/renderer: UIen til applikasjonen
|
||||
- src/main: all logikken er her.
|
||||
|
||||
## Bygg fra kildekoden
|
||||
|
||||
### Installere Node.js
|
||||
|
||||
Vær sikker på at du har installert Node.js på maskinen din. Hvis du ikke har det, må du laste ned og installere det fra [nodejs.org](https://nodejs.org/).
|
||||
|
||||
### Installere Yarn
|
||||
|
||||
Yarn er et pakkehåndteringsverktøy til Node.js. Hvis du ikke allerede har installert Yarn, da kan du gjøre det ved å følge instruksjonene på [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/).
|
||||
|
||||
### Installere Node-avhengigheter
|
||||
|
||||
Naviger til prosjektmappen og installer Node-avhengighetene ved bruk av Yarn:
|
||||
|
||||
```bash
|
||||
cd hydra
|
||||
yarn
|
||||
```
|
||||
|
||||
### Installere Python 3.9
|
||||
|
||||
Vær sikker på at du har installert Python 3.9 på maskinen din. Du kan laste ned og installere det på [python.org](https://www.python.org/downloads/release/python-3913/).
|
||||
|
||||
### Installere Python-avhengigheter
|
||||
|
||||
Installer de nødvendige Python-avhengigheter ved bruk av pip:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Miljøvariabler
|
||||
|
||||
Du trenger en SteamGridDB API nøkkel for å kunne hente spillikonene ved installasjon.
|
||||
|
||||
Når du har det, kan du kopiere eller endre navnet på `.env.example` filen til å være `.env` og lagre nøkkelen som `STEAMGRIDDB_API_KEY`.
|
||||
|
||||
## Kjøre
|
||||
|
||||
Når alt er satt op, kan du kjøre følgende kommando for å start både Electron prosessen og bittorrent klienten.
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## Bygge
|
||||
|
||||
### Bygge bittorrent klienten
|
||||
|
||||
Bygg bittorrent klienten ved å bruke denne kommandoen:
|
||||
|
||||
```bash
|
||||
python torrent-client/setup.py build
|
||||
```
|
||||
|
||||
### Bygge Electron applikasjonen
|
||||
|
||||
Bygg Electron applikasjonen ved å bruke denne kommandoen:
|
||||
|
||||
På Windows:
|
||||
|
||||
```bash
|
||||
yarn build:win
|
||||
```
|
||||
|
||||
På Linux:
|
||||
|
||||
```bash
|
||||
yarn build:linux
|
||||
```
|
||||
|
||||
## Bidragsytere
|
||||
|
||||
<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
|
||||
</a>
|
||||
|
||||
## Lisens
|
||||
|
||||
Hydra bruker [MIT Lisensen](LICENSE).
|
||||
@@ -1,193 +0,0 @@
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[<img src="./resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra - to program uruchamiający gry z własnym wbudowanym klientem bittorrent.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](README.pt-BR.md)
|
||||
[](README.md)
|
||||
[](README.ru.md)
|
||||
[](README.uk-UA.md)
|
||||
[](README.be.md)
|
||||
[](README.es.md)
|
||||
[](README.fr.md)
|
||||
[](README.de.md)
|
||||
[](README.it.md)
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## Zawartość.
|
||||
|
||||
- [Zawartość.](#zawartość)
|
||||
- [O nas](#o-nas)
|
||||
- [Cechy](#cechy)
|
||||
- [Instalacja](#instalacja)
|
||||
- [Dokonaj wpłaty](#-dokonaj-wpłaty)
|
||||
- [Dołącz do naszego kanału Telegram](#-dołącz-do-naszego-kanału-telegram)
|
||||
- [Rozwidlenie i sklonowanie repozytorium](#rozwidlenie-i-sklonowanie-repozytorium)
|
||||
- [Jak możesz pomóc](#jak-możesz-pomóc)
|
||||
- [Struktura projektu](#struktura-projektu)
|
||||
- [Utwórz kompilację z kodu źródłowego](#utwórz-kompilację-z-kodu-źródłowego)
|
||||
- [Zainstaluj Node.js](#zainstaluj-nodejs)
|
||||
- [Zainstaluj Yarn](#zainstaluj-yarn)
|
||||
- [Zainstaluj zależności Node](#zainstaluj-zależności-node)
|
||||
- [Zainstaluj Python 3.9](#zainstaluj-python-39)
|
||||
- [Zainstaluj zależności Pythona](#zainstaluj-zależności-pythona)
|
||||
- [Zmienne środowiskowe](#zmienne-środowiskowe)
|
||||
- [Run](#run)
|
||||
- [Tworzenie kompilacji](#tworzenie-kompilacji)
|
||||
- [Zbuduj klienta bittorrent](#zbuduj-klienta-bittorrent)
|
||||
- [Tworzenie aplikacji Electron](#tworzenie-aplikacji-electron)
|
||||
- [Współtwórcy](#współtwórcy)
|
||||
- [License](#license)
|
||||
|
||||
## O nas
|
||||
|
||||
**Hydra** - jest **programem uruchamiającym gry** z wbudowanym **klientem BitTorrent**.
|
||||
<br>
|
||||
Ten launcher jest napisany w TypeScript (Electron) i Pythonie, który współpracuje z systemem torrent przy użyciu libtorrent.
|
||||
|
||||
## Cechy
|
||||
|
||||
- Własny wbudowany klient bittorrent
|
||||
- Integracja funkcji How Long To Beat (HLTB) na stronie gry
|
||||
- Personalizacja folderu pobierania
|
||||
- Wsparcie dla systemów Windows i Linux
|
||||
- Stała aktualizacja
|
||||
- I nie tylko ...
|
||||
|
||||
## Instalacja
|
||||
|
||||
Aby zainstalować, wykonaj poniższe czynności:
|
||||
|
||||
1. Pobierz najnowszą wersję programu Hydra ze strony [Wydania](https://github.com/hydralauncher/hydra/releases/latest).
|
||||
- Pobierz .exe tylko, jeśli chcesz zainstalować Hydrę w systemie Windows.
|
||||
- Pobierz .deb lub .rpm lub .zip, jeśli chcesz zainstalować Hydrę w systemie Linux (zależy od dystrybucji systemu Linux).
|
||||
2. Uruchom pobrany plik.
|
||||
3. Ciesz się Hydrą!
|
||||
|
||||
## <a name="contributing"> Dokonaj wpłaty
|
||||
|
||||
### <a name="join-our-telegram"></a> Dołącz do naszego kanału Telegram
|
||||
|
||||
Skupiamy nasze dyskusje na naszym kanale [Telegram](https://t.me/hydralauncher).
|
||||
|
||||
1. Dołącz do naszego kanału
|
||||
2. Przejdź do kanału ról i wybierz rolę Pracownik.
|
||||
3. Wejdź na kanał dev, komunikuj się z nami i dziel się swoimi pomysłami.
|
||||
|
||||
### Rozwidlenie i sklonowanie repozytorium
|
||||
|
||||
1. Rozwidlenie repozytorium [(kliknij tutaj, aby rozwidlić teraz)](https://github.com/hydralauncher/hydra/fork)
|
||||
2. Sklonuj swój rozwidlony kod `git clone https://github.com/your_username/hydra`.
|
||||
3. Utwórz nowy brunch
|
||||
4. Wypchnij swoje zatwierdzenia
|
||||
5. Wyślij nowy Pull Request
|
||||
|
||||
### Jak możesz pomóc
|
||||
|
||||
- Tłumaczenie: Chcemy, aby Hydra była dostępna dla jak największej liczby osób. Zachęcamy do pomocy w tłumaczeniu na nowe języki lub aktualizowaniu i ulepszaniu tych, które są już dostępne na Hydrze.
|
||||
- Kod: Hydra jest zbudowana przy użyciu Typescript, Electron i odrobiny Pythona. Jeśli chcesz wnieść swój wkład, dołącz do naszego kanału Telegram!
|
||||
|
||||
### Struktura projektu
|
||||
|
||||
- Klient torrent: Używamy libtorrent, biblioteki Pythona, do zarządzania pobieraniem torrentów.
|
||||
- src/renderer: interfejs aplikacji
|
||||
- src/main: cała logika jest tutaj.
|
||||
|
||||
## Utwórz kompilację z kodu źródłowego
|
||||
|
||||
### Zainstaluj Node.js
|
||||
|
||||
Upewnij się, że masz zainstalowany Node.js na swoim komputerze. Jeśli nie, pobierz i zainstaluj go ze strony [nodejs.org](https://nodejs.org/).
|
||||
|
||||
### Zainstaluj Yarn
|
||||
|
||||
Yarn to menedżer pakietów dla Node.js. Jeśli jeszcze nie zainstalowałeś Yarn, możesz to zrobić, postępując zgodnie z instrukcjami na stronie [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/).
|
||||
|
||||
### Zainstaluj zależności Node
|
||||
|
||||
Przejdź do katalogu projektu i zainstaluj zależności Node za pomocą Yarn:
|
||||
|
||||
```bash
|
||||
cd hydra
|
||||
yarn
|
||||
```
|
||||
|
||||
### Zainstaluj Python 3.9
|
||||
|
||||
Upewnij się, że masz zainstalowany Python 3.9 na swoim komputerze. Można go pobrać i zainstalować ze strony [python.org](https://www.python.org/downloads/release/python-3913/).
|
||||
|
||||
### Zainstaluj zależności Pythona
|
||||
|
||||
Zainstaluj niezbędne zależności Pythona za pomocą pip:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Zmienne środowiskowe
|
||||
|
||||
Będziesz potrzebował klucza API SteamGridDB, aby uzyskać ikony gier podczas instalacji.
|
||||
|
||||
Po jego uzyskaniu można skopiować plik lub zmienić jego nazwę `.env.example` na `.env` i umieść go na`STEAMGRIDDB_API_KEY`.
|
||||
|
||||
## Run
|
||||
|
||||
Po skonfigurowaniu wszystkiego można uruchomić następujące polecenie, aby uruchomić zarówno proces Electron, jak i klienta bittorrent:
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## Tworzenie kompilacji
|
||||
|
||||
### Zbuduj klienta bittorrent
|
||||
|
||||
Zbuduj klienta bittorrent za pomocą tego poleceniaи:
|
||||
|
||||
```bash
|
||||
python torrent-client/setup.py build
|
||||
```
|
||||
|
||||
### Tworzenie aplikacji Electron
|
||||
|
||||
Zbuduj aplikację Electron za pomocą tego polecenia:
|
||||
|
||||
W systemie Windows:
|
||||
|
||||
```bash
|
||||
yarn build:win
|
||||
```
|
||||
|
||||
W systemie Linux:
|
||||
|
||||
```bash
|
||||
yarn build:linux
|
||||
```
|
||||
|
||||
## Współtwórcy
|
||||
|
||||
<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
|
||||
</a>
|
||||
|
||||
## License
|
||||
|
||||
Hydra posiada licencję [MIT License](LICENSE).
|
||||
@@ -1,193 +0,0 @@
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra é um Launcher de Jogos com seu próprio cliente de bittorrent integrado.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](README.pt-BR.md)
|
||||
[](../README.md)
|
||||
[](README.ru.md)
|
||||
[](README.uk-UA.md)
|
||||
[](README.be.md)
|
||||
[](README.es.md)
|
||||
[](README.fr.md)
|
||||
[](README.de.md)
|
||||
[](README.it.md)
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## Índice
|
||||
|
||||
- [Índice](#índice)
|
||||
- [Sobre](#-sobre)
|
||||
- [Recursos](#-recursos)
|
||||
- [Instalação](#-instalação)
|
||||
- [Contribuindo](#-contribuindo)
|
||||
- [Junte-se ao nosso Telegram](#-junte-se-ao-nosso-telegram)
|
||||
- [Fork e clone o seu repositório](#-fork-e-clone-o-seu-repositório)
|
||||
- [Formas de contribuir](#-formas-de-contribuir)
|
||||
- [Estrutura do Projeto](#-estrutura-do-projeto)
|
||||
- [Compile a partir do código-fonte](#-compile-a-partir-do-código-fonte)
|
||||
- [Instale Node.js](#-instale-nodejs)
|
||||
- [Instale Yarn](#-instale-yarn)
|
||||
- [Instale Dependencias do Node](#-instale-dependencias-do-node)
|
||||
- [Instale Python 3.9](#-instale-python-39)
|
||||
- [Instale Python Dependencies](#-instale-python-dependencies)
|
||||
- [Environment variables](#-environment-variables)
|
||||
- [Running](#-running)
|
||||
- [Build](#-build)
|
||||
- [ Criar o cliente bittorrent](#-build-the-bittorrent-client)
|
||||
- [Criar a aplicação Electron](#-build-the-electron-application)
|
||||
- [Contribuidores](#-contributors)
|
||||
- [Licença](#-licença)
|
||||
|
||||
## <a name="about"> Sobre
|
||||
|
||||
**Hydra** é um **Launcher de Jogos** com seu próprio **Cliente BitTorrent incorporado**.
|
||||
<br>
|
||||
O launcher é escrito em TypeScript (Electron) e Python, que lida com o sistema de torrent usando libtorrent.
|
||||
|
||||
## <a name="features"> Recursos
|
||||
|
||||
- Cliente BitTorrent incorporado próprio
|
||||
- Integração com [How Long To Beat (HLTB)](https://howlongtobeat.com/) na página do jogo
|
||||
- Personalização do caminho de downloads
|
||||
- Suporte para Windows e Linux
|
||||
- Constantemente atualizado
|
||||
- E mais ...
|
||||
|
||||
## <a name="installation"> Instalação
|
||||
|
||||
Siga os passos abaixo para instalar:
|
||||
|
||||
1. Baixe a versão mais recente do Hydra na página de [Releases](https://github.com/hydralauncher/hydra/releases/latest).
|
||||
- Baixe apenas o .exe se quiser instalar o Hydra no Windows.
|
||||
- Baixe .deb ou .rpm ou .zip se quiser instalar o Hydra no Linux. (depende da sua distribuição Linux)
|
||||
2. Execute o arquivo baixado.
|
||||
3. Aproveite o Hydra!
|
||||
|
||||
## <a name="contributing"> Contribuindo
|
||||
|
||||
### <a name="join-our-telegram"></a> Junte-se ao nosso Telegram
|
||||
|
||||
Concentramos nossas discussões no nosso canal do [Telegram](https://t.me/hydralauncher).
|
||||
|
||||
### <a name="fork-and-clone-your-repository"></a> Fork e clone o seu repositório
|
||||
|
||||
1. Faça um fork do repositório [(clique aqui para fazer o fork agora)](https://github.com/hydralauncher/hydra/fork)
|
||||
2. Clone o código do seu fork `git clone https://github.com/seu_nome_de_usuário/hydra`
|
||||
3. Crie uma nova branch
|
||||
4. Faça o push dos seus commits
|
||||
5. Envie um novo Pull Request
|
||||
|
||||
### <a name="ways-you-can-contribute"></a> Formas de contribuir
|
||||
|
||||
- **Tradução**: Queremos que o Hydra esteja disponível para o maior número possível de pessoas. Sinta-se à vontade para ajudar a traduzir para novos idiomas ou atualizar e melhorar aqueles que já estão disponíveis no Hydra.
|
||||
- **Código**: O Hydra é construído com Typescript, Electron e um pouco de Python. Se você deseja contribuir, junte-se ao nosso [Telegram](https://t.me/hydralauncher)!
|
||||
|
||||
### <a name="project-structure"></a> Estrutura do Projeto
|
||||
|
||||
- torrent-client: Utilizamos o libtorrent, uma biblioteca Python, para gerenciar downloads via torrent.
|
||||
- src/renderer: A interface de usuário (UI) da aplicação.
|
||||
- src/main: Toda a lógica da aplicação reside aqui.
|
||||
|
||||
## <a name="build-from-source"></a> Compile a partir do código-fonte
|
||||
|
||||
### <a name="install-nodejs"></a> Instale Node.js
|
||||
|
||||
Certifique-se de ter o Node.js instalado em sua máquina. Se não, faça o download e instale-o em [nodejs.org](https://nodejs.org/).
|
||||
|
||||
### <a name="install-yarn"></a> Instale Yarn
|
||||
|
||||
Yarn é um gerenciador de pacotes para Node.js. Se você ainda não o instalou, pode fazê-lo seguindo as instruções em [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/).
|
||||
|
||||
### <a name="install-node-dependencies"></a> Instale Dependencias do Node
|
||||
|
||||
Navegue até o diretório do projeto e instale as dependências do Node usando o Yarn:
|
||||
|
||||
```bash
|
||||
cd hydra
|
||||
yarn
|
||||
```
|
||||
|
||||
### <a name="install-openssl-11"></a> Instale OpenSSL 1.1
|
||||
|
||||
[OpenSSL 1.1](https://slproweb.com/download/Win64OpenSSL-1_1_1w.exe) é exigido pelo libtorrent em ambientes Windows.
|
||||
|
||||
### <a name="install-python-39"></a> Instale Python 3.9
|
||||
|
||||
Certifique-se de ter o Python 3.9 instalado em sua máquina. Você pode baixá-lo e instalá-lo em [python.org](https://www.python.org/downloads/release/python-3913/).
|
||||
|
||||
### <a name="install-python-dependencies"></a> Instale Python Dependencies
|
||||
|
||||
Instale as dependências Python necessárias usando o pip:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## <a name="environment-variables"></a> Variáveis de ambiente
|
||||
|
||||
Você precisará de uma chave da API SteamGridDB para buscar os ícones do jogo durante a instalação.
|
||||
|
||||
Depois de obtê-lo, você pode copiar ou renomear o arquivo `.env.example` para `.env` e inserir `STEAMGRIDDB_API_KEY`.
|
||||
|
||||
## <a name="running"></a> Executando
|
||||
|
||||
Uma vez que você tenha configurado tudo, você pode executar o seguinte comando para iniciar tanto o processo Electron quanto o cliente BitTorrent:
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## <a name="build"></a> Build
|
||||
|
||||
### <a name="build-the-bittorrent-client"></a> Criar o cliente bittorrent
|
||||
|
||||
Compile o cliente BitTorrent usando este comando
|
||||
|
||||
```bash
|
||||
python torrent-client/setup.py build
|
||||
```
|
||||
|
||||
### <a name="build-the-electron-application"></a> Criar a aplicação Electron
|
||||
|
||||
Compile a aplicação Electron usando este comando:
|
||||
|
||||
No Windows:
|
||||
|
||||
```bash
|
||||
yarn build:win
|
||||
```
|
||||
|
||||
No Linux:
|
||||
|
||||
```bash
|
||||
yarn build:linux
|
||||
```
|
||||
|
||||
## <a name="contributors"></a> Contribuidores
|
||||
|
||||
<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
|
||||
</a>
|
||||
|
||||
## <a name="license"></a> Licença
|
||||
|
||||
O Hydra é licenciado sob a [Licença MIT](LICENSE).
|
||||
@@ -1,191 +0,0 @@
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra - это игровой лаунчер с собственным встроенным клиентом BitTorrent.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](README.pt-BR.md)
|
||||
[](../README.md)
|
||||
[](README.ru.md)
|
||||
[](README.uk-UA.md)
|
||||
[](README.be.md)
|
||||
[](README.es.md)
|
||||
[](README.fr.md)
|
||||
[](README.de.md)
|
||||
[](README.it.md)
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## Содержание
|
||||
|
||||
- [Содержание](#содержание)
|
||||
- [Описание](#описание)
|
||||
- [Особенности](#особенности)
|
||||
- [Установка](#установка)
|
||||
- [Вклад](#-вклад)
|
||||
- [Присоединяйтесь к нашему Telegram](#-присоединяйтесь-к-нашему-telegram)
|
||||
- [Форк и клонирование репозитория](#форк-и-клонирование-репозитория)
|
||||
- [Способы внести свой вклад](#способы-внести-свой-вклад)
|
||||
- [Структура проекта](#структура-проекта)
|
||||
- [Сборка из исходного кода](#сборка-из-исходного-кода)
|
||||
- [Установка Node.js](#установка-nodejs)
|
||||
- [Установка Yarn](#установка-yarn)
|
||||
- [Установка зависимостей Node](#установка-зависимостей-node)
|
||||
- [Установка Python 3.9](#установка-python-39)
|
||||
- [Установка зависимостей Python](#установка-зависимостей-python)
|
||||
- [Переменные среды](#переменные-среды)
|
||||
- [Запуск](#запуск)
|
||||
- [Сборка](#сборка)
|
||||
- [Сборка клиента BitTorrent](#сборка-клиента-bittorrent)
|
||||
- [Сборка приложения Electron](#сборка-приложения-electron)
|
||||
- [Участники](#участники)
|
||||
- [License](#license)
|
||||
|
||||
## Описание
|
||||
|
||||
**Hydra** - это **Игровой Лаунчер** с собственным встроенным **Клиентом BitTorrent** и **самостоятельным scraper`ом для репаков**.
|
||||
<br>
|
||||
Лаунчер написан на TypeScript (Electron) и Python, который управляет системой торрентов с помощью libtorrent.
|
||||
|
||||
## Особенности
|
||||
|
||||
- Самостоятельный scraper репаков среди всех наиболее надежных веб-сайтов в [Megathread](https://www.reddit.com/r/Piracy/wiki/megathread/)
|
||||
- Встроенный клиент BitTorrent
|
||||
- Интеграция How Long To Beat (HLTB) на странице игры
|
||||
- Настройка пути загрузки
|
||||
- Уведомления об обновлении списка репаков
|
||||
- Поддержка Windows и Linux
|
||||
- Постоянно обновляется
|
||||
- И многое другое...
|
||||
|
||||
## Установка
|
||||
|
||||
Чтобы установить, выполните следующие шаги:
|
||||
|
||||
1. Скачайте последнюю версию Hydra с [страницы релизов](https://github.com/hydralauncher/hydra/releases/latest).
|
||||
- Загрузите только .exe, если хотите установить Hydra на Windows.
|
||||
- Загрузите .deb или .rpm или .zip, если хотите установить Hydra на Linux (в зависимости от вашего дистрибутива Linux).
|
||||
2. Запустите скачанный файл.
|
||||
3. Наслаждайтесь Hydra!
|
||||
|
||||
## <a name="contributing"> Вклад
|
||||
|
||||
### <a name="join-our-telegram"></a> Присоединяйтесь к нашему Telegram
|
||||
|
||||
Мы сосредотачиваем наши обсуждения в нашем канале [Telegram](https://t.me/hydralauncher).
|
||||
|
||||
### Форк и клонирование репозитория
|
||||
|
||||
1. Форкните репозиторий [(нажмите здесь, чтобы сделать форк сейчас)](https://github.com/hydralauncher/hydra/fork)
|
||||
2. Склонируйте свой форкнутый код `git clone https://github.com/ваше_имя_пользователя/hydra`
|
||||
3. Создайте новую ветку
|
||||
4. Отправьте свои коммиты
|
||||
5. Отправьте Pull Request
|
||||
|
||||
### Способы внести свой вклад
|
||||
|
||||
- Перевод: Мы хотим, чтобы Hydra была доступна как можно большему количеству людей. Не стесняйтесь помогать переводить на новые языки или обновлять и улучшать те, которые уже доступны в Hydra.
|
||||
- Код: Hydra создан с использованием TypeScript, Electron и немного Python. Если хотите внести свой вклад, присоединяйтесь к нашему каналу [Telegram](https://t.me/hydralauncher)!
|
||||
|
||||
### Структура проекта
|
||||
|
||||
- torrent-client: Мы используем libtorrent, библиотеку Python, для управления загрузками торрентов.
|
||||
- src/renderer: пользовательский интерфейс приложения.
|
||||
- src/main: весь основной функционал здесь.
|
||||
|
||||
## Сборка из исходного кода
|
||||
|
||||
### Установка Node.js
|
||||
|
||||
Убедитесь, что у вас установлен Node.js на вашем компьютере. Если нет, загрузите и установите его с [nodejs.org](https://nodejs.org/).
|
||||
|
||||
### Установка Yarn
|
||||
|
||||
Yarn - менеджер пакетов для Node.js. Если вы еще не установили Yarn, сделайте это, следуя инструкциям на [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/).
|
||||
|
||||
### Установка зависимостей Node
|
||||
|
||||
Перейдите в каталог проекта и установите зависимости Node, используя Yarn:
|
||||
|
||||
```bash
|
||||
cd hydra
|
||||
yarn
|
||||
```
|
||||
|
||||
### Установка Python 3.9
|
||||
|
||||
Убедитесь, что у вас установлен Python 3.9 на вашем компьютере. Вы можете загрузить и установить его с [python.org](https://www.python.org/downloads/release/python-3913/).
|
||||
|
||||
### Установка зависимостей Python
|
||||
|
||||
Установите необходимые зависимости Python, используя pip:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Переменные среды
|
||||
|
||||
Вам понадобится ключ API SteamGridDB, чтобы получить значки игр при установке.
|
||||
|
||||
Как только у вас будет ключ, вы можете скопировать или переименовать файл `.env.example` в `.env` и поместить в него `STEAMGRIDDB_API_KEY`.
|
||||
|
||||
## Запуск
|
||||
|
||||
После того как все настроено, вы можете выполнить следующую команду, чтобы запустить процесс Electron и клиента BitTorrent:
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## Сборка
|
||||
|
||||
### Сборка клиента BitTorrent
|
||||
|
||||
Соберите клиент BitTorrent с помощью этой команды:
|
||||
|
||||
```bash
|
||||
python torrent-client/setup.py build
|
||||
```
|
||||
|
||||
### Сборка приложения Electron
|
||||
|
||||
Соберите приложение Electron, используя эту команду:
|
||||
|
||||
На Windows:
|
||||
|
||||
```bash
|
||||
yarn build:win
|
||||
```
|
||||
|
||||
На Linux:
|
||||
|
||||
```bash
|
||||
yarn build:linux
|
||||
```
|
||||
|
||||
## Участники
|
||||
|
||||
<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
|
||||
</a>
|
||||
|
||||
## License
|
||||
|
||||
Hydra лицензирована в соответствии с [MIT License](LICENSE).
|
||||
@@ -1,194 +0,0 @@
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra, kendi gömülü BitTorrent istemcisine sahip bir oyun başlatıcısıdır.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](README.pt-BR.md)
|
||||
[](../README.md)
|
||||
[](README.ru.md)
|
||||
[](README.uk-UA.md)
|
||||
[](README.be.md)
|
||||
[](README.es.md)
|
||||
[](README.fr.md)
|
||||
[](README.de.md)
|
||||
[](README.it.md)
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## <a name="içindekiler"></a> İçindekiler
|
||||
|
||||
- [İçindekiler](#içindekiler)
|
||||
- [Hakkında](#hakkında)
|
||||
- [Özellikler](#özellikler)
|
||||
- [Kurulum](#kurulum)
|
||||
- [Katkıda bulunma](#katkıda-bulunma)
|
||||
- [Telegram grubumuza katılın](#telegram-katıl)
|
||||
- [Repoyu forklayın ve klonlayın](#repo-fork-klon)
|
||||
- [Katkıda bulunabileceğin yollar](#katkı-yolları)
|
||||
- [Proje yapısı](#proje-yapısı)
|
||||
- [Kaynak kodundan derleme](#kaynak-kodundan-derleme)
|
||||
- [Node.js'i yükleme](#nodejs-yükle)
|
||||
- [Yarn'ı yükleme](#yarn-yükle)
|
||||
- [Node bağımlılıklarını yükleme](#node-bağımlılık-yükle)
|
||||
- [OpenSSL 1.1'i yükleme](#openssl-1-1-yükle)
|
||||
- [Python 3.9'u yükleme](#python-3-9-yükle)
|
||||
- [Python bağımlılıklarını yükleme](#python-bağımlılık-yükle)
|
||||
- [Ortam değişkenleri](#ortam-değişkenleri)
|
||||
- [Çalıştırma](#çalıştırma)
|
||||
- [Derleme](#derleme)
|
||||
- [BitTorrent istemcisini derleme](#bittorrent-istemci-derle)
|
||||
- [Electron uygulamasını derleme](#electron-uygulama-derle)
|
||||
- [Katkıda bulunanlar](#katkıda-bulunanlar)
|
||||
- [Lisans](#lisans)
|
||||
|
||||
## <a name="hakkında"></a> Hakkında
|
||||
|
||||
**Hydra**, kendi gömülü **BitTorrent istemci**sine sahip bir **oyun başlatıcısı**dır.
|
||||
<br>
|
||||
Başlatıcı, torrent sistemini libtorrent kullanarak yöneten Python ve TypeScript (Electron) ile yazılmıştır.
|
||||
|
||||
## <a name="özellikler"></a> Özellikler
|
||||
|
||||
- Kendi gömülü BitTorrent istemcisi
|
||||
- Oyun sayfasında How Long To Beat (HLTB) entegrasyonu
|
||||
- İndirme yolu özelleştirmesi
|
||||
- Windows ve Linux desteği
|
||||
- Sürekli güncelleme
|
||||
- Ve daha fazlası...
|
||||
|
||||
## <a name="kurulum"></a> Kurulum
|
||||
|
||||
Aşağıdaki adımları izleyerek Hydra'yı kurun:
|
||||
|
||||
1. Hydra'nın en son sürümünü [Releases](https://github.com/hydralauncher/hydra/releases/latest) sayfasından indirin.
|
||||
- Hydra'yı Windows'a kurmak istiyorsanız sadece .exe dosyasını indirin.
|
||||
- Hydra'yı Linux'a kurmak istiyorsanız .deb, .rpm veya .zip dosyasını indirin (kullandığınız Linux dağıtımına bağlı olarak).
|
||||
2. İndirilen dosyayı çalıştırın.
|
||||
3. Hydra'nın keyfini çıkarın!
|
||||
|
||||
## <a name="katkıda-bulunma"></a> Katkıda Bulunma
|
||||
|
||||
### <a name="telegram-katıl"></a> Telegram grubumuza katılın
|
||||
|
||||
Tartışmalarımızı [Telegram](https://t.me/hydralauncher) kanalımız üzerinde yürütüyoruz.
|
||||
|
||||
### <a name="repo-fork-klon"></a> Repoyu forklayın ve klonlayın
|
||||
|
||||
1. Depoyu fork'layın [(şimdi forklamak için tıklayın)](https://github.com/hydralauncher/hydra/fork)
|
||||
2. Forkladığınız kodu klonlayın `git clone https://github.com/kullanıcı_adınız/hydra`
|
||||
3. Yeni bir branch oluşturun
|
||||
4. Commitlerinizi gönderin (push)
|
||||
5. Yeni bir Pull Request gönderin
|
||||
|
||||
### <a name="katkı-yolları"></a> Katkıda bulunabileceğin yollar
|
||||
|
||||
- Çeviri: Hydra'nın mümkün olduğunca fazla kişiye ulaşmasını istiyoruz. Yeni dillere çeviri yapmak ya da mevcut dillere güncelleme ve iyileştirme yapmak için yardımcı olmaktan çekinmeyin.
|
||||
- Kod: Hydra, Typescript, Electron ve biraz Python ile inşa edilmiştir. Katkıda bulunmak isterseniz, [Telegram](https://t.me/hydralauncher) kanalımıza katılın!
|
||||
|
||||
### <a name="proje-yapısı"></a> Proje yapısı
|
||||
|
||||
- torrent-client: Torrent indirmelerini yönetmek için libtorrent adlı bir Python kütüphanesini kullanıyoruz.
|
||||
- src/renderer: Uygulamanın kullanıcı arayüzü burada bulunur.
|
||||
- src/main: Uygulamanın tüm işleyişi ve iş mantığı bu bölümde bulunur.
|
||||
|
||||
## <a name="kaynak-kodundan-derleme"></a> Kaynak kodundan derleme
|
||||
|
||||
### <a name="nodejs-yükle"></a> Node.js'i yükleme
|
||||
|
||||
Makinenizde Node.js'in yüklü olduğundan emin olun. Yüklü değilse, [nodejs.org](https://nodejs.org/) adresinden indirip kurun.
|
||||
|
||||
### <a name="yarn-yükle"></a> Yarn'ı yükleme
|
||||
|
||||
Yarn, Node.js için bir paket yöneticisidir. Eğer Yarn'ı henüz kurmadıysanız, [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/) adresindeki talimatları izleyerek kurabilirsiniz.
|
||||
|
||||
### <a name="node-bağımlılık-yükle"></a> Node bağımlılıklarını yükleme
|
||||
|
||||
Proje dizinine gidin ve Yarn kullanarak Node bağımlılıklarını yükleyin:
|
||||
|
||||
```bash
|
||||
cd hydra
|
||||
yarn
|
||||
```
|
||||
|
||||
### <a name="openssl-1-1-yükle"></a> OpenSSL 1.1'i yükleme
|
||||
|
||||
Windows ortamlarında libtorrent tarafından gerekli olan [OpenSSL 1.1](https://slproweb.com/download/Win64OpenSSL-1_1_1w.exe)'i indirip yükleyin.
|
||||
|
||||
### <a name="python-3-9-yükle"></a> Python 3.9'u yükleme
|
||||
|
||||
Makinenizde Python 3.9'un yüklü olduğundan emin olun. Bunu [python.org](https://www.python.org/downloads/release/python-3913/) adresinden indirip kurarak yapabilirsiniz.
|
||||
|
||||
### <a name="python-bağımlılık-yükle"></a> Python bağımlılıklarını yükleme
|
||||
|
||||
Gerekli Python bağımlılıklarını pip kullanarak yükleyin:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## <a name="ortam-değişkenleri"></a> Ortam değişkenleri
|
||||
|
||||
Oyun simgelerini yüklemek için bir SteamGridDB API Anahtarına ihtiyacınız olacak.
|
||||
|
||||
Bu anahtara sahip olduktan sonra, `.env.example` dosyasını kopyalayabilir veya adını `.env` olarak değiştirebilir ve `STEAMGRIDDB_API_KEY` değerini buraya ekleyebilirsiniz.
|
||||
|
||||
## <a name="çalıştırma"></a> Çalıştırma
|
||||
|
||||
Tüm ayarları tamamladıktan sonra, hem Electron sürecini hem de bittorrent istemcisini başlatmak için aşağıdaki komutu çalıştırabilirsiniz:
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## <a name="derleme"></a> Derleme
|
||||
|
||||
### <a name="bittorrent-istemci-derle"></a> BitTorrent istemcisini derleme
|
||||
|
||||
Bittorrent istemcisini aşağıdaki komutla derleyin:
|
||||
|
||||
```bash
|
||||
python torrent-client/setup.py build
|
||||
```
|
||||
|
||||
### <a name="electron-uygulama-derle"></a> Electron uygulamasını derleme
|
||||
|
||||
Electron uygulamasını aşağıdaki komutlarla derleyebilirsiniz:
|
||||
|
||||
Windows'ta:
|
||||
|
||||
```bash
|
||||
yarn build:win
|
||||
```
|
||||
|
||||
Linux'ta:
|
||||
|
||||
```bash
|
||||
yarn build:linux
|
||||
```
|
||||
|
||||
## <a name="katkıda-bulunanlar"></a> Katkıda bulunanlar
|
||||
|
||||
<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
|
||||
</a>
|
||||
|
||||
## <a name="lisans"></a> Lisans
|
||||
|
||||
Hydra, [MIT Lisansı](https://github.com/hydralauncher/hydra/blob/main/LICENSE) altında lisanlanmıştır.
|
||||
@@ -1,195 +0,0 @@
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra - це ігровий лаунчер з власним вбудованим bittorrent-клієнтом.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](README.pt-BR.md)
|
||||
[](../README.md)
|
||||
[](README.ru.md)
|
||||
[](README.uk-UA.md)
|
||||
[](README.be.md)
|
||||
[](README.es.md)
|
||||
[](README.fr.md)
|
||||
[](README.de.md)
|
||||
[](README.it.md)
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## Зміст
|
||||
|
||||
- [Зміст](#зміст)
|
||||
- [Про нас](#про-нас)
|
||||
- [Функції](#функції)
|
||||
- [Встановлення](#встановлення)
|
||||
- [Зробити свій внесок](#-зробити-свій-внесок)
|
||||
- [Приєднуйтесь до нашого Telegram](#-приєднуйтесь-до-нашого-telegram)
|
||||
- [Форк і клонування вашого репозиторію](#форк-і-клонування-вашого-репозиторію)
|
||||
- [Як ви можете зробити свій внесок](#як-ви-можете-зробити-свій-внесок)
|
||||
- [Структура проекту](#структура-проекту)
|
||||
- [Зробити білд з вихідного коду](#зробити-білд-з-вихідного-коду)
|
||||
- [Встановіть Node.js](#встановіть-nodejs)
|
||||
- [Встановіть Yarn](#встановіть-yarn)
|
||||
- [Встановіть Node залежності](#встановіть-node-залежності)
|
||||
- [Встановіть Python 3.9](#встановіть-python-39)
|
||||
- [Встановіть Python залежності](#встановіть-python-залежності)
|
||||
- [Змінні середовища](#змінні-середовища)
|
||||
- [Запустіть](#запустіть)
|
||||
- [Зробіть білд](#зробіть-білд)
|
||||
- [Зробіть білд bittorrent client](#зробіть-білд-bittorrent-client)
|
||||
- [Зробіть білд Electron застосунку](#зробіть-білд-electron-застосунку)
|
||||
- [Контриб'ютори](#контрибютори)
|
||||
- [License](#license)
|
||||
|
||||
## Про нас
|
||||
|
||||
**Hydra** - це **ігровий лаунчер** з власним вбудованим **BitTorrent-клієнтом** і **самокерованим збирачем репаків**.
|
||||
<br>
|
||||
Цей лаунчер написано мовами TypeScript (Electron) та Python, який працює з торрент-системою за допомогою libtorrent.
|
||||
|
||||
## Функції
|
||||
|
||||
- Самокерований збирач репаків серед усіх найнадійніших сайтів на [Megathread]("https://www.reddit.com/r/Piracy/wiki/megathread/")
|
||||
- Власний вбудований клієнт bittorrent
|
||||
- Інтеграція How Long To Beat (HLTB) на сторінці гри
|
||||
- Налаштування теки завантаження
|
||||
- Сповіщення про оновлення списку репаків
|
||||
- Підтримка Windows і Linux
|
||||
- Постійно оновлюється
|
||||
- І не тільки ...
|
||||
|
||||
## Встановлення
|
||||
|
||||
Щоб встановити, виконайте наведені нижче кроки:
|
||||
|
||||
1. Завантажте останню версію Hydra зі сторінки [Releases](https://github.com/hydralauncher/hydra/releases/latest).
|
||||
- Завантажте лише .exe, якщо ви хочете встановити Hydra на Windows.
|
||||
- Завантажте .deb або .rpm або .zip, якщо ви хочете встановити Hydra на Linux. (залежить від вашого дистрибутива Linux)
|
||||
2. Запустіть завантажений файл.
|
||||
3. Насолоджуйтесь Гідрою!
|
||||
|
||||
## <a name="contributing"> Зробити свій внесок
|
||||
|
||||
### <a name="join-our-telegram"></a> Приєднуйтесь до нашого Telegram
|
||||
|
||||
Ми зосереджуємо наші дискусії на нашому каналі [Telegram](https://t.me/hydralauncher).
|
||||
|
||||
1. Приєднуйтесь до нашого канала
|
||||
2. Перейдіть на канал ролей і виберіть роль Співробітник
|
||||
3. Заходьте на dev-канал, спілкуйтеся з нами та діліться своїми ідеями.
|
||||
|
||||
### Форк і клонування вашого репозиторію
|
||||
|
||||
1. Зробіть форк репозиторію [(натисніть тут, щоб зробити форк зараз)](https://github.com/hydralauncher/hydra/fork)
|
||||
2. Клонуйте ваш форк-код `git clone https://github.com/your_username/hydra`
|
||||
3. Створіть новий бранч
|
||||
4. Зробіть пуш своїх комітів
|
||||
5. Надішліть новий Pull Request
|
||||
|
||||
### Як ви можете зробити свій внесок
|
||||
|
||||
- Переклад: Ми хочемо, щоб Hydra була доступна якомога більшій кількості людей. Не соромтеся допомагати перекладати на нові мови або оновлювати і покращувати ті, які вже доступні на Hydra.
|
||||
- Код: Hydra створена за допомогою Typescript, Electron і трохи Python. Якщо ви хочете зробити свій внесок, приєднуйтесь до нашого Telegram!
|
||||
|
||||
### Структура проекту
|
||||
|
||||
- torrent-client: Ми використовуємо libtorrent, бібліотеку Python, для керування завантаженнями з торрентів
|
||||
- src/renderer: інтерфейс програми
|
||||
- src/main: вся логіка тут.
|
||||
|
||||
## Зробити білд з вихідного коду
|
||||
|
||||
### Встановіть Node.js
|
||||
|
||||
Переконайтеся, що на вашому комп'ютері встановлено Node.js. Якщо ні, завантажте та встановіть його з [nodejs.org](https://nodejs.org/).
|
||||
|
||||
### Встановіть Yarn
|
||||
|
||||
Yarn - це менеджер пакетів для Node.js. Якщо ви ще не встановили Yarn, ви можете зробити це, дотримуючись інструкцій на сторінці [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/).
|
||||
|
||||
### Встановіть Node залежності
|
||||
|
||||
Перейдіть до каталогу проекту і встановіть Node залежності за допомогою Yarn:
|
||||
|
||||
```bash
|
||||
cd hydra
|
||||
yarn
|
||||
```
|
||||
|
||||
### Встановіть Python 3.9
|
||||
|
||||
Переконайтеся, що на вашому комп'ютері встановлено Python 3.9. Ви можете завантажити та встановити його з [python.org](https://www.python.org/downloads/release/python-3913/).
|
||||
|
||||
### Встановіть Python залежності
|
||||
|
||||
Встановіть необхідні залежності Python за допомогою pip:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Змінні середовища
|
||||
|
||||
Вам знадобиться ключ API SteamGridDB, щоб отримати іконки ігор під час встановлення.
|
||||
|
||||
Отримавши його, ви можете скопіювати або перейменувати файл `.env.example` на `.env`і помістити його на`STEAMGRIDDB_API_KEY`.
|
||||
|
||||
## Запустіть
|
||||
|
||||
Після того, як ви все налаштували, ви можете запустити наступну команду, щоб запустити як процес Electron, так і клієнт bittorrent:
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## Зробіть білд
|
||||
|
||||
### Зробіть білд bittorrent client
|
||||
|
||||
Зробіть білд bittorrent client за допомогою цієї команди:
|
||||
|
||||
```bash
|
||||
python torrent-client/setup.py build
|
||||
```
|
||||
|
||||
### Зробіть білд Electron застосунку
|
||||
|
||||
Зробіть білд Electron застосунку за допомогою цієї команди:
|
||||
|
||||
На Windows:
|
||||
|
||||
```bash
|
||||
yarn build:win
|
||||
```
|
||||
|
||||
На Linux:
|
||||
|
||||
```bash
|
||||
yarn build:linux
|
||||
```
|
||||
|
||||
## Контриб'ютори
|
||||
|
||||
<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
|
||||
</a>
|
||||
|
||||
## License
|
||||
|
||||
Hydra має ліцензію [MIT License](LICENSE).
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 830 KiB After Width: | Height: | Size: 868 KiB |
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "hydralauncher",
|
||||
"version": "3.4.4",
|
||||
"version": "3.4.9",
|
||||
"description": "Hydra",
|
||||
"main": "./out/main/index.js",
|
||||
"author": "Los Broxas",
|
||||
@@ -28,7 +28,8 @@
|
||||
"build:win": "electron-vite build && electron-builder --win",
|
||||
"build:mac": "electron-vite build && electron-builder --mac",
|
||||
"build:linux": "electron-vite build && electron-builder --linux",
|
||||
"prepare": "husky"
|
||||
"prepare": "husky",
|
||||
"protoc": "npx protoc --ts_out src/main/generated --proto_path proto proto/*.proto"
|
||||
},
|
||||
"dependencies": {
|
||||
"@electron-toolkit/preload": "^3.0.0",
|
||||
@@ -37,6 +38,7 @@
|
||||
"@hookform/resolvers": "^3.9.1",
|
||||
"@monaco-editor/react": "^4.6.0",
|
||||
"@primer/octicons-react": "^19.9.0",
|
||||
"@protobuf-ts/plugin": "^2.10.0",
|
||||
"@radix-ui/react-dropdown-menu": "^2.1.2",
|
||||
"@reduxjs/toolkit": "^2.2.3",
|
||||
"@sentry/react": "^8.47.0",
|
||||
|
||||
1
proto
Submodule
1
proto
Submodule
Submodule proto added at b8c2db166d
File diff suppressed because one or more lines are too long
@@ -120,7 +120,7 @@
|
||||
"options": "خيارات",
|
||||
"executable_section_title": "ملف التشغيل",
|
||||
"executable_section_description": "مسار الملف الذي سيتم تشغيله عند النقر على \"تشغيل\"",
|
||||
"downloads_secion_title": "التنزيلات",
|
||||
"downloads_section_title": "التنزيلات",
|
||||
"downloads_section_description": "تحقق من التحديثات أو الإصدارات الأخرى لهذه اللعبة",
|
||||
"danger_zone_section_title": "منطقة الخطر",
|
||||
"danger_zone_section_description": "إزالة هذه اللعبة من مكتبتك أو الملفات التي تم تنزيلها بواسطة Hydra",
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
"options": "Опции",
|
||||
"executable_section_title": "Стартиращ файл",
|
||||
"executable_section_description": "Пътят на файла, който ще се изпълни, когато се щракне върху \"Пускане\"",
|
||||
"downloads_secion_title": "Свалени",
|
||||
"downloads_section_title": "Свалени",
|
||||
"downloads_section_description": "Вижте актуализации или други версии на тази игра",
|
||||
"danger_zone_section_title": "Опасна зона",
|
||||
"danger_zone_section_description": "Премахнете тази игра от библиотеката си или от файловете, изтеглени от Hydra",
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
"options": "Opcions",
|
||||
"executable_section_title": "Executable",
|
||||
"executable_section_description": "Directori del fitxer des d'on s'executarà quan es cliqui a \"Executar\"",
|
||||
"downloads_secion_title": "Descàrregues",
|
||||
"downloads_section_title": "Descàrregues",
|
||||
"downloads_section_description": "Comprova actualitzacions o altres versions del videojoc",
|
||||
"danger_zone_section_title": "Zona de perill",
|
||||
"danger_zone_section_description": "Elimina aquest videojoc del teu catàleg o els fitxers descarregats per Hydra",
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
"options": "Možnosti",
|
||||
"executable_section_title": "Spustitelné",
|
||||
"executable_section_description": "Umístění souboru který bude spuštěn při kliknutí na \"Hrát\"",
|
||||
"downloads_secion_title": "Stažené soubory",
|
||||
"downloads_section_title": "Stažené soubory",
|
||||
"downloads_section_description": "Zkontrolovat jestli není nová / odlišná verze hry",
|
||||
"danger_zone_section_title": "Nebezpečná zóna",
|
||||
"danger_zone_section_description": "Odebrat hru z knihovny / soubory stažené Hydrou",
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
"options": "Valgmuligheder",
|
||||
"executable_section_title": "Eksekverbar fil",
|
||||
"executable_section_description": "Sti til filen som skal bruges når \"Spil\" bliver klikket",
|
||||
"downloads_secion_title": "Downloads",
|
||||
"downloads_section_title": "Downloads",
|
||||
"downloads_section_description": "Undersøg opdateringer eller andre versioner af dette spil",
|
||||
"danger_zone_section_title": "Farezonen",
|
||||
"danger_zone_section_description": "Fjern dette spil fra dit bibliotek eller filerne der er blevet downloadet af Hydra",
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
"options": "Optionen",
|
||||
"executable_section_title": "Ausführbare Datei",
|
||||
"executable_section_description": "Pfad der Datei, die bei Klick auf \"Play\" ausgeführt wird",
|
||||
"downloads_secion_title": "Downloads",
|
||||
"downloads_section_title": "Downloads",
|
||||
"downloads_section_description": "Sieh dir Updates oder andere Versionen dieses Spiels an",
|
||||
"danger_zone_section_title": "Gefahrenzone",
|
||||
"danger_zone_section_description": "Entferne dieses Spiel aus deiner Bibliothek oder die von Hydra heruntergeladenen Dateien",
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
"options": "Options",
|
||||
"executable_section_title": "Executable",
|
||||
"executable_section_description": "Path of the file that will be executed when \"Play\" is clicked",
|
||||
"downloads_secion_title": "Downloads",
|
||||
"downloads_section_title": "Downloads",
|
||||
"downloads_section_description": "Check out updates or other versions of this game",
|
||||
"danger_zone_section_title": "Danger zone",
|
||||
"danger_zone_section_description": "Remove this game from your library or the files downloaded by Hydra",
|
||||
@@ -198,7 +198,8 @@
|
||||
"download_error_not_cached_on_hydra": "This download is not available on Nimbus.",
|
||||
"game_removed_from_favorites": "Game removed from favorites",
|
||||
"game_added_to_favorites": "Game added to favorites",
|
||||
"automatically_extract_downloaded_files": "Automatically extract downloaded files"
|
||||
"automatically_extract_downloaded_files": "Automatically extract downloaded files",
|
||||
"create_start_menu_shortcut": "Create Start Menu shortcut"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Activate Hydra",
|
||||
@@ -356,7 +357,8 @@
|
||||
"common_redist_description": "Common redistributables are required to run some games. Installing them is recommended to avoid issues.",
|
||||
"install_common_redist": "Install",
|
||||
"installing_common_redist": "Installing…",
|
||||
"show_download_speed_in_megabytes": "Show download speed in megabytes per second"
|
||||
"show_download_speed_in_megabytes": "Show download speed in megabytes per second",
|
||||
"extract_files_by_default": "Extract files by default after download"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Download complete",
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
"options": "Opciones",
|
||||
"executable_section_title": "Ejecutable",
|
||||
"executable_section_description": "Ruta del archivo que se ejecutará cuando se presione \"Jugar\"",
|
||||
"downloads_secion_title": "Descargas",
|
||||
"downloads_section_title": "Descargas",
|
||||
"downloads_section_description": "Buscar actualizaciones u otras versiones de este juego",
|
||||
"danger_zone_section_title": "Opciones Avanzadas",
|
||||
"danger_zone_section_description": "Eliminar este juego de tu librería o los archivos descargados por Hydra (Esto solo eliminará los archivos de instalación y no el juego instalado)",
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
"options": "Valikud",
|
||||
"executable_section_title": "Käivitusfail",
|
||||
"executable_section_description": "Faili tee, mida käivitatakse \"Mängi\" nupule vajutades",
|
||||
"downloads_secion_title": "Allalaadimised",
|
||||
"downloads_section_title": "Allalaadimised",
|
||||
"downloads_section_description": "Vaata uuendusi või selle mängu teisi versioone",
|
||||
"danger_zone_section_title": "Ohutsoon",
|
||||
"danger_zone_section_description": "Eemalda see mäng oma kogust või Hydra poolt allalaaditud failid",
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
{
|
||||
"language_name": "Français",
|
||||
"app": {
|
||||
"successfully_signed_in": "Connecté avec succès"
|
||||
},
|
||||
"home": {
|
||||
"featured": "En vedette",
|
||||
"surprise_me": "Surprenez-moi",
|
||||
"no_results": "Aucun résultat trouvé"
|
||||
"no_results": "Aucun résultat trouvé",
|
||||
"start_typing": "Commencez à taper pour rechercher...",
|
||||
"hot": "Tendance",
|
||||
"weekly": "📅 Meilleurs jeux de la semaine",
|
||||
"achievements": "🏆 Jeux à terminer"
|
||||
},
|
||||
"sidebar": {
|
||||
"catalogue": "Catalogue",
|
||||
@@ -12,24 +19,46 @@
|
||||
"my_library": "Ma bibliothèque",
|
||||
"downloading_metadata": "{{title}} (Téléchargement des métadonnées…)",
|
||||
"paused": "{{title}} (En pause)",
|
||||
"downloading": "{{title}} ({{percentage}} - Téléchargement en cours…)",
|
||||
"downloading": "{{title}} ({{percentage}} - Téléchargement…)",
|
||||
"filter": "Filtrer la bibliothèque",
|
||||
"home": "Page d’accueil",
|
||||
"home": "Page d'accueil",
|
||||
"queued": "{{title}} (En file d'attente)",
|
||||
"game_has_no_executable": "Aucun exécutable sélectionné pour ce jeu",
|
||||
"sign_in": "Se connecter",
|
||||
"friends": "Amis",
|
||||
"need_help": "Besoin d'aide ?",
|
||||
"favorites": "Favoris"
|
||||
},
|
||||
"header": {
|
||||
"search": "Recherche",
|
||||
|
||||
"search": "Rechercher",
|
||||
"home": "Accueil",
|
||||
"catalogue": "Catalogue",
|
||||
"downloads": "Téléchargements",
|
||||
"search_results": "Résultats de la recherche",
|
||||
"settings": "Paramètres",
|
||||
"home": "Accueil"
|
||||
"version_available_install": "Version {{version}} disponible. Cliquez ici pour redémarrer et installer.",
|
||||
"version_available_download": "Version {{version}} disponible. Cliquez ici pour télécharger."
|
||||
},
|
||||
"bottom_panel": {
|
||||
"no_downloads_in_progress": "Aucun téléchargement en cours",
|
||||
"downloading_metadata": "Téléchargement des métadonnées de {{title}}…",
|
||||
"downloading": "Téléchargement de {{title}}… ({{percentage}} terminé) - Fin dans {{eta}} - {{speed}}"
|
||||
"downloading": "Téléchargement de {{title}}… ({{percentage}} terminé) - Fin dans {{eta}} - {{speed}}",
|
||||
"calculating_eta": "Téléchargement de {{title}}… ({{percentage}} terminé) - Calcul du temps restant…",
|
||||
"checking_files": "Vérification des fichiers de {{title}}… ({{percentage}} terminé)",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"installation_complete": "Installation terminée",
|
||||
"installation_complete_message": "Redistribuables communs installés avec succès"
|
||||
},
|
||||
"catalogue": {
|
||||
"search": "Filtrer…",
|
||||
"developers": "Développeurs",
|
||||
"genres": "Genres",
|
||||
"tags": "Tags",
|
||||
"publishers": "Éditeurs",
|
||||
"download_sources": "Sources de téléchargement",
|
||||
"result_count": "{{resultCount}} résultats",
|
||||
"filter_count": "{{filterCount}} disponibles",
|
||||
"clear_filters": "Effacer {{filterCount}} sélectionnés"
|
||||
},
|
||||
"game_details": {
|
||||
"open_download_options": "Ouvrir les options de téléchargement",
|
||||
@@ -37,36 +66,139 @@
|
||||
"download_options_one": "{{count}} option de téléchargement",
|
||||
"download_options_other": "{{count}} options de téléchargement",
|
||||
"updated_at": "Mis à jour le {{updated_at}}",
|
||||
"install": "Installer",
|
||||
"resume": "Reprendre",
|
||||
"pause": "Pause",
|
||||
"cancel": "Annuler",
|
||||
"remove": "Supprimer",
|
||||
"space_left_on_disk": "{{space}} restant sur le disque",
|
||||
"space_left_on_disk": "{{space}} restants sur le disque",
|
||||
"eta": "Fin dans {{eta}}",
|
||||
"downloading_metadata": "Téléchargement des métadonnées en cours…",
|
||||
"calculating_eta": "Calcul du temps restant…",
|
||||
"downloading_metadata": "Téléchargement des métadonnées…",
|
||||
"filter": "Filtrer les repacks",
|
||||
"requirements": "Configuration requise",
|
||||
"minimum": "Minimum",
|
||||
"recommended": "Recommandée",
|
||||
"paused": "En pause",
|
||||
"release_date": "Sorti le {{date}}",
|
||||
"publisher": "Édité par {{publisher}}",
|
||||
"publisher": "Publié par {{publisher}}",
|
||||
"hours": "heures",
|
||||
"minutes": "minutes",
|
||||
"amount_hours": "{{amount}} heures",
|
||||
"amount_minutes": "{{amount}} minutes",
|
||||
"accuracy": "{{accuracy}}% précision",
|
||||
"add_to_library": "Ajouter à la bibliothèque",
|
||||
"remove_from_library": "Supprimer de la bibliothèque",
|
||||
"remove_from_library": "Retirer de la bibliothèque",
|
||||
"no_downloads": "Aucun téléchargement disponible",
|
||||
"next_suggestion": "Suggestion suivante",
|
||||
"play_time": "Joué pour {{amount}}",
|
||||
"install": "Installer",
|
||||
"play": "Jouer",
|
||||
"play_time": "{{amount}} de temps de jeu",
|
||||
"last_time_played": "Dernière partie {{period}}",
|
||||
"not_played_yet": "Vous n'avez pas encore joué à {{title}}",
|
||||
"next_suggestion": "Suggestion suivante",
|
||||
"play": "Jouer",
|
||||
"deleting": "Suppression de l'installateur…",
|
||||
"close": "Fermer",
|
||||
"deleting": "Suppression du programme d'installation…",
|
||||
"playing_now": "Jeu en cours",
|
||||
"last_time_played": "Dernièrement joué {{period}}"
|
||||
"playing_now": "En cours de jeu",
|
||||
"change": "Changer",
|
||||
"repacks_modal_description": "Choisissez le repack que vous souhaitez télécharger",
|
||||
"select_folder_hint": "Pour changer le dossier par défaut, allez dans les <0>Paramètres</0>",
|
||||
"download_now": "Télécharger maintenant",
|
||||
"no_shop_details": "Impossible d'obtenir les détails du magasin.",
|
||||
"download_options": "Options de téléchargement",
|
||||
"download_path": "Emplacement de téléchargement",
|
||||
"previous_screenshot": "Capture précédente",
|
||||
"next_screenshot": "Capture suivante",
|
||||
"screenshot": "Capture d'écran {{number}}",
|
||||
"open_screenshot": "Ouvrir la capture {{number}}",
|
||||
"download_settings": "Paramètres de téléchargement",
|
||||
"downloader": "Téléchargeur",
|
||||
"select_executable": "Sélectionner",
|
||||
"no_executable_selected": "Aucun exécutable sélectionné",
|
||||
"open_folder": "Ouvrir le dossier",
|
||||
"open_download_location": "Voir les fichiers téléchargés",
|
||||
"create_shortcut": "Créer un raccourci sur le bureau",
|
||||
"clear": "Effacer",
|
||||
"remove_files": "Supprimer les fichiers",
|
||||
"remove_from_library_title": "Êtes-vous sûr ?",
|
||||
"remove_from_library_description": "Ceci supprimera {{game}} de votre bibliothèque",
|
||||
"options": "Options",
|
||||
"executable_section_title": "Exécutable",
|
||||
"executable_section_description": "Chemin du fichier lancé quand \"Jouer\" est cliqué",
|
||||
"downloads_section_title": "Téléchargements",
|
||||
"downloads_section_description": "Découvrez les mises à jour ou autres versions de ce jeu",
|
||||
"danger_zone_section_title": "Zone de danger",
|
||||
"danger_zone_section_description": "Supprimez ce jeu de votre bibliothèque ou les fichiers téléchargés par Hydra",
|
||||
"download_in_progress": "Téléchargement en cours",
|
||||
"download_paused": "Téléchargement en pause",
|
||||
"last_downloaded_option": "Dernière option téléchargée",
|
||||
"create_shortcut_success": "Raccourci créé avec succès",
|
||||
"create_shortcut_error": "Erreur lors de la création du raccourci",
|
||||
"nsfw_content_title": "Ce jeu contient du contenu inapproprié",
|
||||
"nsfw_content_description": "{{title}} contient du contenu pouvant ne pas convenir à tous les âges. Voulez-vous continuer ?",
|
||||
"allow_nsfw_content": "Continuer",
|
||||
"refuse_nsfw_content": "Retourner",
|
||||
"stats": "Statistiques",
|
||||
"download_count": "Téléchargements",
|
||||
"player_count": "Joueurs actifs",
|
||||
"download_error": "Cette option de téléchargement n'est pas disponible",
|
||||
"download": "Télécharger",
|
||||
"executable_path_in_use": "Exécutable déjà utilisé par \"{{game}}\"",
|
||||
"warning": "Attention :",
|
||||
"hydra_needs_to_remain_open": "Pour ce téléchargement, Hydra doit rester ouvert jusqu'à la fin. Si Hydra se ferme avant, la progression sera perdue.",
|
||||
"achievements": "Succès",
|
||||
"achievements_count": "Succès {{unlockedCount}}/{{achievementsCount}}",
|
||||
"cloud_save": "Sauvegarde Cloud",
|
||||
"cloud_save_description": "Sauvegardez vos progrès dans le cloud et continuez à jouer sur n'importe quel appareil",
|
||||
"backups": "Sauvegardes",
|
||||
"install_backup": "Restaurer",
|
||||
"delete_backup": "Supprimer",
|
||||
"create_backup": "Nouvelle sauvegarde",
|
||||
"last_backup_date": "Dernière sauvegarde le {{date}}",
|
||||
"no_backup_preview": "Aucune sauvegarde trouvée pour ce titre",
|
||||
"restoring_backup": "Restauration de la sauvegarde ({{progress}} terminé)…",
|
||||
"uploading_backup": "Envoi de la sauvegarde…",
|
||||
"no_backups": "Vous n'avez pas encore créé de sauvegarde pour ce jeu",
|
||||
"backup_uploaded": "Sauvegarde envoyée",
|
||||
"backup_deleted": "Sauvegarde supprimée",
|
||||
"backup_restored": "Sauvegarde restaurée",
|
||||
"see_all_achievements": "Voir tous les succès",
|
||||
"sign_in_to_see_achievements": "Connectez-vous pour voir les succès",
|
||||
"mapping_method_automatic": "Automatique",
|
||||
"mapping_method_manual": "Manuel",
|
||||
"mapping_method_label": "Méthode de mappage",
|
||||
"files_automatically_mapped": "Fichiers mappés automatiquement",
|
||||
"no_backups_created": "Aucune sauvegarde créée pour ce jeu",
|
||||
"manage_files": "Gérer les fichiers",
|
||||
"loading_save_preview": "Recherche de jeux sauvegardés…",
|
||||
"wine_prefix": "Wine Prefix",
|
||||
"wine_prefix_description": "Le préfixe Wine utilisé pour lancer ce jeu",
|
||||
"launch_options": "Options de lancement",
|
||||
"launch_options_description": "Les utilisateurs avancés peuvent modifier les options de lancement (fonction expérimentale)",
|
||||
"launch_options_placeholder": "Aucun paramètre spécifié",
|
||||
"no_download_option_info": "Pas d'information disponible",
|
||||
"backup_deletion_failed": "Échec de la suppression de la sauvegarde",
|
||||
"max_number_of_artifacts_reached": "Nombre maximal de sauvegardes atteint pour ce jeu",
|
||||
"achievements_not_sync": "Voir comment synchroniser vos succès",
|
||||
"manage_files_description": "Gérer les fichiers qui seront sauvegardés et restaurés",
|
||||
"select_folder": "Sélectionner un dossier",
|
||||
"backup_from": "Sauvegarde du {{date}}",
|
||||
"automatic_backup_from": "Sauvegarde automatique du {{date}}",
|
||||
"enable_automatic_cloud_sync": "Activer la synchronisation cloud automatique",
|
||||
"custom_backup_location_set": "Emplacement de sauvegarde personnalisé défini",
|
||||
"no_directory_selected": "Aucun dossier sélectionné",
|
||||
"no_write_permission": "Impossible de télécharger dans ce dossier. Cliquez ici pour en savoir plus.",
|
||||
"reset_achievements": "Réinitialiser les succès",
|
||||
"reset_achievements_description": "Ceci réinitialisera tous les succès pour {{game}}",
|
||||
"reset_achievements_title": "Êtes-vous sûr ?",
|
||||
"reset_achievements_success": "Succès réinitialisés avec succès",
|
||||
"reset_achievements_error": "Échec de la réinitialisation des succès",
|
||||
"download_error_gofile_quota_exceeded": "Vous avez dépassé votre quota mensuel Gofile. Attendez la remise à zéro du quota.",
|
||||
"download_error_real_debrid_account_not_authorized": "Votre compte Real-Debrid n'est pas autorisé à effectuer de nouveaux téléchargements. Veuillez vérifier les paramètres de votre compte et réessayer.",
|
||||
"download_error_not_cached_on_real_debrid": "Ce téléchargement n'est pas disponible sur Real-Debrid, et le suivi n'est pas encore disponible.",
|
||||
"download_error_not_cached_on_torbox": "Ce téléchargement n'est pas disponible sur TorBox, et le suivi n'est pas encore disponible.",
|
||||
"download_error_not_cached_on_hydra": "Ce téléchargement n'est pas disponible sur Nimbus.",
|
||||
"game_removed_from_favorites": "Jeu retiré des favoris",
|
||||
"game_added_to_favorites": "Jeu ajouté aux favoris",
|
||||
"automatically_extract_downloaded_files": "Extraire automatiquement les fichiers téléchargés"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Activer Hydra",
|
||||
@@ -83,51 +215,292 @@
|
||||
"paused": "En pause",
|
||||
"verifying": "Vérification en cours…",
|
||||
"completed": "Terminé",
|
||||
"removed": "Non téléchargé",
|
||||
"cancel": "Annuler",
|
||||
"filter": "Filtrer les jeux téléchargés",
|
||||
"remove": "Supprimer",
|
||||
"downloading_metadata": "Téléchargement des métadonnées en cours…",
|
||||
"delete": "Supprimer le programme d'installation",
|
||||
"delete_modal_description": "Cela supprimera tous les fichiers d'installation de votre ordinateur",
|
||||
"delete_modal_title": "Es-tu sûr?",
|
||||
"deleting": "Suppression du programme d'installation…",
|
||||
"install": "Installer"
|
||||
"delete": "Supprimer le programme d'installation",
|
||||
"delete_modal_title": "Êtes-vous sûr ?",
|
||||
"delete_modal_description": "Cela supprimera tous les fichiers d'installation de votre ordinateur",
|
||||
"install": "Installer",
|
||||
"download_in_progress": "En cours",
|
||||
"queued_downloads": "Téléchargements en attente",
|
||||
"downloads_completed": "Terminés",
|
||||
"queued": "En attente",
|
||||
"no_downloads_title": "Tellement vide",
|
||||
"no_downloads_description": "Vous n'avez encore rien téléchargé avec Hydra, mais il n'est jamais trop tard pour commencer.",
|
||||
"checking_files": "Vérification des fichiers…",
|
||||
"seeding": "Partage",
|
||||
"stop_seeding": "Arrêter le partage",
|
||||
"resume_seeding": "Reprendre le partage",
|
||||
"options": "Gérer",
|
||||
"extract": "Extraire les fichiers",
|
||||
"extracting": "Extraction des fichiers…"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Chemin des téléchargements",
|
||||
"change": "Mettre à jour",
|
||||
"notifications": "Notifications",
|
||||
"enable_download_notifications": "Quand un téléchargement est terminé",
|
||||
"enable_repack_list_notifications": "Quand un nouveau repack est ajouté",
|
||||
"enable_download_notifications": "Lorsqu'un téléchargement est terminé",
|
||||
"enable_repack_list_notifications": "Lorsqu'un nouveau repack est ajouté",
|
||||
"real_debrid_api_token_label": "Jeton API Real-Debrid",
|
||||
"quit_app_instead_hiding": "Ne pas masquer Hydra à la fermeture",
|
||||
"launch_with_system": "Lancer Hydra au démarrage du système",
|
||||
"general": "Général",
|
||||
"behavior": "Comportement",
|
||||
"download_sources": "Sources de téléchargement",
|
||||
"language": "Langue",
|
||||
"api_token": "Jeton API",
|
||||
"enable_real_debrid": "Activer Real-Debrid",
|
||||
"real_debrid_description": "Real-Debrid est un téléchargeur sans restriction qui vous permet de télécharger rapidement des fichiers, uniquement limités par votre vitesse Internet.",
|
||||
"debrid_invalid_token": "Jeton API invalide",
|
||||
"debrid_api_token_hint": "Vous pouvez obtenir votre jeton API <0>ici</0>",
|
||||
"real_debrid_free_account_error": "Le compte \"{{username}}\" est un compte gratuit. Veuillez vous abonner à Real-Debrid",
|
||||
"debrid_linked_message": "Compte \"{{username}}\" lié",
|
||||
"save_changes": "Enregistrer les modifications",
|
||||
"changes_saved": "Modifications enregistrées avec succès",
|
||||
"download_sources_description": "Hydra récupère les liens de téléchargement à partir de ces sources. L'URL source doit être un lien direct vers un fichier .json contenant les liens de téléchargement.",
|
||||
"validate_download_source": "Valider",
|
||||
"remove_download_source": "Supprimer",
|
||||
"add_download_source": "Ajouter une source",
|
||||
"download_count_zero": "Aucune option de téléchargement",
|
||||
"download_count_one": "{{countFormatted}} option de téléchargement",
|
||||
"download_count_other": "{{countFormatted}} options de téléchargement",
|
||||
"download_source_url": "URL de la source",
|
||||
"add_download_source_description": "Insérez l'URL du fichier .json",
|
||||
"download_source_up_to_date": "À jour",
|
||||
"download_source_errored": "Erreur",
|
||||
"sync_download_sources": "Synchroniser les sources",
|
||||
"removed_download_source": "Source de téléchargement supprimée",
|
||||
"removed_download_sources": "Sources de téléchargement supprimées",
|
||||
"cancel_button_confirmation_delete_all_sources": "Non",
|
||||
"confirm_button_confirmation_delete_all_sources": "Oui, tout supprimer",
|
||||
"description_confirmation_delete_all_sources": "Vous supprimerez toutes les sources de téléchargement",
|
||||
"title_confirmation_delete_all_sources": "Supprimer toutes les sources de téléchargement",
|
||||
"removed_download_sources": "Sources de téléchargement supprimées",
|
||||
"button_delete_all_sources": "Supprimer toutes les sources de téléchargement"
|
||||
"description_confirmation_delete_all_sources": "Vous supprimerez toutes les sources de téléchargement",
|
||||
"button_delete_all_sources": "Tout supprimer",
|
||||
"added_download_source": "Source de téléchargement ajoutée",
|
||||
"download_sources_synced": "Toutes les sources de téléchargement sont synchronisées",
|
||||
"insert_valid_json_url": "Insérez une URL JSON valide",
|
||||
"found_download_option_zero": "Aucune option de téléchargement trouvée",
|
||||
"found_download_option_one": "{{countFormatted}} option trouvée",
|
||||
"found_download_option_other": "{{countFormatted}} options trouvées",
|
||||
"import": "Importer",
|
||||
"public": "Publique",
|
||||
"private": "Privé",
|
||||
"friends_only": "Amis uniquement",
|
||||
"privacy": "Confidentialité",
|
||||
"profile_visibility": "Visibilité du profil",
|
||||
"profile_visibility_description": "Choisissez qui peut voir votre profil et bibliothèque",
|
||||
"required_field": "Ce champ est requis",
|
||||
"source_already_exists": "Cette source a déjà été ajoutée",
|
||||
"must_be_valid_url": "La source doit être une URL valide",
|
||||
"blocked_users": "Utilisateurs bloqués",
|
||||
"user_unblocked": "Utilisateur débloqué",
|
||||
"enable_achievement_notifications": "Quand un succès est débloqué",
|
||||
"launch_minimized": "Lancer Hydra minimisé",
|
||||
"disable_nsfw_alert": "Désactiver l'alerte NSFW",
|
||||
"seed_after_download_complete": "Partager après téléchargement",
|
||||
"show_hidden_achievement_description": "Afficher la description des succès cachés avant de les débloquer",
|
||||
"account": "Compte",
|
||||
"no_users_blocked": "Aucun utilisateur bloqué",
|
||||
"subscription_active_until": "Votre Hydra Cloud est actif jusqu'au {{date}}",
|
||||
"manage_subscription": "Gérer l'abonnement",
|
||||
"update_email": "Modifier l'email",
|
||||
"update_password": "Modifier le mot de passe",
|
||||
"current_email": "Email actuel :",
|
||||
"no_email_account": "Vous n'avez pas encore défini d'email",
|
||||
"account_data_updated_successfully": "Informations du compte mises à jour",
|
||||
"renew_subscription": "Renouveler Hydra Cloud",
|
||||
"subscription_expired_at": "Votre abonnement a expiré le {{date}}",
|
||||
"no_subscription": "Profitez d'Hydra de la meilleure façon possible",
|
||||
"become_subscriber": "Devenir membre Hydra Cloud",
|
||||
"subscription_renew_cancelled": "Le renouvellement automatique est désactivé",
|
||||
"subscription_renews_on": "Votre abonnement sera renouvelé le {{date}}",
|
||||
"bill_sent_until": "Votre prochaine facture sera envoyée à cette date",
|
||||
"no_themes": "Vous n'avez pas encore de thèmes, cliquez ici pour créer votre premier chef-d'œuvre.",
|
||||
"editor_tab_code": "Code",
|
||||
"editor_tab_info": "Info",
|
||||
"editor_tab_save": "Enregistrer",
|
||||
"web_store": "Web store",
|
||||
"clear_themes": "Effacer",
|
||||
"create_theme": "Créer",
|
||||
"create_theme_modal_title": "Créer un thème personnalisé",
|
||||
"create_theme_modal_description": "Créer un nouveau thème pour personnaliser l'apparence d'Hydra",
|
||||
"theme_name": "Nom du thème",
|
||||
"insert_theme_name": "Entrez le nom du thème",
|
||||
"set_theme": "Activer le thème",
|
||||
"unset_theme": "Désactiver le thème",
|
||||
"delete_theme": "Supprimer le thème",
|
||||
"edit_theme": "Modifier le thème",
|
||||
"delete_all_themes": "Supprimer tous les thèmes",
|
||||
"delete_all_themes_description": "Cela supprimera tous vos thèmes personnalisés",
|
||||
"delete_theme_description": "Cela supprimera le thème {{theme}}",
|
||||
"cancel": "Annuler",
|
||||
"appearance": "Apparence",
|
||||
"enable_torbox": "Activer TorBox",
|
||||
"torbox_description": "TorBox est votre service de seedbox premium qui rivalise avec les meilleurs serveurs du marché.",
|
||||
"torbox_account_linked": "Compte TorBox lié",
|
||||
"create_real_debrid_account": "Cliquez ici pour créer un compte Real-Debrid",
|
||||
"create_torbox_account": "Cliquez ici pour créer un compte TorBox",
|
||||
"real_debrid_account_linked": "Compte Real-Debrid lié",
|
||||
"name_min_length": "Le nom du thème doit comporter au moins 3 caractères",
|
||||
"import_theme": "Importer un thème",
|
||||
"import_theme_description": "Vous allez importer {{theme}} du magasin de thèmes",
|
||||
"error_importing_theme": "Erreur lors de l'importation du thème",
|
||||
"theme_imported": "Thème importé avec succès",
|
||||
"enable_friend_request_notifications": "Lors de réception de demande d'ami",
|
||||
"enable_auto_install": "Télécharger les mises à jour automatiquement",
|
||||
"common_redist": "Redistribuables communs",
|
||||
"common_redist_description": "Certains jeux nécessitent les redistribuables communs. L'installation est recommandée.",
|
||||
"install_common_redist": "Installer",
|
||||
"installing_common_redist": "Installation…",
|
||||
"show_download_speed_in_megabytes": "Afficher la vitesse de téléchargement en mégaoctets par seconde"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Téléchargement terminé",
|
||||
"game_ready_to_install": "{{title}} est prêt à être installé",
|
||||
"repack_list_updated": "Liste de repacks mise à jour",
|
||||
"repack_count_one": "{{count}} repack ajouté",
|
||||
"repack_count_other": "{{count}} repacks ajoutés"
|
||||
"repack_count_other": "{{count}} repacks ajoutés",
|
||||
"new_update_available": "Version {{version}} disponible",
|
||||
"restart_to_install_update": "Redémarrez Hydra pour installer la mise à jour",
|
||||
"notification_achievement_unlocked_title": "Succès débloqué pour {{game}}",
|
||||
"notification_achievement_unlocked_body": "{{achievement}} et {{count}} autre(s) débloqués",
|
||||
"new_friend_request_description": "Vous avez reçu une nouvelle demande d'ami",
|
||||
"new_friend_request_title": "Nouvelle demande d'ami",
|
||||
"extraction_complete": "Extraction terminée",
|
||||
"game_extracted": "{{title}} extrait avec succès"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Ouvrir Hydra",
|
||||
"quit": "Quitter"
|
||||
},
|
||||
"game_card": {
|
||||
"available_one": "Disponible",
|
||||
"available_other": "Disponibles",
|
||||
"no_downloads": "Aucun téléchargement disponible"
|
||||
},
|
||||
"binary_not_found_modal": {
|
||||
"title": "Programmes non installés",
|
||||
"description": "Les exécutables Wine ou Lutris sont introuvables sur votre système",
|
||||
"instructions": "Vérifiez la bonne façon d'installer l'un d'entre eux sur votre distribution Linux afin que le jeu puisse fonctionner normalement",
|
||||
"title": "Programmes non installés"
|
||||
"instructions": "Vérifiez la bonne façon d'installer l'un d'entre eux sur votre distribution Linux afin que le jeu puisse fonctionner normalement"
|
||||
},
|
||||
"catalogue": {
|
||||
"next_page": "Page suivante",
|
||||
"previous_page": "Page précédente"
|
||||
"modal": {
|
||||
"close": "Fermer la fenêtre"
|
||||
},
|
||||
"forms": {
|
||||
"toggle_password_visibility": "Afficher/Masquer le mot de passe"
|
||||
},
|
||||
"user_profile": {
|
||||
"amount_hours": "{{amount}} heures",
|
||||
"amount_minutes": "{{amount}} minutes",
|
||||
"last_time_played": "Dernière partie {{period}}",
|
||||
"activity": "Activité récente",
|
||||
"library": "Bibliothèque",
|
||||
"total_play_time": "Temps de jeu total",
|
||||
"no_recent_activity_title": "Hmm… rien ici",
|
||||
"no_recent_activity_description": "Vous n'avez pas joué récemment. Il est temps d'y remédier !",
|
||||
"display_name": "Nom d'affichage",
|
||||
"saving": "Enregistrement",
|
||||
"save": "Enregistrer",
|
||||
"edit_profile": "Modifier le profil",
|
||||
"saved_successfully": "Enregistré avec succès",
|
||||
"try_again": "Veuillez réessayer",
|
||||
"sign_out_modal_title": "Êtes-vous sûr ?",
|
||||
"cancel": "Annuler",
|
||||
"successfully_signed_out": "Déconnecté avec succès",
|
||||
"sign_out": "Se déconnecter",
|
||||
"playing_for": "En jeu depuis {{amount}}",
|
||||
"sign_out_modal_text": "Votre bibliothèque est liée à ce compte. Si vous vous déconnectez, elle ne sera plus visible et la progression ne sera pas sauvegardée. Continuer ?",
|
||||
"add_friends": "Ajouter des amis",
|
||||
"add": "Ajouter",
|
||||
"friend_code": "Code ami",
|
||||
"see_profile": "Voir le profil",
|
||||
"sending": "Envoi",
|
||||
"friend_request_sent": "Demande d'ami envoyée",
|
||||
"friends": "Amis",
|
||||
"friends_list": "Liste d'amis",
|
||||
"user_not_found": "Utilisateur introuvable",
|
||||
"block_user": "Bloquer l'utilisateur",
|
||||
"add_friend": "Ajouter un ami",
|
||||
"request_sent": "Demande envoyée",
|
||||
"request_received": "Demande reçue",
|
||||
"accept_request": "Accepter la demande",
|
||||
"ignore_request": "Ignorer la demande",
|
||||
"cancel_request": "Annuler la demande",
|
||||
"undo_friendship": "Retirer de la liste d'amis",
|
||||
"request_accepted": "Demande acceptée",
|
||||
"user_blocked_successfully": "Utilisateur bloqué avec succès",
|
||||
"user_block_modal_text": "Vous allez bloquer {{displayName}}",
|
||||
"blocked_users": "Utilisateurs bloqués",
|
||||
"unblock": "Débloquer",
|
||||
"no_friends_added": "Vous n'avez pas encore d'amis",
|
||||
"pending": "En attente",
|
||||
"no_pending_invites": "Aucune invitation en attente",
|
||||
"no_blocked_users": "Aucun utilisateur bloqué",
|
||||
"friend_code_copied": "Code ami copié",
|
||||
"undo_friendship_modal_text": "Vous allez retirer {{displayName}} de vos amis",
|
||||
"privacy_hint": "Pour changer qui voit ceci, allez dans les <0>Paramètres</0>",
|
||||
"locked_profile": "Ce profil est privé",
|
||||
"image_process_failure": "Erreur lors du traitement de l'image",
|
||||
"required_field": "Ce champ est requis",
|
||||
"displayname_min_length": "Le nom doit contenir au moins 3 caractères",
|
||||
"displayname_max_length": "Le nom doit contenir au maximum 50 caractères",
|
||||
"report_profile": "Signaler ce profil",
|
||||
"report_reason": "Pourquoi signaler ce profil ?",
|
||||
"report_description": "Informations supplémentaires",
|
||||
"report_description_placeholder": "Infos en plus",
|
||||
"report": "Signaler",
|
||||
"report_reason_hate": "Discours de haine",
|
||||
"report_reason_sexual_content": "Contenu sexuel",
|
||||
"report_reason_violence": "Violence",
|
||||
"report_reason_spam": "Spam",
|
||||
"report_reason_other": "Autre",
|
||||
"profile_reported": "Profil signalé",
|
||||
"your_friend_code": "Votre code ami :",
|
||||
"upload_banner": "Télécharger une bannière",
|
||||
"uploading_banner": "Téléversement de la bannière…",
|
||||
"background_image_updated": "Image de fond mise à jour",
|
||||
"stats": "Statistiques",
|
||||
"achievements": "Succès",
|
||||
"games": "Jeux",
|
||||
"top_percentile": "Top {{percentile}}%",
|
||||
"ranking_updated_weekly": "Classement mis à jour chaque semaine",
|
||||
"playing": "En train de jouer à {{game}}",
|
||||
"achievements_unlocked": "Succès débloqués",
|
||||
"earned_points": "Points gagnés",
|
||||
"show_achievements_on_profile": "Afficher vos succès sur votre profil",
|
||||
"show_points_on_profile": "Afficher vos points sur votre profil"
|
||||
},
|
||||
"achievement": {
|
||||
"achievement_unlocked": "Succès débloqué",
|
||||
"user_achievements": "Succès de {{displayName}}",
|
||||
"your_achievements": "Vos succès",
|
||||
"unlocked_at": "Débloqué le : {{date}}",
|
||||
"subscription_needed": "Un abonnement Hydra Cloud est requis",
|
||||
"new_achievements_unlocked": "{{achievementCount}} nouveaux succès débloqués sur {{gameCount}} jeux",
|
||||
"achievement_progress": "{{unlockedCount}}/{{totalCount}} succès",
|
||||
"achievements_unlocked_for_game": "{{achievementCount}} nouveaux succès débloqués sur {{gameTitle}}",
|
||||
"hidden_achievement_tooltip": "Ce succès est caché",
|
||||
"achievement_earn_points": "Gagnez {{points}} points avec ce succès",
|
||||
"earned_points": "Points gagnés :",
|
||||
"available_points": "Points disponibles :",
|
||||
"how_to_earn_achievements_points": "Comment gagner des points de succès ?"
|
||||
},
|
||||
"hydra_cloud": {
|
||||
"subscription_tour_title": "Abonnement Hydra Cloud",
|
||||
"subscribe_now": "S'abonner",
|
||||
"cloud_saving": "Sauvegarde Cloud",
|
||||
"cloud_achievements": "Sauvegardez vos succès dans le cloud",
|
||||
"animated_profile_picture": "Photo de profil animée",
|
||||
"premium_support": "Support premium",
|
||||
"show_and_compare_achievements": "Montrez et comparez vos succès avec d'autres utilisateurs",
|
||||
"animated_profile_banner": "Bannière de profil animée",
|
||||
"hydra_cloud": "Hydra Cloud",
|
||||
"hydra_cloud_feature_found": "Vous avez découvert une fonctionnalité Hydra Cloud !",
|
||||
"learn_more": "En savoir plus",
|
||||
"debrid_description": "Téléchargez jusqu'à 4x plus vite avec Nimbus"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
"options": "Opsi",
|
||||
"executable_section_title": "Eksekusi",
|
||||
"executable_section_description": "Path file eksekusi saat \"Main\" diklik",
|
||||
"downloads_secion_title": "Unduhan",
|
||||
"downloads_section_title": "Unduhan",
|
||||
"downloads_section_description": "Cek update atau versi lain dari game ini",
|
||||
"danger_zone_section_title": "Zona Berbahaya",
|
||||
"danger_zone_section_description": "Hapus game ini dari perpustakaan kamu atau file yang diunduh oleh Hydra",
|
||||
|
||||
@@ -25,6 +25,7 @@ import cs from "./cs/translation.json";
|
||||
import nb from "./nb/translation.json";
|
||||
import et from "./et/translation.json";
|
||||
import bg from "./bg/translation.json";
|
||||
import uz from "./uz/translation.json";
|
||||
|
||||
export default {
|
||||
"pt-BR": ptBR,
|
||||
@@ -54,4 +55,5 @@ export default {
|
||||
cs,
|
||||
nb,
|
||||
et,
|
||||
uz,
|
||||
};
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
"options": "Параметрлер",
|
||||
"executable_section_title": "Файл",
|
||||
"executable_section_description": "\"Ойнау\" батырмасын басқанда іске қосылатын файл жолы",
|
||||
"downloads_secion_title": "Жүктеулер",
|
||||
"downloads_section_title": "Жүктеулер",
|
||||
"downloads_section_description": "Ойынның жаңартулары немесе басқа нұсқалары бар-жоғын тексеру",
|
||||
"danger_zone_section_title": "Қауіпті аймақ",
|
||||
"danger_zone_section_description": "Осы ойынды кітапханаңыздан жою немесе Hydra жүктеген файлдарды жою",
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
"options": "Valgmuligheter",
|
||||
"executable_section_title": "Kjørbar fil",
|
||||
"executable_section_description": "Sti til filen som skal brukes når det trykkes på \"Spill\"",
|
||||
"downloads_secion_title": "Nedlastinger",
|
||||
"downloads_section_title": "Nedlastinger",
|
||||
"downloads_section_description": "Sjekk for oppdateringer eller andre versjoner af dette spillet",
|
||||
"danger_zone_section_title": "Faresonen",
|
||||
"danger_zone_section_description": "Fjern dette spillet fra biblioteket ditt eller filene som har blitt lastet ned av Hydra",
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
"remove_from_library_title": "Tem certeza?",
|
||||
"executable_section_title": "Executável",
|
||||
"executable_section_description": "O caminho do arquivo que será executado ao clicar em \"Jogar\"",
|
||||
"downloads_secion_title": "Downloads",
|
||||
"downloads_section_title": "Downloads",
|
||||
"downloads_section_description": "Confira atualizações ou versões diferentes para este mesmo título",
|
||||
"danger_zone_section_title": "Zona de perigo",
|
||||
"danger_zone_section_description": "Remova o jogo da sua biblioteca ou os arquivos que foram baixados pelo Hydra",
|
||||
@@ -187,7 +187,8 @@
|
||||
"download_error_not_cached_on_hydra": "Este download não está disponível no Nimbus.",
|
||||
"game_removed_from_favorites": "Jogo removido dos favoritos",
|
||||
"game_added_to_favorites": "Jogo adicionado aos favoritos",
|
||||
"automatically_extract_downloaded_files": "Extrair automaticamente os arquivos baixados"
|
||||
"automatically_extract_downloaded_files": "Extrair automaticamente os arquivos baixados",
|
||||
"create_start_menu_shortcut": "Criar atalho no Menu Iniciar"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Ativação",
|
||||
@@ -343,7 +344,8 @@
|
||||
"common_redist_description": "Componentes recomendados são necessários para executar alguns jogos. A instalação deles é recomendada para evitar problemas.",
|
||||
"install_common_redist": "Instalar",
|
||||
"installing_common_redist": "Instalando…",
|
||||
"show_download_speed_in_megabytes": "Exibir taxas de download em megabytes por segundo"
|
||||
"show_download_speed_in_megabytes": "Exibir taxas de download em megabytes por segundo",
|
||||
"extract_files_by_default": "Extrair arquivos automaticamente após o download"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Download concluído",
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
"remove_from_library_title": "Tens a certeza?",
|
||||
"executable_section_title": "Executável",
|
||||
"executable_section_description": "O caminho do ficheiro que vai ser executado ao clicar em \"Jogar\"",
|
||||
"downloads_secion_title": "Transferências",
|
||||
"downloads_section_title": "Transferências",
|
||||
"downloads_section_description": "Encontra atualizações ou versões diferentes para este mesmo título",
|
||||
"danger_zone_section_title": "Zona de perigo",
|
||||
"danger_zone_section_description": "Remove o jogo da tua biblioteca ou os ficheiros que foram transferidos pelo Hydra",
|
||||
@@ -178,7 +178,8 @@
|
||||
"download_error_not_cached_on_real_debrid": "Este download não está disponível no Real-Debrid e a verificação do status do download não está disponível.",
|
||||
"download_error_not_cached_on_torbox": "Este download não está disponível no TorBox e a verificação do status do download não está disponível.",
|
||||
"game_removed_from_favorites": "Jogo removido dos favoritos",
|
||||
"game_added_to_favorites": "Jogo adicionado aos favoritos"
|
||||
"game_added_to_favorites": "Jogo adicionado aos favoritos",
|
||||
"create_start_menu_shortcut": "Criar atalho no Menu Iniciar"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Ativação",
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
"options": "Настройки",
|
||||
"executable_section_title": "Файл",
|
||||
"executable_section_description": "Путь к файлу, который будет запущен при нажатии на \"Play\"",
|
||||
"downloads_secion_title": "Загрузки",
|
||||
"downloads_section_title": "Загрузки",
|
||||
"downloads_section_description": "Проверить наличие обновлений или других версий игры",
|
||||
"danger_zone_section_title": "Опасная зона",
|
||||
"danger_zone_section_description": "Вы можете удалить эту игру из вашей библиотеки или файлы скачанные из Hydra",
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
"options": "Seçenekler",
|
||||
"executable_section_title": "Çalıştırılabilir dosya",
|
||||
"executable_section_description": "\"Oyna\" butonuna tıklandığında çalıştırılacak dosyanın yolu",
|
||||
"downloads_secion_title": "İndirmeler",
|
||||
"downloads_section_title": "İndirmeler",
|
||||
"downloads_section_description": "Bu oyun için güncellemeleri veya diğer sürümleri kontrol edin",
|
||||
"danger_zone_section_title": "Tehlike bölgesi",
|
||||
"danger_zone_section_description": "Bu oyunu kütüphanenizden kaldırın veya Hydra tarafından indirilen dosyaları silin.",
|
||||
@@ -195,6 +195,7 @@
|
||||
"download_error_real_debrid_account_not_authorized": "Real-Debrid hesabınız yeni indirme işlemleri yapmak için yetkilendirilmemiş. Lütfen hesap ayarlarınızı kontrol edip tekrar deneyin.",
|
||||
"download_error_not_cached_on_real_debrid": "Bu indirme Real-Debrid üzerinde mevcut değil ve Real-Debrid'den indirme durumu henüz sorgulanamıyor.",
|
||||
"download_error_not_cached_on_torbox": "Bu indirme TorBox'ta mevcut değil ve TorBox'tan indirme durumu henüz sorgulanamıyor.",
|
||||
"download_error_not_cached_on_hydra": "Bu indirme Nimbus'ta mevcut değil.",
|
||||
"game_removed_from_favorites": "Oyun favorilerden silindi",
|
||||
"game_added_to_favorites": "Oyun favorilere eklendi",
|
||||
"automatically_extract_downloaded_files": "Yüklenmiş dosyaları otomatik olarak çıkart"
|
||||
@@ -354,7 +355,8 @@
|
||||
"common_redist": "Ortak bağımlılıklar",
|
||||
"common_redist_description": "Bazı oyunların çalışabilmesi için genel bağımlılıklar gereklidir. Sorun yaşamamak için bunların yüklenmesi önerilir.",
|
||||
"install_common_redist": "Yükle",
|
||||
"installing_common_redist": "Yükleniyor…"
|
||||
"installing_common_redist": "Yükleniyor…",
|
||||
"show_download_speed_in_megabytes": "İndirme hızını megabayt/saniye (MB/s) cinsinden göster"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "İndirme tamamlandı",
|
||||
@@ -498,6 +500,7 @@
|
||||
"animated_profile_banner": "Animasyonlu profil afişi",
|
||||
"hydra_cloud": "Hydra Cloud",
|
||||
"hydra_cloud_feature_found": "Bir Hydra Cloud özelliği keşfettiniz!",
|
||||
"learn_more": "Daha Fazla Bilgi Edinin"
|
||||
"learn_more": "Daha Fazla Bilgi Edinin",
|
||||
"debrid_description": "Nimbus ile 4 kata kadar daha hızlı indirin"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,11 @@
|
||||
"home": {
|
||||
"featured": "Рекомендоване",
|
||||
"surprise_me": "Здивуй мене",
|
||||
"no_results": "Результатів не знайдено"
|
||||
"no_results": "Результатів не знайдено",
|
||||
"start_typing": "Почніть набирати текст для пошуку...",
|
||||
"hot": "Гарячі новинки",
|
||||
"weekly": "📅 Найкращі ігри цього тижня",
|
||||
"achievements": "🏆 Ігри на проходження"
|
||||
},
|
||||
"sidebar": {
|
||||
"catalogue": "Каталог",
|
||||
@@ -21,11 +25,12 @@
|
||||
"game_has_no_executable": "Не було вибрано файл для запуску гри",
|
||||
"queued": "{{title}} в черзі",
|
||||
"sign_in": "Увійти",
|
||||
"favorites": "Улюблені"
|
||||
"favorites": "Улюблені",
|
||||
"friends": "Друзі",
|
||||
"need_help": "Потрібна допомога?"
|
||||
},
|
||||
"header": {
|
||||
"search": "Пошук",
|
||||
|
||||
"home": "Головна",
|
||||
"catalogue": "Каталог",
|
||||
"downloads": "Завантаження",
|
||||
@@ -38,11 +43,22 @@
|
||||
"no_downloads_in_progress": "Немає активних завантажень",
|
||||
"downloading_metadata": "Завантаження метаданих {{title}}…",
|
||||
"downloading": "Завантаження {{title}}… ({{percentage}} завершено) - Закінчення {{eta}} - {{speed}}",
|
||||
"calculating_eta": "Завантаження {{title}}… ({{percentage}} завершено) - Обчислення залишкового часу…"
|
||||
"calculating_eta": "Завантаження {{title}}… ({{percentage}} завершено) - Обчислення залишкового часу…",
|
||||
"checking_files": "Перевірка файлів {{title}} ({{percentage}} виповнено)",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"installation_complete": "Встановлення завершено",
|
||||
"installation_complete_message": "Загальні розповсюджувані файли успішно встановлено"
|
||||
},
|
||||
"catalogue": {
|
||||
"next_page": "Наступна сторінка",
|
||||
"previous_page": "Попередня сторінка"
|
||||
"search": "Фільтрувати…",
|
||||
"developers": "Розробники",
|
||||
"genres": "Жанри",
|
||||
"tags": "Теги",
|
||||
"publishers": "Видавці",
|
||||
"download_sources": "Джерела",
|
||||
"result_count": "{{resultCount}} результатів",
|
||||
"filter_count": "{{filterCount}} доступно",
|
||||
"clear_filters": "Очистити {{filterCount}} вибрані"
|
||||
},
|
||||
"game_details": {
|
||||
"open_download_options": "Відкрити варіанти завантаження",
|
||||
@@ -86,18 +102,31 @@
|
||||
"download_now": "Завантажити зараз",
|
||||
"calculating_eta": "Обчислення залишкового часу…",
|
||||
"create_shortcut": "Створити ярлик на робочому столі",
|
||||
"create_shortcut_success": "Ярлик успішно створено",
|
||||
"create_shortcut_error": "Виникла помилка під час створення ярлику",
|
||||
"nsfw_content_title": "Ця гра містить неприйнятний контент",
|
||||
"nsfw_content_description": "{{title}} містить вміст, який може бути непридатним для всіх вікових груп. Ви впевнені, що хочете продовжити?",
|
||||
"allow_nsfw_content": "Продовжити",
|
||||
"refuse_nsfw_content": "Вернутись назад",
|
||||
"stats": "Статистика",
|
||||
"clear": "Очистити",
|
||||
"danger_zone_section_description": "Видалити цю гру з вашої бібліотеки або файли скачані Hydra",
|
||||
"danger_zone_section_title": "Небезпечна зона",
|
||||
"player_count": "Грають зараз",
|
||||
"download": "Завантажити",
|
||||
"download_count": "Завантажень",
|
||||
"download_in_progress": "Триває завантаження.",
|
||||
"download_options": "Варіантів завантаження",
|
||||
"download_path": "Тека для завантажень",
|
||||
"download_paused": "Завантаження призупинено",
|
||||
"download_settings": "Налаштування завантаження",
|
||||
"download_error": "Цей варіант завантаження не доступний",
|
||||
"downloader": "Завантажувач",
|
||||
"downloads_secion_title": "Завантаження",
|
||||
"downloads_section_title": "Завантаження",
|
||||
"downloads_section_description": "Перевірити наявність оновлень або інших версій гри",
|
||||
"executable_section_description": "Шлях до файлу, який буде запущений при натисканні на кнопку \"Play\"",
|
||||
"executable_section_title": "Файл",
|
||||
"executable_path_in_use": "Виконуваний файл наразі використовується \"{{game}}\"",
|
||||
"last_downloaded_option": "Останній варіант завантаження",
|
||||
"next_screenshot": "Наступний скрішнот",
|
||||
"no_executable_selected": "Файл не вибрано",
|
||||
@@ -112,7 +141,64 @@
|
||||
"remove_from_library_description": "{{game}} буде видалено з вашої бібліотеки",
|
||||
"remove_from_library_title": "Ви впевнені?",
|
||||
"screenshot": "Скріншот",
|
||||
"select_executable": "Обрати"
|
||||
"select_executable": "Обрати",
|
||||
"warning": "Попередження:",
|
||||
"hydra_needs_to_remain_open": "Hydra повинна залишатись відкритою до завершення завантаження. Якщо Hydra закриється до завершення, ви втратите прогрес.",
|
||||
"achievements": "Досягнення",
|
||||
"achievements_count": "Досягнень {{unlockedCount}}/{{achievementsCount}}",
|
||||
"cloud_save": "Хмарне Збереження",
|
||||
"cloud_save_description": "Збережіть свій ігровий процесс у хмарі та продовжіть грати з любого пристрою",
|
||||
"backups": "Резервні копії",
|
||||
"install_backup": "Встановити",
|
||||
"delete_backup": "Видалити",
|
||||
"create_backup": "Нова резервна копія",
|
||||
"last_backup_date": "Остання резервна копія {{date}}",
|
||||
"no_backup_preview": "Не було знайдено жодних збережень для цієї гри.",
|
||||
"restoring_backup": "Відновлення резервної копії ({{progress}} виконано)…",
|
||||
"uploading_backup": "Вивантаження резервної копії…",
|
||||
"no_backups": "Ви ще не створили жодних резеврних копій для цієї гри",
|
||||
"backup_uploaded": "Резервна копія вивантажена",
|
||||
"backup_deleted": "Резервна копія видалена",
|
||||
"backup_restored": "Резервна копія відновлена",
|
||||
"see_all_achievements": "Переглянути всі досягнення",
|
||||
"sign_in_to_see_achievements": "Увійдіть, що б переглянути усі досягнення",
|
||||
"mapping_method_automatic": "Автоматичний",
|
||||
"mapping_method_manual": "Ручний",
|
||||
"mapping_method_label": "Спосіб визначення файлів для резервного копіювання",
|
||||
"files_automatically_mapped": "Hydra автоматично вибере файли для резервного копіювання",
|
||||
"no_backups_created": "Для цієї гри не було створено резервних копій",
|
||||
"manage_files": "Керувати файлами",
|
||||
"loading_save_preview": "Виконується пошук збережень гри...",
|
||||
"wine_prefix": "Префікс Wine",
|
||||
"wine_prefix_description": "Префікс Wine використовувався для запуску цієї гри",
|
||||
"launch_options": "Параметри загрузки",
|
||||
"launch_options_description": "Досвідчені користувачі можуть ввести власні модифікації до параметрів запуску (експериментальна функція).",
|
||||
"launch_options_placeholder": "Параметри не вказано",
|
||||
"no_download_option_info": "Немає інформації",
|
||||
"backup_deletion_failed": "Виникла помилка при видалені резервної копії",
|
||||
"max_number_of_artifacts_reached": "Максимальну кількість резервних копій для цієї гри досягнуто",
|
||||
"achievements_not_sync": "Дізнайтеся, як синхронізувати свої досягнення",
|
||||
"manage_files_description": "Керуйте файлами, які буде збережено та відновлено",
|
||||
"select_folder": "Обрати папку",
|
||||
"backup_from": "Резервна копія від {{date}}",
|
||||
"automatic_backup_from": "Автоматична резервна копія від {{date}}",
|
||||
"enable_automatic_cloud_sync": "Увімкнути автоматичну синхронізацію з хмарою",
|
||||
"custom_backup_location_set": "Встановлено користувацьке місце збереження резервної копії",
|
||||
"no_directory_selected": "Папку не було вибрано",
|
||||
"no_write_permission": "Неможливо завантажити у дану папку. Натисніть сюда щоб дізнатись більше.",
|
||||
"reset_achievements": "Скинути досягнення",
|
||||
"reset_achievements_description": "Це скине всі досягнення для {{game}}",
|
||||
"reset_achievements_title": "Ви впевнені?",
|
||||
"reset_achievements_success": "Досягнення успішно скинуто",
|
||||
"reset_achievements_error": "Не вдалося скинути досягнення",
|
||||
"download_error_gofile_quota_exceeded": "Ви перевищили місячну квоту Gofile. Будь ласка, дочекайтесь, поки квота скинеться.",
|
||||
"download_error_real_debrid_account_not_authorized": "Ваш обліковий запис Real-Debrid не авторизований для нових завантажень. Будь ласка, перевірте налаштування облікового запису та спробуйте ще раз.",
|
||||
"download_error_not_cached_on_real_debrid": "Це завантаження недоступне на Real-Debrid, і перевірка статусу завантаження з Real-Debrid наразі недоступна.",
|
||||
"download_error_not_cached_on_torbox": "Це завантаження недоступне на TorBox, і перевірка статусу завантаження з TorBox наразі недоступна.",
|
||||
"download_error_not_cached_on_hydra": "Це завантаження недоступне через Nimbus.",
|
||||
"game_removed_from_favorites": "Гра видалена з улюбленних",
|
||||
"game_added_to_favorites": "Гра була добавлена у улюблені",
|
||||
"automatically_extract_downloaded_files": "Автоматично розархівувати завантаженні файли"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Активувати Hydra",
|
||||
@@ -140,11 +226,18 @@
|
||||
"install": "Встановити",
|
||||
"download_in_progress": "В процесі",
|
||||
"downloads_completed": "Завершено",
|
||||
"no_downloads_description": "Ви ще нічого не завантажили через Hydra, але ніколи не пізно почати.",
|
||||
"no_downloads_description": "Ви ще нічого не завантажили через Hydra, але ніколи не пізно почати!",
|
||||
"no_downloads_title": "Тут так пусто...",
|
||||
"queued": "В черзі",
|
||||
"queued_downloads": "Завантаження в черзі",
|
||||
"removed": "Не завантажено"
|
||||
"removed": "Не завантажено",
|
||||
"checking_files": "Перевірка файлів…",
|
||||
"seeding": "Сідінг",
|
||||
"stop_seeding": "Зупинити сідінг",
|
||||
"resume_seeding": "Продовжити сідінг",
|
||||
"options": "Налаштування",
|
||||
"extract": "Розархівувати файли",
|
||||
"extracting": "Розархівовування файлів…"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Тека завантажень",
|
||||
@@ -181,7 +274,7 @@
|
||||
"description_confirmation_delete_all_sources": "Ви видалите всі джерела завантаження",
|
||||
"title_confirmation_delete_all_sources": "Видалити всі джерела завантаження",
|
||||
"removed_download_sources": "Джерела завантажень видалено",
|
||||
"button_delete_all_sources": "Видаліть усі джерела завантаження",
|
||||
"button_delete_all_sources": "Видалити усі джерела завантаження",
|
||||
"api_token": "API-токен",
|
||||
"debrid_api_token_hint": "API токен можливо отримати <0>тут</0>",
|
||||
"real_debrid_api_token_label": "Real-Debrid API-токен",
|
||||
@@ -193,21 +286,102 @@
|
||||
"removed_download_source": "Джерело завантажень було видалено",
|
||||
"save_changes": "Зберегти зміни",
|
||||
"sync_download_sources": "Синхронізувати джерела",
|
||||
"validate_download_source": "Перевірити"
|
||||
"validate_download_source": "Перевірити",
|
||||
"public": "Публічний",
|
||||
"private": "Приватний",
|
||||
"friends_only": "Тільки для друзів",
|
||||
"privacy": "Приватність",
|
||||
"profile_visibility": "Видимість профілю",
|
||||
"profile_visibility_description": "Оберіть хто може бачити ваш профіль та бібліотеку",
|
||||
"required_field": "Це поле обов'язкове",
|
||||
"source_already_exists": "Це джерело уже додано",
|
||||
"must_be_valid_url": "Джерело має бути дійсною URL-адресою",
|
||||
"blocked_users": "Заблоковані користувачі",
|
||||
"user_unblocked": "Користувача було розблоковано",
|
||||
"enable_achievement_notifications": "Коли отримано нове досягнення",
|
||||
"launch_minimized": "Запустити Hydra у згорнутому вигляді",
|
||||
"disable_nsfw_alert": "Вимкнути сповіщення про NSFW",
|
||||
"seed_after_download_complete": "Cідувати по завершенню завантажень",
|
||||
"show_hidden_achievement_description": "Показувати опис прихованих досягнень до їх розблокування",
|
||||
"account": "Акаунт",
|
||||
"no_users_blocked": "У вас немає заблокованих користувачів",
|
||||
"subscription_active_until": "Ваша підписка на Hydra Cloud активна до {{date}}",
|
||||
"manage_subscription": "Керування підпискою",
|
||||
"update_email": "Змінити електронну пошту",
|
||||
"update_password": "Зміна паролю",
|
||||
"current_email": "Поточна електронна пошта",
|
||||
"no_email_account": "Ви ще не вказали електронну пошту",
|
||||
"account_data_updated_successfully": "Дані облікового запису успішно оновлено",
|
||||
"renew_subscription": "Поновити Hydra Cloud",
|
||||
"subscription_expired_at": "Ваша підписка закінчилася {{date}}",
|
||||
"no_subscription": "Насолоджуйтесь Hydra найкращим можливим чином",
|
||||
"become_subscriber": "Придбати підписку Hydra Cloud",
|
||||
"subscription_renew_cancelled": "Автоматичне поновлення виключено",
|
||||
"subscription_renews_on": "Ваша підписка поновиться {{date}}",
|
||||
"bill_sent_until": "Ваш наступний рахунок буде надіслано до цього дня",
|
||||
"no_themes": "Схоже, у вас ще немає тем, але не хвилюйтеся, натисніть тут, щоб створити свій перший шедевр.",
|
||||
"editor_tab_code": "Код",
|
||||
"editor_tab_info": "Інформація",
|
||||
"editor_tab_save": "Зберегти",
|
||||
"web_store": "Інтернет-магазин тем",
|
||||
"clear_themes": "Очистити",
|
||||
"create_theme": "Створити",
|
||||
"create_theme_modal_title": "Створити користувацьку тему",
|
||||
"create_theme_modal_description": "Створіть нову тему для налаштування зовнішнього вигляду Hydra",
|
||||
"theme_name": "Назва",
|
||||
"insert_theme_name": "Введіть назву теми",
|
||||
"set_theme": "Застосувати тему",
|
||||
"unset_theme": "Виключити тему",
|
||||
"delete_theme": "Видалити тему",
|
||||
"edit_theme": "Редагувати тему",
|
||||
"delete_all_themes": "Видалити усі теми",
|
||||
"delete_all_themes_description": "Це видалить усі ваші користувацькі теми",
|
||||
"delete_theme_description": "Це видалить тему {{theme}}",
|
||||
"cancel": "Відмінити",
|
||||
"appearance": "Вигляд",
|
||||
"enable_torbox": "Включити TorBox",
|
||||
"torbox_description": "TorBox — це ваш преміум-сервіс для сідінгу, що конкурує навіть з найкращими серверами на ринку.",
|
||||
"torbox_account_linked": "TorBox акаунт прив'язано",
|
||||
"create_real_debrid_account": "Натисніть тут, якщо у вас ще немає облікового запису Real-Debrid",
|
||||
"create_torbox_account": "Натисніть тут, якщо у вас ще немає облікового запису TorBox",
|
||||
"real_debrid_account_linked": "Real-Debrid акаунт прив'язано",
|
||||
"name_min_length": "Назва теми повинна містити не менше 3 символів",
|
||||
"import_theme": "Імпортувати тему",
|
||||
"import_theme_description": "Ви імпортуєте {{theme}} з магазину тем",
|
||||
"error_importing_theme": "Помилка при імпорті теми",
|
||||
"theme_imported": "Тема успішно імпортована",
|
||||
"enable_friend_request_notifications": "При отриманні запиту на дружбу",
|
||||
"enable_auto_install": "Автоматично завантажувати оновлення",
|
||||
"common_redist": "Загальні розповсюджувані компоненти",
|
||||
"common_redist_description": "Загальні розповсюджувані компоненти необхідні для запуску деяких ігор. Рекомендується їх встановити, щоб уникнути проблем.",
|
||||
"install_common_redist": "Встановити",
|
||||
"installing_common_redist": "Встановлюється…",
|
||||
"show_download_speed_in_megabytes": "Показувати швидкість завантаження в мегабайтах на секунду",
|
||||
"extract_files_by_default": "Розпаковувати файли після завантаження"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Завантаження завершено",
|
||||
"game_ready_to_install": "{{title}} готова до встановлення",
|
||||
"repack_list_updated": "Список репаків оновлено",
|
||||
"repack_count_one": "{{count}} репак додано",
|
||||
"repack_count_other": "{{count}} репаків додано"
|
||||
"repack_count_other": "{{count}} репаків додано",
|
||||
"new_update_available": "Версія {{version}} доступна",
|
||||
"restart_to_install_update": "Перезавантажте Hydra, щоб встановити оновлення",
|
||||
"notification_achievement_unlocked_title": "Розблоковано досягнення для {{game}}",
|
||||
"notification_achievement_unlocked_body": "{{achievement}} та інші {{count}} було розблоковано",
|
||||
"new_friend_request_description": "Ви отримали новий запит на дружбу",
|
||||
"new_friend_request_title": "Новий запит на дружбу",
|
||||
"extraction_complete": "Витягування завершено",
|
||||
"game_extracted": "{{title}} успішно витягнуто"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Відкрити Hydra",
|
||||
"quit": "Вийти"
|
||||
},
|
||||
"game_card": {
|
||||
"no_downloads": "Немає доступних завантажень"
|
||||
"no_downloads": "Немає доступних завантажень",
|
||||
"available_one": "Доступний",
|
||||
"available_other": "Доступні"
|
||||
},
|
||||
"binary_not_found_modal": {
|
||||
"title": "Програми не встановлені",
|
||||
@@ -240,6 +414,94 @@
|
||||
"sign_out_modal_title": "Ви впевнені?",
|
||||
"successfully_signed_out": "Успішний вихід з акаунту",
|
||||
"total_play_time": "Всього зіграно",
|
||||
"try_again": "Будь ласка, попробуйте ще раз"
|
||||
"try_again": "Будь ласка, попробуйте ще раз",
|
||||
"add_friends": "Добавити друзів",
|
||||
"add": "Добавити",
|
||||
"friend_code": "Код друга",
|
||||
"see_profile": "Переглянути профіль",
|
||||
"sending": "Надсилання",
|
||||
"friend_request_sent": "Запит на дружбу було надіслано",
|
||||
"friends": "Друзі",
|
||||
"friends_list": "Список друзів",
|
||||
"user_not_found": "Користувача не найдено",
|
||||
"block_user": "Заблокувати користувача",
|
||||
"add_friend": "Добавити друга",
|
||||
"request_sent": "надіслано запит на дружбу",
|
||||
"request_received": "Отримано запит на дружбу",
|
||||
"accept_request": "Прийняти запит",
|
||||
"ignore_request": "Ігнорувати запит",
|
||||
"cancel_request": "Скасувати запит",
|
||||
"undo_friendship": "Видалити з друзів",
|
||||
"request_accepted": "Запит прийнято",
|
||||
"user_blocked_successfully": "Користувач успішно заблокований",
|
||||
"user_block_modal_text": "Це заблокує {{displayName}}",
|
||||
"blocked_users": "Заблоковані користувачі",
|
||||
"unblock": "Розблокувати",
|
||||
"no_friends_added": "У вас немає доданих друзів",
|
||||
"pending": "Очікування",
|
||||
"no_pending_invites": "У вас немає запитів, що очікують на підтвердження",
|
||||
"no_blocked_users": "У вас немає заблокованих користувачів",
|
||||
"friend_code_copied": "Код друга скопійовано",
|
||||
"undo_friendship_modal_text": "Це видалить з друзів {{displayName}}",
|
||||
"privacy_hint": "Щоб налаштувати, хто може це бачити, перейдіть до <0>Settings</0>",
|
||||
"locked_profile": "Цей профіль приватний",
|
||||
"image_process_failure": "Помилка при обробці зображення",
|
||||
"required_field": "Це поле обов'язкове",
|
||||
"displayname_min_length": "Ім'я користувача повинно містити не менше 3 символів",
|
||||
"displayname_max_length": "Ім'я користувача повинно містити не більше 50 символів",
|
||||
"report_profile": "Повідомити про цей профіль",
|
||||
"report_reason": "Чому ви повідомляєте про цей профіль?",
|
||||
"report_description": "Додаткова інформація",
|
||||
"report_description_placeholder": "Додаткова інформація",
|
||||
"report": "Повідомити",
|
||||
"report_reason_hate": "Мова ненависті",
|
||||
"report_reason_sexual_content": "Сексуальний контент",
|
||||
"report_reason_violence": "Насильство",
|
||||
"report_reason_spam": "Спам",
|
||||
"report_reason_other": "Інше",
|
||||
"profile_reported": "Профіль повідомлено",
|
||||
"your_friend_code": "Ваш код друга:",
|
||||
"upload_banner": "Завантажити банер",
|
||||
"uploading_banner": "Завантаження банеру...",
|
||||
"background_image_updated": "Фонове зображення оновлено",
|
||||
"stats": "Статистика",
|
||||
"achievements": "Досягнення",
|
||||
"games": "Ігри",
|
||||
"top_percentile": "Топ {{percentile}}%",
|
||||
"ranking_updated_weekly": "Рейтинг оновлюється щотижня",
|
||||
"playing": "Грає у {{game}}",
|
||||
"achievements_unlocked": "Досягнень розблоковано",
|
||||
"earned_points": "Отримано балів",
|
||||
"show_achievements_on_profile": "Покажіть свої досягнення у своєму профілі",
|
||||
"show_points_on_profile": "Покажіть ваші отриманні бали у своєму профілі"
|
||||
},
|
||||
"achievement": {
|
||||
"achievement_unlocked": "Досягнення розблоковано",
|
||||
"user_achievements": "Досягнення користувача {{displayName}}",
|
||||
"your_achievements": "Ваші досягнення",
|
||||
"unlocked_at": "Розблоковано: {{date}}",
|
||||
"subscription_needed": "Для перегляду цього контенту потрібна підписка на Hydra Cloud",
|
||||
"new_achievements_unlocked": "Розблоковано {{achievementCount}} нових досягнень з {{gameCount}} ігор",
|
||||
"achievement_progress": "{{unlockedCount}}/{{totalCount}} досягнень",
|
||||
"achievements_unlocked_for_game": "Розблоковано {{achievementCount}} нових досягнень у грі {{gameTitle}}",
|
||||
"hidden_achievement_tooltip": "Це приховане досягнення",
|
||||
"achievement_earn_points": " Отримайте {{points}} балів за це досягнення",
|
||||
"earned_points": "Отримано балів:",
|
||||
"available_points": "Доступно балів:",
|
||||
"how_to_earn_achievements_points": "Як заробляти бали за досягнення?"
|
||||
},
|
||||
"hydra_cloud": {
|
||||
"subscription_tour_title": "Підписка Hydra Cloud",
|
||||
"subscribe_now": "Підписатися зараз",
|
||||
"cloud_saving": "Збереження в хмарі",
|
||||
"cloud_achievements": "Зберігайте свої досягнення в хмарі",
|
||||
"animated_profile_picture": "Анімовані аватари",
|
||||
"premium_support": "Преміум-підтримка",
|
||||
"show_and_compare_achievements": "Показуйте та порівнюйте свої досягнення з іншими користувачами",
|
||||
"animated_profile_banner": "Анімований банер профілю",
|
||||
"hydra_cloud": "Hydra Cloud",
|
||||
"hydra_cloud_feature_found": "Ви щойно виявили функцію Hydra Cloud!",
|
||||
"learn_more": "Дізнатися більше",
|
||||
"debrid_description": "Завантажуйте до 4 разів швидше з Nimbus"
|
||||
}
|
||||
}
|
||||
|
||||
476
src/locales/uz/translation.json
Normal file
476
src/locales/uz/translation.json
Normal file
@@ -0,0 +1,476 @@
|
||||
{
|
||||
"language_name": "Uzbek",
|
||||
"app": {
|
||||
"successfully_signed_in": "Kirish muvaffaqiyatli amalga oshirildi"
|
||||
},
|
||||
"home": {
|
||||
"featured": "Tavsiya etilgan",
|
||||
"surprise_me": "Hayratda qoldir",
|
||||
"no_results": "Natijalar topilmadi",
|
||||
"hot": "Eng mashhur",
|
||||
"start_typing": "Yozishni boshlayapman ...",
|
||||
"weekly": "📅 Haftaning eng yaxshi o'yinlari",
|
||||
"achievements": "🏆 Yutuqlar bilan o'yinlar"
|
||||
},
|
||||
"sidebar": {
|
||||
"catalogue": "Katalog",
|
||||
"downloads": "Yuklab olishlar",
|
||||
"settings": "Sozlamalar",
|
||||
"my_library": "Mening kutubxonam",
|
||||
"downloading_metadata": "{{title}} (Metamaʼlumotlar yuklanmoqda…)",
|
||||
"paused": "{{title}} (To'xtatildi)",
|
||||
"downloading": "{{title}} ({{percentage}} - Yuklanmoqda…)",
|
||||
"filter": "Qidiruv",
|
||||
"home": "Asosiy",
|
||||
"queued": "{{title}} (Navbatda)",
|
||||
"game_has_no_executable": "Oʻyinni ishga tushirish fayli tanlanmagan",
|
||||
"sign_in": "Kirish",
|
||||
"friends": "Do'stlar",
|
||||
"need_help": "Yordam kerakmi?",
|
||||
"favorites": "Sevimlilar"
|
||||
},
|
||||
"header": {
|
||||
"search": "Qidirish",
|
||||
"home": "Asosiy",
|
||||
"catalogue": "Katalog",
|
||||
"downloads": "Yuklab olishlar",
|
||||
"search_results": "Qidiruv natijalari",
|
||||
"settings": "Sozlamalar",
|
||||
"version_available_install": "{{version}} versiyasi mavjud. Oʻrnatish uchun shu yerni bosing.",
|
||||
"version_available_download": "{{version}} versiyasi mavjud. Yuklab olish uchun shu yerni bosing."
|
||||
},
|
||||
"bottom_panel": {
|
||||
"no_downloads_in_progress": "Faol yuklab olishlar yo'q",
|
||||
"downloading_metadata": "Metamaʼlumotlar yuklanmoqda {{title}}…",
|
||||
"downloading": "Yuklanmoqda {{title}}… ({{percentage}} yakunlandi) - Tugash vaqti {{eta}} - {{speed}}",
|
||||
"calculating_eta": "Yuklanmoqda {{title}}… ({{percentage}} yakunlandi) - Qolgan vaqt hisoblanmoqda…",
|
||||
"checking_files": "Fayllar tekshirilmoqda {{title}}… ({{percentage}} yakunlandi)",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"installation_complete": "O'rnatish yakunlandi",
|
||||
"installation_complete_message": "Kutubxonalar muvaffaqiyatli o'rnatildi"
|
||||
},
|
||||
"catalogue": {
|
||||
"search": "Filter…",
|
||||
"developers": "Ishlab chiquvchilar",
|
||||
"genres": "Janrlar",
|
||||
"tags": "Teglar",
|
||||
"publishers": "Nashriyotlar",
|
||||
"download_sources": "Yuklab olish manbalari",
|
||||
"result_count": "{{resultCount}} natija",
|
||||
"filter_count": "{{filterCount}} mavjud",
|
||||
"clear_filters": "{{filterCount}} tanlangan filtrni tozalash"
|
||||
},
|
||||
"game_details": {
|
||||
"play_time": "O'ynalgan vaqt {{amount}}",
|
||||
"last_time_played": "Oxirgi ishga tushirilgan {{period}}",
|
||||
"not_played_yet": "Siz hali {{title}}ni o'ynamagansiz",
|
||||
"next_suggestion": "Keyingi taklif",
|
||||
"play": "O'ynash",
|
||||
"deleting": "O'rnatuvchi o'chirilmoqda…",
|
||||
"close": "Yopish",
|
||||
"playing_now": "Hozir o'ynalmoqda",
|
||||
"change": "O'zgartirish",
|
||||
"repacks_modal_description": "Yuklab olish uchun repakni tanlang",
|
||||
"select_folder_hint": "Standart yuklab olish jildini o'zgartirish uchun <0>Sozlamalar</0>ni oching",
|
||||
"download_now": "Hozir yuklab olish",
|
||||
"no_shop_details": "Tavsif olib bo'lmadi",
|
||||
"download_options": "Manbalar",
|
||||
"download_path": "Yuklab olish yo'li",
|
||||
"previous_screenshot": "Oldingi skrinshot",
|
||||
"next_screenshot": "Keyingi skrinshot",
|
||||
"screenshot": "Skrinshot {{number}}",
|
||||
"open_screenshot": "{{number}}-skrinshotni ochish",
|
||||
"download_settings": "Yuklab olish sozlamalari",
|
||||
"downloader": "Yuklovchi",
|
||||
"select_executable": "Tanlash",
|
||||
"no_executable_selected": "Fayl tanlanmagan",
|
||||
"open_folder": "Jildni ochish",
|
||||
"open_download_location": "Yuklab olish jildini ko'rish",
|
||||
"create_shortcut": "Ish stoliga yorliq yaratish",
|
||||
"clear": "Tozalash",
|
||||
"remove_files": "Fayllarni o'chirish",
|
||||
"remove_from_library_title": "Ishonchingiz komilmi?",
|
||||
"remove_from_library_description": "{{game}} kutubxonangizdan o'chiriladi.",
|
||||
"options": "Sozlamalar",
|
||||
"executable_section_title": "Fayl",
|
||||
"executable_section_description": "\"O'ynash\" tugmasi bosilganda ishga tushiriladigan fayl yo'li",
|
||||
"downloads_section_title": "Yuklab olishlar",
|
||||
"downloads_section_description": "Yangilanishlar yoki o'yinning boshqa versiyalarini tekshirish",
|
||||
"danger_zone_section_title": "Xavfli zona",
|
||||
"danger_zone_section_description": "Bu o'yinni kutubxonangizdan yoki Hydradan yuklab olingan fayllarni o'chirishingiz mumkin",
|
||||
"download_in_progress": "Yuklab olish davom etmoqda",
|
||||
"download_paused": "Yuklab olish to'xtatilgan",
|
||||
"last_downloaded_option": "Oxirgi yuklab olish varianti",
|
||||
"create_shortcut_success": "Yorliq yaratildi",
|
||||
"create_shortcut_error": "Yorliq yaratib bo'lmadi",
|
||||
"allow_nsfw_content": "Davom etish",
|
||||
"download": "Yuklab olish",
|
||||
"download_count": "Yuklab olishlar",
|
||||
"download_error": "Bu yuklab olish varianti mavjud emas",
|
||||
"executable_path_in_use": "Bajarish fayli allaqachon \"{{game}}\" tomonidan ishlatilmoqda",
|
||||
"nsfw_content_description": "{{title}} barcha yoshdagilar uchun mos bo'lmasligi mumkin bo'lgan tarkibni o'z ichiga oladi. \nDavom etishni xohlaysizmi?",
|
||||
"nsfw_content_title": "Bu o'yin nomunosib tarkibga ega",
|
||||
"refuse_nsfw_content": "Orqaga",
|
||||
"stats": "Statistika",
|
||||
"player_count": "Faol o'yinchilar",
|
||||
"warning": "Ogohlantirish:",
|
||||
"hydra_needs_to_remain_open": "Bu yuklab olish uchun Hydra tugaguncha ochiq qolishi kerak. Agar Hydra tugashidan oldin yopilsa, jarayonni yo'qotasiz.",
|
||||
"achievements": "Yutuqlar",
|
||||
"achievements_count": "Yutuqlar {{unlockedCount}}/{{achievementsCount}}",
|
||||
"cloud_save": "Bulutli saqlash",
|
||||
"cloud_save_description": "O'yin jarayoningizni bulutda saqlang va istalgan qurilmada o'ynashni davom ettiring",
|
||||
"backups": "Zaxira nusxalar",
|
||||
"install_backup": "O'rnatish",
|
||||
"delete_backup": "O'chirish",
|
||||
"create_backup": "Yangi zaxira nusxa yaratish",
|
||||
"last_backup_date": "Oxirgi zaxira nusxa {{date}} dan",
|
||||
"no_backup_preview": "Bu sarlavha uchun saqlashlar topilmadi",
|
||||
"restoring_backup": "Zaxira nusxa tiklanmoqda ({{progress}} yakunlandi)…",
|
||||
"uploading_backup": "Zaxira nusxa yuklanmoqda…",
|
||||
"no_backups": "Siz hali bu o'yin uchun zaxira nusxa yaratmagansiz",
|
||||
"backup_uploaded": "Zaxira nusxa yuklandi",
|
||||
"backup_deleted": "Zaxira nusxa o'chirildi",
|
||||
"backup_restored": "Zaxira nusxa tiklandi",
|
||||
"see_all_achievements": "Barcha yutuqlarni ko'rish",
|
||||
"sign_in_to_see_achievements": "Yutuqlarni ko'rish uchun tizimga kiring",
|
||||
"mapping_method_automatic": "Avtomatik",
|
||||
"mapping_method_manual": "Qo'lda",
|
||||
"mapping_method_label": "Moslashtirish usuli",
|
||||
"files_automatically_mapped": "Fayllar avtomatik moslashtirildi",
|
||||
"no_backups_created": "Bu o'yin uchun zaxira nusxalar yaratilmagan",
|
||||
"manage_files": "Fayllarni boshqarish",
|
||||
"loading_save_preview": "Saqlashlar qidirilmoqda…",
|
||||
"wine_prefix": "Wine prefiksi",
|
||||
"wine_prefix_description": "Bu o'yinni ishga tushirish uchun ishlatiladigan Wine prefiksi",
|
||||
"launch_options": "Ishga tushirish parametrlari",
|
||||
"launch_options_description": "Tajribali foydalanuvchilar ishga tushirish parametrlarini o'zgartirishi mumkin",
|
||||
"launch_options_placeholder": "Parametr ko'rsatilmagan",
|
||||
"no_download_option_info": "Ma'lumot mavjud emas",
|
||||
"backup_deletion_failed": "Zaxira nusxani o'chirib bo'lmadi",
|
||||
"max_number_of_artifacts_reached": "Bu o'yin uchun maksimal zaxira nusxalar soniga yetildi",
|
||||
"achievements_not_sync": "Yutuqlaringiz sinxronlanmagan",
|
||||
"manage_files_description": "Saqlanishi va tiklanishi kerak bo'lgan fayllarni boshqaring",
|
||||
"select_folder": "Jildni tanlash",
|
||||
"backup_from": "{{date}} dan zaxira nusxa",
|
||||
"automatic_backup_from": "{{date}} dan avtomatik zaxira nusxa",
|
||||
"enable_automatic_cloud_sync": "Avtomatik bulutli sinxronlashni yoqish",
|
||||
"custom_backup_location_set": "Maxsus zaxira nusxa joylashuvi o'rnatildi",
|
||||
"no_directory_selected": "Katalog tanlanmagan",
|
||||
"no_write_permission": "Bu katalogga yuklab bo'lmaydi. Ko'proq ma'lumot olish uchun bu yerga bosing.",
|
||||
"reset_achievements": "Yutuqlarni tiklash",
|
||||
"reset_achievements_description": "Bu {{game}} uchun barcha yutuqlarni tiklaydi",
|
||||
"reset_achievements_title": "Ishonchingiz komilmi?",
|
||||
"reset_achievements_success": "Yutuqlar muvaffaqiyatli tiklandi",
|
||||
"reset_achievements_error": "Yutuqlarni tiklab bo'lmadi",
|
||||
"download_error_gofile_quota_exceeded": "Siz Gofile oylik kvotangizni oshirib yubordingiz. Iltimos, kvota tiklanguncha kuting.",
|
||||
"download_error_real_debrid_account_not_authorized": "Sizning Real-Debrid hisobingiz yangi yuklab olishlar uchun avtorizatsiya qilinmagan. Iltimos, hisob sozlamalarini tekshiring va qaytadan urinib ko'ring.",
|
||||
"download_error_not_cached_on_real_debrid": "Bu yuklab olish Real-Debrid'da mavjud emas, va Real-Debrid'dan yuklab olish holatini olish hozircha mavjud emas.",
|
||||
"download_error_not_cached_on_torbox": "Bu yuklab olish TorBox'da mavjud emas, va TorBox'dan yuklab olish holatini olish hozircha mumkin emas.",
|
||||
"game_added_to_favorites": "O'yin sevimlilarga qo'shildi",
|
||||
"game_removed_from_favorites": "O'yin sevimlilardan olib tashlandi",
|
||||
"automatically_extract_downloaded_files": "Yuklab olingan fayllarni avtomatik chiqarish"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Hydra'ni faollashtirish",
|
||||
"installation_id": "O'rnatish ID'si:",
|
||||
"enter_activation_code": "Faollashtirish kodini kiriting",
|
||||
"message": "Agar qayerdan so'rash kerakligini bilmasangiz, u sizda bo'lmasligi kerak.",
|
||||
"activate": "Faollashtirish",
|
||||
"loading": "Yuklanmoqda…"
|
||||
},
|
||||
"downloads": {
|
||||
"resume": "Davom ettirish",
|
||||
"pause": "To'xtatib turish",
|
||||
"eta": "Tugash vaqti {{eta}}",
|
||||
"paused": "To'xtatilgan",
|
||||
"verifying": "Tekshirilmoqda…",
|
||||
"completed": "Yakunlandi",
|
||||
"removed": "Yuklab olinmagan",
|
||||
"cancel": "Bekor qilish",
|
||||
"filter": "Yuklab olingan o'yinlarni qidirish",
|
||||
"remove": "O'chirish",
|
||||
"downloading_metadata": "Metamaʼlumotlar yuklanmoqda…",
|
||||
"deleting": "O'rnatuvchi o'chirilmoqda…",
|
||||
"delete": "O'rnatuvchini o'chirish",
|
||||
"delete_modal_title": "Ishonchingiz komilmi?",
|
||||
"delete_modal_description": "Bu kompyuteringizdan barcha o'rnatuvchilarni o'chiradi",
|
||||
"install": "O'rnatish",
|
||||
"download_in_progress": "Jarayonda",
|
||||
"queued_downloads": "Navbatdagi yuklab olishlar",
|
||||
"downloads_completed": "Yakunlangan",
|
||||
"queued": "Navbatda",
|
||||
"no_downloads_title": "Bu yer juda bo'sh...",
|
||||
"no_downloads_description": "Siz hali Hydra orqali hech narsa yuklab olmadingiz, lekin boshlash uchun hech qachon kech emas.",
|
||||
"checking_files": "Fayllar tekshirilmoqda…",
|
||||
"seeding": "Ulashish",
|
||||
"stop_seeding": "Ulashishni to'xtatish",
|
||||
"resume_seeding": "Ulashishni davom ettirish",
|
||||
"options": "Boshqarish",
|
||||
"extract": "Fayllarni chiqarish",
|
||||
"extracting": "Fayllar chiqarilmoqda…"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Yuklab olish yo'li",
|
||||
"change": "O'zgartirish",
|
||||
"notifications": "Bildirishnomalar",
|
||||
"enable_download_notifications": "Yuklab olish tugaganda",
|
||||
"enable_achievement_notifications": "Yutuq ochilganda",
|
||||
"enable_repack_list_notifications": "Yangi repak qo'shilganda",
|
||||
"real_debrid_api_token_label": "Real-Debrid API-tokeni",
|
||||
"quit_app_instead_hiding": "Ilovani trayga yig'ish o'rniga yopish",
|
||||
"launch_with_system": "Hydra'ni tizim bilan birga ishga tushirish",
|
||||
"launch_minimized": "Hydra'ni yig'ilgan holda ishga tushirish",
|
||||
"disable_nsfw_alert": "Noqulay kontent haqida ogohlantirishni o'chirish",
|
||||
"general": "Asosiy",
|
||||
"behavior": "Xatti-harakat",
|
||||
"download_sources": "Yuklab olish manbalari",
|
||||
"language": "Til",
|
||||
"api_token": "API kalit",
|
||||
"enable_real_debrid": "Real-Debrid'ni yoqish",
|
||||
"real_debrid_description": "Real-Debrid - bu cheksiz yuklab oluvchi bo'lib, internetda joylashtirilgan fayllarni tezda yuklab olishga yoki ularni xususiy tarmoq orqali pleerga zudlik bilan o'tkazishga imkon beradi, bu esa har qanday blokirovkalarni chetlab o'tishga imkon beradi.",
|
||||
"debrid_invalid_token": "Noto'g'ri API kalit",
|
||||
"debrid_api_token_hint": "API kalitni <0>bu yerda</0> olish mumkin",
|
||||
"real_debrid_free_account_error": "\"{{username}}\" hisobi - obunaga ega emas. Iltimos, Real-Debrid obunasini rasmiylashtiring",
|
||||
"debrid_linked_message": "\"{{username}}\" hisobi bog'langan",
|
||||
"save_changes": "O'zgarishlarni saqlash",
|
||||
"changes_saved": "O'zgarishlar muvaffaqiyatli saqlandi",
|
||||
"download_sources_description": "Hydra yuklab olish havolalarini ushbu manbalardan oladi. URL yuklab olish uchun havolalar bilan .json-fayliga to'g'ridan-to'g'ri havolani o'z ichiga olishi kerak.",
|
||||
"validate_download_source": "Tekshirish",
|
||||
"remove_download_source": "O'chirish",
|
||||
"add_download_source": "Manba qo'shish",
|
||||
"download_count_zero": "Ro'yxatda yuklab olishlar yo'q",
|
||||
"download_count_one": "Ro'yxatda {{countFormatted}} ta yuklab olish",
|
||||
"download_count_other": "Ro'yxatda {{countFormatted}} ta yuklab olish",
|
||||
"download_source_url": "Manba havolasi",
|
||||
"add_download_source_description": ".json-fayliga havolani joylang",
|
||||
"download_source_up_to_date": "Yangilangan",
|
||||
"download_source_errored": "Xato",
|
||||
"sync_download_sources": "Manbalarni yangilash",
|
||||
"removed_download_source": "Manba o'chirildi",
|
||||
"cancel_button_confirmation_delete_all_sources": "Yo'q",
|
||||
"confirm_button_confirmation_delete_all_sources": "Ha, barchasini o'chirish",
|
||||
"description_confirmation_delete_all_sources": "Siz barcha manbalarni o'chirasiz",
|
||||
"title_confirmation_delete_all_sources": "Barcha manbalarni o'chirish",
|
||||
"removed_download_sources": "Manbalar o'chirildi",
|
||||
"button_delete_all_sources": "Barcha manbalarni o'chirish",
|
||||
"added_download_source": "Manba qo'shildi",
|
||||
"download_sources_synced": "Barcha manbalar yangilandi",
|
||||
"insert_valid_json_url": "Amaldagi JSON-fayl URL'ini kiriting",
|
||||
"found_download_option_zero": "Yuklab olish variantlari topilmadi",
|
||||
"found_download_option_one": "{{countFormatted}} yuklab olish varianti topildi",
|
||||
"found_download_option_other": "{{countFormatted}} yuklab olish varianti topildi",
|
||||
"import": "Import qilish",
|
||||
"blocked_users": "Bloklangan foydalanuvchilar",
|
||||
"friends_only": "Faqat do'stlar uchun",
|
||||
"must_be_valid_url": "Manbada to'g'ri URL bo'lishi kerak",
|
||||
"privacy": "Maxfiylik",
|
||||
"private": "Shaxsiy",
|
||||
"profile_visibility": "Profil ko'rinuvchanligi",
|
||||
"profile_visibility_description": "Kim sizning profilingiz va kutubxonangizni ko'ra olishini tanlang",
|
||||
"public": "Ommaviy",
|
||||
"required_field": "Bu maydon to'ldirilishi shart",
|
||||
"source_already_exists": "Bu manba allaqachon qo'shilgan",
|
||||
"user_unblocked": "Foydalanuvchi blokdan chiqarildi",
|
||||
"seed_after_download_complete": "Yuklab olish tugagandan so'ng ulashish",
|
||||
"show_hidden_achievement_description": "Yashirin yutuqlarning tavsifini ularni olishdan oldin ko'rsatish",
|
||||
"account": "Hisob",
|
||||
"no_users_blocked": "Sizda bloklangan foydalanuvchilar yo'q",
|
||||
"subscription_active_until": "Hydra Cloud obunangiz {{date}} ga qadar faol",
|
||||
"manage_subscription": "Obunani boshqarish",
|
||||
"update_email": "Elektron pochtani yangilash",
|
||||
"update_password": "Parolni yangilash",
|
||||
"current_email": "Joriy elektron pochta:",
|
||||
"no_email_account": "Siz hali elektron pochta o'rnatmagansiz",
|
||||
"account_data_updated_successfully": "Hisob ma'lumotlari muvaffaqiyatli yangilandi",
|
||||
"renew_subscription": "Hydra Cloud obunasini yangilash",
|
||||
"subscription_expired_at": "Obunangiz muddati {{date}} da tugagan",
|
||||
"no_subscription": "Hydra'dan maksimal darajada bahramand bo'ling",
|
||||
"become_subscriber": "Hydra Cloud egasiga aylaning",
|
||||
"subscription_renew_cancelled": "Avtomatik yangilash o'chirilgan",
|
||||
"subscription_renews_on": "Obunangiz {{date}} da yangilanadi",
|
||||
"bill_sent_until": "Keyingi hisobingiz shu kungacha yuboriladi",
|
||||
"no_themes": "Sizda hali mavzular yo'qqa o'xshaydi, lekin tashvishlanmang, birinchi shoh asaringizni yaratish uchun shu yerni bosing",
|
||||
"editor_tab_code": "Kod",
|
||||
"editor_tab_info": "Ma'lumot",
|
||||
"editor_tab_save": "Saqlash",
|
||||
"web_store": "Veb-do'kon",
|
||||
"clear_themes": "Tozalash",
|
||||
"create_theme": "Yaratish",
|
||||
"create_theme_modal_title": "Maxsus mavzu yaratish",
|
||||
"create_theme_modal_description": "Hydra ko'rinishini sozlash uchun yangi mavzu yaratish",
|
||||
"theme_name": "Nomi",
|
||||
"insert_theme_name": "Mavzu nomini kiriting",
|
||||
"set_theme": "Mavzuni o'rnatish",
|
||||
"unset_theme": "Mavzuni olib tashlash",
|
||||
"delete_theme": "Mavzuni o'chirish",
|
||||
"edit_theme": "Mavzuni tahrirlash",
|
||||
"delete_all_themes": "Barcha mavzularni o'chirish",
|
||||
"delete_all_themes_description": "Bu barcha maxsus mavzularingizni o'chiradi",
|
||||
"delete_theme_description": "Bu {{theme}} mavzusini o'chirishga olib keladi",
|
||||
"cancel": "Bekor qilish",
|
||||
"appearance": "Tashqi ko'rinish",
|
||||
"enable_torbox": "TorBox'ni yoqish",
|
||||
"torbox_description": "TorBox - bu bozordagi eng yaxshi serverlar bilan ham raqobatlashadigan premium xizmatingiz.",
|
||||
"torbox_account_linked": "TorBox hisobi bog'langan",
|
||||
"real_debrid_account_linked": "Real-Debrid hisobi bog'langan",
|
||||
"create_real_debrid_account": "Agar sizda hali Real-Debrid hisobi bo'lmasa, shu yerni bosing",
|
||||
"create_torbox_account": "Agar sizda hali TorBox hisobi bo'lmasa, shu yerni bosing",
|
||||
"name_min_length": "Mavzu nomi kamida 3 ta belgi bo'lishi kerak",
|
||||
"import_theme": "Mavzuni import qilish",
|
||||
"import_theme_description": "Siz {{theme}} mavzusini mavzular do'konidan import qilmoqdasiz",
|
||||
"error_importing_theme": "Mavzuni import qilishda xato",
|
||||
"theme_imported": "Mavzu muvaffaqiyatli import qilindi",
|
||||
"enable_friend_request_notifications": "Do'stlar so'rovi olinganda",
|
||||
"enable_auto_install": "Yangilanishlarni avtomatik yuklab olish",
|
||||
"common_redist": "Kutubxonalar",
|
||||
"common_redist_description": "Ba'zi o'yinlarni ishga tushirish uchun kutubxonalar talab qilinadi. Muammolarning oldini olish uchun ularni o'rnatish tavsiya etiladi.",
|
||||
"install_common_redist": "O'rnatish",
|
||||
"installing_common_redist": "O'rnatilmoqda…",
|
||||
"show_download_speed_in_megabytes": "Yuklab olish tezligini sekundiga megabaytlarda ko'rsatish"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Yuklab olish yakunlandi",
|
||||
"game_ready_to_install": "{{title}} o'rnatishga tayyor",
|
||||
"repack_list_updated": "Repaklar ro'yxati yangilandi",
|
||||
"repack_count_one": "{{count}} repak qo'shildi",
|
||||
"repack_count_other": "{{count}} repak qo'shildi",
|
||||
"new_update_available": "Yangi {{version}} versiyasi mavjud",
|
||||
"restart_to_install_update": "Yangilanishni o'rnatish uchun Hydra'ni qayta ishga tushiring",
|
||||
"notification_achievement_unlocked_title": "{{game}} uchun yutuq ochildi",
|
||||
"notification_achievement_unlocked_body": "{{achievement}} va boshqa {{count}} ta yutuq ochildi",
|
||||
"new_friend_request_title": "Yangi do'stlik so'rovi",
|
||||
"new_friend_request_description": "Siz yangi do'stlik so'rovini oldingiz",
|
||||
"extraction_complete": "Arxivdan chiqarish yakunlandi",
|
||||
"game_extracted": "{{title}} muvaffaqiyatli arxivdan chiqarildi"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Hydra'ni ochish",
|
||||
"quit": "Chiqish"
|
||||
},
|
||||
"game_card": {
|
||||
"available_one": "Mavjud",
|
||||
"available_other": "Mavjud",
|
||||
"no_downloads": "Mavjud manbalar yo'q"
|
||||
},
|
||||
"binary_not_found_modal": {
|
||||
"title": "Dasturlar o'rnatilmagan",
|
||||
"description": "Wine yoki Lutris topilmadi",
|
||||
"instructions": "O'yin to'g'ri ishlashi uchun Linux distributivingizga ulardan birini o'rnatishning to'g'ri usulini bilib oling"
|
||||
},
|
||||
"modal": {
|
||||
"close": "Yopish"
|
||||
},
|
||||
"forms": {
|
||||
"toggle_password_visibility": "Parolni ko'rsatish"
|
||||
},
|
||||
"user_profile": {
|
||||
"amount_hours": "{{amount}} soat",
|
||||
"amount_minutes": "{{amount}} daqiqa",
|
||||
"last_time_played": "Oxirgi o'yin {{period}}",
|
||||
"activity": "So'nggi faollik",
|
||||
"library": "Kutubxona",
|
||||
"total_play_time": "Jami o'ynalgan vaqt",
|
||||
"no_recent_activity_title": "Hmm... Bu yerda hech narsa yo'q",
|
||||
"no_recent_activity_description": "Siz uzoq vaqtdan beri o'ynamagansiz. Buni o'zgartirish vaqti keldi!",
|
||||
"display_name": "Ko'rsatiladigan ism",
|
||||
"saving": "Saqlanmoqda",
|
||||
"save": "Saqlash",
|
||||
"edit_profile": "Profilni tahrirlash",
|
||||
"saved_successfully": "Muvaffaqiyatli saqlandi",
|
||||
"try_again": "Iltimos, qayta urinib ko'ring",
|
||||
"sign_out_modal_title": "Ishonchingiz komilmi?",
|
||||
"cancel": "Bekor qilish",
|
||||
"successfully_signed_out": "Tizimdan muvaffaqiyatli chiqdingiz",
|
||||
"sign_out": "Chiqish",
|
||||
"playing_for": "{{amount}} o'ynalgan",
|
||||
"sign_out_modal_text": "Sizning kutubxonangiz joriy hisob qaydnomangizga bog'langan. Tizimdan chiqsangiz, kutubxonangiz mavjud bo'lmaydi va progress saqlanmaydi. Chiqasizmi?",
|
||||
"add_friends": "Do'stlar qo'shish",
|
||||
"add": "Qo'shish",
|
||||
"friend_code": "Do'st kodi",
|
||||
"see_profile": "Profilni ko'rish",
|
||||
"sending": "Yuborilmoqda",
|
||||
"friend_request_sent": "Do'stlik so'rovi yuborildi",
|
||||
"friends": "Do'stlar",
|
||||
"friends_list": "Do'stlar ro'yxati",
|
||||
"user_not_found": "Foydalanuvchi topilmadi",
|
||||
"block_user": "Foydalanuvchini bloklash",
|
||||
"add_friend": "Do'st qo'shish",
|
||||
"request_sent": "So'rov yuborildi",
|
||||
"request_received": "So'rov qabul qilindi",
|
||||
"accept_request": "So'rovni qabul qilish",
|
||||
"ignore_request": "So'rovni e'tiborsiz qoldirish",
|
||||
"cancel_request": "So'rovni bekor qilish",
|
||||
"undo_friendship": "Do'stni o'chirish",
|
||||
"request_accepted": "So'rov qabul qilindi",
|
||||
"user_blocked_successfully": "Foydalanuvchi muvaffaqiyatli bloklandi",
|
||||
"user_block_modal_text": "{{displayName}} bloklanadi",
|
||||
"blocked_users": "Bloklangan foydalanuvchilar",
|
||||
"unblock": "Blokdan chiqarish",
|
||||
"no_friends_added": "Siz hali hech qanday do'st qo'shmagansiz",
|
||||
"pending": "Kutilmoqda",
|
||||
"no_pending_invites": "Sizda javob kutayotgan so'rovlar yo'q",
|
||||
"no_blocked_users": "Siz hech kimni bloklamagansiz",
|
||||
"friend_code_copied": "Do'st kodi nusxalandi",
|
||||
"displayname_max_length": "Ko'rsatiladigan ism 50 ta belgidan oshmasligi kerak",
|
||||
"displayname_min_length": "Ko'rsatiladigan ism kamida 3 ta belgidan iborat bo'lishi kerak",
|
||||
"image_process_failure": "Rasmni qayta ishlashda xatolik yuz berdi",
|
||||
"locked_profile": "Bu profil shaxsiy",
|
||||
"privacy_hint": "Uni kimlar ko'rishi mumkinligini belgilash uchun <0>Sozlamalar</0>ga o'ting",
|
||||
"profile_reported": "Profil haqida xabar berildi",
|
||||
"report": "Xabar berish",
|
||||
"report_description": "Qo'shimcha ma'lumot",
|
||||
"report_description_placeholder": "Qo'shimcha ma'lumot",
|
||||
"report_profile": "Bu profil haqida shikoyat qilish",
|
||||
"report_reason": "Nega bu profil haqida shikoyat qilyapsiz?",
|
||||
"report_reason_hate": "Nafrat qo'zg'atish",
|
||||
"report_reason_other": "Boshqa",
|
||||
"report_reason_sexual_content": "Jinsiy tarkib",
|
||||
"report_reason_spam": "Spam",
|
||||
"report_reason_violence": "Zo'ravonlik",
|
||||
"required_field": "Bu maydon to'ldirilishi shart",
|
||||
"undo_friendship_modal_text": "Bu {{displayName}} bilan do'stligingizni bekor qiladi",
|
||||
"your_friend_code": "Sizning do'st kodingiz:",
|
||||
"upload_banner": "Banner yuklash",
|
||||
"uploading_banner": "Banner yuklanmoqda...",
|
||||
"background_image_updated": "Fon rasmi yangilandi",
|
||||
"stats": "Statistika",
|
||||
"achievements": "Yutuqlar",
|
||||
"games": "O'yinlar",
|
||||
"top_percentile": "Yuqori {{percentile}}%",
|
||||
"ranking_updated_weekly": "Reyting har hafta yangilanadi",
|
||||
"playing": "{{game}}ni o'ynayapti",
|
||||
"achievements_unlocked": "Yutuqlar ochildi",
|
||||
"earned_points": "To'plangan ballar:",
|
||||
"show_achievements_on_profile": "Yutuqlaringizni profilingizda ko'rsating",
|
||||
"show_points_on_profile": "To'plangan ballarni profilingizda ko'rsating"
|
||||
},
|
||||
"achievement": {
|
||||
"achievement_unlocked": "Yutuq ochildi",
|
||||
"user_achievements": "{{displayName}}ning yutuqlari",
|
||||
"your_achievements": "Sizning yutuqlaringiz",
|
||||
"unlocked_at": "Ochilgan sana: {{date}}",
|
||||
"subscription_needed": "Bu kontentni ko'rish uchun Hydra Cloud obunasi kerak",
|
||||
"new_achievements_unlocked": "{{gameCount}} o'yindan {{achievementCount}} ta yangi yutuq ochildi",
|
||||
"achievement_progress": "{{unlockedCount}}/{{totalCount}} yutuq",
|
||||
"achievements_unlocked_for_game": "{{gameTitle}} uchun {{achievementCount}} ta yangi yutuq ochildi",
|
||||
"hidden_achievement_tooltip": "Bu yashirin yutuq",
|
||||
"achievement_earn_points": "Bu yutuq bilan {{points}} ball to'plang",
|
||||
"earned_points": "To'plangan ballar:",
|
||||
"available_points": "Mavjud ballar:",
|
||||
"how_to_earn_achievements_points": "Yutuq ballarini qanday to'plash mumkin?"
|
||||
},
|
||||
"hydra_cloud": {
|
||||
"subscription_tour_title": "Hydra Cloud obunasi",
|
||||
"subscribe_now": "Hoziroq obuna bo'ling",
|
||||
"cloud_saving": "Bulutli saqlash",
|
||||
"cloud_achievements": "Yutuqlaringizni bulutda saqlang",
|
||||
"animated_profile_picture": "Animatsiyali profil rasmi",
|
||||
"premium_support": "Premium qo'llab-quvvatlash",
|
||||
"show_and_compare_achievements": "Yutuqlaringizni boshqa foydalanuvchilarning yutuqlari bilan solishtiring va ko'rsating",
|
||||
"animated_profile_banner": "Animatsiyali profil banneri",
|
||||
"hydra_cloud": "Hydra Cloud",
|
||||
"hydra_cloud_feature_found": "Siz hozirgina Hydra Cloud funksiyasini kashf etdingiz!",
|
||||
"learn_more": "Batafsil ma'lumot",
|
||||
"debrid_description": "Nimbus bilan 4 barobar tezroq yuklab oling"
|
||||
}
|
||||
}
|
||||
@@ -111,7 +111,7 @@
|
||||
"options": "选项",
|
||||
"executable_section_title": "可执行文件",
|
||||
"executable_section_description": "点击 \"Play\" 时将执行的文件的路径",
|
||||
"downloads_secion_title": "下载",
|
||||
"downloads_section_title": "下载",
|
||||
"downloads_section_description": "查看此游戏的更新或其他版本",
|
||||
"danger_zone_section_title": "危险操作",
|
||||
"danger_zone_section_description": "从您的库或Hydra下载的文件中删除此游戏",
|
||||
|
||||
@@ -1,23 +1,32 @@
|
||||
import { app } from "electron";
|
||||
import path from "node:path";
|
||||
import { SystemPath } from "./services/system-path";
|
||||
|
||||
export const LUDUSAVI_MANIFEST_URL = "https://cdn.losbroxas.org/manifest.yaml";
|
||||
|
||||
export const defaultDownloadsPath = app.getPath("downloads");
|
||||
export const defaultDownloadsPath = SystemPath.getPath("downloads");
|
||||
|
||||
export const isStaging = import.meta.env.MAIN_VITE_API_URL.includes("staging");
|
||||
|
||||
export const windowsStartMenuPath = path.join(
|
||||
SystemPath.getPath("appData"),
|
||||
"Microsoft",
|
||||
"Windows",
|
||||
"Start Menu",
|
||||
"Programs"
|
||||
);
|
||||
|
||||
export const levelDatabasePath = path.join(
|
||||
app.getPath("userData"),
|
||||
SystemPath.getPath("userData"),
|
||||
`hydra-db${isStaging ? "-staging" : ""}`
|
||||
);
|
||||
|
||||
export const commonRedistPath = path.join(
|
||||
app.getPath("userData"),
|
||||
SystemPath.getPath("userData"),
|
||||
"CommonRedist"
|
||||
);
|
||||
|
||||
export const logsPath = path.join(app.getPath("userData"), "logs");
|
||||
export const logsPath = path.join(SystemPath.getPath("userData"), "logs");
|
||||
|
||||
export const seedsPath = app.isPackaged
|
||||
? path.join(process.resourcesPath, "seeds")
|
||||
@@ -27,7 +36,7 @@ export const achievementSoundPath = app.isPackaged
|
||||
? path.join(process.resourcesPath, "achievement.wav")
|
||||
: path.join(__dirname, "..", "..", "resources", "achievement.wav");
|
||||
|
||||
export const backupsPath = path.join(app.getPath("userData"), "Backups");
|
||||
export const backupsPath = path.join(SystemPath.getPath("userData"), "Backups");
|
||||
|
||||
export const appVersion = app.getVersion() + (isStaging ? "-staging" : "");
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import type { TrendingGame } from "@types";
|
||||
const getTrendingGames = async (_event: Electron.IpcMainInvokeEvent) => {
|
||||
const language = await db
|
||||
.get<string, string>(levelKeys.language, {
|
||||
valueEncoding: "utf-8",
|
||||
valueEncoding: "utf8",
|
||||
})
|
||||
.then((language) => language || "en");
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@ import * as tar from "tar";
|
||||
import { registerEvent } from "../register-event";
|
||||
import axios from "axios";
|
||||
import os from "node:os";
|
||||
import { app } from "electron";
|
||||
import path from "node:path";
|
||||
import { backupsPath } from "@main/constants";
|
||||
import type { GameShop } from "@types";
|
||||
|
||||
import YAML from "yaml";
|
||||
import { normalizePath } from "@main/helpers";
|
||||
import { SystemPath } from "@main/services/system-path";
|
||||
|
||||
export interface LudusaviBackup {
|
||||
files: {
|
||||
@@ -35,7 +35,7 @@ const replaceLudusaviBackupWithCurrentUser = (
|
||||
drives: Record<string, string>;
|
||||
};
|
||||
|
||||
const currentHomeDir = normalizePath(app.getPath("home"));
|
||||
const currentHomeDir = normalizePath(SystemPath.getPath("home"));
|
||||
|
||||
/* Renaming logic */
|
||||
if (os.platform() === "win32") {
|
||||
@@ -84,7 +84,7 @@ const downloadGameArtifact = async (
|
||||
homeDir: string;
|
||||
}>(`/profile/games/artifacts/${gameArtifactId}/download`);
|
||||
|
||||
const zipLocation = path.join(app.getPath("userData"), objectKey);
|
||||
const zipLocation = path.join(SystemPath.getPath("userData"), objectKey);
|
||||
const backupPath = path.join(backupsPath, `${shop}-${objectId}`);
|
||||
|
||||
if (fs.existsSync(backupPath)) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { registerEvent } from "../register-event";
|
||||
|
||||
import type { Game, GameShop } from "@types";
|
||||
import type { GameShop } from "@types";
|
||||
|
||||
import { steamGamesWorker } from "@main/workers";
|
||||
import { createGame } from "@main/services/library-sync";
|
||||
@@ -15,15 +15,14 @@ const addGameToLibrary = async (
|
||||
title: string
|
||||
) => {
|
||||
const gameKey = levelKeys.game(shop, objectId);
|
||||
const game = await gamesSublevel.get(gameKey);
|
||||
let game = await gamesSublevel.get(gameKey);
|
||||
|
||||
if (game) {
|
||||
await downloadsSublevel.del(gameKey);
|
||||
|
||||
await gamesSublevel.put(gameKey, {
|
||||
...game,
|
||||
isDeleted: false,
|
||||
});
|
||||
game.isDeleted = false;
|
||||
|
||||
await gamesSublevel.put(gameKey, game);
|
||||
} else {
|
||||
const steamGame = await steamGamesWorker.run(Number(objectId), {
|
||||
name: "getById",
|
||||
@@ -33,7 +32,7 @@ const addGameToLibrary = async (
|
||||
? steamUrlBuilder.icon(objectId, steamGame.clientIcon)
|
||||
: null;
|
||||
|
||||
const game: Game = {
|
||||
game = {
|
||||
title,
|
||||
iconUrl,
|
||||
objectId,
|
||||
@@ -44,12 +43,12 @@ const addGameToLibrary = async (
|
||||
lastTimePlayed: null,
|
||||
};
|
||||
|
||||
await gamesSublevel.put(levelKeys.game(shop, objectId), game);
|
||||
|
||||
await createGame(game).catch(() => {});
|
||||
|
||||
updateLocalUnlockedAchievements(game);
|
||||
await gamesSublevel.put(gameKey, game);
|
||||
}
|
||||
|
||||
await createGame(game).catch(() => {});
|
||||
|
||||
updateLocalUnlockedAchievements(game);
|
||||
};
|
||||
|
||||
registerEvent("addGameToLibrary", addGameToLibrary);
|
||||
|
||||
@@ -3,13 +3,16 @@ import createDesktopShortcut from "create-desktop-shortcuts";
|
||||
import path from "node:path";
|
||||
import { app } from "electron";
|
||||
import { removeSymbolsFromName } from "@shared";
|
||||
import { GameShop } from "@types";
|
||||
import { GameShop, ShortcutLocation } from "@types";
|
||||
import { gamesSublevel, levelKeys } from "@main/level";
|
||||
import { SystemPath } from "@main/services/system-path";
|
||||
import { windowsStartMenuPath } from "@main/constants";
|
||||
|
||||
const createGameShortcut = async (
|
||||
_event: Electron.IpcMainInvokeEvent,
|
||||
shop: GameShop,
|
||||
objectId: string
|
||||
objectId: string,
|
||||
location: ShortcutLocation
|
||||
): Promise<boolean> => {
|
||||
const gameKey = levelKeys.game(shop, objectId);
|
||||
const game = await gamesSublevel.get(gameKey);
|
||||
@@ -24,7 +27,10 @@ const createGameShortcut = async (
|
||||
const options = {
|
||||
filePath,
|
||||
name: removeSymbolsFromName(game.title),
|
||||
outputPath: app.getPath("desktop"),
|
||||
outputPath:
|
||||
location === "desktop"
|
||||
? SystemPath.getPath("desktop")
|
||||
: windowsStartMenuPath,
|
||||
};
|
||||
|
||||
return createDesktopShortcut({
|
||||
|
||||
@@ -6,7 +6,7 @@ import { db, levelKeys } from "@main/level";
|
||||
const getBadges = async (_event: Electron.IpcMainInvokeEvent) => {
|
||||
const language = await db
|
||||
.get<string, string>(levelKeys.language, {
|
||||
valueEncoding: "utf-8",
|
||||
valueEncoding: "utf8",
|
||||
})
|
||||
.then((language) => language || "en");
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { MAIN_LOOP_INTERVAL } from "@main/constants";
|
||||
import { registerEvent } from "../register-event";
|
||||
import { HydraApi, WindowManager } from "@main/services";
|
||||
import { publishNewFriendRequestNotification } from "@main/services/notifications";
|
||||
@@ -10,14 +9,12 @@ interface SyncState {
|
||||
tick: number;
|
||||
}
|
||||
|
||||
const ticksToUpdate = (2 * 60 * 1000) / MAIN_LOOP_INTERVAL; // 2 minutes
|
||||
|
||||
const syncState: SyncState = {
|
||||
friendRequestCount: null,
|
||||
tick: 0,
|
||||
};
|
||||
|
||||
const syncFriendRequests = async () => {
|
||||
export const syncFriendRequests = async () => {
|
||||
return HydraApi.get<FriendRequestSync>(`/profile/friend-requests/sync`)
|
||||
.then((res) => {
|
||||
if (
|
||||
@@ -44,16 +41,4 @@ const syncFriendRequests = async () => {
|
||||
});
|
||||
};
|
||||
|
||||
const syncFriendRequestsEvent = async (_event: Electron.IpcMainInvokeEvent) => {
|
||||
return syncFriendRequests();
|
||||
};
|
||||
|
||||
export const watchFriendRequests = async () => {
|
||||
if (syncState.tick % ticksToUpdate === 0) {
|
||||
await syncFriendRequests();
|
||||
}
|
||||
|
||||
syncState.tick++;
|
||||
};
|
||||
|
||||
registerEvent("syncFriendRequests", syncFriendRequestsEvent);
|
||||
registerEvent("syncFriendRequests", syncFriendRequests);
|
||||
|
||||
@@ -40,7 +40,7 @@ const startGameDownload = async (
|
||||
/* Delete any previous download */
|
||||
await downloadsSublevel.del(gameKey);
|
||||
|
||||
if (game?.isDeleted) {
|
||||
if (game) {
|
||||
await gamesSublevel.put(gameKey, {
|
||||
...game,
|
||||
isDeleted: false,
|
||||
|
||||
@@ -1,19 +1,8 @@
|
||||
import { registerEvent } from "../register-event";
|
||||
import AutoLaunch from "auto-launch";
|
||||
import { app } from "electron";
|
||||
import path from "path";
|
||||
import fs from "node:fs";
|
||||
import { logger } from "@main/services";
|
||||
|
||||
const windowsStartupPath = path.join(
|
||||
app.getPath("appData"),
|
||||
"Microsoft",
|
||||
"Windows",
|
||||
"Start Menu",
|
||||
"Programs",
|
||||
"Startup"
|
||||
);
|
||||
|
||||
const autoLaunch = async (
|
||||
_event: Electron.IpcMainInvokeEvent,
|
||||
autoLaunchProps: { enabled: boolean; minimized: boolean }
|
||||
@@ -30,10 +19,6 @@ const autoLaunch = async (
|
||||
logger.error(err);
|
||||
});
|
||||
} else {
|
||||
if (process.platform == "win32") {
|
||||
fs.rm(path.join(windowsStartupPath, "Hydra.vbs"), () => {});
|
||||
}
|
||||
|
||||
appLauncher.disable().catch((err) => {
|
||||
logger.error(err);
|
||||
});
|
||||
|
||||
@@ -16,7 +16,7 @@ const updateUserPreferences = async (
|
||||
|
||||
if (preferences.language) {
|
||||
await db.put<string, string>(levelKeys.language, preferences.language, {
|
||||
valueEncoding: "utf-8",
|
||||
valueEncoding: "utf8",
|
||||
});
|
||||
|
||||
i18next.changeLanguage(preferences.language);
|
||||
|
||||
242
src/main/generated/envelope.ts
Normal file
242
src/main/generated/envelope.ts
Normal file
@@ -0,0 +1,242 @@
|
||||
// @generated by protobuf-ts 2.10.0
|
||||
// @generated from protobuf file "envelope.proto" (syntax proto3)
|
||||
// tslint:disable
|
||||
import type { BinaryWriteOptions } from "@protobuf-ts/runtime";
|
||||
import type { IBinaryWriter } from "@protobuf-ts/runtime";
|
||||
import { WireType } from "@protobuf-ts/runtime";
|
||||
import type { BinaryReadOptions } from "@protobuf-ts/runtime";
|
||||
import type { IBinaryReader } from "@protobuf-ts/runtime";
|
||||
import { UnknownFieldHandler } from "@protobuf-ts/runtime";
|
||||
import type { PartialMessage } from "@protobuf-ts/runtime";
|
||||
import { reflectionMergePartial } from "@protobuf-ts/runtime";
|
||||
import { MessageType } from "@protobuf-ts/runtime";
|
||||
/**
|
||||
* @generated from protobuf message FriendRequest
|
||||
*/
|
||||
export interface FriendRequest {
|
||||
/**
|
||||
* @generated from protobuf field: int32 friend_request_count = 1;
|
||||
*/
|
||||
friendRequestCount: number;
|
||||
/**
|
||||
* @generated from protobuf field: optional string sender_id = 2;
|
||||
*/
|
||||
senderId?: string;
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message UpdateGamePlaytime
|
||||
*/
|
||||
export interface UpdateGamePlaytime {
|
||||
/**
|
||||
* @generated from protobuf field: int64 playtime_delta_in_seconds = 1;
|
||||
*/
|
||||
playtimeDeltaInSeconds: bigint;
|
||||
/**
|
||||
* @generated from protobuf field: string last_time_played = 2;
|
||||
*/
|
||||
lastTimePlayed: string;
|
||||
/**
|
||||
* @generated from protobuf field: string game_id = 3;
|
||||
*/
|
||||
gameId: string;
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message Envelope
|
||||
*/
|
||||
export interface Envelope {
|
||||
/**
|
||||
* @generated from protobuf oneof: payload
|
||||
*/
|
||||
payload: {
|
||||
oneofKind: "friendRequest";
|
||||
/**
|
||||
* @generated from protobuf field: FriendRequest friend_request = 1;
|
||||
*/
|
||||
friendRequest: FriendRequest;
|
||||
} | {
|
||||
oneofKind: "updateGamePlaytime";
|
||||
/**
|
||||
* @generated from protobuf field: UpdateGamePlaytime update_game_playtime = 2;
|
||||
*/
|
||||
updateGamePlaytime: UpdateGamePlaytime;
|
||||
} | {
|
||||
oneofKind: undefined;
|
||||
};
|
||||
}
|
||||
// @generated message type with reflection information, may provide speed optimized methods
|
||||
class FriendRequest$Type extends MessageType<FriendRequest> {
|
||||
constructor() {
|
||||
super("FriendRequest", [
|
||||
{ no: 1, name: "friend_request_count", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
|
||||
{ no: 2, name: "sender_id", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<FriendRequest>): FriendRequest {
|
||||
const message = globalThis.Object.create((this.messagePrototype!));
|
||||
message.friendRequestCount = 0;
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<FriendRequest>(this, message, value);
|
||||
return message;
|
||||
}
|
||||
internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FriendRequest): FriendRequest {
|
||||
let message = target ?? this.create(), end = reader.pos + length;
|
||||
while (reader.pos < end) {
|
||||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* int32 friend_request_count */ 1:
|
||||
message.friendRequestCount = reader.int32();
|
||||
break;
|
||||
case /* optional string sender_id */ 2:
|
||||
message.senderId = reader.string();
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
if (u === "throw")
|
||||
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
||||
let d = reader.skip(wireType);
|
||||
if (u !== false)
|
||||
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
||||
}
|
||||
}
|
||||
return message;
|
||||
}
|
||||
internalBinaryWrite(message: FriendRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* int32 friend_request_count = 1; */
|
||||
if (message.friendRequestCount !== 0)
|
||||
writer.tag(1, WireType.Varint).int32(message.friendRequestCount);
|
||||
/* optional string sender_id = 2; */
|
||||
if (message.senderId !== undefined)
|
||||
writer.tag(2, WireType.LengthDelimited).string(message.senderId);
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
||||
return writer;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @generated MessageType for protobuf message FriendRequest
|
||||
*/
|
||||
export const FriendRequest = new FriendRequest$Type();
|
||||
// @generated message type with reflection information, may provide speed optimized methods
|
||||
class UpdateGamePlaytime$Type extends MessageType<UpdateGamePlaytime> {
|
||||
constructor() {
|
||||
super("UpdateGamePlaytime", [
|
||||
{ no: 1, name: "playtime_delta_in_seconds", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 2, name: "last_time_played", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
|
||||
{ no: 3, name: "game_id", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<UpdateGamePlaytime>): UpdateGamePlaytime {
|
||||
const message = globalThis.Object.create((this.messagePrototype!));
|
||||
message.playtimeDeltaInSeconds = 0n;
|
||||
message.lastTimePlayed = "";
|
||||
message.gameId = "";
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<UpdateGamePlaytime>(this, message, value);
|
||||
return message;
|
||||
}
|
||||
internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: UpdateGamePlaytime): UpdateGamePlaytime {
|
||||
let message = target ?? this.create(), end = reader.pos + length;
|
||||
while (reader.pos < end) {
|
||||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* int64 playtime_delta_in_seconds */ 1:
|
||||
message.playtimeDeltaInSeconds = reader.int64().toBigInt();
|
||||
break;
|
||||
case /* string last_time_played */ 2:
|
||||
message.lastTimePlayed = reader.string();
|
||||
break;
|
||||
case /* string game_id */ 3:
|
||||
message.gameId = reader.string();
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
if (u === "throw")
|
||||
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
||||
let d = reader.skip(wireType);
|
||||
if (u !== false)
|
||||
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
||||
}
|
||||
}
|
||||
return message;
|
||||
}
|
||||
internalBinaryWrite(message: UpdateGamePlaytime, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* int64 playtime_delta_in_seconds = 1; */
|
||||
if (message.playtimeDeltaInSeconds !== 0n)
|
||||
writer.tag(1, WireType.Varint).int64(message.playtimeDeltaInSeconds);
|
||||
/* string last_time_played = 2; */
|
||||
if (message.lastTimePlayed !== "")
|
||||
writer.tag(2, WireType.LengthDelimited).string(message.lastTimePlayed);
|
||||
/* string game_id = 3; */
|
||||
if (message.gameId !== "")
|
||||
writer.tag(3, WireType.LengthDelimited).string(message.gameId);
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
||||
return writer;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @generated MessageType for protobuf message UpdateGamePlaytime
|
||||
*/
|
||||
export const UpdateGamePlaytime = new UpdateGamePlaytime$Type();
|
||||
// @generated message type with reflection information, may provide speed optimized methods
|
||||
class Envelope$Type extends MessageType<Envelope> {
|
||||
constructor() {
|
||||
super("Envelope", [
|
||||
{ no: 1, name: "friend_request", kind: "message", oneof: "payload", T: () => FriendRequest },
|
||||
{ no: 2, name: "update_game_playtime", kind: "message", oneof: "payload", T: () => UpdateGamePlaytime }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<Envelope>): Envelope {
|
||||
const message = globalThis.Object.create((this.messagePrototype!));
|
||||
message.payload = { oneofKind: undefined };
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<Envelope>(this, message, value);
|
||||
return message;
|
||||
}
|
||||
internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Envelope): Envelope {
|
||||
let message = target ?? this.create(), end = reader.pos + length;
|
||||
while (reader.pos < end) {
|
||||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* FriendRequest friend_request */ 1:
|
||||
message.payload = {
|
||||
oneofKind: "friendRequest",
|
||||
friendRequest: FriendRequest.internalBinaryRead(reader, reader.uint32(), options, (message.payload as any).friendRequest)
|
||||
};
|
||||
break;
|
||||
case /* UpdateGamePlaytime update_game_playtime */ 2:
|
||||
message.payload = {
|
||||
oneofKind: "updateGamePlaytime",
|
||||
updateGamePlaytime: UpdateGamePlaytime.internalBinaryRead(reader, reader.uint32(), options, (message.payload as any).updateGamePlaytime)
|
||||
};
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
if (u === "throw")
|
||||
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
||||
let d = reader.skip(wireType);
|
||||
if (u !== false)
|
||||
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
||||
}
|
||||
}
|
||||
return message;
|
||||
}
|
||||
internalBinaryWrite(message: Envelope, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* FriendRequest friend_request = 1; */
|
||||
if (message.payload.oneofKind === "friendRequest")
|
||||
FriendRequest.internalBinaryWrite(message.payload.friendRequest, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
|
||||
/* UpdateGamePlaytime update_game_playtime = 2; */
|
||||
if (message.payload.oneofKind === "updateGamePlaytime")
|
||||
UpdateGamePlaytime.internalBinaryWrite(message.payload.updateGamePlaytime, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
||||
return writer;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @generated MessageType for protobuf message Envelope
|
||||
*/
|
||||
export const Envelope = new Envelope$Type();
|
||||
@@ -59,9 +59,11 @@ app.whenReady().then(async () => {
|
||||
|
||||
await loadState();
|
||||
|
||||
const language = await db.get<string, string>(levelKeys.language, {
|
||||
valueEncoding: "utf-8",
|
||||
});
|
||||
const language = await db
|
||||
.get<string, string>(levelKeys.language, {
|
||||
valueEncoding: "utf8",
|
||||
})
|
||||
.catch(() => "en");
|
||||
|
||||
if (language) i18n.changeLanguage(language);
|
||||
|
||||
|
||||
@@ -14,4 +14,5 @@ export const levelKeys = {
|
||||
userPreferences: "userPreferences",
|
||||
language: "language",
|
||||
screenState: "screenState",
|
||||
rpcPassword: "rpcPassword",
|
||||
};
|
||||
|
||||
@@ -10,8 +10,11 @@ import type { UserPreferences } from "@types";
|
||||
import { TorBoxClient } from "./services/download/torbox";
|
||||
import { CommonRedistManager } from "./services/common-redist-manager";
|
||||
import { WSManager } from "./services/ws-manager";
|
||||
import { SystemPath } from "./services/system-path";
|
||||
|
||||
export const loadState = async () => {
|
||||
SystemPath.checkIfPathsAreAvailable();
|
||||
|
||||
const userPreferences = await db.get<string, UserPreferences | null>(
|
||||
levelKeys.userPreferences,
|
||||
{
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
import path from "node:path";
|
||||
import fs from "node:fs";
|
||||
import { app } from "electron";
|
||||
import type { Game, AchievementFile } from "@types";
|
||||
import { Cracker } from "@shared";
|
||||
import { achievementsLogger } from "../logger";
|
||||
import { SystemPath } from "../system-path";
|
||||
|
||||
const getAppDataPath = () => {
|
||||
if (process.platform === "win32") {
|
||||
return app.getPath("appData");
|
||||
return SystemPath.getPath("appData");
|
||||
}
|
||||
|
||||
const user = app.getPath("home").split("/").pop();
|
||||
const user = SystemPath.getPath("home").split("/").pop();
|
||||
|
||||
return path.join("drive_c", "users", user || "", "AppData", "Roaming");
|
||||
};
|
||||
|
||||
const getDocumentsPath = () => {
|
||||
if (process.platform === "win32") {
|
||||
return app.getPath("documents");
|
||||
return SystemPath.getPath("documents");
|
||||
}
|
||||
|
||||
const user = app.getPath("home").split("/").pop();
|
||||
const user = SystemPath.getPath("home").split("/").pop();
|
||||
|
||||
return path.join("drive_c", "users", user || "", "Documents");
|
||||
};
|
||||
@@ -38,7 +38,7 @@ const getLocalAppDataPath = () => {
|
||||
return path.join(appData, "..", "Local");
|
||||
}
|
||||
|
||||
const user = app.getPath("home").split("/").pop();
|
||||
const user = SystemPath.getPath("home").split("/").pop();
|
||||
|
||||
return path.join("drive_c", "users", user || "", "AppData", "Local");
|
||||
};
|
||||
|
||||
@@ -25,7 +25,7 @@ export const getGameAchievementData = async (
|
||||
|
||||
const language = await db
|
||||
.get<string, string>(levelKeys.language, {
|
||||
valueEncoding: "utf-8",
|
||||
valueEncoding: "utf8",
|
||||
})
|
||||
.then((language) => language || "en");
|
||||
|
||||
|
||||
@@ -208,6 +208,19 @@ const processSkidrow = (unlockedAchievements: any): UnlockedAchievement[] => {
|
||||
const processGoldberg = (unlockedAchievements: any): UnlockedAchievement[] => {
|
||||
const newUnlockedAchievements: UnlockedAchievement[] = [];
|
||||
|
||||
if (Array.isArray(unlockedAchievements)) {
|
||||
for (const achievement of unlockedAchievements) {
|
||||
if (achievement?.earned) {
|
||||
newUnlockedAchievements.push({
|
||||
name: achievement.name,
|
||||
unlockTime: achievement.earned_time * 1000,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return newUnlockedAchievements;
|
||||
}
|
||||
|
||||
for (const achievement of Object.keys(unlockedAchievements)) {
|
||||
const unlockedAchievement = unlockedAchievements[achievement];
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { levelKeys, gamesSublevel, db } from "@main/level";
|
||||
import { app } from "electron";
|
||||
import path from "node:path";
|
||||
import * as tar from "tar";
|
||||
import crypto from "node:crypto";
|
||||
@@ -15,6 +14,7 @@ import axios from "axios";
|
||||
import { Ludusavi } from "./ludusavi";
|
||||
import { formatDate, SubscriptionRequiredError } from "@shared";
|
||||
import i18next, { t } from "i18next";
|
||||
import { SystemPath } from "./system-path";
|
||||
|
||||
export class CloudSync {
|
||||
public static getBackupLabel(automatic: boolean) {
|
||||
@@ -102,7 +102,7 @@ export class CloudSync {
|
||||
shop,
|
||||
objectId,
|
||||
hostname: os.hostname(),
|
||||
homeDir: normalizePath(app.getPath("home")),
|
||||
homeDir: normalizePath(SystemPath.getPath("home")),
|
||||
downloadOptionTitle,
|
||||
platform: os.platform(),
|
||||
label,
|
||||
|
||||
@@ -4,24 +4,21 @@ import fs from "node:fs";
|
||||
import cp from "node:child_process";
|
||||
import path from "node:path";
|
||||
import { logger } from "./logger";
|
||||
import { app } from "electron";
|
||||
import { WindowManager } from "./window-manager";
|
||||
import { SystemPath } from "./system-path";
|
||||
|
||||
export class CommonRedistManager {
|
||||
private static readonly redistributables = [
|
||||
"dotNetFx40_Full_setup.exe",
|
||||
"dxwebsetup.exe",
|
||||
"directx_Jun2010_redist.exe",
|
||||
"oalinst.exe",
|
||||
"install.bat",
|
||||
"vcredist_2015-2019_x64.exe",
|
||||
"vcredist_2015-2019_x86.exe",
|
||||
"vcredist_x64.exe",
|
||||
"vcredist_x86.exe",
|
||||
"xnafx40_redist.msi",
|
||||
"VisualCppRedist_AIO_x86_x64.exe",
|
||||
];
|
||||
private static readonly installationTimeout = 1000 * 60 * 5; // 5 minutes
|
||||
private static readonly installationLog = path.join(
|
||||
app.getPath("temp"),
|
||||
SystemPath.getPath("temp"),
|
||||
"common_redist_install.log"
|
||||
);
|
||||
|
||||
@@ -47,6 +44,8 @@ export class CommonRedistManager {
|
||||
fs.readFile(this.installationLog, "utf-8", (err, data) => {
|
||||
if (err) return logger.error("Error reading log file:", err);
|
||||
|
||||
logger.log("Redist log file updated:", data);
|
||||
|
||||
const tail = data.split("\n").at(-2)?.trim();
|
||||
|
||||
if (tail?.includes(installationCompleteMessage)) {
|
||||
@@ -92,7 +91,7 @@ export class CommonRedistManager {
|
||||
for (const redist of this.redistributables) {
|
||||
const filePath = path.join(commonRedistPath, redist);
|
||||
|
||||
if (fs.existsSync(filePath)) {
|
||||
if (fs.existsSync(filePath) && redist !== "install.bat") {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ import { getUserData } from "./user/get-user-data";
|
||||
import { db } from "@main/level";
|
||||
import { levelKeys } from "@main/level/sublevels";
|
||||
import type { Auth, User } from "@types";
|
||||
import { WSManager } from "./ws-manager";
|
||||
|
||||
interface HydraApiOptions {
|
||||
needsAuth?: boolean;
|
||||
@@ -101,6 +102,8 @@ export class HydraApi {
|
||||
WindowManager.mainWindow.webContents.send("on-signin");
|
||||
await clearGamesRemoteIds();
|
||||
uploadGamesBatch();
|
||||
WSManager.close();
|
||||
WSManager.connect();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import { gamesSublevel, levelKeys } from "@main/level";
|
||||
export const createGame = async (game: Game) => {
|
||||
return HydraApi.post(`/profile/games`, {
|
||||
objectId: game.objectId,
|
||||
playTimeInMilliseconds: Math.trunc(game.playTimeInMilliseconds),
|
||||
playTimeInMilliseconds: Math.trunc(game.playTimeInMilliseconds ?? 0),
|
||||
shop: game.shop,
|
||||
lastTimePlayed: game.lastTimePlayed,
|
||||
}).then((response) => {
|
||||
|
||||
@@ -8,9 +8,13 @@ import YAML from "yaml";
|
||||
|
||||
import ludusaviWorkerPath from "../workers/ludusavi.worker?modulePath";
|
||||
import { LUDUSAVI_MANIFEST_URL } from "@main/constants";
|
||||
import { SystemPath } from "./system-path";
|
||||
|
||||
export class Ludusavi {
|
||||
private static ludusaviPath = path.join(app.getPath("appData"), "ludusavi");
|
||||
private static ludusaviPath = path.join(
|
||||
SystemPath.getPath("appData"),
|
||||
"ludusavi"
|
||||
);
|
||||
private static ludusaviConfigPath = path.join(
|
||||
this.ludusaviPath,
|
||||
"config.yaml"
|
||||
|
||||
@@ -3,7 +3,6 @@ import { DownloadManager } from "./download";
|
||||
import { watchProcesses } from "./process-watcher";
|
||||
import { AchievementWatcherManager } from "./achievements/achievement-watcher-manager";
|
||||
import { UpdateManager } from "./update-manager";
|
||||
import { watchFriendRequests } from "@main/events/profile/sync-friend-requests";
|
||||
import { MAIN_LOOP_INTERVAL } from "@main/constants";
|
||||
|
||||
export const startMainLoop = async () => {
|
||||
@@ -11,7 +10,6 @@ export const startMainLoop = async () => {
|
||||
while (true) {
|
||||
await Promise.allSettled([
|
||||
watchProcesses(),
|
||||
watchFriendRequests(),
|
||||
DownloadManager.watchDownloads(),
|
||||
AchievementWatcherManager.watchAchievements(),
|
||||
DownloadManager.getSeedStatus(),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Notification, app } from "electron";
|
||||
import { Notification } from "electron";
|
||||
import { t } from "i18next";
|
||||
import trayIcon from "@resources/tray-icon.png?asset";
|
||||
import fs from "node:fs";
|
||||
@@ -13,13 +13,14 @@ import { WindowManager } from "../window-manager";
|
||||
import type { Game, UserPreferences } from "@types";
|
||||
import { db, levelKeys } from "@main/level";
|
||||
import { restartAndInstallUpdate } from "@main/events/autoupdater/restart-and-install-update";
|
||||
import { SystemPath } from "../system-path";
|
||||
|
||||
async function downloadImage(url: string | null) {
|
||||
if (!url) return undefined;
|
||||
if (!url.startsWith("http")) return undefined;
|
||||
|
||||
const fileName = url.split("/").pop()!;
|
||||
const outputPath = path.join(app.getPath("temp"), fileName);
|
||||
const outputPath = path.join(SystemPath.getPath("temp"), fileName);
|
||||
const writer = fs.createWriteStream(outputPath);
|
||||
|
||||
const response = await axios.get(url, {
|
||||
@@ -80,7 +81,9 @@ export const publishNotificationUpdateReadyToInstall = async (
|
||||
.show();
|
||||
};
|
||||
|
||||
export const publishNewFriendRequestNotification = async () => {
|
||||
export const publishNewFriendRequestNotification = async (
|
||||
senderProfileImageUrl?: string
|
||||
) => {
|
||||
const userPreferences = await db.get<string, UserPreferences | null>(
|
||||
levelKeys.userPreferences,
|
||||
{
|
||||
@@ -97,7 +100,9 @@ export const publishNewFriendRequestNotification = async () => {
|
||||
body: t("new_friend_request_description", {
|
||||
ns: "notifications",
|
||||
}),
|
||||
icon: trayIcon,
|
||||
icon: senderProfileImageUrl
|
||||
? await downloadImage(senderProfileImageUrl)
|
||||
: trayIcon,
|
||||
}).show();
|
||||
};
|
||||
|
||||
|
||||
@@ -7,7 +7,8 @@ import crypto from "node:crypto";
|
||||
|
||||
import { pythonRpcLogger } from "./logger";
|
||||
import { Readable } from "node:stream";
|
||||
import { app, dialog } from "electron";
|
||||
import { app, dialog, safeStorage } from "electron";
|
||||
import { db, levelKeys } from "@main/level";
|
||||
|
||||
interface GamePayload {
|
||||
game_id: string;
|
||||
@@ -30,17 +31,12 @@ const rustBinaryNameByPlatform: Partial<Record<NodeJS.Platform, string>> = {
|
||||
export class PythonRPC {
|
||||
public static readonly BITTORRENT_PORT = "5881";
|
||||
public static readonly RPC_PORT = "8084";
|
||||
private static readonly RPC_PASSWORD = crypto.randomBytes(32).toString("hex");
|
||||
|
||||
private static pythonProcess: cp.ChildProcess | null = null;
|
||||
|
||||
public static readonly rpc = axios.create({
|
||||
baseURL: `http://localhost:${this.RPC_PORT}`,
|
||||
headers: {
|
||||
"x-hydra-rpc-password": this.RPC_PASSWORD,
|
||||
},
|
||||
});
|
||||
|
||||
private static pythonProcess: cp.ChildProcess | null = null;
|
||||
|
||||
private static logStderr(readable: Readable | null) {
|
||||
if (!readable) return;
|
||||
|
||||
@@ -48,14 +44,37 @@ export class PythonRPC {
|
||||
readable.on("data", pythonRpcLogger.log);
|
||||
}
|
||||
|
||||
public static spawn(
|
||||
private static async getRPCPassword() {
|
||||
const existingPassword = await db.get(levelKeys.rpcPassword, {
|
||||
valueEncoding: "utf8",
|
||||
});
|
||||
|
||||
if (existingPassword)
|
||||
return safeStorage.decryptString(Buffer.from(existingPassword, "hex"));
|
||||
|
||||
const newPassword = crypto.randomBytes(32).toString("hex");
|
||||
|
||||
await db.put(
|
||||
levelKeys.rpcPassword,
|
||||
safeStorage.encryptString(newPassword).toString("hex"),
|
||||
{
|
||||
valueEncoding: "utf8",
|
||||
}
|
||||
);
|
||||
|
||||
return newPassword;
|
||||
}
|
||||
|
||||
public static async spawn(
|
||||
initialDownload?: GamePayload,
|
||||
initialSeeding?: GamePayload[]
|
||||
) {
|
||||
const rpcPassword = await this.getRPCPassword();
|
||||
|
||||
const commonArgs = [
|
||||
this.BITTORRENT_PORT,
|
||||
this.RPC_PORT,
|
||||
this.RPC_PASSWORD,
|
||||
rpcPassword,
|
||||
initialDownload ? JSON.stringify(initialDownload) : "",
|
||||
initialSeeding ? JSON.stringify(initialSeeding) : "",
|
||||
app.isPackaged
|
||||
@@ -116,6 +135,8 @@ export class PythonRPC {
|
||||
|
||||
this.pythonProcess = childProcess;
|
||||
}
|
||||
|
||||
this.rpc.defaults.headers.common["x-hydra-rpc-password"] = rpcPassword;
|
||||
}
|
||||
|
||||
public static kill() {
|
||||
|
||||
45
src/main/services/system-path.ts
Normal file
45
src/main/services/system-path.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import { app, dialog } from "electron";
|
||||
import { logger } from "./logger";
|
||||
|
||||
export class SystemPath {
|
||||
static readonly paths = {
|
||||
userData: "userData",
|
||||
downloads: "downloads",
|
||||
documents: "documents",
|
||||
desktop: "desktop",
|
||||
home: "home",
|
||||
appData: "appData",
|
||||
temp: "temp",
|
||||
};
|
||||
|
||||
static checkIfPathsAreAvailable() {
|
||||
const paths = Object.keys(SystemPath.paths) as Array<
|
||||
keyof typeof SystemPath.paths
|
||||
>;
|
||||
|
||||
paths.forEach((pathName) => {
|
||||
try {
|
||||
app.getPath(pathName);
|
||||
} catch (error) {
|
||||
logger.error(`Error getting path ${pathName}`);
|
||||
if (error instanceof Error) {
|
||||
logger.error(error.message, error.stack);
|
||||
}
|
||||
|
||||
dialog.showErrorBox(
|
||||
`Hydra was not able to find path for '${pathName}' system folder`,
|
||||
`Some functionalities may not work as expected.\nPlease check your system settings.`
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static getPath(pathName: keyof typeof SystemPath.paths): string {
|
||||
try {
|
||||
return app.getPath(pathName);
|
||||
} catch (error) {
|
||||
logger.error(`Error getting path: ${error}`);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,7 @@ import trayIcon from "@resources/tray-icon.png?asset";
|
||||
import { HydraApi } from "./hydra-api";
|
||||
import UserAgent from "user-agents";
|
||||
import { db, gamesSublevel, levelKeys } from "@main/level";
|
||||
import { slice, sortBy } from "lodash-es";
|
||||
import { orderBy, slice } from "lodash-es";
|
||||
import type { ScreenState, UserPreferences } from "@types";
|
||||
import { AuthPage } from "@shared";
|
||||
import { isStaging } from "@main/constants";
|
||||
@@ -370,14 +370,14 @@ export class WindowManager {
|
||||
!game.isDeleted && game.executablePath && game.lastTimePlayed
|
||||
);
|
||||
|
||||
const sortedGames = sortBy(filteredGames, "lastTimePlayed", "DESC");
|
||||
const sortedGames = orderBy(filteredGames, "lastTimePlayed", "desc");
|
||||
|
||||
return slice(sortedGames, 5);
|
||||
return slice(sortedGames, 0, 6);
|
||||
});
|
||||
|
||||
const recentlyPlayedGames: Array<MenuItemConstructorOptions | MenuItem> =
|
||||
games.map(({ title, executablePath }) => ({
|
||||
label: title.length > 15 ? `${title.slice(0, 15)}…` : title,
|
||||
label: title.length > 18 ? `${title.slice(0, 18)}…` : title,
|
||||
type: "normal",
|
||||
click: async () => {
|
||||
if (!executablePath) return;
|
||||
@@ -418,7 +418,10 @@ export class WindowManager {
|
||||
},
|
||||
]);
|
||||
|
||||
tray.setContextMenu(contextMenu);
|
||||
if (process.platform === "linux") {
|
||||
tray.setContextMenu(contextMenu);
|
||||
}
|
||||
|
||||
return contextMenu;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
import { WebSocket } from "ws";
|
||||
import { HydraApi } from "./hydra-api";
|
||||
import { Envelope } from "@main/generated/envelope";
|
||||
import { logger } from "./logger";
|
||||
import { WindowManager } from "./window-manager";
|
||||
|
||||
export class WSManager {
|
||||
private static ws: WebSocket;
|
||||
private static ws: WebSocket | null = null;
|
||||
private static reconnectInterval = 1000;
|
||||
private static maxReconnectInterval = 30000;
|
||||
private static reconnectAttempts = 0;
|
||||
private static reconnecting = false;
|
||||
|
||||
static async connect() {
|
||||
const { token } = await HydraApi.post<{ token: string }>("/auth/ws");
|
||||
|
||||
console.log("WS TOKEN", token);
|
||||
|
||||
this.ws = new WebSocket(import.meta.env.MAIN_VITE_WS_URL, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
@@ -16,15 +21,55 @@ export class WSManager {
|
||||
});
|
||||
|
||||
this.ws.on("open", () => {
|
||||
console.log("open");
|
||||
});
|
||||
|
||||
this.ws.on("error", (error) => {
|
||||
console.error(error);
|
||||
logger.info("WS connected");
|
||||
this.reconnectInterval = 1000;
|
||||
this.reconnecting = false;
|
||||
});
|
||||
|
||||
this.ws.on("message", (message) => {
|
||||
console.log(message);
|
||||
const envelope = Envelope.fromBinary(
|
||||
new Uint8Array(Buffer.from(message.toString()))
|
||||
);
|
||||
|
||||
if (envelope.payload.oneofKind === "friendRequest") {
|
||||
WindowManager.mainWindow?.webContents.send("on-sync-friend-requests", {
|
||||
friendRequestCount: envelope.payload.friendRequest.friendRequestCount,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
this.ws.on("close", () => {
|
||||
logger.warn("WS closed. Attempting reconnect...");
|
||||
this.tryReconnect();
|
||||
});
|
||||
|
||||
this.ws.on("error", (err) => {
|
||||
logger.error("WS error:", err);
|
||||
this.tryReconnect();
|
||||
});
|
||||
}
|
||||
|
||||
private static async tryReconnect() {
|
||||
if (this.reconnecting) return;
|
||||
|
||||
this.reconnecting = true;
|
||||
this.reconnectAttempts++;
|
||||
|
||||
const waitTime = Math.min(
|
||||
this.reconnectInterval * 2 ** this.reconnectAttempts,
|
||||
this.maxReconnectInterval
|
||||
);
|
||||
logger.info(`Reconnecting in ${waitTime / 1000}s...`);
|
||||
|
||||
setTimeout(() => {
|
||||
this.connect();
|
||||
}, waitTime);
|
||||
}
|
||||
|
||||
public static async close() {
|
||||
if (this.ws) {
|
||||
this.ws.close();
|
||||
this.ws = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import type {
|
||||
GameAchievement,
|
||||
Theme,
|
||||
FriendRequestSync,
|
||||
ShortcutLocation,
|
||||
} from "@types";
|
||||
import type { AuthPage, CatalogueCategory } from "@shared";
|
||||
import type { AxiosProgressEvent } from "axios";
|
||||
@@ -122,8 +123,11 @@ contextBridge.exposeInMainWorld("electron", {
|
||||
),
|
||||
addGameToLibrary: (shop: GameShop, objectId: string, title: string) =>
|
||||
ipcRenderer.invoke("addGameToLibrary", shop, objectId, title),
|
||||
createGameShortcut: (shop: GameShop, objectId: string) =>
|
||||
ipcRenderer.invoke("createGameShortcut", shop, objectId),
|
||||
createGameShortcut: (
|
||||
shop: GameShop,
|
||||
objectId: string,
|
||||
location: ShortcutLocation
|
||||
) => ipcRenderer.invoke("createGameShortcut", shop, objectId, location),
|
||||
updateExecutablePath: (
|
||||
shop: GameShop,
|
||||
objectId: string,
|
||||
|
||||
@@ -20,7 +20,6 @@ import {
|
||||
setUserDetails,
|
||||
setProfileBackground,
|
||||
setGameRunning,
|
||||
setFriendRequestCount,
|
||||
} from "@renderer/features";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { UserFriendModal } from "./pages/shared-modals/user-friend-modal";
|
||||
@@ -155,16 +154,6 @@ export function App() {
|
||||
});
|
||||
}, [fetchUserDetails, t, showSuccessToast, updateUserDetails]);
|
||||
|
||||
useEffect(() => {
|
||||
const unsubscribe = window.electron.onSyncFriendRequests((result) => {
|
||||
dispatch(setFriendRequestCount(result.friendRequestCount));
|
||||
});
|
||||
|
||||
return () => {
|
||||
unsubscribe();
|
||||
};
|
||||
}, [dispatch]);
|
||||
|
||||
useEffect(() => {
|
||||
const unsubscribe = window.electron.onGamesRunning((gamesRunning) => {
|
||||
if (gamesRunning.length) {
|
||||
|
||||
@@ -85,5 +85,6 @@
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
line-height: 1.15;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,8 @@ import { sortBy } from "lodash-es";
|
||||
import cn from "classnames";
|
||||
import { CommentDiscussionIcon } from "@primer/octicons-react";
|
||||
import { SidebarGameItem } from "./sidebar-game-item";
|
||||
import { setFriendRequestCount } from "@renderer/features/user-details-slice";
|
||||
import { useDispatch } from "react-redux";
|
||||
|
||||
const SIDEBAR_MIN_WIDTH = 200;
|
||||
const SIDEBAR_INITIAL_WIDTH = 250;
|
||||
@@ -33,6 +35,8 @@ const initialSidebarWidth = window.localStorage.getItem("sidebarWidth");
|
||||
export function Sidebar() {
|
||||
const filterRef = useRef<HTMLInputElement>(null);
|
||||
|
||||
const dispatch = useDispatch();
|
||||
|
||||
const { t } = useTranslation("sidebar");
|
||||
const { library, updateLibrary } = useLibrary();
|
||||
const navigate = useNavigate();
|
||||
@@ -60,6 +64,16 @@ export function Sidebar() {
|
||||
updateLibrary();
|
||||
}, [lastPacket?.gameId, updateLibrary]);
|
||||
|
||||
useEffect(() => {
|
||||
const unsubscribe = window.electron.onSyncFriendRequests((result) => {
|
||||
dispatch(setFriendRequestCount(result.friendRequestCount));
|
||||
});
|
||||
|
||||
return () => {
|
||||
unsubscribe();
|
||||
};
|
||||
}, [dispatch]);
|
||||
|
||||
const sidebarRef = useRef<HTMLElement>(null);
|
||||
|
||||
const cursorPos = useRef({ x: 0 });
|
||||
|
||||
7
src/renderer/src/declaration.d.ts
vendored
7
src/renderer/src/declaration.d.ts
vendored
@@ -32,6 +32,7 @@ import type {
|
||||
Theme,
|
||||
Badge,
|
||||
Auth,
|
||||
ShortcutLocation,
|
||||
} from "@types";
|
||||
import type { AxiosProgressEvent } from "axios";
|
||||
import type disk from "diskusage";
|
||||
@@ -101,7 +102,11 @@ declare global {
|
||||
objectId: string,
|
||||
title: string
|
||||
) => Promise<void>;
|
||||
createGameShortcut: (shop: GameShop, objectId: string) => Promise<boolean>;
|
||||
createGameShortcut: (
|
||||
shop: GameShop,
|
||||
objectId: string,
|
||||
location: ShortcutLocation
|
||||
) => Promise<boolean>;
|
||||
updateExecutablePath: (
|
||||
shop: GameShop,
|
||||
objectId: string,
|
||||
|
||||
@@ -26,7 +26,7 @@ export const toastSlice = createSlice({
|
||||
state.title = action.payload.title;
|
||||
state.message = action.payload.message;
|
||||
state.type = action.payload.type;
|
||||
state.duration = action.payload.duration ?? 2000;
|
||||
state.duration = action.payload.duration ?? 3000;
|
||||
state.visible = true;
|
||||
},
|
||||
closeToast: (state) => {
|
||||
|
||||
@@ -34,13 +34,18 @@ export function DownloadSettingsModal({
|
||||
}: Readonly<DownloadSettingsModalProps>) {
|
||||
const { t } = useTranslation("game_details");
|
||||
|
||||
const userPreferences = useAppSelector(
|
||||
(state) => state.userPreferences.value
|
||||
);
|
||||
|
||||
const { showErrorToast } = useToast();
|
||||
|
||||
const [diskFreeSpace, setDiskFreeSpace] = useState<number | null>(null);
|
||||
const [selectedPath, setSelectedPath] = useState("");
|
||||
const [downloadStarting, setDownloadStarting] = useState(false);
|
||||
const [automaticExtractionEnabled, setAutomaticExtractionEnabled] =
|
||||
useState(true);
|
||||
const [automaticExtractionEnabled, setAutomaticExtractionEnabled] = useState(
|
||||
userPreferences?.extractFilesByDefault ?? true
|
||||
);
|
||||
const [selectedDownloader, setSelectedDownloader] =
|
||||
useState<Downloader | null>(null);
|
||||
const [hasWritePermission, setHasWritePermission] = useState<boolean | null>(
|
||||
@@ -49,10 +54,6 @@ export function DownloadSettingsModal({
|
||||
|
||||
const { isFeatureEnabled, Feature } = useFeature();
|
||||
|
||||
const userPreferences = useAppSelector(
|
||||
(state) => state.userPreferences.value
|
||||
);
|
||||
|
||||
const getDiskFreeSpace = async (path: string) => {
|
||||
const result = await window.electron.getDiskFreeSpace(path);
|
||||
setDiskFreeSpace(result.free);
|
||||
@@ -83,6 +84,8 @@ export function DownloadSettingsModal({
|
||||
|
||||
const getDefaultDownloader = useCallback(
|
||||
(availableDownloaders: Downloader[]) => {
|
||||
if (availableDownloaders.length === 0) return null;
|
||||
|
||||
if (availableDownloaders.includes(Downloader.Hydra)) {
|
||||
return Downloader.Hydra;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { useContext, useRef, useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { Button, CheckboxField, Modal, TextField } from "@renderer/components";
|
||||
import type { LibraryGame } from "@types";
|
||||
import type { LibraryGame, ShortcutLocation } from "@types";
|
||||
import { gameDetailsContext } from "@renderer/context";
|
||||
import { DeleteGameModal } from "@renderer/pages/downloads/delete-game-modal";
|
||||
import { useDownload, useToast, useUserDetails } from "@renderer/hooks";
|
||||
@@ -107,15 +107,18 @@ export function GameOptionsModal({
|
||||
}
|
||||
};
|
||||
|
||||
const handleCreateShortcut = async () => {
|
||||
const handleCreateShortcut = async (location: ShortcutLocation) => {
|
||||
window.electron
|
||||
.createGameShortcut(game.shop, game.objectId)
|
||||
.createGameShortcut(game.shop, game.objectId, location)
|
||||
.then((success) => {
|
||||
if (success) {
|
||||
showSuccessToast(t("create_shortcut_success"));
|
||||
} else {
|
||||
showErrorToast(t("create_shortcut_error"));
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
showErrorToast(t("create_shortcut_error"));
|
||||
});
|
||||
};
|
||||
|
||||
@@ -176,6 +179,9 @@ export function GameOptionsModal({
|
||||
const shouldShowWinePrefixConfiguration =
|
||||
window.electron.platform === "linux";
|
||||
|
||||
const shouldShowCreateStartMenuShortcut =
|
||||
window.electron.platform === "win32";
|
||||
|
||||
const handleResetAchievements = async () => {
|
||||
setIsDeletingAchievements(true);
|
||||
try {
|
||||
@@ -278,9 +284,20 @@ export function GameOptionsModal({
|
||||
>
|
||||
{t("open_folder")}
|
||||
</Button>
|
||||
<Button onClick={handleCreateShortcut} theme="outline">
|
||||
<Button
|
||||
onClick={() => handleCreateShortcut("desktop")}
|
||||
theme="outline"
|
||||
>
|
||||
{t("create_shortcut")}
|
||||
</Button>
|
||||
{shouldShowCreateStartMenuShortcut && (
|
||||
<Button
|
||||
onClick={() => handleCreateShortcut("start_menu")}
|
||||
theme="outline"
|
||||
>
|
||||
{t("create_start_menu_shortcut")}
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
@@ -362,7 +379,7 @@ export function GameOptionsModal({
|
||||
|
||||
<div className="game-options-modal__downloads">
|
||||
<div className="game-options-modal__header">
|
||||
<h2>{t("downloads_secion_title")}</h2>
|
||||
<h2>{t("downloads_section_title")}</h2>
|
||||
<h4 className="game-options-modal__header-description">
|
||||
{t("downloads_section_description")}
|
||||
</h4>
|
||||
|
||||
@@ -24,6 +24,7 @@ export function SettingsBehavior() {
|
||||
seedAfterDownloadComplete: false,
|
||||
showHiddenAchievementsDescription: false,
|
||||
showDownloadSpeedInMegabytes: false,
|
||||
extractFilesByDefault: true,
|
||||
});
|
||||
|
||||
const { t } = useTranslation("settings");
|
||||
@@ -43,6 +44,7 @@ export function SettingsBehavior() {
|
||||
userPreferences.showHiddenAchievementsDescription ?? false,
|
||||
showDownloadSpeedInMegabytes:
|
||||
userPreferences.showDownloadSpeedInMegabytes ?? false,
|
||||
extractFilesByDefault: userPreferences.extractFilesByDefault ?? true,
|
||||
});
|
||||
}
|
||||
}, [userPreferences]);
|
||||
@@ -152,6 +154,16 @@ export function SettingsBehavior() {
|
||||
})
|
||||
}
|
||||
/>
|
||||
|
||||
<CheckboxField
|
||||
label={t("extract_files_by_default")}
|
||||
checked={form.extractFilesByDefault}
|
||||
onChange={() =>
|
||||
handleChange({
|
||||
extractFilesByDefault: !form.extractFilesByDefault,
|
||||
})
|
||||
}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
export type GameShop = "steam" | "epic";
|
||||
|
||||
export type ShortcutLocation = "desktop" | "start_menu";
|
||||
|
||||
export interface UnlockedAchievement {
|
||||
name: string;
|
||||
unlockTime: number;
|
||||
|
||||
@@ -88,6 +88,7 @@ export interface UserPreferences {
|
||||
achievementNotificationsEnabled?: boolean;
|
||||
friendRequestNotificationsEnabled?: boolean;
|
||||
showDownloadSpeedInMegabytes?: boolean;
|
||||
extractFilesByDefault?: boolean;
|
||||
}
|
||||
|
||||
export interface ScreenState {
|
||||
|
||||
41
yarn.lock
41
yarn.lock
@@ -2004,6 +2004,42 @@
|
||||
resolved "https://registry.npmjs.org/@primer/octicons-react/-/octicons-react-19.9.0.tgz"
|
||||
integrity sha512-Uk4XrHyfylyfzZN9d8VFjF8FpfYHEyT4sabw+9+oP+GWAJHhPvNPTz6gXvUzJZmoblAvgcTrDslIPjz8zMh76w==
|
||||
|
||||
"@protobuf-ts/plugin-framework@^2.10.0":
|
||||
version "2.10.0"
|
||||
resolved "https://registry.yarnpkg.com/@protobuf-ts/plugin-framework/-/plugin-framework-2.10.0.tgz#e716a4b7fdb8710527101d145a000e254731abbb"
|
||||
integrity sha512-EuW9irbt+w7Ml1CaAxK6xyl7pSuWVbNy0rsChxJEthMrAVTN5EPdJ3whNWvsRBa+HwRImEl8KHNnRoq/vGOHbg==
|
||||
dependencies:
|
||||
"@protobuf-ts/runtime" "^2.10.0"
|
||||
typescript "^3.9"
|
||||
|
||||
"@protobuf-ts/plugin@^2.10.0":
|
||||
version "2.10.0"
|
||||
resolved "https://registry.yarnpkg.com/@protobuf-ts/plugin/-/plugin-2.10.0.tgz#dc91af30aeecf2a9debe2d0abf5b2a07a25156c5"
|
||||
integrity sha512-iMX4C4TVfMNRLn2msK0cVg5jmizjtu5FYiy8EK5Lg6EgyR9TVHeK2rzmufWKYM2Pcg1jSwC0cFcXHQnCoeFxUg==
|
||||
dependencies:
|
||||
"@protobuf-ts/plugin-framework" "^2.10.0"
|
||||
"@protobuf-ts/protoc" "^2.10.0"
|
||||
"@protobuf-ts/runtime" "^2.10.0"
|
||||
"@protobuf-ts/runtime-rpc" "^2.10.0"
|
||||
typescript "^3.9"
|
||||
|
||||
"@protobuf-ts/protoc@^2.10.0":
|
||||
version "2.10.0"
|
||||
resolved "https://registry.yarnpkg.com/@protobuf-ts/protoc/-/protoc-2.10.0.tgz#4a280ead9d5b143b6ef863339980050184bcac49"
|
||||
integrity sha512-S4BtGBh22+uL5E6qLVxV0QNY6tiLVB8QL7RIkvo+KYknipZfSNwubdKy5CPkrwVXzJn4s3cx7bKx1w6BxkBIPg==
|
||||
|
||||
"@protobuf-ts/runtime-rpc@^2.10.0":
|
||||
version "2.10.0"
|
||||
resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.10.0.tgz#68de8dcc369e56579569a4deafd394cf4683dc66"
|
||||
integrity sha512-8CS/XPv3+pMK4v8UKhtCdvbS4h9l7aqlteKdRt0/UbIKZ8n0qHj6hX8cBhz2ngvohxCOS0N08zPr9aCLBNhW3Q==
|
||||
dependencies:
|
||||
"@protobuf-ts/runtime" "^2.10.0"
|
||||
|
||||
"@protobuf-ts/runtime@^2.10.0":
|
||||
version "2.10.0"
|
||||
resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime/-/runtime-2.10.0.tgz#bc90f632647ff2ae72887546ddf3d193f3f43d98"
|
||||
integrity sha512-ypYwGg9Pn3W/2lZ7/HW60hONGuSdzphvOY8Dq7LeNttymDe0y3LaTUUMRpuGqOT6FfrWEMnfQbyqU8AAreo8wA==
|
||||
|
||||
"@radix-ui/primitive@1.1.0":
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.0.tgz#42ef83b3b56dccad5d703ae8c42919a68798bbe2"
|
||||
@@ -9136,6 +9172,11 @@ typed-array-length@^1.0.7:
|
||||
possible-typed-array-names "^1.0.0"
|
||||
reflect.getprototypeof "^1.0.6"
|
||||
|
||||
typescript@^3.9:
|
||||
version "3.9.10"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"
|
||||
integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==
|
||||
|
||||
typescript@^5.3.3, typescript@^5.4.3:
|
||||
version "5.6.2"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0"
|
||||
|
||||
Reference in New Issue
Block a user