mirror of
https://github.com/hydralauncher/hydra.git
synced 2026-01-12 06:16:17 +00:00
Compare commits
171 Commits
fix/fixing
...
v3.4.5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4be9e23d65 | ||
|
|
cd6c09fc4f | ||
|
|
d37a833047 | ||
|
|
41ece195f4 | ||
|
|
42d52aafac | ||
|
|
b6bd424bac | ||
|
|
f374a9ffff | ||
|
|
e1fb3bac76 | ||
|
|
250a472ce7 | ||
|
|
538878dba9 | ||
|
|
655496c844 | ||
|
|
4d459ac09e | ||
|
|
35a814eb41 | ||
|
|
dc625e79a4 | ||
|
|
84e09ce4da | ||
|
|
2f37ac788f | ||
|
|
9b54ff2299 | ||
|
|
cd257a827f | ||
|
|
99ade42ab8 | ||
|
|
b8e3ea1399 | ||
|
|
f380d9f9b1 | ||
|
|
3ad75d22a5 | ||
|
|
fb02442072 | ||
|
|
b1938c96dd | ||
|
|
a8e70b4032 | ||
|
|
e9cd468848 | ||
|
|
5e59b37997 | ||
|
|
e77fedea4c | ||
|
|
f572cf90b8 | ||
|
|
93993b695c | ||
|
|
6c5a91b410 | ||
|
|
ac2b739c60 | ||
|
|
6ef8d68610 | ||
|
|
546c509e14 | ||
|
|
a21f2b9614 | ||
|
|
c16cbfe04e | ||
|
|
4ff41da05a | ||
|
|
a12e5a15fa | ||
|
|
cc2311529b | ||
|
|
18b63d735d | ||
|
|
7379113dc8 | ||
|
|
ea85da259c | ||
|
|
b8084d6f67 | ||
|
|
97589e63fa | ||
|
|
2539f67e13 | ||
|
|
cc4aed2e17 | ||
|
|
9ea68e629a | ||
|
|
8c66b9a499 | ||
|
|
8fb183007a | ||
|
|
d0ac819da5 | ||
|
|
f4e428a574 | ||
|
|
69879a0303 | ||
|
|
f392f9583a | ||
|
|
85192f13af | ||
|
|
8230229959 | ||
|
|
c090a27ff3 | ||
|
|
51d4760352 | ||
|
|
bd0b2ce2c1 | ||
|
|
f2efbfba3a | ||
|
|
b7bc5e8cb2 | ||
|
|
ff447c0ed3 | ||
|
|
d1c40b061e | ||
|
|
e6a9ea6139 | ||
|
|
b519275800 | ||
|
|
d56cedb08f | ||
|
|
8e8c79185c | ||
|
|
dd854121f7 | ||
|
|
e4776c8e16 | ||
|
|
e63738ca7b | ||
|
|
3756249013 | ||
|
|
33713cfb9f | ||
|
|
41049be522 | ||
|
|
d9747b7985 | ||
|
|
e0c6d2fe3d | ||
|
|
8db03bcccf | ||
|
|
50acc33a41 | ||
|
|
81936d076e | ||
|
|
7d61d1219d | ||
|
|
19613b69cc | ||
|
|
42a768f715 | ||
|
|
456c0ad6ff | ||
|
|
76181342f9 | ||
|
|
8f95fa70d4 | ||
|
|
4743b9f082 | ||
|
|
db92ef255d | ||
|
|
d1cdfc0ba5 | ||
|
|
77a4642b7b | ||
|
|
148e272c4d | ||
|
|
3bdd8b90d4 | ||
|
|
6569b66801 | ||
|
|
4a11d741eb | ||
|
|
6e8a844a92 | ||
|
|
3821b9836c | ||
|
|
57390c814b | ||
|
|
007fa6f009 | ||
|
|
009cb1d7d7 | ||
|
|
306b49eaf3 | ||
|
|
be232d88e4 | ||
|
|
e3670f5b5a | ||
|
|
bd018399fb | ||
|
|
975eec96be | ||
|
|
44b711f674 | ||
|
|
539ff34b69 | ||
|
|
f99da1d7bf | ||
|
|
75c3bbf858 | ||
|
|
afa78e4634 | ||
|
|
ee1dda90d9 | ||
|
|
5b62b9c593 | ||
|
|
4d76182f2e | ||
|
|
85fb57527a | ||
|
|
9e6b6be0b9 | ||
|
|
3c3f77fc50 | ||
|
|
614cb8a297 | ||
|
|
ba3f010576 | ||
|
|
8c442e742a | ||
|
|
555b3dbb1d | ||
|
|
d2a868b504 | ||
|
|
e27536c6b3 | ||
|
|
cd367faec2 | ||
|
|
087dd9fb2e | ||
|
|
c5d8403843 | ||
|
|
8e01142225 | ||
|
|
a0ef59a13c | ||
|
|
13d5e4469f | ||
|
|
22e92eb8f6 | ||
|
|
d28bb825a3 | ||
|
|
96d59a0fd7 | ||
|
|
84600ea0dc | ||
|
|
9264fa3664 | ||
|
|
5b0ea980de | ||
|
|
622fc393fc | ||
|
|
f76ba5975d | ||
|
|
4da0dac0e6 | ||
|
|
7c468ac9bb | ||
|
|
2ee3bebfc7 | ||
|
|
98ed07d6d2 | ||
|
|
a4dd037cba | ||
|
|
30be12afeb | ||
|
|
258f891a12 | ||
|
|
02662fa993 | ||
|
|
1746f14adb | ||
|
|
554d195d5b | ||
|
|
fc899197b4 | ||
|
|
7597933aa9 | ||
|
|
3a36bfb75c | ||
|
|
93adb070e5 | ||
|
|
9df58b9918 | ||
|
|
0e164acdf2 | ||
|
|
fffa2d2c01 | ||
|
|
2c35d7da13 | ||
|
|
9a81a45738 | ||
|
|
d284fc914e | ||
|
|
b867eaa34b | ||
|
|
f353d1fc9b | ||
|
|
b03d2a78f8 | ||
|
|
1a6cb5f866 | ||
|
|
fbc81db2d0 | ||
|
|
663e5a46ba | ||
|
|
bc07f73387 | ||
|
|
a697d4ec8b | ||
|
|
008b88f888 | ||
|
|
0e7e5ba920 | ||
|
|
7c98f4afa7 | ||
|
|
12d6b744d7 | ||
|
|
ff7c15a013 | ||
|
|
16d192443f | ||
|
|
0c6b3f2254 | ||
|
|
f92d6839c8 | ||
|
|
d3e383bc1b | ||
|
|
abec986cc1 | ||
|
|
135eef986a |
6
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
6
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -33,9 +33,9 @@ body:
|
||||
attributes:
|
||||
label: Additional information and data
|
||||
description: |
|
||||
Add screenshots and upload your logs file here.
|
||||
Logs location on Windows: "%appdata%/hydra"
|
||||
Logs location on Linux: "~/.config/hydra/"
|
||||
Add screenshots and upload your all logs file here.
|
||||
Logs location on Windows: "%appdata%/hydralauncher/logs"
|
||||
Logs location on Linux: "~/.config/hydralauncher/logs"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
|
||||
3
.github/workflows/build.yml
vendored
3
.github/workflows/build.yml
vendored
@@ -11,6 +11,7 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
os: [windows-latest, ubuntu-latest]
|
||||
fail-fast: false
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
@@ -24,7 +25,7 @@ jobs:
|
||||
node-version: 20.18.0
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn
|
||||
run: yarn --frozen-lockfile
|
||||
|
||||
- name: Install Python
|
||||
uses: actions/setup-python@v5
|
||||
|
||||
2
.github/workflows/lint.yml
vendored
2
.github/workflows/lint.yml
vendored
@@ -20,7 +20,7 @@ jobs:
|
||||
node-version: 20.18.0
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn
|
||||
run: yarn --frozen-lockfile
|
||||
|
||||
- name: Validate current commit (last commit) with commitlint
|
||||
run: npx commitlint --last --verbose
|
||||
|
||||
14
.github/workflows/release.yml
vendored
14
.github/workflows/release.yml
vendored
@@ -26,7 +26,7 @@ jobs:
|
||||
node-version: 20.18.0
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn
|
||||
run: yarn --frozen-lockfile
|
||||
|
||||
- name: Install Python
|
||||
uses: actions/setup-python@v5
|
||||
@@ -88,6 +88,18 @@ jobs:
|
||||
dist/*.blockmap
|
||||
dist/*.pacman
|
||||
|
||||
- name: Upload build
|
||||
env:
|
||||
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
|
||||
S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }}
|
||||
S3_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }}
|
||||
S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }}
|
||||
S3_BUILDS_BUCKET_NAME: ${{ secrets.S3_BUILDS_BUCKET_NAME }}
|
||||
BUILDS_URL: ${{ secrets.BUILDS_URL }}
|
||||
BUILD_WEBHOOK_URL: ${{ secrets.BUILD_WEBHOOK_URL }}
|
||||
GITHUB_ACTOR: ${{ github.actor }}
|
||||
run: node scripts/upload-build.cjs
|
||||
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -9,10 +9,11 @@ out
|
||||
.vite
|
||||
ludusavi/
|
||||
hydra-python-rpc/
|
||||
aria2/
|
||||
.python-version
|
||||
|
||||
# Sentry Config File
|
||||
.env.sentry-build-plugin
|
||||
|
||||
*storybook.log
|
||||
|
||||
aria2/
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
[](./docs/README.cs.md)
|
||||
[](./docs/README.da.md)
|
||||
[](./docs/README.nb.md)
|
||||
[](./docs/README.et.md)
|
||||
[](./docs/README.et.md)
|
||||
[](./docs/README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
0
binaries/7zz
Normal file → Executable file
0
binaries/7zz
Normal file → Executable file
0
binaries/7zzs
Normal file → Executable file
0
binaries/7zzs
Normal file → Executable file
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -23,7 +23,8 @@
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
[](README.cs.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
194
docs/README.tr.md
Normal file
194
docs/README.tr.md
Normal file
@@ -0,0 +1,194 @@
|
||||
<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.
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "hydralauncher",
|
||||
"version": "3.4.0",
|
||||
"version": "3.4.5",
|
||||
"description": "Hydra",
|
||||
"main": "./out/main/index.js",
|
||||
"author": "Los Broxas",
|
||||
@@ -48,18 +48,17 @@
|
||||
"classnames": "^2.5.1",
|
||||
"color": "^4.2.3",
|
||||
"color.js": "^1.2.0",
|
||||
"create-desktop-shortcuts": "^1.11.0",
|
||||
"create-desktop-shortcuts": "^1.11.1",
|
||||
"date-fns": "^3.6.0",
|
||||
"dexie": "^4.0.10",
|
||||
"diskusage": "^1.2.0",
|
||||
"electron-log": "^5.2.4",
|
||||
"electron-updater": "^6.3.9",
|
||||
"electron-updater": "^6.6.2",
|
||||
"file-type": "^19.6.0",
|
||||
"i18next": "^23.11.2",
|
||||
"i18next-browser-languagedetector": "^7.2.1",
|
||||
"jsdom": "^24.0.0",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
"kill-port": "^2.0.1",
|
||||
"lodash-es": "^4.17.21",
|
||||
"parse-torrent": "^11.0.17",
|
||||
"piscina": "^4.7.0",
|
||||
@@ -100,7 +99,7 @@
|
||||
"@types/user-agents": "^1.0.4",
|
||||
"@vitejs/plugin-react": "^4.2.1",
|
||||
"electron": "^31.7.7",
|
||||
"electron-builder": "^25.1.8",
|
||||
"electron-builder": "^26.0.12",
|
||||
"electron-vite": "^2.3.0",
|
||||
"eslint": "^8.56.0",
|
||||
"eslint-plugin-jsx-a11y": "^6.10.2",
|
||||
|
||||
@@ -1,61 +1,48 @@
|
||||
import aria2p
|
||||
|
||||
class HttpDownloader:
|
||||
def __init__(self):
|
||||
self.download = None
|
||||
self.aria2 = aria2p.API(
|
||||
aria2p.Client(
|
||||
host="http://localhost",
|
||||
port=6800,
|
||||
secret=""
|
||||
)
|
||||
)
|
||||
def __init__(self):
|
||||
self.download = None
|
||||
self.aria2 = aria2p.API(
|
||||
aria2p.Client(
|
||||
host="http://localhost",
|
||||
port=6800,
|
||||
secret=""
|
||||
)
|
||||
)
|
||||
|
||||
def start_download(self, url: str, save_path: str, header: str, out: str = None, allow_multiple_connections: bool = False):
|
||||
if self.download:
|
||||
self.aria2.resume([self.download])
|
||||
else:
|
||||
options = {
|
||||
"header": header,
|
||||
"dir": save_path,
|
||||
"out": out
|
||||
}
|
||||
def start_download(self, url: str, save_path: str, header: str, out: str = None):
|
||||
if self.download:
|
||||
self.aria2.resume([self.download])
|
||||
else:
|
||||
downloads = self.aria2.add(url, options={"header": header, "dir": save_path, "out": out})
|
||||
|
||||
self.download = downloads[0]
|
||||
|
||||
def pause_download(self):
|
||||
if self.download:
|
||||
self.aria2.pause([self.download])
|
||||
|
||||
def cancel_download(self):
|
||||
if self.download:
|
||||
self.aria2.remove([self.download])
|
||||
self.download = None
|
||||
|
||||
if allow_multiple_connections:
|
||||
options.update({
|
||||
"split": "16",
|
||||
"max-connection-per-server": "16",
|
||||
"min-split-size": "1M"
|
||||
})
|
||||
|
||||
downloads = self.aria2.add(url, options=options)
|
||||
|
||||
self.download = downloads[0]
|
||||
|
||||
def pause_download(self):
|
||||
if self.download:
|
||||
self.aria2.pause([self.download])
|
||||
|
||||
def cancel_download(self):
|
||||
if self.download:
|
||||
self.aria2.remove([self.download])
|
||||
self.download = None
|
||||
def get_download_status(self):
|
||||
if self.download == None:
|
||||
return None
|
||||
|
||||
def get_download_status(self):
|
||||
if self.download == None:
|
||||
return None
|
||||
download = self.aria2.get_download(self.download.gid)
|
||||
|
||||
download = self.aria2.get_download(self.download.gid)
|
||||
response = {
|
||||
'folderName': download.name,
|
||||
'fileSize': download.total_length,
|
||||
'progress': download.completed_length / download.total_length if download.total_length else 0,
|
||||
'downloadSpeed': download.download_speed,
|
||||
'numPeers': 0,
|
||||
'numSeeds': 0,
|
||||
'status': download.status,
|
||||
'bytesDownloaded': download.completed_length,
|
||||
}
|
||||
|
||||
response = {
|
||||
'folderName': download.name,
|
||||
'fileSize': download.total_length,
|
||||
'progress': download.completed_length / download.total_length if download.total_length else 0,
|
||||
'downloadSpeed': download.download_speed,
|
||||
'numPeers': 0,
|
||||
'numSeeds': 0,
|
||||
'status': download.status,
|
||||
'bytesDownloaded': download.completed_length,
|
||||
}
|
||||
|
||||
return response
|
||||
return response
|
||||
|
||||
@@ -35,7 +35,7 @@ if start_download_payload:
|
||||
http_downloader = HttpDownloader()
|
||||
downloads[initial_download['game_id']] = http_downloader
|
||||
try:
|
||||
http_downloader.start_download(initial_download['url'], initial_download['save_path'], initial_download.get('header'), initial_download.get("out"))
|
||||
http_downloader.start_download(initial_download['url'], initial_download['save_path'], initial_download.get('header'), initial_download.get('out'))
|
||||
except Exception as e:
|
||||
print("Error starting http download", e)
|
||||
|
||||
@@ -147,11 +147,11 @@ def action():
|
||||
torrent_downloader.start_download(url, data['save_path'])
|
||||
else:
|
||||
if existing_downloader and isinstance(existing_downloader, HttpDownloader):
|
||||
existing_downloader.start_download(url, data['save_path'], data.get('header'), data.get('out'), data.get('allow_multiple_connections', False))
|
||||
existing_downloader.start_download(url, data['save_path'], data.get('header'), data.get('out'))
|
||||
else:
|
||||
http_downloader = HttpDownloader()
|
||||
downloads[game_id] = http_downloader
|
||||
http_downloader.start_download(url, data['save_path'], data.get('header'), data.get('out'), data.get('allow_multiple_connections', False))
|
||||
http_downloader.start_download(url, data['save_path'], data.get('header'), data.get('out'))
|
||||
|
||||
downloading_game_id = game_id
|
||||
|
||||
@@ -182,4 +182,3 @@ def action():
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(host="0.0.0.0", port=int(http_port))
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
const { default: axios } = require("axios");
|
||||
const tar = require("tar");
|
||||
const util = require("node:util");
|
||||
const fs = require("node:fs");
|
||||
const path = require("node:path");
|
||||
@@ -6,10 +7,12 @@ const { spawnSync } = require("node:child_process");
|
||||
|
||||
const exec = util.promisify(require("node:child_process").exec);
|
||||
|
||||
const ludusaviVersion = "0.29.0";
|
||||
|
||||
const fileName = {
|
||||
win32: "ludusavi-v0.25.0-win64.zip",
|
||||
linux: "ludusavi-v0.25.0-linux.zip",
|
||||
darwin: "ludusavi-v0.25.0-mac.zip",
|
||||
win32: `ludusavi-v${ludusaviVersion}-win64.zip`,
|
||||
linux: `ludusavi-v${ludusaviVersion}-linux.tar.gz`,
|
||||
darwin: `ludusavi-v${ludusaviVersion}-mac.tar.gz`,
|
||||
};
|
||||
|
||||
const downloadLudusavi = async () => {
|
||||
@@ -19,7 +22,7 @@ const downloadLudusavi = async () => {
|
||||
}
|
||||
|
||||
const file = fileName[process.platform];
|
||||
const downloadUrl = `https://github.com/mtkennerly/ludusavi/releases/download/v0.25.0/${file}`;
|
||||
const downloadUrl = `https://github.com/mtkennerly/ludusavi/releases/download/v${ludusaviVersion}/${file}`;
|
||||
|
||||
console.log(`Downloading ${file}...`);
|
||||
|
||||
@@ -31,10 +34,18 @@ const downloadLudusavi = async () => {
|
||||
console.log(`Downloaded ${file}, extracting...`);
|
||||
|
||||
const pwd = process.cwd();
|
||||
|
||||
const targetPath = path.join(pwd, "ludusavi");
|
||||
|
||||
await exec(`npx extract-zip ${file} ${targetPath}`);
|
||||
await fs.promises.mkdir(targetPath, { recursive: true });
|
||||
|
||||
if (process.platform === "win32") {
|
||||
await exec(`npx extract-zip ${file} ${targetPath}`);
|
||||
} else {
|
||||
await tar.x({
|
||||
file: file,
|
||||
cwd: targetPath,
|
||||
});
|
||||
}
|
||||
|
||||
if (process.platform !== "win32") {
|
||||
fs.chmodSync(path.join(targetPath, "ludusavi"), 0o755);
|
||||
@@ -123,14 +134,3 @@ const copyAria2 = () => {
|
||||
|
||||
copyAria2();
|
||||
downloadLudusavi();
|
||||
|
||||
if (process.platform !== "win32") {
|
||||
const binariesPath = path.join(__dirname, "..", "binaries");
|
||||
|
||||
if (fs.existsSync(binariesPath)) {
|
||||
const zzzPath = path.join(binariesPath, "7zz");
|
||||
const zzzsPath = path.join(binariesPath, "7zzs");
|
||||
if (fs.existsSync(zzzPath)) fs.chmodSync(zzzPath, 0o755);
|
||||
if (fs.existsSync(zzzsPath)) fs.chmodSync(zzzsPath, 0o755);
|
||||
}
|
||||
}
|
||||
|
||||
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",
|
||||
@@ -188,8 +188,8 @@
|
||||
"reset_achievements_error": "فشل في إعادة تعيين الإنجازات",
|
||||
"download_error_gofile_quota_exceeded": "لقد تجاوزت الحصة الشهرية لـ Gofile. يرجى الانتظار حتى إعادة تعيين الحصة.",
|
||||
"download_error_real_debrid_account_not_authorized": "حساب Real-Debrid الخاص بك غير مصرح له بإجراء تنزيلات جديدة. يرجى مراجعة إعدادات الحساب والمحاولة مرة أخرى.",
|
||||
"download_error_not_cached_in_real_debrid": "هذا التنزيل غير متوفر على Real-Debrid وجلب حالة التنزيل من Real-Debrid غير متاح حاليًا.",
|
||||
"download_error_not_cached_in_torbox": "هذا التنزيل غير متوفر على Torbox وجلب حالة التنزيل من Torbox غير متاح حاليًا.",
|
||||
"download_error_not_cached_on_real_debrid": "هذا التنزيل غير متوفر على Real-Debrid وجلب حالة التنزيل من Real-Debrid غير متاح حاليًا.",
|
||||
"download_error_not_cached_on_torbox": "هذا التنزيل غير متوفر على TorBox وجلب حالة التنزيل من TorBox غير متاح حاليًا.",
|
||||
"game_removed_from_favorites": "تمت إزالة اللعبة من المفضلة",
|
||||
"game_added_to_favorites": "تمت إضافة اللعبة إلى المفضلة"
|
||||
},
|
||||
@@ -330,7 +330,7 @@
|
||||
"delete_theme_description": "سيؤدي هذا إلى حذف السمة {{theme}}",
|
||||
"cancel": "إلغاء",
|
||||
"appearance": "المظهر",
|
||||
"enable_torbox": "تفعيل Torbox",
|
||||
"enable_torbox": "تفعيل TorBox",
|
||||
"torbox_description": "TorBox هي خدمة seedbox متميزة تنافس أفضل الخوادم في السوق.",
|
||||
"torbox_account_linked": "تم ربط حساب TorBox",
|
||||
"real_debrid_account_linked": "تم ربط حساب Real-Debrid",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -44,11 +44,21 @@
|
||||
"downloading_metadata": "Stahuji metadata: {{title}}…",
|
||||
"downloading": "Stahuji {{title}}… ({{percentage}} staženo) - Odhadovaný čas {{eta}} - {{speed}}",
|
||||
"calculating_eta": "Stahuji {{title}}… ({{percentage}} staženo) - Počítám zbývající čas…",
|
||||
"checking_files": "Kontroluji soubory: {{title}}… ({{percentage}} ověřeno)"
|
||||
"checking_files": "Kontroluji soubory: {{title}}… ({{percentage}} ověřeno)",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"installation_complete": "Instalace dokončena",
|
||||
"installation_complete_message": "Běžné redistribuovatelné komponenty byly úspěšně nainstalovány"
|
||||
},
|
||||
"catalogue": {
|
||||
"next_page": "Další strana",
|
||||
"previous_page": "Předchozí strana"
|
||||
"search": "Filtr…",
|
||||
"developers": "Vývojáři",
|
||||
"genres": "Žánry",
|
||||
"tags": "Tagy",
|
||||
"publishers": "Vydavatelé",
|
||||
"download_sources": "Zdroje stahování",
|
||||
"result_count": "Výsledky: {{resultCount}}",
|
||||
"filter_count": "Dostupné: {{filterCount}}",
|
||||
"clear_filters": "Vyčistit vybrané filtry: {{filterCount}}"
|
||||
},
|
||||
"game_details": {
|
||||
"open_download_options": "Otevřít možnosti stahování",
|
||||
@@ -107,12 +117,13 @@
|
||||
"open_download_location": "Zobrazit stažené soubory",
|
||||
"create_shortcut": "Vytvořit zástupce na ploše",
|
||||
"remove_files": "Odebrat soubory",
|
||||
"clear": "Vyčistit",
|
||||
"remove_from_library_title": "Jste si jisti?",
|
||||
"remove_from_library_description": "Tohle odstraní {{game}} z vaší knihovny",
|
||||
"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",
|
||||
@@ -160,6 +171,9 @@
|
||||
"loading_save_preview": "Hledání uložených her...",
|
||||
"wine_prefix": "Wine Prefix",
|
||||
"wine_prefix_description": "Wine Prefix použit pro spuštění této hry",
|
||||
"launch_options": "Možnosti spuštění",
|
||||
"launch_options_description": "Pokročilí uživatelé mohou zadat speciální parametry spuštění (experimentální funkce)",
|
||||
"launch_options_placeholder": "Žádné parametery nebyly specifikovány",
|
||||
"no_download_option_info": "Žádné informace nejsou dostupny",
|
||||
"backup_deletion_failed": "Nepovedlo se odstranit zálohu",
|
||||
"max_number_of_artifacts_reached": "Dosáhli jste maximálního počtu záloh pro tuto hru",
|
||||
@@ -167,7 +181,23 @@
|
||||
"manage_files_description": "Spravovat, které soubory budou zálohovány a obnoveny",
|
||||
"select_folder": "Vybrat složku",
|
||||
"backup_from": "Zálohy z {{date}}",
|
||||
"custom_backup_location_set": "Vlastní umístění záloh nastaveno"
|
||||
"custom_backup_location_set": "Vlastní umístění záloh nastaveno",
|
||||
"automatic_backup_from": "Automatická záloha z {{date}}",
|
||||
"enable_automatic_cloud_sync": "Povolit automatické zálohy v cloudu",
|
||||
"no_directory_selected": "Žádná složka není zvolena",
|
||||
"no_write_permission": "Nemohu stahovat do této složky. Klikni sem pro více informací.",
|
||||
"reset_achievements": "Resetovat achievementy",
|
||||
"reset_achievements_description": "Toto zresetuje všechny achievementy pro hru {{game}}",
|
||||
"reset_achievements_title": "Jste si jisti?",
|
||||
"reset_achievements_success": "Achievementy úspěšně resetovány",
|
||||
"reset_achievements_error": "Nepodařilo se resetovat achievementy",
|
||||
"download_error_gofile_quota_exceeded": "Překročili jste vaši měsíční GoFile kvótu. Prosím vyčkejte na resetování kvóty.",
|
||||
"download_error_real_debrid_account_not_authorized": "Váš Real-Debrid účet není autorizován pro vytváření nových stahování. Prosím zkontrolujte nastavení vašeho účtu a zkuste to znovu.",
|
||||
"download_error_not_cached_on_real_debrid": "Toto stahování není dostupné na Real-Debrid a získávání informací o stahování z Real-Debrid není zatím dostupné.",
|
||||
"download_error_not_cached_on_torbox": "Toto stahování není dostupné na TorBox a získávání informací o stahování z TorBox není zatím dostupné.",
|
||||
"game_removed_from_favorites": "Hra odebrána z oblíbených",
|
||||
"game_added_to_favorites": "Hra přidána do oblíbených",
|
||||
"automatically_extract_downloaded_files": "Automaticky rozbalit stažené soubory"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Aktivovat hydru",
|
||||
@@ -200,7 +230,13 @@
|
||||
"queued": "V řadě",
|
||||
"no_downloads_title": "Prázdno..",
|
||||
"no_downloads_description": "Ještě jsi zatím nic nestáhl přes Hydru, ale furt není pozdě začít.",
|
||||
"checking_files": "Kontroluji soubory…"
|
||||
"checking_files": "Kontroluji soubory…",
|
||||
"seeding": "Seedování",
|
||||
"stop_seeding": "Zastavování seedování",
|
||||
"resume_seeding": "Obnovit seedování",
|
||||
"options": "Spravovat",
|
||||
"extract": "Rozbalit soubory",
|
||||
"extracting": "Rozbalování souborů…"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Umístění stahování",
|
||||
@@ -261,9 +297,65 @@
|
||||
"must_be_valid_url": "Zdroj musí být platký odkaz URL",
|
||||
"blocked_users": "Zablokovaní uživatelé",
|
||||
"user_unblocked": "Uživatel byl odblokován",
|
||||
"enable_achievement_notifications": "Když je odemknut achievement",
|
||||
"enable_achievement_notifications": "Když je odemčen achievement",
|
||||
"launch_minimized": "Spustit v minimalizovaném režimu",
|
||||
"disable_nsfw_alert": "Deaktivovat upozornění na nevhodný obsah"
|
||||
"disable_nsfw_alert": "Deaktivovat upozornění na nevhodný obsah",
|
||||
"seed_after_download_complete": "Seedovat až skončí stahování",
|
||||
"show_hidden_achievement_description": "Zobrazit popisy skrytých achievementů dříve, než jsou odemčeny",
|
||||
"account": "Účet",
|
||||
"no_users_blocked": "Nemáte žádného uživatele zablokovaného",
|
||||
"subscription_active_until": "Vaše Hydra cloud předplatné je platné do {{date}}",
|
||||
"manage_subscription": "Spravovat předplatné",
|
||||
"update_email": "Změnit email",
|
||||
"update_password": "Změnit heslo",
|
||||
"current_email": "Současný email:",
|
||||
"no_email_account": "Zatím nemáte nastavený email",
|
||||
"account_data_updated_successfully": "Data vašeho účtu byly úspěšně upraveny",
|
||||
"renew_subscription": "Obnovit předplatné Hydra Cloud",
|
||||
"subscription_expired_at": "Vaše předplatné vypršelo {{date}}",
|
||||
"no_subscription": "Užijte si Hydru v nejlepší možné podobě",
|
||||
"become_subscriber": "Připojit se k předplatnému Hydra Cloud",
|
||||
"subscription_renew_cancelled": "Automatické obnovování je zrušenu",
|
||||
"subscription_renews_on": "Vaše předplatné se obnoví {{date}}",
|
||||
"bill_sent_until": "Vaše příští faktura bude odeslána nejpozději do tohoto dne",
|
||||
"no_themes": "Vypadá to že ještě nemáte žádné vzhledy, ale nebojte, klikněte sem pro vytvoření vašeho prvního mistrovského díla!",
|
||||
"editor_tab_code": "Kód",
|
||||
"editor_tab_info": "Info",
|
||||
"editor_tab_save": "Uložit",
|
||||
"web_store": "Webový obchod",
|
||||
"clear_themes": "Vyčistit",
|
||||
"create_theme": "Vytvořit",
|
||||
"create_theme_modal_title": "Vytvořit vlastní vzhled",
|
||||
"create_theme_modal_description": "Vytvořte si vlastní styl, abyste si mohli ozdobit Hydru",
|
||||
"theme_name": "Název",
|
||||
"insert_theme_name": "Vložte název vzhledu",
|
||||
"set_theme": "Nastavit vzhled",
|
||||
"unset_theme": "Zrušit vzhled",
|
||||
"delete_theme": "Odstranit vzhled",
|
||||
"edit_theme": "Upravit vzhled",
|
||||
"delete_all_themes": "Smazat všechny vzhledy",
|
||||
"delete_all_themes_description": "Toto smaže všechny vaše vzhledy",
|
||||
"delete_theme_description": "Toto smaže vzhled {{theme}}",
|
||||
"cancel": "Zrušit",
|
||||
"appearance": "Vzhled",
|
||||
"enable_torbox": "Povolit TorBox",
|
||||
"torbox_description": "TorBox je prémiový seedbox server který se vyrovná i těm nejlepším seedbox serverům na trhu.",
|
||||
"torbox_account_linked": "TorBox účet propojen",
|
||||
"create_real_debrid_account": "Klikni sem pokud ještě nemáš Real-Debrid účet",
|
||||
"create_torbox_account": "Klikni sem pokud ještě nemáš TorBox účet",
|
||||
"real_debrid_account_linked": "Real-Debrid účet propojen",
|
||||
"name_min_length": "Název vzhledu musí být minimálně 3 znaky dlouhý",
|
||||
"import_theme": "Vložit vzhled",
|
||||
"import_theme_description": "Chystáte se vložit vzhled {{theme}} z obchodu vzhledů",
|
||||
"error_importing_theme": "Nastala chyba při vkládání vzhledu",
|
||||
"theme_imported": "Vzhled úspěšně vložen",
|
||||
"enable_friend_request_notifications": "Při obdržení žádosti o přátelství",
|
||||
"enable_auto_install": "Automaticky stahovat aktualizace",
|
||||
"common_redist": "Běžné redistribuovatelné komponenty",
|
||||
"common_redist_description": "Běžné redistribuovatelné komponenty jsou potřeba pro spuštění určitých her. Je doporučeno je nainstalovat, aby se předešlo problémům.",
|
||||
"install_common_redist": "Nainstalovat",
|
||||
"installing_common_redist": "Instalování…",
|
||||
"show_download_speed_in_megabytes": "Ukázat rychlost stahování v megabytech"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Stahování dokončeno",
|
||||
@@ -273,14 +365,20 @@
|
||||
"repack_count_other": "{{count}} repacky přidány",
|
||||
"new_update_available": "Version {{version}} je dostupná",
|
||||
"restart_to_install_update": "Restartuj Hydru pro aktualizaci",
|
||||
"notification_achievement_unlocked_title": "Achievement pro {{game}} byl odemknut",
|
||||
"notification_achievement_unlocked_body": "{{achievement}} a dalších {{count}} byly odemknuty"
|
||||
"notification_achievement_unlocked_title": "Achievement pro {{game}} byl odemčen",
|
||||
"notification_achievement_unlocked_body": "{{achievement}} a dalších {{count}} byly odemčeny",
|
||||
"new_friend_request_description": "Obdrželi jste novou žádost o přátelství",
|
||||
"new_friend_request_title": "Nová žádost o přátelství",
|
||||
"extraction_complete": "Rozbalování dokončeno",
|
||||
"game_extracted": "{{title}} úspěšně rozbaleno"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Otevřít Hydru",
|
||||
"quit": "Odejít"
|
||||
},
|
||||
"game_card": {
|
||||
"available_one": "Dostupné",
|
||||
"available_other": "Dostupné",
|
||||
"no_downloads": "Žádné možnosti stahování nenalezeny"
|
||||
},
|
||||
"binary_not_found_modal": {
|
||||
@@ -363,7 +461,17 @@
|
||||
"your_friend_code": "Tvůj kód přítele:",
|
||||
"upload_banner": "Nahrát banner profilu",
|
||||
"uploading_banner": "Nahrávání banneru",
|
||||
"background_image_updated": "Obrázek pozadí byl změněn"
|
||||
"background_image_updated": "Obrázek pozadí byl změněn",
|
||||
"stats": "Statistiky",
|
||||
"achievements": "Achievementy",
|
||||
"games": "Hry",
|
||||
"top_percentile": "Top {{percentile}}%",
|
||||
"ranking_updated_weekly": "Žebříčky jsou aktualizovány každý týden",
|
||||
"playing": "Hraje {{game}}",
|
||||
"achievements_unlocked": "Achievements odemčen",
|
||||
"earned_points": "Získané body",
|
||||
"show_achievements_on_profile": "Zobrazit vaše odemčené achievementy na profilu",
|
||||
"show_points_on_profile": "Zobrazit vaše získané body na profilu"
|
||||
},
|
||||
"achievement": {
|
||||
"achievement_unlocked": "Achievement odemčen",
|
||||
@@ -373,7 +481,12 @@
|
||||
"subscription_needed": "Je vyžadováno předplatné Hydra Cloud pro zobrazení tohoto obsahu",
|
||||
"new_achievements_unlocked": "Odemčeno {{achievementCount}} nových achievementů z {{gameCount}} her",
|
||||
"achievement_progress": "{{unlockedCount}}/{{totalCount}} achievementů",
|
||||
"achievements_unlocked_for_game": "Odemčeno {{achievementCount}} nových achievementů pro {{gameTitle}}"
|
||||
"achievements_unlocked_for_game": "Odemčeno {{achievementCount}} nových achievementů pro {{gameTitle}}",
|
||||
"hidden_achievement_tooltip": "Toho je skrytý achievement",
|
||||
"achievement_earn_points": "Získej {{points}} bodů tímto achievementem",
|
||||
"earned_points": "Získané body",
|
||||
"available_points": "Dostupné body:",
|
||||
"how_to_earn_achievements_points": "Jak získat body achievementů?"
|
||||
},
|
||||
"hydra_cloud": {
|
||||
"subscription_tour_title": "Předplatné Hydra Cloud",
|
||||
@@ -383,6 +496,10 @@
|
||||
"animated_profile_picture": "Animované profilové obrázky",
|
||||
"premium_support": "Prémiová podpora",
|
||||
"show_and_compare_achievements": "Zobraz a porovnej achievementy s ostatními uživateli",
|
||||
"animated_profile_banner": "Animovaný banner na profilu"
|
||||
"animated_profile_banner": "Animovaný banner na profilu",
|
||||
"hydra_cloud": "Hydra Cloud",
|
||||
"hydra_cloud_feature_found": "Právě jste objevili funkci předplatného Hydra Cloud!",
|
||||
"learn_more": "Zjistit více",
|
||||
"debrid_description": "Stahovat až 4x rychleji s Nimbus"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
@@ -193,8 +193,9 @@
|
||||
"reset_achievements_error": "Failed to reset achievements",
|
||||
"download_error_gofile_quota_exceeded": "You have exceeded your Gofile monthly quota. Please await the quota to reset.",
|
||||
"download_error_real_debrid_account_not_authorized": "Your Real-Debrid account is not authorized to make new downloads. Please check your account settings and try again.",
|
||||
"download_error_not_cached_in_real_debrid": "This download is not available on Real-Debrid and polling download status from Real-Debrid is not yet available.",
|
||||
"download_error_not_cached_in_torbox": "This download is not available on Torbox and polling download status from Torbox is not yet available.",
|
||||
"download_error_not_cached_on_real_debrid": "This download is not available on Real-Debrid and polling download status from Real-Debrid is not yet available.",
|
||||
"download_error_not_cached_on_torbox": "This download is not available on TorBox and polling download status from TorBox is not yet available.",
|
||||
"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"
|
||||
@@ -338,7 +339,7 @@
|
||||
"delete_theme_description": "This will delete the theme {{theme}}",
|
||||
"cancel": "Cancel",
|
||||
"appearance": "Appearance",
|
||||
"enable_torbox": "Enable Torbox",
|
||||
"enable_torbox": "Enable TorBox",
|
||||
"torbox_description": "TorBox is your premium seedbox service rivaling even the best servers on the market.",
|
||||
"torbox_account_linked": "TorBox account linked",
|
||||
"create_real_debrid_account": "Click here if you don't have a Real-Debrid account yet",
|
||||
@@ -354,7 +355,9 @@
|
||||
"common_redist": "Common redistributables",
|
||||
"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…"
|
||||
"installing_common_redist": "Installing…",
|
||||
"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",
|
||||
@@ -498,6 +501,7 @@
|
||||
"animated_profile_banner": "Animated profile banner",
|
||||
"hydra_cloud": "Hydra Cloud",
|
||||
"hydra_cloud_feature_found": "You've just discovered a Hydra Cloud feature!",
|
||||
"learn_more": "Learn More"
|
||||
"learn_more": "Learn More",
|
||||
"debrid_description": "Download up to 4x faster with Nimbus"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,6 +44,9 @@
|
||||
"downloading_metadata": "Descargando metadatos de {{title}}…",
|
||||
"downloading": "Descargando {{title}}… ({{percentage}} completado) - Finalizando {{eta}} - {{speed}}",
|
||||
"calculating_eta": "Descargando {{title}}… ({{percentage}} completado) - Calculando tiempo restante…",
|
||||
"installation_complete": "Instalación completada",
|
||||
"installation_complete_message": "Common redistributables instalados exitosamente",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"checking_files": "Verificando archivos de {{title}}… ({{percentage}} completado)"
|
||||
},
|
||||
"catalogue": {
|
||||
@@ -59,6 +62,8 @@
|
||||
},
|
||||
"game_details": {
|
||||
"open_download_options": "Ver opciones de descargas",
|
||||
"automatically_extract_downloaded_files": "Extraer automáticamente archivos descargados",
|
||||
"download_error_not_cached_on_hydra": "Esta descarga no está disponible en Nimbus.",
|
||||
"download_options_zero": "No hay opciones de descargas disponibles",
|
||||
"download_options_one": "{{count}} opción de descarga",
|
||||
"download_options_other": "{{count}} opciones de descargas",
|
||||
@@ -119,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)",
|
||||
@@ -190,8 +195,8 @@
|
||||
"reset_achievements_error": "Se produjo un error al reiniciar los logros",
|
||||
"download_error_gofile_quota_exceeded": "Has excedido la cuota mensual de Gofile. Por favor espera a que se reinicie la cuota.",
|
||||
"download_error_real_debrid_account_not_authorized": "Tu cuenta de Real-Debrid no está autorizada para nueva descargas. Por favor, revisa los ajustes de tu cuenta e intenta de nuevo.",
|
||||
"download_error_not_cached_in_real_debrid": "Esta descarga no está disponible en Real-Debrid y el estado de descarga del sondeo de Real-Debrid aún no está disponible.",
|
||||
"download_error_not_cached_in_torbox": "Esta descarga no está disponible en Torbox y el estado de descarga del sondeo aún no está disponible.",
|
||||
"download_error_not_cached_on_real_debrid": "Esta descarga no está disponible en Real-Debrid y el estado de descarga del sondeo de Real-Debrid aún no está disponible.",
|
||||
"download_error_not_cached_on_torbox": "Esta descarga no está disponible en TorBox y el estado de descarga del sondeo aún no está disponible.",
|
||||
"game_added_to_favorites": "Juego añadido a favoritos",
|
||||
"game_removed_from_favorites": "Juego removido de favoritos"
|
||||
},
|
||||
@@ -230,10 +235,19 @@
|
||||
"seeding": "Seeding",
|
||||
"stop_seeding": "Detener seeding",
|
||||
"resume_seeding": "Continuar seeding",
|
||||
"extract": "Extraer archivos",
|
||||
"extracting": "Extrayendo archivos…",
|
||||
"options": "Gestionar"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Ruta de descarga",
|
||||
"common_redist": "Common redistributables",
|
||||
"common_redist_description": "Las Common redistributables son requeridos para ejecutar algunos juegos. Es recomendado instalarlos para evitar problemas.",
|
||||
"create_real_debrid_account": "Presiona acá si no tienes una cuenta de Real-Debrid aún",
|
||||
"create_torbox_account": "Presiona acá si no tienes una cuenta de TorBox aún",
|
||||
"install_common_redist": "Instalar",
|
||||
"installing_common_redist": "Instalando…",
|
||||
"show_download_speed_in_megabytes": "Mostrar velocidad de descargar en megabytes por segundo",
|
||||
"change": "Cambiar",
|
||||
"notifications": "Notificaciones",
|
||||
"enable_download_notifications": "Cuando se completa una descarga",
|
||||
@@ -326,7 +340,7 @@
|
||||
"editor_tab_code": "Código",
|
||||
"editor_tab_info": "Info",
|
||||
"editor_tab_save": "Guardar",
|
||||
"enable_torbox": "Habilitar Torbox",
|
||||
"enable_torbox": "Habilitar TorBox",
|
||||
"error_importing_theme": "Error al importar el tema",
|
||||
"import_theme": "Importar tema",
|
||||
"import_theme_description": "Vas a importar el tema {{theme}} desde la tienda de temas",
|
||||
@@ -346,6 +360,8 @@
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Descarga completada",
|
||||
"extraction_complete": "Extracción completada",
|
||||
"game_extracted": "{{title}} extraído exitosamente",
|
||||
"game_ready_to_install": "{{title}} está listo para instalarse",
|
||||
"repack_list_updated": "Lista de repacks actualizadas",
|
||||
"repack_count_one": "{{count}} repack ha sido añadido",
|
||||
@@ -475,6 +491,7 @@
|
||||
},
|
||||
"hydra_cloud": {
|
||||
"subscription_tour_title": "Suscripción Hydra Cloud",
|
||||
"debrid_description": "Descargas hasta x4 más rápidas con Nimbus",
|
||||
"subscribe_now": "Suscribirse ahora",
|
||||
"cloud_saving": "Guardado en la nube",
|
||||
"cloud_achievements": "Guarda tus logros en la nube",
|
||||
|
||||
@@ -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",
|
||||
@@ -182,8 +182,9 @@
|
||||
"no_write_permission": "Não é possível baixar nesse diretório. Clique aqui para saber mais.",
|
||||
"download_error_gofile_quota_exceeded": "Você excedeu sua cota mensal do Gofile. Por favor, aguarde a cota resetar.",
|
||||
"download_error_real_debrid_account_not_authorized": "Sua conta do Real-Debrid não está autorizada a fazer novos downloads. Por favor, verifique sua assinatura e tente novamente.",
|
||||
"download_error_not_cached_in_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_in_torbox": "Este download não está disponível no Torbox e a verificação do status do download não está disponível.",
|
||||
"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.",
|
||||
"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"
|
||||
@@ -325,7 +326,7 @@
|
||||
"delete_theme_description": "Isso irá deletar o tema {{theme}}",
|
||||
"cancel": "Cancelar",
|
||||
"appearance": "Aparência",
|
||||
"enable_torbox": "Habilitar Torbox",
|
||||
"enable_torbox": "Habilitar TorBox",
|
||||
"torbox_description": "TorBox é o seu serviço de seedbox premium que rivaliza até com os melhores servidores do mercado.",
|
||||
"torbox_account_linked": "Conta do TorBox vinculada",
|
||||
"create_real_debrid_account": "Clique aqui se você ainda não tem uma conta do Real-Debrid",
|
||||
@@ -341,7 +342,9 @@
|
||||
"common_redist": "Componentes recomendados",
|
||||
"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…"
|
||||
"installing_common_redist": "Instalando…",
|
||||
"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",
|
||||
@@ -493,6 +496,7 @@
|
||||
"animated_profile_banner": "Banner animado no perfil",
|
||||
"cloud_saving": "Saves de jogos em nuvem",
|
||||
"hydra_cloud_feature_found": "Você descobriu uma funcionalidade Hydra Cloud!",
|
||||
"learn_more": "Saiba mais"
|
||||
"learn_more": "Saiba mais",
|
||||
"debrid_description": "Baixe até 4x mais rápido com Nimbus"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
@@ -175,8 +175,8 @@
|
||||
"no_write_permission": "Não é possível descarregar neste diretório. Clique aqui para saber mais.",
|
||||
"download_error_gofile_quota_exceeded": "Você excedeu sua cota mensal do Gofile. Por favor, aguarde o reset da cota.",
|
||||
"download_error_real_debrid_account_not_authorized": "A sua conta do Real-Debrid não está autorizada a fazer novos downloads. Por favor, verifique a sua assinatura e tente novamente.",
|
||||
"download_error_not_cached_in_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_in_torbox": "Este download não está disponível no Torbox e a verificação do status do download não está disponível.",
|
||||
"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"
|
||||
},
|
||||
@@ -321,7 +321,7 @@
|
||||
"delete_theme_description": "Isto irá apagar o tema {{theme}}",
|
||||
"cancel": "Cancelar",
|
||||
"appearance": "Aparência",
|
||||
"enable_torbox": "Ativar Torbox",
|
||||
"enable_torbox": "Ativar TorBox",
|
||||
"torbox_description": "TorBox é um serviço de seedbox premium sendo um dos melhores servidores do mercado.",
|
||||
"torbox_account_linked": "Conta do TorBox associada",
|
||||
"real_debrid_account_linked": "Conta Real-Debrid associada",
|
||||
|
||||
@@ -44,7 +44,10 @@
|
||||
"downloading_metadata": "Загрузка метаданных {{title}}…",
|
||||
"downloading": "Загрузка {{title}}… ({{percentage}} завершено) - Окончание {{eta}} - {{speed}}",
|
||||
"calculating_eta": "Загрузка {{title}}… ({{percentage}} завершено) - Подсчёт оставшегося времени…",
|
||||
"checking_files": "Проверка файлов {{title}}… ({{percentage}} завершено)"
|
||||
"checking_files": "Проверка файлов {{title}}… ({{percentage}} завершено)",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"installation_complete": "Установка завершена",
|
||||
"installation_complete_message": "Библиотеки успешно установлены"
|
||||
},
|
||||
"catalogue": {
|
||||
"search": "Фильтр…",
|
||||
@@ -120,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",
|
||||
@@ -190,10 +193,11 @@
|
||||
"reset_achievements_error": "Не удалось сбросить достижения",
|
||||
"download_error_gofile_quota_exceeded": "Вы превысили месячную квоту Gofile. Пожалуйста, подождите, пока квота не будет восстановлена.",
|
||||
"download_error_real_debrid_account_not_authorized": "Ваш аккаунт Real-Debrid не авторизован для осуществления новых загрузок. Пожалуйста, проверьте настройки учетной записи и повторите попытку.",
|
||||
"download_error_not_cached_in_real_debrid": "Эта загрузка недоступна на Real-Debrid, и получение статуса загрузки с Real-Debrid пока недоступно.",
|
||||
"download_error_not_cached_in_torbox": "Эта загрузка недоступна на Torbox, и получить статус загрузки с Torbox пока невозможно.",
|
||||
"download_error_not_cached_on_real_debrid": "Эта загрузка недоступна на Real-Debrid, и получение статуса загрузки с Real-Debrid пока недоступно.",
|
||||
"download_error_not_cached_on_torbox": "Эта загрузка недоступна на TorBox, и получить статус загрузки с TorBox пока невозможно.",
|
||||
"game_added_to_favorites": "Игра добавлена в избранное",
|
||||
"game_removed_from_favorites": "Игра удалена из избранного"
|
||||
"game_removed_from_favorites": "Игра удалена из избранного",
|
||||
"automatically_extract_downloaded_files": "Автоматическая распаковка загруженных файлов"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Активировать Hydra",
|
||||
@@ -230,7 +234,9 @@
|
||||
"seeding": "Раздача",
|
||||
"stop_seeding": "Остановить раздачу",
|
||||
"resume_seeding": "Продолжить раздачу",
|
||||
"options": "Управлять"
|
||||
"options": "Управлять",
|
||||
"extract": "Распаковать файлы",
|
||||
"extracting": "Распаковка файлов…"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Путь загрузок",
|
||||
@@ -332,7 +338,7 @@
|
||||
"delete_theme_description": "Это приведет к удалению темы {{theme}}",
|
||||
"cancel": "Отменить",
|
||||
"appearance": "Внешний вид",
|
||||
"enable_torbox": "Включить Torbox",
|
||||
"enable_torbox": "Включить TorBox",
|
||||
"torbox_description": "TorBox - это ваш премиум-сервис, конкурирующий даже с лучшими серверами на рынке.",
|
||||
"torbox_account_linked": "Аккаунт TorBox привязан",
|
||||
"real_debrid_account_linked": "Аккаунт Real-Debrid привязан",
|
||||
@@ -344,7 +350,12 @@
|
||||
"error_importing_theme": "Ошибка при импорте темы",
|
||||
"theme_imported": "Тема успешно импортирована",
|
||||
"enable_friend_request_notifications": "При получении запроса на добавление в друзья",
|
||||
"enable_auto_install": "Загружать обновления автоматически"
|
||||
"enable_auto_install": "Загружать обновления автоматически",
|
||||
"common_redist": "Библиотеки",
|
||||
"common_redist_description": "Для запуска некоторых игр требуются библиотеки. Во избежание проблем рекомендуется установить их.",
|
||||
"install_common_redist": "Установить",
|
||||
"installing_common_redist": "Установка…",
|
||||
"show_download_speed_in_megabytes": "Показать скорость загрузки в мегабайтах в секунду"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Загрузка завершена",
|
||||
@@ -357,7 +368,9 @@
|
||||
"notification_achievement_unlocked_title": "Достижение разблокировано для {{game}}",
|
||||
"notification_achievement_unlocked_body": "были разблокированы {{achievement}} и другие {{count}}",
|
||||
"new_friend_request_title": "Новый запрос на добавление в друзья",
|
||||
"new_friend_request_description": "Вы получили новый запрос на добавление в друзья"
|
||||
"new_friend_request_description": "Вы получили новый запрос на добавление в друзья",
|
||||
"extraction_complete": "Распаковка завершена",
|
||||
"game_extracted": "{{title}} успешно распакован"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Открыть Hydra",
|
||||
@@ -486,6 +499,7 @@
|
||||
"animated_profile_banner": "Анимированный баннер профиля",
|
||||
"hydra_cloud": "Hydra Cloud",
|
||||
"hydra_cloud_feature_found": "Вы только что открыли для себя функцию Hydra Cloud!",
|
||||
"learn_more": "Подробнее"
|
||||
"learn_more": "Подробнее",
|
||||
"debrid_description": "Скачивайте в 4 раза быстрее с Nimbus"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,10 @@
|
||||
"downloading_metadata": "{{title}} meta verileri indiriliyor…",
|
||||
"downloading": "{{title}} indiriliyor… ({{percentage}} tamamlandı) - Tamamlanma: {{eta}} - Hız: {{speed}}",
|
||||
"calculating_eta": "{{title}} indiriliyor… ({{percentage}} tamamlandı) - Kalan süre hesaplanıyor…",
|
||||
"checking_files": "{{title}} dosyaları kontrol ediliyor… ({{percentage}} tamamlandı)"
|
||||
"checking_files": "{{title}} dosyaları kontrol ediliyor… ({{percentage}} tamamlandı)",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"installation_complete": "İndirme tamamlandı",
|
||||
"installation_complete_message": "Genel bağımlılıklar başarıyla yüklendi."
|
||||
},
|
||||
"catalogue": {
|
||||
"search": "Filtrele…",
|
||||
@@ -120,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.",
|
||||
@@ -190,10 +193,12 @@
|
||||
"reset_achievements_error": "Başarımlar sıfırlanamadı",
|
||||
"download_error_gofile_quota_exceeded": "Gofile aylık kotanızı doldurdunuz. Kotanın yenilenmesini bekleyin.",
|
||||
"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_in_real_debrid": "Bu indirme Real-Debrid üzerinde mevcut değil ve Real-Debrid'den indirme durumu henüz sorgulanamıyor.",
|
||||
"download_error_not_cached_in_torbox": "Bu indirme Torbox'ta mevcut değil ve Torbox'tan indirme durumu henüz sorgulanamıyor.",
|
||||
"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"
|
||||
"game_added_to_favorites": "Oyun favorilere eklendi",
|
||||
"automatically_extract_downloaded_files": "Yüklenmiş dosyaları otomatik olarak çıkart"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Hydra'yı Aktive Et",
|
||||
@@ -230,7 +235,9 @@
|
||||
"seeding": "Paylaşılıyor",
|
||||
"stop_seeding": "Paylaşımı durdur",
|
||||
"resume_seeding": "Paylaşımı sürdür",
|
||||
"options": "Yönet"
|
||||
"options": "Yönet",
|
||||
"extract": "Dosyaları çıkart",
|
||||
"extracting": "Dosyalar çıkartılıyor…"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "İndirme yolu",
|
||||
@@ -332,15 +339,24 @@
|
||||
"delete_theme_description": "Bu {{theme}} temasını silecektir",
|
||||
"cancel": "İptal",
|
||||
"appearance": "Görünüm",
|
||||
"enable_torbox": "Torbox'u etkinleştir",
|
||||
"enable_torbox": "TorBox'u etkinleştir",
|
||||
"torbox_description": "TorBox, piyasadaki en iyi sunucularla bile rekabet edebilen premium seedbox hizmetinizdir.",
|
||||
"torbox_account_linked": "TorBox hesabı bağlando",
|
||||
"real_debrid_account_linked": "Real-Debrid hesabı bağlando",
|
||||
"torbox_account_linked": "TorBox hesabı bağlandı",
|
||||
"create_real_debrid_account": "Henüz bir Real-Debrid hesabınız yoksa buraya tıklayın",
|
||||
"create_torbox_account": "Henüz bir TorBox hesabınız yoksa buraya tıklayın",
|
||||
"real_debrid_account_linked": "Real-Debrid hesabı bağlandı",
|
||||
"name_min_length": "Tema ismi en az 3 karakter uzunluğunda olmalıdır",
|
||||
"import_theme": "Temayı içe aktar",
|
||||
"import_theme_description": "{{theme}} teması, tema mağazasından içeri aktarılacak",
|
||||
"error_importing_theme": "Temayı içe aktarmada bir sorun oluştu",
|
||||
"theme_imported": "Tema başarıyla içe aktarıldı"
|
||||
"theme_imported": "Tema başarıyla içe aktarıldı",
|
||||
"enable_friend_request_notifications": "Bir arkadaşlık isteği alındığında",
|
||||
"enable_auto_install": "Güncellemeleri otomatik yükle",
|
||||
"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…",
|
||||
"show_download_speed_in_megabytes": "İndirme hızını megabayt/saniye (MB/s) cinsinden göster"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "İndirme tamamlandı",
|
||||
@@ -351,7 +367,11 @@
|
||||
"new_update_available": "{{version}} sürümü mevcut",
|
||||
"restart_to_install_update": "Güncellemeyi yüklemek için Hydra'yı yeniden başlatın",
|
||||
"notification_achievement_unlocked_title": "{{game}} için başarım kilidi açıldı",
|
||||
"notification_achievement_unlocked_body": "{{achievement}} ve diğer {{count}} başarım açıldı"
|
||||
"notification_achievement_unlocked_body": "{{achievement}} ve diğer {{count}} başarım açıldı",
|
||||
"new_friend_request_description": "Yeni bir arkadaşlık isteğin var",
|
||||
"new_friend_request_title": "Yeni arkadaşlık isteği",
|
||||
"extraction_complete": "Çıkartma tamamlandı",
|
||||
"game_extracted": "{{title}} başarıyla çıkartıldı"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Hydra'yı Aç",
|
||||
@@ -480,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",
|
||||
@@ -144,7 +230,14 @@
|
||||
"no_downloads_title": "Тут так пусто...",
|
||||
"queued": "В черзі",
|
||||
"queued_downloads": "Завантаження в черзі",
|
||||
"removed": "Не завантажено"
|
||||
"removed": "Не завантажено",
|
||||
"checking_files": "Перевірка файлів…",
|
||||
"seeding": "Сідінг",
|
||||
"stop_seeding": "Зупинити сідінг",
|
||||
"resume_seeding": "Продовжити сідінг",
|
||||
"options": "Налаштування",
|
||||
"extract": "Розархівувати файли",
|
||||
"extracting": "Розархівовування файлів…"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Тека завантажень",
|
||||
@@ -193,21 +286,101 @@
|
||||
"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": "Показувати швидкість завантаження в мегабайтах на секунду"
|
||||
},
|
||||
"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 +413,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": "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,8 +1,6 @@
|
||||
import { CloudSync } from "@main/services";
|
||||
import { registerEvent } from "../register-event";
|
||||
import type { GameShop } from "@types";
|
||||
import i18next, { t } from "i18next";
|
||||
import { formatDate } from "date-fns";
|
||||
|
||||
const uploadSaveGame = async (
|
||||
_event: Electron.IpcMainInvokeEvent,
|
||||
@@ -10,16 +8,11 @@ const uploadSaveGame = async (
|
||||
shop: GameShop,
|
||||
downloadOptionTitle: string | null
|
||||
) => {
|
||||
const { language } = i18next;
|
||||
|
||||
return CloudSync.uploadSaveGame(
|
||||
objectId,
|
||||
shop,
|
||||
downloadOptionTitle,
|
||||
t("backup_from", {
|
||||
ns: "game_details",
|
||||
date: formatDate(new Date(), language),
|
||||
})
|
||||
CloudSync.getBackupLabel(false)
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@ import "./torrenting/resume-game-download";
|
||||
import "./torrenting/start-game-download";
|
||||
import "./torrenting/pause-game-seed";
|
||||
import "./torrenting/resume-game-seed";
|
||||
import "./torrenting/check-debrid-availability";
|
||||
import "./user-preferences/get-user-preferences";
|
||||
import "./user-preferences/update-user-preferences";
|
||||
import "./user-preferences/auto-launch";
|
||||
|
||||
@@ -13,35 +13,42 @@ const deleteGameFolder = async (
|
||||
objectId: string
|
||||
): Promise<void> => {
|
||||
const downloadKey = levelKeys.game(shop, objectId);
|
||||
|
||||
const download = await downloadsSublevel.get(downloadKey);
|
||||
|
||||
if (!download) return;
|
||||
if (!download?.folderName) return;
|
||||
|
||||
if (download.folderName) {
|
||||
const folderPath = path.join(
|
||||
download.downloadPath ?? (await getDownloadsPath()),
|
||||
download.folderName
|
||||
);
|
||||
const folderPath = path.join(
|
||||
download.downloadPath ?? (await getDownloadsPath()),
|
||||
download.folderName
|
||||
);
|
||||
|
||||
if (fs.existsSync(folderPath)) {
|
||||
const metaPath = `${folderPath}.meta`;
|
||||
|
||||
const deleteFile = async (filePath: string, isDirectory = false) => {
|
||||
if (fs.existsSync(filePath)) {
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
fs.rm(
|
||||
folderPath,
|
||||
{ recursive: true, force: true, maxRetries: 5, retryDelay: 200 },
|
||||
filePath,
|
||||
{
|
||||
recursive: isDirectory,
|
||||
force: true,
|
||||
maxRetries: 5,
|
||||
retryDelay: 200,
|
||||
},
|
||||
(error) => {
|
||||
if (error) {
|
||||
logger.error(error);
|
||||
reject();
|
||||
}
|
||||
|
||||
resolve();
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
await deleteFile(folderPath, true);
|
||||
await deleteFile(metaPath);
|
||||
await downloadsSublevel.del(downloadKey);
|
||||
};
|
||||
|
||||
|
||||
11
src/main/events/torrenting/check-debrid-availability.ts
Normal file
11
src/main/events/torrenting/check-debrid-availability.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { HydraDebridClient } from "@main/services/download/hydra-debrid";
|
||||
import { registerEvent } from "../register-event";
|
||||
|
||||
const checkDebridAvailability = async (
|
||||
_event: Electron.IpcMainInvokeEvent,
|
||||
magnets: string[]
|
||||
) => {
|
||||
return HydraDebridClient.getAvailableMagnets(magnets);
|
||||
};
|
||||
|
||||
registerEvent("checkDebridAvailability", checkDebridAvailability);
|
||||
@@ -3,12 +3,10 @@ import updater from "electron-updater";
|
||||
import i18n from "i18next";
|
||||
import path from "node:path";
|
||||
import url from "node:url";
|
||||
import kill from "kill-port";
|
||||
import { electronApp, optimizer } from "@electron-toolkit/utils";
|
||||
import { logger, WindowManager } from "@main/services";
|
||||
import resources from "@locales";
|
||||
import { PythonRPC } from "./services/python-rpc";
|
||||
import { Aria2 } from "./services/aria2";
|
||||
import { db, levelKeys } from "./level";
|
||||
import { loadState } from "./main";
|
||||
|
||||
@@ -59,7 +57,7 @@ app.whenReady().then(async () => {
|
||||
return net.fetch(url.pathToFileURL(decodeURI(filePath)).toString());
|
||||
});
|
||||
|
||||
await kill(PythonRPC.RPC_PORT).finally(() => loadState());
|
||||
await loadState();
|
||||
|
||||
const language = await db.get<string, string>(levelKeys.language, {
|
||||
valueEncoding: "utf-8",
|
||||
@@ -143,7 +141,6 @@ app.on("window-all-closed", () => {
|
||||
app.on("before-quit", () => {
|
||||
/* Disconnects libtorrent */
|
||||
PythonRPC.kill();
|
||||
Aria2.kill();
|
||||
});
|
||||
|
||||
app.on("activate", () => {
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { DownloadManager, Ludusavi, startMainLoop } from "./services";
|
||||
import { Aria2, DownloadManager, Ludusavi, startMainLoop } from "./services";
|
||||
import { RealDebridClient } from "./services/download/real-debrid";
|
||||
import { HydraApi } from "./services/hydra-api";
|
||||
import { uploadGamesBatch } from "./services/library-sync";
|
||||
import { Aria2 } from "./services/aria2";
|
||||
import { downloadsSublevel } from "./level/sublevels/downloads";
|
||||
import { sortBy } from "lodash-es";
|
||||
import { Downloader } from "@shared";
|
||||
@@ -33,7 +32,7 @@ export const loadState = async () => {
|
||||
|
||||
Ludusavi.addManifestToLudusaviConfig();
|
||||
|
||||
HydraApi.setupApi().then(() => {
|
||||
await HydraApi.setupApi().then(() => {
|
||||
uploadGamesBatch();
|
||||
});
|
||||
|
||||
|
||||
@@ -16,6 +16,13 @@ export const getGameAchievementData = async (
|
||||
if (cachedAchievements && useCachedData)
|
||||
return cachedAchievements.achievements;
|
||||
|
||||
if (
|
||||
cachedAchievements &&
|
||||
Date.now() < (cachedAchievements.cacheExpiresTimestamp ?? 0)
|
||||
) {
|
||||
return cachedAchievements.achievements;
|
||||
}
|
||||
|
||||
const language = await db
|
||||
.get<string, string>(levelKeys.language, {
|
||||
valueEncoding: "utf-8",
|
||||
@@ -31,6 +38,7 @@ export const getGameAchievementData = async (
|
||||
await gameAchievementsSublevel.put(levelKeys.game(shop, objectId), {
|
||||
unlockedAchievements: cachedAchievements?.unlockedAchievements ?? [],
|
||||
achievements,
|
||||
cacheExpiresTimestamp: Date.now() + 1000 * 60 * 30, // 30 minutes
|
||||
});
|
||||
|
||||
return achievements;
|
||||
|
||||
@@ -2,6 +2,7 @@ import type {
|
||||
Game,
|
||||
GameShop,
|
||||
UnlockedAchievement,
|
||||
UpdatedUnlockedAchievements,
|
||||
UserPreferences,
|
||||
} from "@types";
|
||||
import { WindowManager } from "../window-manager";
|
||||
@@ -26,6 +27,7 @@ const saveAchievementsOnLocal = async (
|
||||
await gameAchievementsSublevel.put(levelKey, {
|
||||
achievements: gameAchievement?.achievements ?? [],
|
||||
unlockedAchievements: unlockedAchievements,
|
||||
cacheExpiresTimestamp: gameAchievement?.cacheExpiresTimestamp,
|
||||
});
|
||||
|
||||
if (!sendUpdateEvent) return;
|
||||
@@ -114,7 +116,7 @@ export const mergeAchievements = async (
|
||||
}
|
||||
|
||||
if (game.remoteId) {
|
||||
await HydraApi.put(
|
||||
await HydraApi.put<UpdatedUnlockedAchievements | undefined>(
|
||||
"/profile/games/achievements",
|
||||
{
|
||||
id: game.remoteId,
|
||||
@@ -123,10 +125,19 @@ export const mergeAchievements = async (
|
||||
{ needsSubscription: !newAchievements.length }
|
||||
)
|
||||
.then((response) => {
|
||||
if (response) {
|
||||
return saveAchievementsOnLocal(
|
||||
response.objectId,
|
||||
response.shop,
|
||||
response.achievements,
|
||||
publishNotification
|
||||
);
|
||||
}
|
||||
|
||||
return saveAchievementsOnLocal(
|
||||
response.objectId,
|
||||
response.shop,
|
||||
response.achievements,
|
||||
game.objectId,
|
||||
game.shop,
|
||||
mergedLocalAchievements,
|
||||
publishNotification
|
||||
);
|
||||
})
|
||||
|
||||
@@ -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];
|
||||
|
||||
|
||||
@@ -4,13 +4,14 @@ import { app } from "electron";
|
||||
|
||||
export class Aria2 {
|
||||
private static process: cp.ChildProcess | null = null;
|
||||
private static readonly binaryPath = app.isPackaged
|
||||
? path.join(process.resourcesPath, "aria2", "aria2c")
|
||||
: path.join(__dirname, "..", "..", "aria2", "aria2c");
|
||||
|
||||
public static spawn() {
|
||||
const binaryPath = app.isPackaged
|
||||
? path.join(process.resourcesPath, "aria2", "aria2c")
|
||||
: path.join(__dirname, "..", "..", "aria2", "aria2c");
|
||||
|
||||
this.process = cp.spawn(
|
||||
this.binaryPath,
|
||||
binaryPath,
|
||||
[
|
||||
"--enable-rpc",
|
||||
"--rpc-listen-all",
|
||||
|
||||
@@ -13,9 +13,28 @@ import { logger } from "./logger";
|
||||
import { WindowManager } from "./window-manager";
|
||||
import axios from "axios";
|
||||
import { Ludusavi } from "./ludusavi";
|
||||
import { SubscriptionRequiredError } from "@shared";
|
||||
import { formatDate, SubscriptionRequiredError } from "@shared";
|
||||
import i18next, { t } from "i18next";
|
||||
|
||||
export class CloudSync {
|
||||
public static getBackupLabel(automatic: boolean) {
|
||||
const language = i18next.language;
|
||||
|
||||
const date = formatDate(new Date(), language);
|
||||
|
||||
if (automatic) {
|
||||
return t("automatic_backup_from", {
|
||||
ns: "game_details",
|
||||
date,
|
||||
});
|
||||
}
|
||||
|
||||
return t("backup_from", {
|
||||
ns: "game_details",
|
||||
date,
|
||||
});
|
||||
}
|
||||
|
||||
private static async bundleBackup(
|
||||
shop: GameShop,
|
||||
objectId: string,
|
||||
@@ -25,7 +44,11 @@ export class CloudSync {
|
||||
|
||||
// Remove existing backup
|
||||
if (fs.existsSync(backupPath)) {
|
||||
fs.rmSync(backupPath, { recursive: true });
|
||||
try {
|
||||
await fs.promises.rm(backupPath, { recursive: true });
|
||||
} catch (error) {
|
||||
logger.error("Failed to remove backup path", error);
|
||||
}
|
||||
}
|
||||
|
||||
await Ludusavi.backupGame(shop, objectId, backupPath, winePrefix);
|
||||
@@ -101,11 +124,10 @@ export class CloudSync {
|
||||
true
|
||||
);
|
||||
|
||||
fs.rm(bundleLocation, (err) => {
|
||||
if (err) {
|
||||
logger.error("Failed to remove tar file", err);
|
||||
throw err;
|
||||
}
|
||||
});
|
||||
try {
|
||||
await fs.promises.unlink(bundleLocation);
|
||||
} catch (error) {
|
||||
logger.error("Failed to remove tar file", error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import { db, downloadsSublevel, gamesSublevel, levelKeys } from "@main/level";
|
||||
import { sortBy } from "lodash-es";
|
||||
import { TorBoxClient } from "./torbox";
|
||||
import { GameFilesManager } from "../game-files-manager";
|
||||
import { HydraDebridClient } from "./hydra-debrid";
|
||||
|
||||
export class DownloadManager {
|
||||
private static downloadingGameId: string | null = null;
|
||||
@@ -313,6 +314,8 @@ export class DownloadManager {
|
||||
url: downloadLink,
|
||||
save_path: download.downloadPath,
|
||||
header: `Cookie: accountToken=${token}`,
|
||||
allow_multiple_connections: true,
|
||||
connections_limit: 8,
|
||||
};
|
||||
}
|
||||
case Downloader.PixelDrain: {
|
||||
@@ -364,7 +367,7 @@ export class DownloadManager {
|
||||
case Downloader.RealDebrid: {
|
||||
const downloadUrl = await RealDebridClient.getDownloadUrl(download.uri);
|
||||
|
||||
if (!downloadUrl) throw new Error(DownloadError.NotCachedInRealDebrid);
|
||||
if (!downloadUrl) throw new Error(DownloadError.NotCachedOnRealDebrid);
|
||||
|
||||
return {
|
||||
action: "start",
|
||||
@@ -387,6 +390,21 @@ export class DownloadManager {
|
||||
allow_multiple_connections: true,
|
||||
};
|
||||
}
|
||||
case Downloader.Hydra: {
|
||||
const downloadUrl = await HydraDebridClient.getDownloadUrl(
|
||||
download.uri
|
||||
);
|
||||
|
||||
if (!downloadUrl) throw new Error(DownloadError.NotCachedOnHydra);
|
||||
|
||||
return {
|
||||
action: "start",
|
||||
game_id: downloadId,
|
||||
url: downloadUrl,
|
||||
save_path: download.downloadPath,
|
||||
allow_multiple_connections: true,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
27
src/main/services/download/hydra-debrid.ts
Normal file
27
src/main/services/download/hydra-debrid.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { HydraApi } from "../hydra-api";
|
||||
|
||||
export class HydraDebridClient {
|
||||
public static getAvailableMagnets(
|
||||
magnets: string[]
|
||||
): Promise<Record<string, boolean>> {
|
||||
return HydraApi.put(
|
||||
"/debrid/check-availability",
|
||||
{
|
||||
magnets,
|
||||
},
|
||||
{ needsAuth: false }
|
||||
);
|
||||
}
|
||||
|
||||
public static async getDownloadUrl(magnet: string) {
|
||||
try {
|
||||
const response = await HydraApi.post("/debrid/request-file", {
|
||||
magnet,
|
||||
});
|
||||
|
||||
return response.downloadUrl;
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,3 +11,4 @@ export * from "./cloud-sync";
|
||||
export * from "./7zip";
|
||||
export * from "./game-files-manager";
|
||||
export * from "./common-redist-manager";
|
||||
export * from "./aria2";
|
||||
|
||||
@@ -6,9 +6,7 @@ import axios from "axios";
|
||||
import { exec } from "child_process";
|
||||
import { ProcessPayload } from "./download/types";
|
||||
import { gamesSublevel, levelKeys } from "@main/level";
|
||||
import i18next, { t } from "i18next";
|
||||
import { CloudSync } from "./cloud-sync";
|
||||
import { formatDate } from "date-fns";
|
||||
|
||||
const commands = {
|
||||
findWineDir: `lsof -c wine 2>/dev/null | grep '/drive_c/windows$' | head -n 1 | awk '{for(i=9;i<=NF;i++) printf "%s ", $i; print ""}'`,
|
||||
@@ -229,17 +227,12 @@ function onOpenGame(game: Game) {
|
||||
if (game.remoteId) {
|
||||
updateGamePlaytime(game, 0, new Date()).catch(() => {});
|
||||
|
||||
const { language } = i18next;
|
||||
|
||||
if (game.automaticCloudSync) {
|
||||
CloudSync.uploadSaveGame(
|
||||
game.objectId,
|
||||
game.shop,
|
||||
null,
|
||||
t("automatic_backup_from", {
|
||||
ns: "game_details",
|
||||
date: formatDate(new Date(), language),
|
||||
})
|
||||
CloudSync.getBackupLabel(true)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
@@ -298,8 +291,6 @@ const onCloseGame = (game: Game) => {
|
||||
)!;
|
||||
gamesPlaytime.delete(levelKeys.game(game.shop, game.objectId));
|
||||
|
||||
const { language } = i18next;
|
||||
|
||||
if (game.remoteId) {
|
||||
updateGamePlaytime(
|
||||
game,
|
||||
@@ -312,10 +303,7 @@ const onCloseGame = (game: Game) => {
|
||||
game.objectId,
|
||||
game.shop,
|
||||
null,
|
||||
t("automatic_backup_from", {
|
||||
ns: "game_details",
|
||||
date: formatDate(new Date(), language),
|
||||
})
|
||||
CloudSync.getBackupLabel(true)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -21,6 +21,12 @@ const binaryNameByPlatform: Partial<Record<NodeJS.Platform, string>> = {
|
||||
win32: "hydra-python-rpc.exe",
|
||||
};
|
||||
|
||||
const rustBinaryNameByPlatform: Partial<Record<NodeJS.Platform, string>> = {
|
||||
darwin: "hydra-httpdl",
|
||||
linux: "hydra-httpdl",
|
||||
win32: "hydra-httpdl.exe",
|
||||
};
|
||||
|
||||
export class PythonRPC {
|
||||
public static readonly BITTORRENT_PORT = "5881";
|
||||
public static readonly RPC_PORT = "8084";
|
||||
@@ -52,6 +58,20 @@ export class PythonRPC {
|
||||
this.RPC_PASSWORD,
|
||||
initialDownload ? JSON.stringify(initialDownload) : "",
|
||||
initialSeeding ? JSON.stringify(initialSeeding) : "",
|
||||
app.isPackaged
|
||||
? path.join(
|
||||
process.resourcesPath,
|
||||
rustBinaryNameByPlatform[process.platform]!
|
||||
)
|
||||
: path.join(
|
||||
__dirname,
|
||||
"..",
|
||||
"..",
|
||||
"rust_rpc",
|
||||
"target",
|
||||
"debug",
|
||||
rustBinaryNameByPlatform[process.platform]!
|
||||
),
|
||||
];
|
||||
|
||||
if (app.isPackaged) {
|
||||
|
||||
@@ -372,12 +372,12 @@ export class WindowManager {
|
||||
|
||||
const sortedGames = sortBy(filteredGames, "lastTimePlayed", "DESC");
|
||||
|
||||
return slice(sortedGames, 5);
|
||||
return slice(sortedGames, 0, 5);
|
||||
});
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
|
||||
@@ -55,6 +55,8 @@ contextBridge.exposeInMainWorld("electron", {
|
||||
ipcRenderer.on("on-seeding-status", listener);
|
||||
return () => ipcRenderer.removeListener("on-seeding-status", listener);
|
||||
},
|
||||
checkDebridAvailability: (magnets: string[]) =>
|
||||
ipcRenderer.invoke("checkDebridAvailability", magnets),
|
||||
|
||||
/* Catalogue */
|
||||
searchGames: (payload: CatalogueSearchPayload, take: number, skip: number) =>
|
||||
|
||||
@@ -31,7 +31,6 @@ import { HydraCloudModal } from "./pages/shared-modals/hydra-cloud/hydra-cloud-m
|
||||
|
||||
import { injectCustomCss } from "./helpers";
|
||||
import "./app.scss";
|
||||
import { DownloadSource } from "@types";
|
||||
|
||||
export interface AppProps {
|
||||
children: React.ReactNode;
|
||||
@@ -137,71 +136,16 @@ export function App() {
|
||||
});
|
||||
}, [fetchUserDetails, updateUserDetails, dispatch]);
|
||||
|
||||
const syncDownloadSources = useCallback(async () => {
|
||||
const downloadSources = await window.electron.getDownloadSources();
|
||||
|
||||
const existingDownloadSources: DownloadSource[] =
|
||||
await downloadSourcesTable.toArray();
|
||||
|
||||
window.electron.createDownloadSources(
|
||||
existingDownloadSources.map((source) => source.url)
|
||||
);
|
||||
|
||||
await Promise.allSettled(
|
||||
downloadSources.map(async (source) => {
|
||||
return new Promise((resolve) => {
|
||||
const existingDownloadSource = existingDownloadSources.find(
|
||||
(downloadSource) => downloadSource.url === source.url
|
||||
);
|
||||
|
||||
if (!existingDownloadSource) {
|
||||
const channel = new BroadcastChannel(
|
||||
`download_sources:import:${source.url}`
|
||||
);
|
||||
|
||||
downloadSourcesWorker.postMessage([
|
||||
"IMPORT_DOWNLOAD_SOURCE",
|
||||
source.url,
|
||||
]);
|
||||
|
||||
channel.onmessage = () => {
|
||||
resolve(true);
|
||||
channel.close();
|
||||
};
|
||||
} else {
|
||||
resolve(true);
|
||||
}
|
||||
});
|
||||
})
|
||||
);
|
||||
|
||||
updateRepacks();
|
||||
|
||||
const id = crypto.randomUUID();
|
||||
const channel = new BroadcastChannel(`download_sources:sync:${id}`);
|
||||
|
||||
channel.onmessage = async (event: MessageEvent<number>) => {
|
||||
const newRepacksCount = event.data;
|
||||
window.electron.publishNewRepacksNotification(newRepacksCount);
|
||||
updateRepacks();
|
||||
|
||||
const downloadSources = await downloadSourcesTable.toArray();
|
||||
|
||||
downloadSources
|
||||
.filter((source) => !source.fingerprint)
|
||||
.forEach(async (downloadSource) => {
|
||||
const { fingerprint } = await window.electron.putDownloadSource(
|
||||
downloadSource.objectIds
|
||||
);
|
||||
|
||||
downloadSourcesTable.update(downloadSource.id, { fingerprint });
|
||||
});
|
||||
};
|
||||
|
||||
downloadSourcesWorker.postMessage(["SYNC_DOWNLOAD_SOURCES", id]);
|
||||
}, [updateRepacks]);
|
||||
|
||||
const onSignIn = useCallback(() => {
|
||||
window.electron.getDownloadSources().then((sources) => {
|
||||
sources.forEach((source) => {
|
||||
downloadSourcesWorker.postMessage([
|
||||
"IMPORT_DOWNLOAD_SOURCE",
|
||||
source.url,
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
fetchUserDetails().then((response) => {
|
||||
if (response) {
|
||||
updateUserDetails(response);
|
||||
@@ -209,15 +153,7 @@ export function App() {
|
||||
showSuccessToast(t("successfully_signed_in"));
|
||||
}
|
||||
});
|
||||
|
||||
syncDownloadSources();
|
||||
}, [
|
||||
fetchUserDetails,
|
||||
t,
|
||||
showSuccessToast,
|
||||
updateUserDetails,
|
||||
syncDownloadSources,
|
||||
]);
|
||||
}, [fetchUserDetails, t, showSuccessToast, updateUserDetails]);
|
||||
|
||||
useEffect(() => {
|
||||
const unsubscribe = window.electron.onSyncFriendRequests((result) => {
|
||||
@@ -285,8 +221,41 @@ export function App() {
|
||||
}, [dispatch, draggingDisabled]);
|
||||
|
||||
useEffect(() => {
|
||||
syncDownloadSources();
|
||||
}, [syncDownloadSources]);
|
||||
updateRepacks();
|
||||
|
||||
const id = crypto.randomUUID();
|
||||
const channel = new BroadcastChannel(`download_sources:sync:${id}`);
|
||||
|
||||
channel.onmessage = async (event: MessageEvent<number>) => {
|
||||
const newRepacksCount = event.data;
|
||||
window.electron.publishNewRepacksNotification(newRepacksCount);
|
||||
updateRepacks();
|
||||
|
||||
const downloadSources = await downloadSourcesTable.toArray();
|
||||
|
||||
await Promise.all(
|
||||
downloadSources
|
||||
.filter((source) => !source.fingerprint)
|
||||
.map(async (downloadSource) => {
|
||||
const { fingerprint } = await window.electron.putDownloadSource(
|
||||
downloadSource.objectIds
|
||||
);
|
||||
|
||||
return downloadSourcesTable.update(downloadSource.id, {
|
||||
fingerprint,
|
||||
});
|
||||
})
|
||||
);
|
||||
|
||||
channel.close();
|
||||
};
|
||||
|
||||
downloadSourcesWorker.postMessage(["SYNC_DOWNLOAD_SOURCES", id]);
|
||||
|
||||
return () => {
|
||||
channel.close();
|
||||
};
|
||||
}, [updateRepacks]);
|
||||
|
||||
useEffect(() => {
|
||||
const loadAndApplyTheme = async () => {
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 12 KiB |
24
src/renderer/src/assets/meteor.svg
Normal file
24
src/renderer/src/assets/meteor.svg
Normal file
@@ -0,0 +1,24 @@
|
||||
<svg width="20" height="21" viewBox="0 0 20 21" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Meteor">
|
||||
<g id="Vector">
|
||||
<path d="M10.6242 13.0003C10.6242 13.6184 10.4409 14.2226 10.0975 14.7365C9.75415 15.2504 9.26609 15.6509 8.69507 15.8875C8.12405 16.124 7.49572 16.1859 6.88953 16.0653C6.28334 15.9447 5.72652 15.6471 5.28948 15.2101C4.85244 14.773 4.55481 14.2162 4.43423 13.61C4.31366 13.0038 4.37554 12.3755 4.61206 11.8045C4.84859 11.2334 5.24913 10.7454 5.76303 10.402C6.27693 10.0586 6.88112 9.87535 7.49919 9.87535C8.32799 9.87535 9.12285 10.2046 9.7089 10.7906C10.2949 11.3767 10.6242 12.1715 10.6242 13.0003ZM16.432 10.0582L12.682 13.8082C12.5647 13.9254 12.4988 14.0845 12.4988 14.2503C12.4988 14.4162 12.5647 14.5753 12.682 14.6925C12.7993 14.8098 12.9583 14.8757 13.1242 14.8757C13.29 14.8757 13.4491 14.8098 13.5664 14.6925L17.3164 10.9425C17.3744 10.8845 17.4205 10.8155 17.4519 10.7397C17.4834 10.6638 17.4995 10.5825 17.4995 10.5003C17.4995 10.4182 17.4834 10.3369 17.4519 10.261C17.4205 10.1852 17.3744 10.1162 17.3164 10.0582C17.2583 10.0001 17.1894 9.95403 17.1135 9.9226C17.0376 9.89118 16.9563 9.875 16.8742 9.875C16.7921 9.875 16.7107 9.89118 16.6349 9.9226C16.559 9.95403 16.4901 10.0001 16.432 10.0582ZM14.8164 9.06754C14.8744 9.00947 14.9205 8.94053 14.9519 8.86466C14.9834 8.78879 14.9995 8.70747 14.9995 8.62535C14.9995 8.54323 14.9834 8.46191 14.9519 8.38604C14.9205 8.31017 14.8744 8.24123 14.8164 8.18316C14.7583 8.12509 14.6894 8.07903 14.6135 8.0476C14.5376 8.01617 14.4563 8 14.3742 8C14.2921 8 14.2107 8.01617 14.1349 8.0476C14.059 8.07903 13.9901 8.12509 13.932 8.18316L12.057 10.0582C11.9397 10.1754 11.8738 10.3345 11.8738 10.5003C11.8738 10.6662 11.9397 10.8253 12.057 10.9425C12.1743 11.0598 12.3333 11.1257 12.4992 11.1257C12.665 11.1257 12.8241 11.0598 12.9414 10.9425L14.8164 9.06754ZM17.9414 5.05816C17.8833 5.00005 17.8144 4.95395 17.7385 4.9225C17.6627 4.89105 17.5813 4.87486 17.4992 4.87486C17.4171 4.87486 17.3357 4.89105 17.2599 4.9225C17.184 4.95395 17.115 5.00005 17.057 5.05816L15.807 6.30816C15.6897 6.42544 15.6238 6.5845 15.6238 6.75035C15.6238 6.9162 15.6897 7.07526 15.807 7.19254C15.9243 7.30981 16.0833 7.37569 16.2492 7.3757C16.415 7.3757 16.5741 7.30981 16.6914 7.19254L17.9414 5.94254C17.9995 5.88449 18.0456 5.81556 18.077 5.73969C18.1085 5.66381 18.1247 5.58248 18.1247 5.50035C18.1247 5.41821 18.1085 5.33688 18.077 5.26101C18.0456 5.18514 17.9995 5.11621 17.9414 5.05816ZM9.557 8.44254C9.61505 8.50065 9.68398 8.54674 9.75985 8.5782C9.83572 8.60965 9.91705 8.62584 9.99919 8.62584C10.0813 8.62584 10.1627 8.60965 10.2385 8.5782C10.3144 8.54674 10.3833 8.50065 10.4414 8.44254L16.0664 2.81754C16.1244 2.75947 16.1705 2.69053 16.2019 2.61466C16.2334 2.53879 16.2495 2.45747 16.2495 2.37535C16.2495 2.29323 16.2334 2.21191 16.2019 2.13604C16.1705 2.06017 16.1244 1.99123 16.0664 1.93316C16.0083 1.87509 15.9394 1.82903 15.8635 1.7976C15.7876 1.76618 15.7063 1.75 15.6242 1.75C15.5421 1.75 15.4607 1.76618 15.3849 1.7976C15.309 1.82903 15.2401 1.87509 15.182 1.93316L9.557 7.55816C9.49889 7.61621 9.45279 7.68514 9.42134 7.76101C9.38989 7.83688 9.3737 7.91821 9.3737 8.00035C9.3737 8.08248 9.38989 8.16381 9.42134 8.23969C9.45279 8.31556 9.49889 8.38449 9.557 8.44254ZM10.5929 16.0941C9.77242 16.9146 8.65957 17.3756 7.49919 17.3756C6.33881 17.3756 5.22595 16.9146 4.40544 16.0941C3.58492 15.2736 3.12396 14.1607 3.12396 13.0003C3.12396 11.84 3.58492 10.7271 4.40544 9.9066L10.8703 3.44253C10.9284 3.38447 10.9744 3.31553 11.0058 3.23966C11.0373 3.16379 11.0534 3.08247 11.0534 3.00035C11.0534 2.91823 11.0373 2.83691 11.0058 2.76104C10.9744 2.68517 10.9284 2.61623 10.8703 2.55816C10.8122 2.50009 10.7433 2.45403 10.6674 2.4226C10.5915 2.39118 10.5102 2.375 10.4281 2.375C10.346 2.375 10.2647 2.39118 10.1888 2.4226C10.1129 2.45403 10.044 2.50009 9.98591 2.55816L3.52184 9.023C2.99253 9.54377 2.57156 10.1642 2.28322 10.8484C1.99488 11.5327 1.84487 12.2673 1.84184 13.0098C1.83882 13.7524 1.98284 14.4882 2.2656 15.1747C2.54836 15.8613 2.96427 16.4852 3.48932 17.0102C4.01438 17.5353 4.63819 17.9512 5.32479 18.2339C6.01138 18.5167 6.74717 18.6607 7.4897 18.6577C8.23223 18.6547 8.96682 18.5047 9.65109 18.2163C10.3354 17.928 10.9558 17.507 11.4765 16.9777C11.5888 16.8595 11.6505 16.7022 11.6484 16.5392C11.6463 16.3762 11.5806 16.2205 11.4654 16.1053C11.3501 15.99 11.1944 15.9243 11.0314 15.9223C10.8684 15.9202 10.7111 15.9818 10.5929 16.0941Z" fill="black"/>
|
||||
<path d="M10.6242 13.0003C10.6242 13.6184 10.4409 14.2226 10.0975 14.7365C9.75415 15.2504 9.26609 15.6509 8.69507 15.8875C8.12405 16.124 7.49572 16.1859 6.88953 16.0653C6.28334 15.9447 5.72652 15.6471 5.28948 15.2101C4.85244 14.773 4.55481 14.2162 4.43423 13.61C4.31366 13.0038 4.37554 12.3755 4.61206 11.8045C4.84859 11.2334 5.24913 10.7454 5.76303 10.402C6.27693 10.0586 6.88112 9.87535 7.49919 9.87535C8.32799 9.87535 9.12285 10.2046 9.7089 10.7906C10.2949 11.3767 10.6242 12.1715 10.6242 13.0003ZM16.432 10.0582L12.682 13.8082C12.5647 13.9254 12.4988 14.0845 12.4988 14.2503C12.4988 14.4162 12.5647 14.5753 12.682 14.6925C12.7993 14.8098 12.9583 14.8757 13.1242 14.8757C13.29 14.8757 13.4491 14.8098 13.5664 14.6925L17.3164 10.9425C17.3744 10.8845 17.4205 10.8155 17.4519 10.7397C17.4834 10.6638 17.4995 10.5825 17.4995 10.5003C17.4995 10.4182 17.4834 10.3369 17.4519 10.261C17.4205 10.1852 17.3744 10.1162 17.3164 10.0582C17.2583 10.0001 17.1894 9.95403 17.1135 9.9226C17.0376 9.89118 16.9563 9.875 16.8742 9.875C16.7921 9.875 16.7107 9.89118 16.6349 9.9226C16.559 9.95403 16.4901 10.0001 16.432 10.0582ZM14.8164 9.06754C14.8744 9.00947 14.9205 8.94053 14.9519 8.86466C14.9834 8.78879 14.9995 8.70747 14.9995 8.62535C14.9995 8.54323 14.9834 8.46191 14.9519 8.38604C14.9205 8.31017 14.8744 8.24123 14.8164 8.18316C14.7583 8.12509 14.6894 8.07903 14.6135 8.0476C14.5376 8.01617 14.4563 8 14.3742 8C14.2921 8 14.2107 8.01617 14.1349 8.0476C14.059 8.07903 13.9901 8.12509 13.932 8.18316L12.057 10.0582C11.9397 10.1754 11.8738 10.3345 11.8738 10.5003C11.8738 10.6662 11.9397 10.8253 12.057 10.9425C12.1743 11.0598 12.3333 11.1257 12.4992 11.1257C12.665 11.1257 12.8241 11.0598 12.9414 10.9425L14.8164 9.06754ZM17.9414 5.05816C17.8833 5.00005 17.8144 4.95395 17.7385 4.9225C17.6627 4.89105 17.5813 4.87486 17.4992 4.87486C17.4171 4.87486 17.3357 4.89105 17.2599 4.9225C17.184 4.95395 17.115 5.00005 17.057 5.05816L15.807 6.30816C15.6897 6.42544 15.6238 6.5845 15.6238 6.75035C15.6238 6.9162 15.6897 7.07526 15.807 7.19254C15.9243 7.30981 16.0833 7.37569 16.2492 7.3757C16.415 7.3757 16.5741 7.30981 16.6914 7.19254L17.9414 5.94254C17.9995 5.88449 18.0456 5.81556 18.077 5.73969C18.1085 5.66381 18.1247 5.58248 18.1247 5.50035C18.1247 5.41821 18.1085 5.33688 18.077 5.26101C18.0456 5.18514 17.9995 5.11621 17.9414 5.05816ZM9.557 8.44254C9.61505 8.50065 9.68398 8.54674 9.75985 8.5782C9.83572 8.60965 9.91705 8.62584 9.99919 8.62584C10.0813 8.62584 10.1627 8.60965 10.2385 8.5782C10.3144 8.54674 10.3833 8.50065 10.4414 8.44254L16.0664 2.81754C16.1244 2.75947 16.1705 2.69053 16.2019 2.61466C16.2334 2.53879 16.2495 2.45747 16.2495 2.37535C16.2495 2.29323 16.2334 2.21191 16.2019 2.13604C16.1705 2.06017 16.1244 1.99123 16.0664 1.93316C16.0083 1.87509 15.9394 1.82903 15.8635 1.7976C15.7876 1.76618 15.7063 1.75 15.6242 1.75C15.5421 1.75 15.4607 1.76618 15.3849 1.7976C15.309 1.82903 15.2401 1.87509 15.182 1.93316L9.557 7.55816C9.49889 7.61621 9.45279 7.68514 9.42134 7.76101C9.38989 7.83688 9.3737 7.91821 9.3737 8.00035C9.3737 8.08248 9.38989 8.16381 9.42134 8.23969C9.45279 8.31556 9.49889 8.38449 9.557 8.44254ZM10.5929 16.0941C9.77242 16.9146 8.65957 17.3756 7.49919 17.3756C6.33881 17.3756 5.22595 16.9146 4.40544 16.0941C3.58492 15.2736 3.12396 14.1607 3.12396 13.0003C3.12396 11.84 3.58492 10.7271 4.40544 9.9066L10.8703 3.44253C10.9284 3.38447 10.9744 3.31553 11.0058 3.23966C11.0373 3.16379 11.0534 3.08247 11.0534 3.00035C11.0534 2.91823 11.0373 2.83691 11.0058 2.76104C10.9744 2.68517 10.9284 2.61623 10.8703 2.55816C10.8122 2.50009 10.7433 2.45403 10.6674 2.4226C10.5915 2.39118 10.5102 2.375 10.4281 2.375C10.346 2.375 10.2647 2.39118 10.1888 2.4226C10.1129 2.45403 10.044 2.50009 9.98591 2.55816L3.52184 9.023C2.99253 9.54377 2.57156 10.1642 2.28322 10.8484C1.99488 11.5327 1.84487 12.2673 1.84184 13.0098C1.83882 13.7524 1.98284 14.4882 2.2656 15.1747C2.54836 15.8613 2.96427 16.4852 3.48932 17.0102C4.01438 17.5353 4.63819 17.9512 5.32479 18.2339C6.01138 18.5167 6.74717 18.6607 7.4897 18.6577C8.23223 18.6547 8.96682 18.5047 9.65109 18.2163C10.3354 17.928 10.9558 17.507 11.4765 16.9777C11.5888 16.8595 11.6505 16.7022 11.6484 16.5392C11.6463 16.3762 11.5806 16.2205 11.4654 16.1053C11.3501 15.99 11.1944 15.9243 11.0314 15.9223C10.8684 15.9202 10.7111 15.9818 10.5929 16.0941Z" fill="url(#paint0_linear_2850_16638)"/>
|
||||
<path d="M10.6242 13.0003C10.6242 13.6184 10.4409 14.2226 10.0975 14.7365C9.75415 15.2504 9.26609 15.6509 8.69507 15.8875C8.12405 16.124 7.49572 16.1859 6.88953 16.0653C6.28334 15.9447 5.72652 15.6471 5.28948 15.2101C4.85244 14.773 4.55481 14.2162 4.43423 13.61C4.31366 13.0038 4.37554 12.3755 4.61206 11.8045C4.84859 11.2334 5.24913 10.7454 5.76303 10.402C6.27693 10.0586 6.88112 9.87535 7.49919 9.87535C8.32799 9.87535 9.12285 10.2046 9.7089 10.7906C10.2949 11.3767 10.6242 12.1715 10.6242 13.0003ZM16.432 10.0582L12.682 13.8082C12.5647 13.9254 12.4988 14.0845 12.4988 14.2503C12.4988 14.4162 12.5647 14.5753 12.682 14.6925C12.7993 14.8098 12.9583 14.8757 13.1242 14.8757C13.29 14.8757 13.4491 14.8098 13.5664 14.6925L17.3164 10.9425C17.3744 10.8845 17.4205 10.8155 17.4519 10.7397C17.4834 10.6638 17.4995 10.5825 17.4995 10.5003C17.4995 10.4182 17.4834 10.3369 17.4519 10.261C17.4205 10.1852 17.3744 10.1162 17.3164 10.0582C17.2583 10.0001 17.1894 9.95403 17.1135 9.9226C17.0376 9.89118 16.9563 9.875 16.8742 9.875C16.7921 9.875 16.7107 9.89118 16.6349 9.9226C16.559 9.95403 16.4901 10.0001 16.432 10.0582ZM14.8164 9.06754C14.8744 9.00947 14.9205 8.94053 14.9519 8.86466C14.9834 8.78879 14.9995 8.70747 14.9995 8.62535C14.9995 8.54323 14.9834 8.46191 14.9519 8.38604C14.9205 8.31017 14.8744 8.24123 14.8164 8.18316C14.7583 8.12509 14.6894 8.07903 14.6135 8.0476C14.5376 8.01617 14.4563 8 14.3742 8C14.2921 8 14.2107 8.01617 14.1349 8.0476C14.059 8.07903 13.9901 8.12509 13.932 8.18316L12.057 10.0582C11.9397 10.1754 11.8738 10.3345 11.8738 10.5003C11.8738 10.6662 11.9397 10.8253 12.057 10.9425C12.1743 11.0598 12.3333 11.1257 12.4992 11.1257C12.665 11.1257 12.8241 11.0598 12.9414 10.9425L14.8164 9.06754ZM17.9414 5.05816C17.8833 5.00005 17.8144 4.95395 17.7385 4.9225C17.6627 4.89105 17.5813 4.87486 17.4992 4.87486C17.4171 4.87486 17.3357 4.89105 17.2599 4.9225C17.184 4.95395 17.115 5.00005 17.057 5.05816L15.807 6.30816C15.6897 6.42544 15.6238 6.5845 15.6238 6.75035C15.6238 6.9162 15.6897 7.07526 15.807 7.19254C15.9243 7.30981 16.0833 7.37569 16.2492 7.3757C16.415 7.3757 16.5741 7.30981 16.6914 7.19254L17.9414 5.94254C17.9995 5.88449 18.0456 5.81556 18.077 5.73969C18.1085 5.66381 18.1247 5.58248 18.1247 5.50035C18.1247 5.41821 18.1085 5.33688 18.077 5.26101C18.0456 5.18514 17.9995 5.11621 17.9414 5.05816ZM9.557 8.44254C9.61505 8.50065 9.68398 8.54674 9.75985 8.5782C9.83572 8.60965 9.91705 8.62584 9.99919 8.62584C10.0813 8.62584 10.1627 8.60965 10.2385 8.5782C10.3144 8.54674 10.3833 8.50065 10.4414 8.44254L16.0664 2.81754C16.1244 2.75947 16.1705 2.69053 16.2019 2.61466C16.2334 2.53879 16.2495 2.45747 16.2495 2.37535C16.2495 2.29323 16.2334 2.21191 16.2019 2.13604C16.1705 2.06017 16.1244 1.99123 16.0664 1.93316C16.0083 1.87509 15.9394 1.82903 15.8635 1.7976C15.7876 1.76618 15.7063 1.75 15.6242 1.75C15.5421 1.75 15.4607 1.76618 15.3849 1.7976C15.309 1.82903 15.2401 1.87509 15.182 1.93316L9.557 7.55816C9.49889 7.61621 9.45279 7.68514 9.42134 7.76101C9.38989 7.83688 9.3737 7.91821 9.3737 8.00035C9.3737 8.08248 9.38989 8.16381 9.42134 8.23969C9.45279 8.31556 9.49889 8.38449 9.557 8.44254ZM10.5929 16.0941C9.77242 16.9146 8.65957 17.3756 7.49919 17.3756C6.33881 17.3756 5.22595 16.9146 4.40544 16.0941C3.58492 15.2736 3.12396 14.1607 3.12396 13.0003C3.12396 11.84 3.58492 10.7271 4.40544 9.9066L10.8703 3.44253C10.9284 3.38447 10.9744 3.31553 11.0058 3.23966C11.0373 3.16379 11.0534 3.08247 11.0534 3.00035C11.0534 2.91823 11.0373 2.83691 11.0058 2.76104C10.9744 2.68517 10.9284 2.61623 10.8703 2.55816C10.8122 2.50009 10.7433 2.45403 10.6674 2.4226C10.5915 2.39118 10.5102 2.375 10.4281 2.375C10.346 2.375 10.2647 2.39118 10.1888 2.4226C10.1129 2.45403 10.044 2.50009 9.98591 2.55816L3.52184 9.023C2.99253 9.54377 2.57156 10.1642 2.28322 10.8484C1.99488 11.5327 1.84487 12.2673 1.84184 13.0098C1.83882 13.7524 1.98284 14.4882 2.2656 15.1747C2.54836 15.8613 2.96427 16.4852 3.48932 17.0102C4.01438 17.5353 4.63819 17.9512 5.32479 18.2339C6.01138 18.5167 6.74717 18.6607 7.4897 18.6577C8.23223 18.6547 8.96682 18.5047 9.65109 18.2163C10.3354 17.928 10.9558 17.507 11.4765 16.9777C11.5888 16.8595 11.6505 16.7022 11.6484 16.5392C11.6463 16.3762 11.5806 16.2205 11.4654 16.1053C11.3501 15.99 11.1944 15.9243 11.0314 15.9223C10.8684 15.9202 10.7111 15.9818 10.5929 16.0941Z" stroke="url(#paint1_linear_2850_16638)" stroke-width="0.3"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_2850_16638" x1="1.95109" y1="1.75" x2="21.5698" y2="11.5208" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#0CF1CA"/>
|
||||
<stop offset="0.264423" stop-color="#0BD2B0"/>
|
||||
<stop offset="0.307692" stop-color="#0CF1CA"/>
|
||||
<stop offset="0.427885" stop-color="#0CF1CA"/>
|
||||
<stop offset="0.466346" stop-color="#0FAF94"/>
|
||||
<stop offset="0.591346" stop-color="#0CA288"/>
|
||||
<stop offset="1" stop-color="#086253"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_2850_16638" x1="1.8418" y1="2.25694" x2="21.3121" y2="11.25" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="white" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
11
src/renderer/src/components/debrid-badge/debrid-badge.scss
Normal file
11
src/renderer/src/components/debrid-badge/debrid-badge.scss
Normal file
@@ -0,0 +1,11 @@
|
||||
.debrid-badge {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid rgba(12, 241, 202, 0.3);
|
||||
background: rgba(12, 241, 202, 0.05);
|
||||
color: #0cf1ca;
|
||||
padding: 4px 8px;
|
||||
font-size: 12px;
|
||||
}
|
||||
18
src/renderer/src/components/debrid-badge/debrid-badge.tsx
Normal file
18
src/renderer/src/components/debrid-badge/debrid-badge.tsx
Normal file
@@ -0,0 +1,18 @@
|
||||
import Meteor from "@renderer/assets/meteor.svg?react";
|
||||
import "./debrid-badge.scss";
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
export interface DebridBadgeProps {
|
||||
collapsed?: boolean;
|
||||
}
|
||||
|
||||
export function DebridBadge({ collapsed }: Readonly<DebridBadgeProps>) {
|
||||
const { t } = useTranslation("hydra_cloud");
|
||||
|
||||
return (
|
||||
<div className="debrid-badge">
|
||||
<Meteor />
|
||||
{!collapsed && t("debrid_description")}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -14,3 +14,4 @@ export * from "./toast/toast";
|
||||
export * from "./badge/badge";
|
||||
export * from "./confirmation-modal/confirmation-modal";
|
||||
export * from "./suspense-wrapper/suspense-wrapper";
|
||||
export * from "./debrid-badge/debrid-badge";
|
||||
|
||||
@@ -85,5 +85,6 @@
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
line-height: 1.15;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ export const DOWNLOADER_NAME = {
|
||||
[Downloader.Datanodes]: "Datanodes",
|
||||
[Downloader.Mediafire]: "Mediafire",
|
||||
[Downloader.TorBox]: "TorBox",
|
||||
[Downloader.Hydra]: "Nimbus",
|
||||
};
|
||||
|
||||
export const MAX_MINUTES_TO_SHOW_IN_PLAYTIME = 120;
|
||||
|
||||
@@ -86,7 +86,10 @@ export function GameDetailsContextProvider({
|
||||
const [showGameOptionsModal, setShowGameOptionsModal] = useState(false);
|
||||
|
||||
const { getRepacksForObjectId } = useRepacks();
|
||||
const repacks = getRepacksForObjectId(objectId);
|
||||
|
||||
const repacks = useMemo(() => {
|
||||
return getRepacksForObjectId(objectId);
|
||||
}, [getRepacksForObjectId, objectId]);
|
||||
|
||||
const { i18n } = useTranslation("game_details");
|
||||
|
||||
|
||||
3
src/renderer/src/declaration.d.ts
vendored
3
src/renderer/src/declaration.d.ts
vendored
@@ -59,6 +59,9 @@ declare global {
|
||||
cb: (value: SeedingStatus[]) => void
|
||||
) => () => Electron.IpcRenderer;
|
||||
onHardDelete: (cb: () => void) => () => Electron.IpcRenderer;
|
||||
checkDebridAvailability: (
|
||||
magnets: string[]
|
||||
) => Promise<Record<string, boolean>>;
|
||||
|
||||
/* Catalogue */
|
||||
searchGames: (
|
||||
|
||||
@@ -10,15 +10,6 @@ export interface HowLongToBeatEntry {
|
||||
updatedAt: Date;
|
||||
}
|
||||
|
||||
export interface CatalogueCache {
|
||||
id?: number;
|
||||
category: string;
|
||||
games: { objectId: string; shop: GameShop }[];
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
expiresAt: Date;
|
||||
}
|
||||
|
||||
export const db = new Dexie("Hydra");
|
||||
|
||||
db.version(9).stores({
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { formatDate, getDateLocale } from "@shared";
|
||||
import { format, formatDistance, subMilliseconds } from "date-fns";
|
||||
import type { FormatDistanceOptions } from "date-fns";
|
||||
import { enUS } from "date-fns/locale";
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
export function useDate() {
|
||||
@@ -41,10 +40,10 @@ export function useDate() {
|
||||
},
|
||||
|
||||
formatDateTime: (date: number | Date | string): string => {
|
||||
const locale = getDateLocale(language);
|
||||
return format(
|
||||
date,
|
||||
locale == enUS ? "MM/dd/yyyy - HH:mm" : "dd/MM/yyyy HH:mm"
|
||||
language == "en" ? "MM-dd-yyyy - hh:mm a" : "dd/MM/yyyy HH:mm",
|
||||
{ locale: getDateLocale(language) }
|
||||
);
|
||||
},
|
||||
|
||||
|
||||
@@ -15,12 +15,14 @@ import type {
|
||||
StartGameDownloadPayload,
|
||||
} from "@types";
|
||||
import { useDate } from "./use-date";
|
||||
import { formatBytes } from "@shared";
|
||||
import { formatBytes, formatBytesToMbps } from "@shared";
|
||||
|
||||
export function useDownload() {
|
||||
const { updateLibrary } = useLibrary();
|
||||
const { formatDistance } = useDate();
|
||||
|
||||
const userPrefs = useAppSelector((state) => state.userPreferences.value);
|
||||
|
||||
const { lastPacket, gamesWithDeletionInProgress } = useAppSelector(
|
||||
(state) => state.download
|
||||
);
|
||||
@@ -99,8 +101,14 @@ export function useDownload() {
|
||||
return gamesWithDeletionInProgress.includes(objectId);
|
||||
};
|
||||
|
||||
const formatDownloadSpeed = (downloadSpeed: number): string => {
|
||||
return userPrefs?.showDownloadSpeedInMegabytes
|
||||
? `${formatBytes(downloadSpeed)}/s`
|
||||
: formatBytesToMbps(downloadSpeed);
|
||||
};
|
||||
|
||||
return {
|
||||
downloadSpeed: `${formatBytes(lastPacket?.downloadSpeed ?? 0)}/s`,
|
||||
downloadSpeed: formatDownloadSpeed(lastPacket?.downloadSpeed ?? 0),
|
||||
progress: formatDownloadProgress(lastPacket?.progress ?? 0),
|
||||
lastPacket,
|
||||
eta: calculateETA(),
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { useEffect, useState, useCallback } from "react";
|
||||
|
||||
enum Feature {
|
||||
CheckDownloadWritePermission = "CHECK_DOWNLOAD_WRITE_PERMISSION",
|
||||
Torbox = "TORBOX",
|
||||
TorBox = "TORBOX",
|
||||
Nimbus = "NIMBUS",
|
||||
NimbusPreview = "NIMBUS_PREVIEW",
|
||||
}
|
||||
|
||||
export function useFeature() {
|
||||
@@ -15,14 +17,17 @@ export function useFeature() {
|
||||
});
|
||||
}, []);
|
||||
|
||||
const isFeatureEnabled = (feature: Feature) => {
|
||||
if (!features) {
|
||||
const features = JSON.parse(localStorage.getItem("features") ?? "[]");
|
||||
return features.includes(feature);
|
||||
}
|
||||
const isFeatureEnabled = useCallback(
|
||||
(feature: Feature) => {
|
||||
if (!features) {
|
||||
const features = JSON.parse(localStorage.getItem("features") ?? "[]");
|
||||
return features.includes(feature);
|
||||
}
|
||||
|
||||
return features.includes(feature);
|
||||
};
|
||||
return features.includes(feature);
|
||||
},
|
||||
[features]
|
||||
);
|
||||
|
||||
return {
|
||||
isFeatureEnabled,
|
||||
|
||||
@@ -73,8 +73,11 @@
|
||||
min-height: 140px;
|
||||
max-height: 140px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
&--hydra {
|
||||
box-shadow: 0px 0px 16px 0px rgba(12, 241, 202, 0.15);
|
||||
}
|
||||
}
|
||||
&__cover {
|
||||
width: 280px;
|
||||
min-width: 280px;
|
||||
@@ -145,4 +148,14 @@
|
||||
padding: 8px;
|
||||
min-height: unset;
|
||||
}
|
||||
|
||||
&__hydra-gradient {
|
||||
background: linear-gradient(90deg, #01483c 0%, #0cf1ca 50%, #01483c 100%);
|
||||
box-shadow: 0px 0px 8px 0px rgba(12, 241, 202, 0.15);
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
height: 2px;
|
||||
z-index: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import cn from "classnames";
|
||||
|
||||
import type { GameShop, LibraryGame, SeedingStatus } from "@types";
|
||||
|
||||
@@ -32,8 +33,6 @@ import {
|
||||
XCircleIcon,
|
||||
} from "@primer/octicons-react";
|
||||
|
||||
import torBoxLogo from "@renderer/assets/icons/torbox.webp";
|
||||
|
||||
export interface DownloadGroupProps {
|
||||
library: LibraryGame[];
|
||||
title: string;
|
||||
@@ -310,7 +309,13 @@ export function DownloadGroup({
|
||||
<ul className="download-group__downloads">
|
||||
{library.map((game) => {
|
||||
return (
|
||||
<li key={game.id} className="download-group__item">
|
||||
<li
|
||||
key={game.id}
|
||||
className={cn("download-group__item", {
|
||||
"download-group__item--hydra":
|
||||
game.download?.downloader === Downloader.Hydra,
|
||||
})}
|
||||
>
|
||||
<div className="download-group__cover">
|
||||
<div className="download-group__cover-backdrop">
|
||||
<img
|
||||
@@ -320,20 +325,7 @@ export function DownloadGroup({
|
||||
/>
|
||||
|
||||
<div className="download-group__cover-content">
|
||||
{game.download?.downloader === Downloader.TorBox ? (
|
||||
<Badge>
|
||||
<img
|
||||
src={torBoxLogo}
|
||||
alt="TorBox"
|
||||
style={{ width: 13 }}
|
||||
/>
|
||||
<span>TorBox</span>
|
||||
</Badge>
|
||||
) : (
|
||||
<Badge>
|
||||
{DOWNLOADER_NAME[game.download!.downloader]}
|
||||
</Badge>
|
||||
)}
|
||||
<Badge>{DOWNLOADER_NAME[game.download!.downloader]}</Badge>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -374,6 +366,10 @@ export function DownloadGroup({
|
||||
</DropdownMenu>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{game.download?.downloader === Downloader.Hydra && (
|
||||
<div className="download-group__hydra-gradient" />
|
||||
)}
|
||||
</li>
|
||||
);
|
||||
})}
|
||||
|
||||
@@ -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,14 +84,20 @@ export function DownloadSettingsModal({
|
||||
|
||||
const getDefaultDownloader = useCallback(
|
||||
(availableDownloaders: Downloader[]) => {
|
||||
if (availableDownloaders.includes(Downloader.TorBox)) {
|
||||
return Downloader.TorBox;
|
||||
if (availableDownloaders.length === 0) return null;
|
||||
|
||||
if (availableDownloaders.includes(Downloader.Hydra)) {
|
||||
return Downloader.Hydra;
|
||||
}
|
||||
|
||||
if (availableDownloaders.includes(Downloader.RealDebrid)) {
|
||||
return Downloader.RealDebrid;
|
||||
}
|
||||
|
||||
if (availableDownloaders.includes(Downloader.TorBox)) {
|
||||
return Downloader.TorBox;
|
||||
}
|
||||
|
||||
return availableDownloaders[0];
|
||||
},
|
||||
[]
|
||||
@@ -110,11 +117,15 @@ export function DownloadSettingsModal({
|
||||
return userPreferences?.realDebridApiToken;
|
||||
if (downloader === Downloader.TorBox)
|
||||
return userPreferences?.torBoxApiToken;
|
||||
if (downloader === Downloader.Hydra)
|
||||
return isFeatureEnabled(Feature.Nimbus);
|
||||
return true;
|
||||
});
|
||||
|
||||
setSelectedDownloader(getDefaultDownloader(filteredDownloaders));
|
||||
}, [
|
||||
Feature,
|
||||
isFeatureEnabled,
|
||||
getDefaultDownloader,
|
||||
userPreferences?.downloadsPath,
|
||||
downloaders,
|
||||
@@ -181,7 +192,9 @@ export function DownloadSettingsModal({
|
||||
(downloader === Downloader.RealDebrid &&
|
||||
!userPreferences?.realDebridApiToken) ||
|
||||
(downloader === Downloader.TorBox &&
|
||||
!userPreferences?.torBoxApiToken);
|
||||
!userPreferences?.torBoxApiToken) ||
|
||||
(downloader === Downloader.Hydra &&
|
||||
!isFeatureEnabled(Feature.Nimbus));
|
||||
|
||||
return (
|
||||
<Button
|
||||
|
||||
@@ -362,7 +362,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>
|
||||
|
||||
@@ -1,14 +1,20 @@
|
||||
import { useContext, useEffect, useMemo, useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
import { Badge, Button, Modal, TextField } from "@renderer/components";
|
||||
import {
|
||||
Badge,
|
||||
Button,
|
||||
DebridBadge,
|
||||
Modal,
|
||||
TextField,
|
||||
} from "@renderer/components";
|
||||
import type { GameRepack } from "@types";
|
||||
|
||||
import { DownloadSettingsModal } from "./download-settings-modal";
|
||||
import { gameDetailsContext } from "@renderer/context";
|
||||
import { Downloader } from "@shared";
|
||||
import { orderBy } from "lodash-es";
|
||||
import { useDate } from "@renderer/hooks";
|
||||
import { useDate, useFeature } from "@renderer/hooks";
|
||||
import "./repacks-modal.scss";
|
||||
|
||||
export interface RepacksModalProps {
|
||||
@@ -31,15 +37,57 @@ export function RepacksModal({
|
||||
const [repack, setRepack] = useState<GameRepack | null>(null);
|
||||
const [showSelectFolderModal, setShowSelectFolderModal] = useState(false);
|
||||
|
||||
const [hashesInDebrid, setHashesInDebrid] = useState<Record<string, boolean>>(
|
||||
{}
|
||||
);
|
||||
|
||||
const { repacks, game } = useContext(gameDetailsContext);
|
||||
|
||||
const { t } = useTranslation("game_details");
|
||||
|
||||
const { formatDate } = useDate();
|
||||
|
||||
const getHashFromMagnet = (magnet: string) => {
|
||||
if (!magnet || typeof magnet !== "string") {
|
||||
return null;
|
||||
}
|
||||
|
||||
const hashRegex = /xt=urn:btih:([a-zA-Z0-9]+)/i;
|
||||
const match = magnet.match(hashRegex);
|
||||
|
||||
return match ? match[1].toLowerCase() : null;
|
||||
};
|
||||
|
||||
const { isFeatureEnabled, Feature } = useFeature();
|
||||
|
||||
useEffect(() => {
|
||||
if (!isFeatureEnabled(Feature.NimbusPreview)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const magnets = repacks.flatMap((repack) =>
|
||||
repack.uris.filter((uri) => uri.startsWith("magnet:"))
|
||||
);
|
||||
|
||||
window.electron.checkDebridAvailability(magnets).then((availableHashes) => {
|
||||
setHashesInDebrid(availableHashes);
|
||||
});
|
||||
}, [repacks, isFeatureEnabled, Feature]);
|
||||
|
||||
const sortedRepacks = useMemo(() => {
|
||||
return orderBy(repacks, (repack) => repack.uploadDate, "desc");
|
||||
}, [repacks]);
|
||||
return orderBy(
|
||||
repacks,
|
||||
[
|
||||
(repack) => {
|
||||
const magnet = repack.uris.find((uri) => uri.startsWith("magnet:"));
|
||||
const hash = magnet ? getHashFromMagnet(magnet) : null;
|
||||
return hash ? (hashesInDebrid[hash] ?? false) : false;
|
||||
},
|
||||
(repack) => repack.uploadDate,
|
||||
],
|
||||
["desc", "desc"]
|
||||
);
|
||||
}, [repacks, hashesInDebrid]);
|
||||
|
||||
useEffect(() => {
|
||||
setFilteredRepacks(sortedRepacks);
|
||||
@@ -110,6 +158,10 @@ export function RepacksModal({
|
||||
{repack.fileSize} - {repack.repacker} -{" "}
|
||||
{repack.uploadDate ? formatDate(repack.uploadDate) : ""}
|
||||
</p>
|
||||
|
||||
{hashesInDebrid[getHashFromMagnet(repack.uris[0]) ?? ""] && (
|
||||
<DebridBadge />
|
||||
)}
|
||||
</Button>
|
||||
);
|
||||
})}
|
||||
|
||||
@@ -25,7 +25,7 @@ import "./sidebar.scss";
|
||||
const achievementsPlaceholder: UserAchievement[] = [
|
||||
{
|
||||
displayName: "Timber!!",
|
||||
name: "",
|
||||
name: "1",
|
||||
hidden: false,
|
||||
description: "Chop down your first tree.",
|
||||
icon: "https://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/105600/0fbb33098c9da39d1d4771d8209afface9c46e81.jpg",
|
||||
@@ -36,7 +36,7 @@ const achievementsPlaceholder: UserAchievement[] = [
|
||||
},
|
||||
{
|
||||
displayName: "Supreme Helper Minion!",
|
||||
name: "",
|
||||
name: "2",
|
||||
hidden: false,
|
||||
icon: "https://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/105600/0a6ff6a36670c96ceb4d30cf6fd69d2fdf55f38e.jpg",
|
||||
icongray:
|
||||
@@ -46,7 +46,7 @@ const achievementsPlaceholder: UserAchievement[] = [
|
||||
},
|
||||
{
|
||||
displayName: "Feast of Midas",
|
||||
name: "",
|
||||
name: "3",
|
||||
hidden: false,
|
||||
icon: "https://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/105600/2d10311274fe7c92ab25cc29afdca86b019ad472.jpg",
|
||||
icongray:
|
||||
@@ -122,8 +122,8 @@ export function Sidebar() {
|
||||
<h3>{t("sign_in_to_see_achievements")}</h3>
|
||||
</div>
|
||||
<ul className="list achievements-placeholder__blur">
|
||||
{achievementsPlaceholder.map((achievement, index) => (
|
||||
<li key={index}>
|
||||
{achievementsPlaceholder.map((achievement) => (
|
||||
<li key={achievement.name}>
|
||||
<div className="list__item">
|
||||
<img
|
||||
className={`list__item-image achievements-placeholder__blur ${
|
||||
|
||||
@@ -23,6 +23,8 @@ export function SettingsBehavior() {
|
||||
enableAutoInstall: false,
|
||||
seedAfterDownloadComplete: false,
|
||||
showHiddenAchievementsDescription: false,
|
||||
showDownloadSpeedInMegabytes: false,
|
||||
extractFilesByDefault: true,
|
||||
});
|
||||
|
||||
const { t } = useTranslation("settings");
|
||||
@@ -40,6 +42,9 @@ export function SettingsBehavior() {
|
||||
userPreferences.seedAfterDownloadComplete ?? false,
|
||||
showHiddenAchievementsDescription:
|
||||
userPreferences.showHiddenAchievementsDescription ?? false,
|
||||
showDownloadSpeedInMegabytes:
|
||||
userPreferences.showDownloadSpeedInMegabytes ?? false,
|
||||
extractFilesByDefault: userPreferences.extractFilesByDefault ?? true,
|
||||
});
|
||||
}
|
||||
}, [userPreferences]);
|
||||
@@ -139,6 +144,26 @@ export function SettingsBehavior() {
|
||||
})
|
||||
}
|
||||
/>
|
||||
|
||||
<CheckboxField
|
||||
label={t("show_download_speed_in_megabytes")}
|
||||
checked={form.showDownloadSpeedInMegabytes}
|
||||
onChange={() =>
|
||||
handleChange({
|
||||
showDownloadSpeedInMegabytes: !form.showDownloadSpeedInMegabytes,
|
||||
})
|
||||
}
|
||||
/>
|
||||
|
||||
<CheckboxField
|
||||
label={t("extract_files_by_default")}
|
||||
checked={form.extractFilesByDefault}
|
||||
onChange={() =>
|
||||
handleChange({
|
||||
extractFilesByDefault: !form.extractFilesByDefault,
|
||||
})
|
||||
}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ const TORBOX_URL = torBoxReferralCode
|
||||
: "https://torbox.app";
|
||||
const TORBOX_API_TOKEN_URL = "https://torbox.app/settings";
|
||||
|
||||
export function SettingsTorbox() {
|
||||
export function SettingsTorBox() {
|
||||
const userPreferences = useAppSelector(
|
||||
(state) => state.userPreferences.value
|
||||
);
|
||||
|
||||
@@ -3,7 +3,6 @@ import { useTranslation } from "react-i18next";
|
||||
import { SettingsRealDebrid } from "./settings-real-debrid";
|
||||
import { SettingsGeneral } from "./settings-general";
|
||||
import { SettingsBehavior } from "./settings-behavior";
|
||||
import torBoxLogo from "@renderer/assets/icons/torbox.webp";
|
||||
import { SettingsDownloadSources } from "./settings-download-sources";
|
||||
import {
|
||||
SettingsContextConsumer,
|
||||
@@ -14,7 +13,7 @@ import { useFeature, useUserDetails } from "@renderer/hooks";
|
||||
import { useMemo } from "react";
|
||||
import "./settings.scss";
|
||||
import { SettingsAppearance } from "./aparence/settings-appearance";
|
||||
import { SettingsTorbox } from "./settings-torbox";
|
||||
import { SettingsTorBox } from "./settings-torbox";
|
||||
|
||||
export default function Settings() {
|
||||
const { t } = useTranslation("settings");
|
||||
@@ -23,7 +22,7 @@ export default function Settings() {
|
||||
|
||||
const { isFeatureEnabled, Feature } = useFeature();
|
||||
|
||||
const isTorboxEnabled = isFeatureEnabled(Feature.Torbox);
|
||||
const isTorBoxEnabled = isFeatureEnabled(Feature.TorBox);
|
||||
|
||||
const categories = useMemo(() => {
|
||||
const categories = [
|
||||
@@ -34,19 +33,10 @@ export default function Settings() {
|
||||
tabLabel: t("appearance"),
|
||||
contentTitle: t("appearance"),
|
||||
},
|
||||
...(isTorboxEnabled
|
||||
...(isTorBoxEnabled
|
||||
? [
|
||||
{
|
||||
tabLabel: (
|
||||
<>
|
||||
<img
|
||||
src={torBoxLogo}
|
||||
alt="TorBox"
|
||||
style={{ width: 13, height: 13 }}
|
||||
/>{" "}
|
||||
Torbox
|
||||
</>
|
||||
),
|
||||
tabLabel: "TorBox",
|
||||
contentTitle: "TorBox",
|
||||
},
|
||||
]
|
||||
@@ -60,7 +50,7 @@ export default function Settings() {
|
||||
{ tabLabel: t("account"), contentTitle: t("account") },
|
||||
];
|
||||
return categories;
|
||||
}, [userDetails, t, isTorboxEnabled]);
|
||||
}, [userDetails, t, isTorBoxEnabled]);
|
||||
|
||||
return (
|
||||
<SettingsContextProvider>
|
||||
@@ -84,7 +74,7 @@ export default function Settings() {
|
||||
}
|
||||
|
||||
if (currentCategoryIndex === 4) {
|
||||
return <SettingsTorbox />;
|
||||
return <SettingsTorBox />;
|
||||
}
|
||||
|
||||
if (currentCategoryIndex === 5) {
|
||||
|
||||
@@ -7,6 +7,7 @@ export enum Downloader {
|
||||
Datanodes,
|
||||
Mediafire,
|
||||
TorBox,
|
||||
Hydra,
|
||||
}
|
||||
|
||||
export enum DownloadSourceStatus {
|
||||
@@ -52,10 +53,11 @@ export enum AuthPage {
|
||||
}
|
||||
|
||||
export enum DownloadError {
|
||||
NotCachedInRealDebrid = "download_error_not_cached_in_real_debrid",
|
||||
NotCachedInTorbox = "download_error_not_cached_in_torbox",
|
||||
NotCachedOnRealDebrid = "download_error_not_cached_on_real_debrid",
|
||||
NotCachedOnTorBox = "download_error_not_cached_on_torbox",
|
||||
GofileQuotaExceeded = "download_error_gofile_quota_exceeded",
|
||||
RealDebridAccountNotAuthorized = "download_error_real_debrid_account_not_authorized",
|
||||
NotCachedOnHydra = "download_error_not_cached_on_hydra",
|
||||
}
|
||||
|
||||
export const FILE_EXTENSIONS_TO_EXTRACT = [".rar", ".zip", ".7z"];
|
||||
|
||||
@@ -49,6 +49,12 @@ export const formatBytes = (bytes: number): string => {
|
||||
return `${Math.trunc(formatedByte * 10) / 10} ${FORMAT[base]}`;
|
||||
};
|
||||
|
||||
export const formatBytesToMbps = (bytesPerSecond: number): string => {
|
||||
const bitsPerSecond = bytesPerSecond * 8;
|
||||
const mbps = bitsPerSecond / (1024 * 1024);
|
||||
return `${Math.trunc(mbps * 10) / 10} Mbps`;
|
||||
};
|
||||
|
||||
export const pipe =
|
||||
<T>(...fns: ((arg: T) => any)[]) =>
|
||||
(arg: T) =>
|
||||
@@ -111,7 +117,12 @@ export const getDownloadersForUri = (uri: string) => {
|
||||
return [Downloader.RealDebrid];
|
||||
|
||||
if (uri.startsWith("magnet:")) {
|
||||
return [Downloader.Torrent, Downloader.TorBox, Downloader.RealDebrid];
|
||||
return [
|
||||
Downloader.Torrent,
|
||||
Downloader.Hydra,
|
||||
Downloader.TorBox,
|
||||
Downloader.RealDebrid,
|
||||
];
|
||||
}
|
||||
|
||||
return [];
|
||||
@@ -162,7 +173,5 @@ export const formatDate = (
|
||||
language: string
|
||||
): string => {
|
||||
if (isNaN(new Date(date).getDate())) return "N/A";
|
||||
|
||||
const locale = getDateLocale(language);
|
||||
return format(date, locale == enUS ? "MM/dd/yyyy" : "dd/MM/yyyy");
|
||||
return format(date, language == "en" ? "MM-dd-yyyy" : "dd/MM/yyyy");
|
||||
};
|
||||
|
||||
@@ -22,7 +22,7 @@ export interface DownloadProgress {
|
||||
download: Download;
|
||||
}
|
||||
|
||||
/* Torbox */
|
||||
/* TorBox */
|
||||
export interface TorBoxUser {
|
||||
id: number;
|
||||
email: string;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { Cracker, DownloadSourceStatus, Downloader } from "@shared";
|
||||
import type { SteamAppDetails } from "./steam.types";
|
||||
import type { Download, Game, Subscription } from "./level.types";
|
||||
import type { GameShop } from "./game.types";
|
||||
import type { GameShop, UnlockedAchievement } from "./game.types";
|
||||
|
||||
export type FriendRequestAction = "ACCEPTED" | "REFUSED" | "CANCEL";
|
||||
|
||||
@@ -237,6 +237,12 @@ export interface UserStats {
|
||||
unlockedAchievementSum?: number;
|
||||
}
|
||||
|
||||
export interface UpdatedUnlockedAchievements {
|
||||
objectId: string;
|
||||
shop: GameShop;
|
||||
achievements: UnlockedAchievement[];
|
||||
}
|
||||
|
||||
export interface AchievementFile {
|
||||
type: Cracker;
|
||||
filePath: string;
|
||||
|
||||
@@ -67,6 +67,7 @@ export interface Download {
|
||||
export interface GameAchievement {
|
||||
achievements: SteamAchievement[];
|
||||
unlockedAchievements: UnlockedAchievement[];
|
||||
cacheExpiresTimestamp: number | undefined;
|
||||
}
|
||||
|
||||
export interface UserPreferences {
|
||||
@@ -81,10 +82,13 @@ export interface UserPreferences {
|
||||
enableAutoInstall?: boolean;
|
||||
seedAfterDownloadComplete?: boolean;
|
||||
showHiddenAchievementsDescription?: boolean;
|
||||
showDownloadSpeedInMegabits?: boolean;
|
||||
downloadNotificationsEnabled?: boolean;
|
||||
repackUpdatesNotificationsEnabled?: boolean;
|
||||
achievementNotificationsEnabled?: boolean;
|
||||
friendRequestNotificationsEnabled?: boolean;
|
||||
showDownloadSpeedInMegabytes?: boolean;
|
||||
extractFilesByDefault?: boolean;
|
||||
}
|
||||
|
||||
export interface ScreenState {
|
||||
|
||||
324
yarn.lock
324
yarn.lock
@@ -1417,6 +1417,15 @@
|
||||
resolved "https://registry.yarnpkg.com/@electron-toolkit/utils/-/utils-3.0.0.tgz#74626893d93025eacba086d497b615cf927d42c4"
|
||||
integrity sha512-GaXHDhiT7KCvMJjXdp/QqpYinq69T/Pdl49Z1XLf8mKGf63dnsODMWyrmIjEQ0z/vG7dO8qF3fvmI6Eb2lUNZA==
|
||||
|
||||
"@electron/asar@3.2.18":
|
||||
version "3.2.18"
|
||||
resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.18.tgz#fa607f829209bab8b9e0ce6658d3fe81b2cba517"
|
||||
integrity sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg==
|
||||
dependencies:
|
||||
commander "^5.0.0"
|
||||
glob "^7.1.6"
|
||||
minimatch "^3.0.4"
|
||||
|
||||
"@electron/asar@^3.2.7":
|
||||
version "3.2.13"
|
||||
resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.13.tgz#56565ea423ead184465adfa72663b2c70d9835f2"
|
||||
@@ -1427,6 +1436,15 @@
|
||||
glob "^7.1.6"
|
||||
minimatch "^3.0.4"
|
||||
|
||||
"@electron/fuses@^1.8.0":
|
||||
version "1.8.0"
|
||||
resolved "https://registry.yarnpkg.com/@electron/fuses/-/fuses-1.8.0.tgz#ad34d3cc4703b1258b83f6989917052cfc1490a0"
|
||||
integrity sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==
|
||||
dependencies:
|
||||
chalk "^4.1.1"
|
||||
fs-extra "^9.0.1"
|
||||
minimist "^1.2.5"
|
||||
|
||||
"@electron/get@^2.0.0":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz"
|
||||
@@ -1442,6 +1460,21 @@
|
||||
optionalDependencies:
|
||||
global-agent "^3.0.0"
|
||||
|
||||
"@electron/node-gyp@https://github.com/electron/node-gyp#06b29aafb7708acef8b3669835c8a7857ebc92d2":
|
||||
version "10.2.0-electron.1"
|
||||
resolved "https://github.com/electron/node-gyp#06b29aafb7708acef8b3669835c8a7857ebc92d2"
|
||||
dependencies:
|
||||
env-paths "^2.2.0"
|
||||
exponential-backoff "^3.1.1"
|
||||
glob "^8.1.0"
|
||||
graceful-fs "^4.2.6"
|
||||
make-fetch-happen "^10.2.1"
|
||||
nopt "^6.0.0"
|
||||
proc-log "^2.0.1"
|
||||
semver "^7.3.5"
|
||||
tar "^6.2.1"
|
||||
which "^2.0.2"
|
||||
|
||||
"@electron/notarize@2.5.0":
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-2.5.0.tgz#d4d25356adfa29df4a76bd64a8bd347237cd251e"
|
||||
@@ -1463,11 +1496,12 @@
|
||||
minimist "^1.2.6"
|
||||
plist "^3.0.5"
|
||||
|
||||
"@electron/rebuild@3.6.1":
|
||||
version "3.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@electron/rebuild/-/rebuild-3.6.1.tgz#59e8e36c3f6e6b94a699425dfb61f0394c3dd4df"
|
||||
integrity sha512-f6596ZHpEq/YskUd8emYvOUne89ij8mQgjYFA5ru25QwbrRO+t1SImofdDv7kKOuWCmVOuU5tvfkbgGxIl3E/w==
|
||||
"@electron/rebuild@3.7.0":
|
||||
version "3.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@electron/rebuild/-/rebuild-3.7.0.tgz#82e20c467ddedbb295d7f641592c52e68c141e9f"
|
||||
integrity sha512-VW++CNSlZwMYP7MyXEbrKjpzEwhB5kDNbzGtiPEjwYysqyTCF+YbNJ210Dj3AjWsGSV4iEEwNkmJN9yGZmVvmw==
|
||||
dependencies:
|
||||
"@electron/node-gyp" "https://github.com/electron/node-gyp#06b29aafb7708acef8b3669835c8a7857ebc92d2"
|
||||
"@malept/cross-spawn-promise" "^2.0.0"
|
||||
chalk "^4.0.0"
|
||||
debug "^4.1.1"
|
||||
@@ -1476,7 +1510,6 @@
|
||||
got "^11.7.0"
|
||||
node-abi "^3.45.0"
|
||||
node-api-version "^0.2.0"
|
||||
node-gyp "^9.0.0"
|
||||
ora "^5.1.0"
|
||||
read-binary-file-arch "^1.0.6"
|
||||
semver "^7.3.5"
|
||||
@@ -3654,35 +3687,35 @@ anymatch@~3.1.2:
|
||||
normalize-path "^3.0.0"
|
||||
picomatch "^2.0.4"
|
||||
|
||||
app-builder-bin@5.0.0-alpha.10:
|
||||
version "5.0.0-alpha.10"
|
||||
resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-5.0.0-alpha.10.tgz#cf12e593b6b847fb9d04027fa755c6c6610d778b"
|
||||
integrity sha512-Ev4jj3D7Bo+O0GPD2NMvJl+PGiBAfS7pUGawntBNpCbxtpncfUixqFj9z9Jme7V7s3LBGqsWZZP54fxBX3JKJw==
|
||||
app-builder-bin@5.0.0-alpha.12:
|
||||
version "5.0.0-alpha.12"
|
||||
resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-5.0.0-alpha.12.tgz#2daf82f8badc698e0adcc95ba36af4ff0650dc80"
|
||||
integrity sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==
|
||||
|
||||
app-builder-lib@25.1.8:
|
||||
version "25.1.8"
|
||||
resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-25.1.8.tgz#ae376039c5f269c7d562af494a087e5bc6310f1b"
|
||||
integrity sha512-pCqe7dfsQFBABC1jeKZXQWhGcCPF3rPCXDdfqVKjIeWBcXzyC1iOWZdfFhGl+S9MyE/k//DFmC6FzuGAUudNDg==
|
||||
app-builder-lib@26.0.12:
|
||||
version "26.0.12"
|
||||
resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-26.0.12.tgz#2e33df936e0f78d4266b058ece90308ea981eefb"
|
||||
integrity sha512-+/CEPH1fVKf6HowBUs6LcAIoRcjeqgvAeoSE+cl7Y7LndyQ9ViGPYibNk7wmhMHzNgHIuIbw4nWADPO+4mjgWw==
|
||||
dependencies:
|
||||
"@develar/schema-utils" "~2.6.5"
|
||||
"@electron/asar" "3.2.18"
|
||||
"@electron/fuses" "^1.8.0"
|
||||
"@electron/notarize" "2.5.0"
|
||||
"@electron/osx-sign" "1.3.1"
|
||||
"@electron/rebuild" "3.6.1"
|
||||
"@electron/rebuild" "3.7.0"
|
||||
"@electron/universal" "2.0.1"
|
||||
"@malept/flatpak-bundler" "^0.4.0"
|
||||
"@types/fs-extra" "9.0.13"
|
||||
async-exit-hook "^2.0.1"
|
||||
bluebird-lst "^1.0.9"
|
||||
builder-util "25.1.7"
|
||||
builder-util-runtime "9.2.10"
|
||||
builder-util "26.0.11"
|
||||
builder-util-runtime "9.3.1"
|
||||
chromium-pickle-js "^0.2.0"
|
||||
config-file-ts "0.2.8-rc1"
|
||||
debug "^4.3.4"
|
||||
dotenv "^16.4.5"
|
||||
dotenv-expand "^11.0.6"
|
||||
ejs "^3.1.8"
|
||||
electron-publish "25.1.7"
|
||||
form-data "^4.0.0"
|
||||
electron-publish "26.0.11"
|
||||
fs-extra "^10.1.0"
|
||||
hosted-git-info "^4.1.0"
|
||||
is-ci "^3.0.0"
|
||||
@@ -3691,30 +3724,18 @@ app-builder-lib@25.1.8:
|
||||
json5 "^2.2.3"
|
||||
lazy-val "^1.0.5"
|
||||
minimatch "^10.0.0"
|
||||
plist "3.1.0"
|
||||
resedit "^1.7.0"
|
||||
sanitize-filename "^1.6.3"
|
||||
semver "^7.3.8"
|
||||
tar "^6.1.12"
|
||||
temp-file "^3.4.0"
|
||||
tiny-async-pool "1.3.0"
|
||||
|
||||
applescript@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/applescript/-/applescript-1.0.0.tgz"
|
||||
integrity sha512-yvtNHdWvtbYEiIazXAdp/NY+BBb65/DAseqlNiJQjOx9DynuzOYDbVLBJvuc0ve0VL9x6B3OHF6eH52y9hCBtQ==
|
||||
|
||||
"aproba@^1.0.3 || ^2.0.0":
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
|
||||
integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
|
||||
|
||||
are-we-there-yet@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd"
|
||||
integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==
|
||||
dependencies:
|
||||
delegates "^1.0.0"
|
||||
readable-stream "^3.6.0"
|
||||
|
||||
arg@^4.1.0:
|
||||
version "4.1.3"
|
||||
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
|
||||
@@ -3975,18 +3996,6 @@ bl@^4.1.0:
|
||||
inherits "^2.0.4"
|
||||
readable-stream "^3.4.0"
|
||||
|
||||
bluebird-lst@^1.0.9:
|
||||
version "1.0.9"
|
||||
resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c"
|
||||
integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==
|
||||
dependencies:
|
||||
bluebird "^3.5.5"
|
||||
|
||||
bluebird@^3.5.5:
|
||||
version "3.7.2"
|
||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
|
||||
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
|
||||
|
||||
boolean@^3.0.1:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
|
||||
@@ -4075,35 +4084,36 @@ buffer@^6.0.3:
|
||||
base64-js "^1.3.1"
|
||||
ieee754 "^1.2.1"
|
||||
|
||||
builder-util-runtime@9.2.10:
|
||||
version "9.2.10"
|
||||
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz#a0f7d9e214158402e78b74a745c8d9f870c604bc"
|
||||
integrity sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==
|
||||
builder-util-runtime@9.3.1:
|
||||
version "9.3.1"
|
||||
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.3.1.tgz#0daedde0f6d381f2a00a50a407b166fe7dca1a67"
|
||||
integrity sha512-2/egrNDDnRaxVwK3A+cJq6UOlqOdedGA7JPqCeJjN2Zjk1/QB/6QUi3b714ScIGS7HafFXTyzJEOr5b44I3kvQ==
|
||||
dependencies:
|
||||
debug "^4.3.4"
|
||||
sax "^1.2.4"
|
||||
|
||||
builder-util@25.1.7:
|
||||
version "25.1.7"
|
||||
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-25.1.7.tgz#a07b404f0cb1a635aa165902be65297d58932ff8"
|
||||
integrity sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww==
|
||||
builder-util@26.0.11:
|
||||
version "26.0.11"
|
||||
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-26.0.11.tgz#ad85b92c93f2b976b973e1d87337e0c6813fcb8f"
|
||||
integrity sha512-xNjXfsldUEe153h1DraD0XvDOpqGR0L5eKFkdReB7eFW5HqysDZFfly4rckda6y9dF39N3pkPlOblcfHKGw+uA==
|
||||
dependencies:
|
||||
"7zip-bin" "~5.2.0"
|
||||
"@types/debug" "^4.1.6"
|
||||
app-builder-bin "5.0.0-alpha.10"
|
||||
bluebird-lst "^1.0.9"
|
||||
builder-util-runtime "9.2.10"
|
||||
app-builder-bin "5.0.0-alpha.12"
|
||||
builder-util-runtime "9.3.1"
|
||||
chalk "^4.1.2"
|
||||
cross-spawn "^7.0.3"
|
||||
cross-spawn "^7.0.6"
|
||||
debug "^4.3.4"
|
||||
fs-extra "^10.1.0"
|
||||
http-proxy-agent "^7.0.0"
|
||||
https-proxy-agent "^7.0.0"
|
||||
is-ci "^3.0.0"
|
||||
js-yaml "^4.1.0"
|
||||
sanitize-filename "^1.6.3"
|
||||
source-map-support "^0.5.19"
|
||||
stat-mode "^1.0.0"
|
||||
temp-file "^3.4.0"
|
||||
tiny-async-pool "1.3.0"
|
||||
|
||||
cac@^6.7.14:
|
||||
version "6.7.14"
|
||||
@@ -4226,7 +4236,7 @@ chalk@^2.4.2:
|
||||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2:
|
||||
chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
|
||||
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
|
||||
@@ -4367,11 +4377,6 @@ color-string@^1.9.0:
|
||||
color-name "^1.0.0"
|
||||
simple-swizzle "^0.2.2"
|
||||
|
||||
color-support@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
|
||||
integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
|
||||
|
||||
color.js@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/color.js/-/color.js-1.2.0.tgz#18d9f55545111730d25ccf18ea8b6933c71440d7"
|
||||
@@ -4428,11 +4433,6 @@ config-file-ts@0.2.8-rc1:
|
||||
glob "^10.3.12"
|
||||
typescript "^5.4.3"
|
||||
|
||||
console-control-strings@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
|
||||
integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
|
||||
|
||||
conventional-changelog-angular@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a"
|
||||
@@ -4501,10 +4501,10 @@ crc@^3.8.0:
|
||||
dependencies:
|
||||
buffer "^5.1.0"
|
||||
|
||||
create-desktop-shortcuts@^1.11.0:
|
||||
version "1.11.0"
|
||||
resolved "https://registry.yarnpkg.com/create-desktop-shortcuts/-/create-desktop-shortcuts-1.11.0.tgz#8eed89329e9bce70dece46d02a80573fe1f2536d"
|
||||
integrity sha512-nmVtPVqNyMuAyMpDnd7l++hb2laqCWZXnHQaFhqGT1YEi2Ve3unu6QyuyIpGxAwIscNHcG1Ehnl+lFw6ygB2nQ==
|
||||
create-desktop-shortcuts@^1.11.1:
|
||||
version "1.11.1"
|
||||
resolved "https://registry.yarnpkg.com/create-desktop-shortcuts/-/create-desktop-shortcuts-1.11.1.tgz#59f9dced7931bda551c0717791a909419472c809"
|
||||
integrity sha512-EiHvxrMXXEp4xDD3Nvu1FKLueL9+aBWFYtuTlstYZLIg9H45SoYciizteNB+hvQAls3cRSpoXCM7c4q+lcJpyw==
|
||||
dependencies:
|
||||
which "2.0.2"
|
||||
|
||||
@@ -4521,7 +4521,7 @@ cross-fetch-ponyfill@^1.0.3:
|
||||
abort-controller "^3.0.0"
|
||||
node-fetch "^3.3.0"
|
||||
|
||||
cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
||||
cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
|
||||
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
|
||||
@@ -4530,6 +4530,15 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
||||
shebang-command "^2.0.0"
|
||||
which "^2.0.1"
|
||||
|
||||
cross-spawn@^7.0.6:
|
||||
version "7.0.6"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
|
||||
integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
|
||||
dependencies:
|
||||
path-key "^3.1.0"
|
||||
shebang-command "^2.0.0"
|
||||
which "^2.0.1"
|
||||
|
||||
cssstyle@^4.0.1:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.1.0.tgz#161faee382af1bafadb6d3867a92a19bcb4aea70"
|
||||
@@ -4683,11 +4692,6 @@ delayed-stream@~1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
|
||||
|
||||
delegates@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
|
||||
integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
|
||||
|
||||
detect-libc@^2.0.1:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700"
|
||||
@@ -4736,14 +4740,14 @@ diskusage@^1.2.0:
|
||||
es6-promise "^4.2.8"
|
||||
nan "^2.18.0"
|
||||
|
||||
dmg-builder@25.1.8:
|
||||
version "25.1.8"
|
||||
resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-25.1.8.tgz#41f3b725edd896156e891016a44129e1bd580430"
|
||||
integrity sha512-NoXo6Liy2heSklTI5OIZbCgXC1RzrDQsZkeEwXhdOro3FT1VBOvbubvscdPnjVuQ4AMwwv61oaH96AbiYg9EnQ==
|
||||
dmg-builder@26.0.12:
|
||||
version "26.0.12"
|
||||
resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-26.0.12.tgz#6996ad0bab80a861c9a7b33ee9734d4f60566b46"
|
||||
integrity sha512-59CAAjAhTaIMCN8y9kD573vDkxbs1uhDcrFLHSgutYdPcGOU35Rf95725snvzEOy4BFB7+eLJ8djCNPmGwG67w==
|
||||
dependencies:
|
||||
app-builder-lib "25.1.8"
|
||||
builder-util "25.1.7"
|
||||
builder-util-runtime "9.2.10"
|
||||
app-builder-lib "26.0.12"
|
||||
builder-util "26.0.11"
|
||||
builder-util-runtime "9.3.1"
|
||||
fs-extra "^10.1.0"
|
||||
iconv-lite "^0.6.2"
|
||||
js-yaml "^4.1.0"
|
||||
@@ -4847,16 +4851,16 @@ ejs@^3.1.8:
|
||||
dependencies:
|
||||
jake "^10.8.5"
|
||||
|
||||
electron-builder@^25.1.8:
|
||||
version "25.1.8"
|
||||
resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-25.1.8.tgz#b0e310f1600787610bb84c3f39bc7aadb2548486"
|
||||
integrity sha512-poRgAtUHHOnlzZnc9PK4nzG53xh74wj2Jy7jkTrqZ0MWPoHGh1M2+C//hGeYdA+4K8w4yiVCNYoLXF7ySj2Wig==
|
||||
electron-builder@^26.0.12:
|
||||
version "26.0.12"
|
||||
resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-26.0.12.tgz#797af2e70efdd96c9ea5d8a8164b8728c90d65ff"
|
||||
integrity sha512-cD1kz5g2sgPTMFHjLxfMjUK5JABq3//J4jPswi93tOPFz6btzXYtK5NrDt717NRbukCUDOrrvmYVOWERlqoiXA==
|
||||
dependencies:
|
||||
app-builder-lib "25.1.8"
|
||||
builder-util "25.1.7"
|
||||
builder-util-runtime "9.2.10"
|
||||
app-builder-lib "26.0.12"
|
||||
builder-util "26.0.11"
|
||||
builder-util-runtime "9.3.1"
|
||||
chalk "^4.1.2"
|
||||
dmg-builder "25.1.8"
|
||||
dmg-builder "26.0.12"
|
||||
fs-extra "^10.1.0"
|
||||
is-ci "^3.0.0"
|
||||
lazy-val "^1.0.5"
|
||||
@@ -4868,15 +4872,16 @@ electron-log@^5.2.4:
|
||||
resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.2.4.tgz#6b488d9db80aa3c6f3dc39bcd635fc9d1f79c8af"
|
||||
integrity sha512-iX12WXc5XAaKeHg2QpiFjVwL+S1NVHPFd3V5RXtCmKhpAzXsVQnR3UEc0LovM6p6NkUQxDWnkdkaam9FNUVmCA==
|
||||
|
||||
electron-publish@25.1.7:
|
||||
version "25.1.7"
|
||||
resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-25.1.7.tgz#14e50c2a3fafdc1c454eadbbc47ead89a48bb554"
|
||||
integrity sha512-+jbTkR9m39eDBMP4gfbqglDd6UvBC7RLh5Y0MhFSsc6UkGHj9Vj9TWobxevHYMMqmoujL11ZLjfPpMX+Pt6YEg==
|
||||
electron-publish@26.0.11:
|
||||
version "26.0.11"
|
||||
resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-26.0.11.tgz#92c9329a101af2836d9d228c82966eca1eee9a7b"
|
||||
integrity sha512-a8QRH0rAPIWH9WyyS5LbNvW9Ark6qe63/LqDB7vu2JXYpi0Gma5Q60Dh4tmTqhOBQt0xsrzD8qE7C+D7j+B24A==
|
||||
dependencies:
|
||||
"@types/fs-extra" "^9.0.11"
|
||||
builder-util "25.1.7"
|
||||
builder-util-runtime "9.2.10"
|
||||
builder-util "26.0.11"
|
||||
builder-util-runtime "9.3.1"
|
||||
chalk "^4.1.2"
|
||||
form-data "^4.0.0"
|
||||
fs-extra "^10.1.0"
|
||||
lazy-val "^1.0.5"
|
||||
mime "^2.5.2"
|
||||
@@ -4891,12 +4896,12 @@ electron-to-chromium@^1.5.73:
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.76.tgz#db20295c5061b68f07c8ea4dfcbd701485d94a3d"
|
||||
integrity sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==
|
||||
|
||||
electron-updater@^6.3.9:
|
||||
version "6.3.9"
|
||||
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-6.3.9.tgz#e1e7f155624c58e6f3760f376c3a584028165ec4"
|
||||
integrity sha512-2PJNONi+iBidkoC5D1nzT9XqsE8Q1X28Fn6xRQhO3YX8qRRyJ3mkV4F1aQsuRnYPqq6Hw+E51y27W75WgDoofw==
|
||||
electron-updater@^6.6.2:
|
||||
version "6.6.2"
|
||||
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-6.6.2.tgz#3e65e044f1a99b00d61e200e24de8e709c69ce99"
|
||||
integrity sha512-Cr4GDOkbAUqRHP5/oeOmH/L2Bn6+FQPxVLZtPbcmKZC63a1F3uu5EefYOssgZXG3u/zBlubbJ5PJdITdMVggbw==
|
||||
dependencies:
|
||||
builder-util-runtime "9.2.10"
|
||||
builder-util-runtime "9.3.1"
|
||||
fs-extra "^10.1.0"
|
||||
js-yaml "^4.1.0"
|
||||
lazy-val "^1.0.5"
|
||||
@@ -5705,20 +5710,6 @@ functions-have-names@^1.2.3:
|
||||
resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
|
||||
integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
|
||||
|
||||
gauge@^4.0.3:
|
||||
version "4.0.4"
|
||||
resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce"
|
||||
integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==
|
||||
dependencies:
|
||||
aproba "^1.0.3 || ^2.0.0"
|
||||
color-support "^1.1.3"
|
||||
console-control-strings "^1.1.0"
|
||||
has-unicode "^2.0.1"
|
||||
signal-exit "^3.0.7"
|
||||
string-width "^4.2.3"
|
||||
strip-ansi "^6.0.1"
|
||||
wide-align "^1.1.5"
|
||||
|
||||
gensync@^1.0.0-beta.2:
|
||||
version "1.0.0-beta.2"
|
||||
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
|
||||
@@ -5823,11 +5814,6 @@ get-symbol-description@^1.1.0:
|
||||
es-errors "^1.3.0"
|
||||
get-intrinsic "^1.2.6"
|
||||
|
||||
get-them-args@1.3.2:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/get-them-args/-/get-them-args-1.3.2.tgz#74a20ba8a4abece5ae199ad03f2bcc68fdfc9ba5"
|
||||
integrity sha512-LRn8Jlk+DwZE4GTlDbT3Hikd1wSHgLMme/+7ddlqKd7ldwR6LjJgTVWzBnR01wnYGe4KgrXjg287RaI22UHmAw==
|
||||
|
||||
git-raw-commits@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-4.0.0.tgz#b212fd2bff9726d27c1283a1157e829490593285"
|
||||
@@ -5863,7 +5849,7 @@ glob@^10.3.12, glob@^10.3.7:
|
||||
package-json-from-dist "^1.0.0"
|
||||
path-scurry "^1.11.1"
|
||||
|
||||
glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
|
||||
glob@^7.1.3, glob@^7.1.6:
|
||||
version "7.2.3"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
|
||||
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
|
||||
@@ -5875,7 +5861,7 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@^8.0.1:
|
||||
glob@^8.0.1, glob@^8.1.0:
|
||||
version "8.1.0"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
|
||||
integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==
|
||||
@@ -6037,11 +6023,6 @@ has-tostringtag@^1.0.0, has-tostringtag@^1.0.2:
|
||||
dependencies:
|
||||
has-symbols "^1.0.3"
|
||||
|
||||
has-unicode@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
|
||||
integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==
|
||||
|
||||
hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
|
||||
@@ -6840,14 +6821,6 @@ keyv@^4.0.0, keyv@^4.5.3:
|
||||
dependencies:
|
||||
json-buffer "3.0.1"
|
||||
|
||||
kill-port@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/kill-port/-/kill-port-2.0.1.tgz#e5e18e2706b13d54320938be42cb7d40609b15cf"
|
||||
integrity sha512-e0SVOV5jFo0mx8r7bS29maVWp17qGqLBZ5ricNSajON6//kmb7qqqNnml4twNE8Dtj97UQD+gNFOaipS/q1zzQ==
|
||||
dependencies:
|
||||
get-them-args "1.3.2"
|
||||
shell-exec "1.0.2"
|
||||
|
||||
language-subtag-registry@^0.3.20:
|
||||
version "0.3.23"
|
||||
resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7"
|
||||
@@ -7084,7 +7057,7 @@ make-error@^1.1.1:
|
||||
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
|
||||
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
|
||||
|
||||
make-fetch-happen@^10.0.3:
|
||||
make-fetch-happen@^10.2.1:
|
||||
version "10.2.1"
|
||||
resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164"
|
||||
integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==
|
||||
@@ -7213,7 +7186,7 @@ minimatch@^9.0.3, minimatch@^9.0.4:
|
||||
dependencies:
|
||||
brace-expansion "^2.0.1"
|
||||
|
||||
minimist@^1.2.6, minimist@^1.2.8:
|
||||
minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8:
|
||||
version "1.2.8"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
|
||||
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
|
||||
@@ -7400,23 +7373,6 @@ node-gyp-build@^4.3.0:
|
||||
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8"
|
||||
integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==
|
||||
|
||||
node-gyp@^9.0.0:
|
||||
version "9.4.1"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185"
|
||||
integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==
|
||||
dependencies:
|
||||
env-paths "^2.2.0"
|
||||
exponential-backoff "^3.1.1"
|
||||
glob "^7.1.4"
|
||||
graceful-fs "^4.2.6"
|
||||
make-fetch-happen "^10.0.3"
|
||||
nopt "^6.0.0"
|
||||
npmlog "^6.0.0"
|
||||
rimraf "^3.0.2"
|
||||
semver "^7.3.5"
|
||||
tar "^6.1.2"
|
||||
which "^2.0.2"
|
||||
|
||||
node-releases@^2.0.18:
|
||||
version "2.0.18"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f"
|
||||
@@ -7444,16 +7400,6 @@ normalize-url@^6.0.1:
|
||||
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
|
||||
integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
|
||||
|
||||
npmlog@^6.0.0:
|
||||
version "6.0.2"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
|
||||
integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==
|
||||
dependencies:
|
||||
are-we-there-yet "^3.0.0"
|
||||
console-control-strings "^1.1.0"
|
||||
gauge "^4.0.3"
|
||||
set-blocking "^2.0.0"
|
||||
|
||||
nwsapi@^2.2.12:
|
||||
version "2.2.13"
|
||||
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.13.tgz#e56b4e98960e7a040e5474536587e599c4ff4655"
|
||||
@@ -7740,7 +7686,7 @@ piscina@^4.7.0:
|
||||
optionalDependencies:
|
||||
"@napi-rs/nice" "^1.0.1"
|
||||
|
||||
plist@^3.0.4, plist@^3.0.5, plist@^3.1.0:
|
||||
plist@3.1.0, plist@^3.0.4, plist@^3.0.5, plist@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9"
|
||||
integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==
|
||||
@@ -7780,6 +7726,11 @@ prettier@^3.4.2:
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f"
|
||||
integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==
|
||||
|
||||
proc-log@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685"
|
||||
integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==
|
||||
|
||||
progress@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
|
||||
@@ -7992,7 +7943,7 @@ read-binary-file-arch@^1.0.6:
|
||||
dependencies:
|
||||
debug "^4.3.4"
|
||||
|
||||
readable-stream@^3.4.0, readable-stream@^3.6.0:
|
||||
readable-stream@^3.4.0:
|
||||
version "3.6.2"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
|
||||
integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
|
||||
@@ -8430,6 +8381,11 @@ semver-compare@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
|
||||
integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==
|
||||
|
||||
semver@^5.5.0:
|
||||
version "5.7.2"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
|
||||
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
|
||||
|
||||
semver@^6.2.0, semver@^6.3.1:
|
||||
version "6.3.1"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
||||
@@ -8447,11 +8403,6 @@ serialize-error@^7.0.1:
|
||||
dependencies:
|
||||
type-fest "^0.13.1"
|
||||
|
||||
set-blocking@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||
integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
|
||||
|
||||
set-function-length@^1.2.1, set-function-length@^1.2.2:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
|
||||
@@ -8495,11 +8446,6 @@ shebang-regex@^3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
|
||||
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
|
||||
|
||||
shell-exec@1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/shell-exec/-/shell-exec-1.0.2.tgz#2e9361b0fde1d73f476c4b6671fa17785f696756"
|
||||
integrity sha512-jyVd+kU2X+mWKMmGhx4fpWbPsjvD53k9ivqetutVW/BQ+WIZoDoP4d8vUMGezV6saZsiNoW2f9GIhg9Dondohg==
|
||||
|
||||
side-channel-list@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad"
|
||||
@@ -8550,7 +8496,7 @@ side-channel@^1.1.0:
|
||||
side-channel-map "^1.0.1"
|
||||
side-channel-weakmap "^1.0.2"
|
||||
|
||||
signal-exit@^3.0.2, signal-exit@^3.0.7:
|
||||
signal-exit@^3.0.2:
|
||||
version "3.0.7"
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
|
||||
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
|
||||
@@ -8677,7 +8623,7 @@ state-local@^1.0.6:
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
||||
string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
@@ -8884,7 +8830,7 @@ synckit@^0.9.1:
|
||||
"@pkgr/core" "^0.1.0"
|
||||
tslib "^2.6.2"
|
||||
|
||||
tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.1.2:
|
||||
tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.2.1:
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a"
|
||||
integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==
|
||||
@@ -8931,6 +8877,13 @@ text-table@^0.2.0:
|
||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||
integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
|
||||
|
||||
tiny-async-pool@1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz#c013e1b369095e7005db5595f95e646cca6ef8a5"
|
||||
integrity sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==
|
||||
dependencies:
|
||||
semver "^5.5.0"
|
||||
|
||||
tiny-case@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03"
|
||||
@@ -9546,13 +9499,6 @@ which@2.0.2, which@^2.0.1, which@^2.0.2:
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
wide-align@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
|
||||
integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
|
||||
dependencies:
|
||||
string-width "^1.0.2 || 2 || 3 || 4"
|
||||
|
||||
winreg@1.2.4:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/winreg/-/winreg-1.2.4.tgz#ba065629b7a925130e15779108cf540990e98d1b"
|
||||
|
||||
Reference in New Issue
Block a user