Compare commits

...

701 Commits

Author SHA1 Message Date
discollizard
1663662b14 Merge branch 'main' into sort-library 2024-07-04 15:26:23 -03:00
discollizard
aa7b72c563 styles fixed + translations 2024-07-03 21:10:53 -03:00
Zamitto
138f33e0c3 Merge pull request #752 from hydralauncher/hyd-228-investigate-why-users-are-being-logged-out-when-updating
feat: prevent api calls when user is not logged in or auth is not loaded yet
2024-07-03 17:05:23 -03:00
Chubby Granny Chaser
be3c78f584 Merge branch 'main' into hyd-228-investigate-why-users-are-being-logged-out-when-updating 2024-07-03 20:52:44 +01:00
Chubby Granny Chaser
be1d9825d3 Merge pull request #755 from hydralauncher/feature/aria2-for-http-downloads
Feature/aria2 for http downloads
2024-07-03 20:52:34 +01:00
Zamitto
981116f221 Merge branch 'main' into hyd-228-investigate-why-users-are-being-logged-out-when-updating
# Conflicts:
#	src/main/events/user-preferences/auto-launch.ts
2024-07-03 16:32:25 -03:00
Chubby Granny Chaser
26aad178ee Merge branch 'main' into feature/aria2-for-http-downloads 2024-07-03 20:30:52 +01:00
Zamitto
56c8349899 Merge pull request #767 from hydralauncher/hyd-226-investigate-if-its-possible-to-use-psutil-to-list-processes
remove UAC; replace ps-list with psutil
2024-07-03 16:30:01 -03:00
Chubby Granny Chaser
0b2c407770 Merge branch 'main' into feature/aria2-for-http-downloads 2024-07-03 20:26:28 +01:00
Zamitto
d2e3d48ef8 Merge branch 'main' into hyd-226-investigate-if-its-possible-to-use-psutil-to-list-processes 2024-07-03 16:20:55 -03:00
Zamitto
153291f89f feat: apply suggestions 2024-07-03 16:10:23 -03:00
Zamitto
ae3daa4c79 fix: remove symbols from name before creating game shortcut 2024-07-03 15:52:25 -03:00
Zamitto
1397e3932d feat: remove pslist and use sudo-prompt to close game if needed 2024-07-03 15:31:56 -03:00
Zamitto
0f5db4f34e feat: crete kill-torrent 2024-07-03 12:06:26 -03:00
Zamitto
75c8f69e81 feat: get process list from rpc 2024-07-03 11:25:32 -03:00
Zamitto
aa253466a3 feat: refactor 2024-07-02 23:31:07 -03:00
Zamitto
b8bd786c45 feat: refactor 2024-07-02 15:42:23 -03:00
Zamitto
c9c585f820 Merge branch 'main' into hyd-228-investigate-why-users-are-being-logged-out-when-updating 2024-07-02 14:56:21 -03:00
Zamitto
9e11d6c098 feat: refactor hydra api 2024-07-02 14:56:01 -03:00
Zamitto
2f83c2c9da Merge pull request #739 from hydralauncher/fix/not-updating-i18n-in-main-process
fix: update i18n in updateUserPreferences and in hydra startup
2024-07-02 14:55:46 -03:00
Chubby Granny Chaser
7deabc4889 Merge branch 'main' into feature/aria2-for-http-downloads 2024-07-02 17:25:38 +01:00
Zamitto
e57200d024 Merge branch 'main' into fix/not-updating-i18n-in-main-process 2024-07-02 13:18:00 -03:00
Chubby Granny Chaser
7a13739d49 Merge pull request #747 from Carvalho286/main
Update translation.json
2024-07-02 17:16:51 +01:00
Chubby Granny Chaser
f8cbbc64f0 Merge branch 'feature/aria2-for-http-downloads' of github.com:hydralauncher/hydra into feature/aria2-for-http-downloads 2024-07-02 17:10:31 +01:00
Chubby Granny Chaser
9096eb5e0e fix: removing aria2 source folder 2024-07-02 17:10:04 +01:00
Chubby Granny Chaser
eebb5fec61 fix: removing aria2 source folder 2024-07-02 17:07:47 +01:00
Chubby Granny Chaser
88cfd0d095 Merge branch 'main' into feature/aria2-for-http-downloads 2024-07-02 17:06:58 +01:00
Chubby Granny Chaser
a43768ce67 feat: supporting queue using aria2 2024-07-02 17:06:30 +01:00
Chubby Granny Chaser
16a8c28935 feat: disabling bittorrent on aria2 2024-07-02 15:50:17 +01:00
Chubby Granny Chaser
1cc5a5b209 fix: adding real debrid real time tracking 2024-07-02 15:38:36 +01:00
Chubby Granny Chaser
a39082d326 feat: using aria2 for http downloads 2024-07-02 15:33:26 +01:00
Zamitto
0c1a75eedd poc: psutil for process watcher 2024-07-01 20:23:39 -03:00
Zamitto
dd23358a95 feat: prevent api calls when user is not logged in 2024-07-01 15:48:52 -03:00
Zamitto
8f00254dc2 Merge branch 'main' into fix/not-updating-i18n-in-main-process 2024-07-01 11:25:51 -03:00
Miguel Carvalho
449b34d3dd Update translation.json 2024-06-30 21:26:31 +01:00
Zamitto
9870213fff Merge pull request #732 from Lianela/main
Spanish translation little updates
2024-06-29 15:37:12 -03:00
Zamitto
de237b7c39 Merge branch 'main' into main 2024-06-29 14:47:18 -03:00
Zamitto
8a5d4e38b6 fix: update i18n in updateUserPreferences and in hydra startup 2024-06-29 14:34:30 -03:00
Zamitto
77152a32ab Merge pull request #736 from zxcsixx/patch-1
Update RU translation.json
2024-06-29 13:24:31 -03:00
Roman
c57c8dc477 Update RU translation.json
Fixed some mistakes
2024-06-29 17:39:05 +03:00
Lianela
455d80da3e Changed some strings
To make more friendly or better to understand some things, I change a few words
2024-06-29 01:10:56 -06:00
Lianela
d61c535c6f Fixed little typo
Nothing interesting, just a fix...
2024-06-29 01:03:00 -06:00
Lianela
23308a7780 added translation for file verification message 2024-06-29 01:01:29 -06:00
discollizard
3e0ca90edb removed unused variable 2024-06-29 00:27:27 -03:00
discollizard
d52c7d6839 basic sorting implemented 2024-06-29 00:25:52 -03:00
Chubby Granny Chaser
05ec01178b Merge pull request #722 from hydralauncher/rc/2.0.2
Rc/2.0.2
2024-06-28 22:15:40 +01:00
Chubby Granny Chaser
84e279cc14 Merge branch 'main' into rc/2.0.2 2024-06-28 22:08:25 +01:00
Chubby Granny Chaser
8eca067aed ci: fix sentry variable 2024-06-28 22:01:42 +01:00
Chubby Granny Chaser
05e4934f9f ci: fix sentry variable 2024-06-28 21:47:27 +01:00
Chubby Granny Chaser
ec0439e41b ci: fix sentry variable 2024-06-28 21:25:03 +01:00
Chubby Granny Chaser
b61fd1e61a Merge pull request #720 from hydralauncher/ci/sentry
ci: adding sentry
2024-06-28 20:55:42 +01:00
Zamitto
6d4f47df38 Merge pull request #566 from Panetina/romanian
Translated to romanian
2024-06-28 16:52:15 -03:00
Zamitto
0eaf629d37 Merge pull request #671 from CMAULTOP/main
Fix ru language
2024-06-28 16:50:45 -03:00
Zamitto
c12f16f59e Merge pull request #718 from hydralauncher/feat/better-api-logs-and-handle-401
feat: better api logs and handle 401
2024-06-28 16:42:42 -03:00
Chubby Granny Chaser
ac27438a35 ci: adding sentry 2024-06-28 20:27:22 +01:00
Zamitto
d3787b4525 feat: remove unused strings 2024-06-28 15:46:22 -03:00
Zamitto
ec8a0f75ac Merge branch 'main' into romanian 2024-06-28 15:42:50 -03:00
Zamitto
7e85ac5b43 feat: rename vbs file 2024-06-28 15:35:12 -03:00
Zamitto
a4644e7501 Update translation.json 2024-06-28 15:20:38 -03:00
Zamitto
ed978af3ae feat: disable old windows auto launch 2024-06-28 13:16:33 -03:00
Zamitto
4bd2174bf3 feat: handling 401 status code 2024-06-28 12:24:12 -03:00
Zamitto
c27182c618 feat: navigate back if request fails for get user 2024-06-28 12:23:46 -03:00
Zamitto
1ceabb00be feat: better logs on api error 2024-06-28 11:29:23 -03:00
Chubby Granny Chaser
2a44313d84 Merge pull request #706 from hydralauncher/feature/libtorrent-reloaded-remake-remaster
Feature/libtorrent reloaded remake remaster
2024-06-28 15:21:45 +01:00
Zamitto
e0dca85825 Merge pull request #709 from hydralauncher/hyd-192-select-lnk-as-parse-target-executable
feat: make it possible to select shortcuts (.lnk) on game executable
2024-06-28 11:16:47 -03:00
Zamitto
ec8ccf7728 Merge pull request #710 from hydralauncher/fix/window-auto-launch-on-startup
fix: windows auto launch on startup
2024-06-28 11:16:32 -03:00
Zamitto
e88088cca4 feat: add new line and rename script file to hydralauncher 2024-06-28 09:55:17 -03:00
Chubby Granny Chaser
75b69f38fc chore: removing extra line on main.py 2024-06-28 13:43:57 +01:00
Chubby Granny Chaser
50a1ba1dea feat: adding file verification message 2024-06-28 13:40:59 +01:00
Chubby Granny Chaser
2229151795 feat: splitting downloader.py 2024-06-28 12:20:09 +01:00
Chubby Granny Chaser
041fce027e feat: splitting downloader.py 2024-06-28 12:08:33 +01:00
Chubby Granny Chaser
1d5004ecb4 Merge branch 'main' into main 2024-06-28 12:04:39 +01:00
Chubby Granny Chaser
363bcf16a4 feat: adding authorization to rpc 2024-06-28 12:03:01 +01:00
Zamitto
b1532a52c8 feat: add script to resources 2024-06-27 19:40:53 -03:00
Zamitto
a3f7d3c59e fix: send signout event when auth token is empty 2024-06-27 19:05:08 -03:00
Zamitto
f1fecb684b feat: dont show auto launch on portable version 2024-06-27 19:00:12 -03:00
Zamitto
9c99e56b70 fix: add script to auto launch hydra on startup 2024-06-27 18:50:18 -03:00
Zamitto
7be626b3dd feat: make it possible to select shortcuts (.lnk) 2024-06-27 18:10:02 -03:00
Chubby Granny Chaser
96e96cd8aa feat: adding real debrid downloads 2024-06-27 22:05:50 +01:00
Chubby Granny Chaser
13644c60e8 feat: adding real debrid downloads 2024-06-27 21:52:04 +01:00
Chubby Granny Chaser
a1e41ea464 feat: adding file verification message 2024-06-27 19:59:33 +01:00
Chubby Granny Chaser
41dc504660 feat: adding initial torrent as arg command 2024-06-27 19:26:04 +01:00
Chubby Granny Chaser
a0cc15b5d8 feat: increasing healthcheck duration 2024-06-27 18:52:53 +01:00
Chubby Granny Chaser
7cd121cb80 feat: adding healthcheck 2024-06-27 18:46:59 +01:00
Chubby Granny Chaser
ccaea88a88 Merge branch 'feature/libtorrent-reloaded-remake-remaster' of github.com:hydralauncher/hydra into feature/libtorrent-reloaded-remake-remaster 2024-06-27 18:12:10 +01:00
Chubby Granny Chaser
d90888c7ba Merge branch 'main' into feature/libtorrent-reloaded-remake-remaster 2024-06-27 18:11:31 +01:00
Chubby Granny Chaser
9f9ea6ee88 fix: removing python tick 2024-06-27 18:10:30 +01:00
Chubby Granny Chaser
c26315219e fix: keeping last status available on rpc 2024-06-27 17:38:20 +01:00
Chubby Granny Chaser
c1c06c2d20 Merge branch 'feature/libtorrent-reloaded-remake-remaster' of github.com:hydralauncher/hydra into feature/libtorrent-reloaded-remake-remaster 2024-06-27 17:19:54 +01:00
Chubby Granny Chaser
328b7cb137 feat: using rpc to communicate 2024-06-27 17:18:48 +01:00
Zamitto
82f72071f9 Merge pull request #707 from hydralauncher/i18n/kazach-translation
feat: add Kazakh translation
2024-06-27 12:25:32 -03:00
Zamitto
d9ed2403ed feat: add kazach translation 2024-06-27 11:30:23 -03:00
Chubby Granny Chaser
d447942f84 Merge branch 'main' into feature/libtorrent-reloaded-remake-remaster 2024-06-27 15:23:48 +01:00
Chubby Granny Chaser
05cfdefc84 fix: fixing postinstall script 2024-06-27 15:21:16 +01:00
Zamitto
e4020d5b6a Merge pull request #605 from Ecron/lang-ca
Added Catalan translation.
2024-06-27 11:13:03 -03:00
Zamitto
1a047547fc feat: remove outdated strings 2024-06-27 11:02:29 -03:00
Chubby Granny Chaser
47ab35421c feat: adding libtorrent again 2024-06-27 14:57:25 +01:00
Chubby Granny Chaser
e08aa9c299 feat: adding libtorrent again 2024-06-27 14:56:57 +01:00
Chubby Granny Chaser
e44049ff63 feat: adding libtorrent again 2024-06-27 14:55:50 +01:00
Zamitto
7aa02f9d64 Merge branch 'main' into lang-ca 2024-06-27 10:55:02 -03:00
Zamitto
3fe6ab469b Fix some comma problems 2024-06-27 10:54:44 -03:00
Chubby Granny Chaser
ccd1d18981 feat: adding libtorrent again 2024-06-27 14:54:02 +01:00
Chubby Granny Chaser
906e801036 feat: adding libtorrent again 2024-06-27 14:52:53 +01:00
Chubby Granny Chaser
63c13e17cb feat: adding libtorrent again 2024-06-27 14:51:13 +01:00
Ecron
c1297530f6 Update translation.json
Added 2 new strings under header section.
2024-06-27 15:42:22 +02:00
Ecron
ac10e755b8 Update src/locales/ca/translation.json
Removed the splash section.
2024-06-27 15:41:10 +02:00
Ecron
1f17dda2f8 Update src/locales/ca/translation.json
Removed social networks.
2024-06-27 15:38:33 +02:00
Zamitto
94284a427f Merge pull request #677 from hydralauncher/fix/captcha-not-showing-on-linux
fix: set nodeIntegrationInSubFrames true on auth window
2024-06-25 10:04:10 -03:00
Павел
7fe8a6425b Update translation.json 2024-06-25 09:28:52 +03:00
Zamitto
2e1eb9e9b7 fix: set nodeIntegrationInSubFrames true on auth window 2024-06-24 23:36:55 -03:00
Zamitto
fe33045b9e Merge pull request #676 from hydralauncher/zamitto/hyd-22-define-the-cloudfront-url-on-the-csp
feat: add cloud front url to CSP
2024-06-24 21:16:57 -03:00
Zamitto
2020663ee5 feat: use wildcard on cloudfront url 2024-06-24 21:09:03 -03:00
Zamitto
2b51b82d03 feat: add cloud front to CSP 2024-06-24 21:02:13 -03:00
Павел
13b691aaad Update translation.json 2024-06-24 20:29:19 +03:00
Павел
e10f9f829c Update translation.json 2024-06-24 20:24:00 +03:00
Павел
936881e570 Update translation.json 2024-06-24 20:18:18 +03:00
Павел
0c826cb6f7 Update translation.json 2024-06-24 20:16:32 +03:00
Zamitto
2a27c37a25 Merge pull request #649 from 01M/patch-1
Update translation.json
2024-06-23 21:40:31 -03:00
Zamitto
3fd9776987 Merge branch 'main' into patch-1 2024-06-23 12:58:54 -03:00
Zamitto
e93b0a786e Merge pull request #638 from Lianela/main
Updated Spanish translation
2024-06-23 12:01:50 -03:00
01M
7a6d8ece63 Merge branch 'main' into patch-1 2024-06-23 17:55:20 +03:00
Zamitto
51c56f7536 Merge branch 'main' into main 2024-06-23 11:51:18 -03:00
Zamitto
87f5e7eb26 Merge pull request #642 from expload233/main
Update Chinese Translation for new version
2024-06-23 11:50:46 -03:00
01M
2a3fda90b3 Update translation.json
Fixed translation
2024-06-23 17:25:54 +03:00
expload
9d11cac680 add new translate text 2024-06-23 06:42:35 +00:00
expload
42209b51a6 Update Chinese translation text for new version 2024-06-23 06:41:11 +00:00
Lianela
170826ad5d Merge branch 'main' into main 2024-06-22 16:18:01 -06:00
Chubby Granny Chaser
11dffd1b7a fix: profiles hotfix 2024-06-22 23:11:32 +01:00
Lianela
37eddbaeeb Updated Spanish translation
- Added and fixed some strings
- Fixed some typo errors
- Translated missing strings

(Had some troubles so I wasn't able to translated before)
2024-06-22 16:04:50 -06:00
Chubby Granny Chaser
66d03197f4 Merge pull request #633 from hydralauncher/rc/v2.0
Rc/v2.0
2024-06-22 22:04:27 +01:00
Chubby Granny Chaser
d62d73e04a Merge branch 'rc/v2.0' of github.com:hydralauncher/hydra into rc/v2.0 2024-06-22 21:02:14 +01:00
Zamitto
c055dcfeb4 Merge pull request #632 from xxDRV/patch-10
Improved RU translation + Translated new strings
2024-06-22 16:53:38 -03:00
Chubby Granny Chaser
22c8fdfe66 feat: setting elden ring as hero 2024-06-22 20:50:22 +01:00
Chubby Granny Chaser
16a4680029 Merge pull request #631 from hydralauncher/feature/deep-link-to-import-sources
feat: adding deep linking to import sources
2024-06-22 20:33:24 +01:00
Antecess
2e66e88609 Improved RU translation + Translated new strings 2024-06-23 00:29:18 +05:00
Zamitto
c8482b3852 Merge branch 'rc/v2.0' into feature/deep-link-to-import-sources 2024-06-22 16:27:10 -03:00
Zamitto
9bef2341be Merge pull request #626 from hydralauncher/feat/show-toast-after-create-shortcut
feat: show toast after create shortcut
2024-06-22 16:26:15 -03:00
Zamitto
f219634b78 make toast show over everything 2024-06-22 16:25:12 -03:00
Chubby Granny Chaser
6d3b04fc3c feat: adding deep linking to import sources 2024-06-22 20:15:07 +01:00
Zamitto
1b2b8c8218 Merge pull request #623 from hydralauncher/feat/ru-uk-i18n
fu: ru, uk and es i18n
2024-06-22 15:56:48 -03:00
JackEnx
be5f045a06 refactor: remove gif and bmp profile image mime 2024-06-22 14:25:43 -03:00
Zamitto
c31935de0b Merge branch 'rc/v2.0' into feat/show-toast-after-create-shortcut 2024-06-22 02:03:06 -03:00
Zamitto
fbcacd7c39 Merge pull request #627 from hydralauncher/feat/get-total-playtime-from-api
feat: get total playtime from api
2024-06-22 02:01:17 -03:00
Zamitto
dcdc6a7114 Merge branch 'rc/v2.0' into feat/show-toast-after-create-shortcut 2024-06-22 01:59:42 -03:00
Zamitto
9da67920b6 chore: prettier 2024-06-22 01:47:55 -03:00
Zamitto
9a1b42a29f feat: get totalPlayTimeInSeconds from api 2024-06-22 01:47:20 -03:00
Zamitto
37b9eca0e1 feat: show toast after create shortcut 2024-06-22 01:20:31 -03:00
Zamitto
92a3061f8d Merge pull request #624 from hydralauncher/fix/copy-vbs-script-to-app-resources-on-build
Fix/copy vbs script to app resources on build
2024-06-21 22:26:39 -03:00
Zamitto
edc90d9ebe feat: add ru and uk updated string 2024-06-21 21:29:25 -03:00
Zamitto
ebda8eccc6 fix: copy vbs script to app resources 2024-06-21 21:28:59 -03:00
Zamitto
6e2136e155 feat: replace hard coded string with i18n 2024-06-21 18:17:02 -03:00
Chubby Granny Chaser
ac9df910f8 Merge pull request #622 from hydralauncher/feature/adding-cooldown-to-randomize-button
feat: adding cooldown to randomize button
2024-06-21 03:48:54 +01:00
Chubby Granny Chaser
a615ff35cb feat: adding cooldown to randomize button 2024-06-21 03:32:50 +01:00
Chubby Granny Chaser
d4cb3ef857 Merge pull request #621 from hydralauncher/feature/adding-session-hash
feat: adding session hash
2024-06-21 03:06:33 +01:00
Chubby Granny Chaser
9ef6329799 feat: adding session hash 2024-06-21 02:37:49 +01:00
Zamitto
458acb0b70 Merge pull request #620 from hydralauncher/feature/improve-sign-out
Feature/improve sign out
2024-06-20 22:13:08 -03:00
Zamitto
cee6f373eb fix: last time played 2024-06-20 22:07:23 -03:00
Chubby Granny Chaser
519022525e Merge branch 'rc/v2.0' into feature/improve-sign-out 2024-06-21 01:57:31 +01:00
Zamitto
fb416b6483 fix: merge with remote games setting 1970 sometimes 2024-06-20 21:55:16 -03:00
Chubby Granny Chaser
2f4d1396a9 feat: adding link to game running 2024-06-21 01:51:24 +01:00
Chubby Granny Chaser
8afb3c27dc feat: improve sign out 2024-06-21 01:34:59 +01:00
Zamitto
b115bf632a Merge pull request #617 from hydralauncher/chore/clear-unused-i18n-strings
chore: delete unused i18n strings
2024-06-20 21:28:37 -03:00
Chubby Granny Chaser
9e9fb26deb Merge pull request #618 from hydralauncher/feature/update-steam-games-list
Feature/update steam games list
2024-06-21 01:11:05 +01:00
Chubby Granny Chaser
0ac17e95ff Merge branch 'rc/v2.0' of github.com:hydralauncher/hydra into rc/v2.0 2024-06-21 01:07:34 +01:00
Chubby Granny Chaser
93298f0bc2 chore: removing console.log 2024-06-21 01:06:59 +01:00
Chubby Granny Chaser
4ab54780e0 feat: updating steam games list 2024-06-21 01:03:57 +01:00
Zamitto
92e6dfabff Merge pull request #616 from hydralauncher/feature/sign-out-modal
feature: clear games on sign out
2024-06-20 20:57:50 -03:00
Zamitto
5bd8e35b9e Merge branch 'rc/v2.0' into feature/sign-out-modal
# Conflicts:
#	src/main/events/auth/sign-out.ts
2024-06-20 20:52:07 -03:00
Zamitto
68227278f5 chore: delete unused i18n strings 2024-06-20 20:43:49 -03:00
Chubby Granny Chaser
beba2cf3e5 Merge pull request #615 from hydralauncher/fix/surprise-me-button
Fix/surprise me button
2024-06-21 00:19:12 +01:00
Zamitto
7a7afef799 feat: add catch to api call 2024-06-20 20:07:17 -03:00
Zamitto
98bef62a2f Merge pull request #611 from hydralauncher/feature/refator-process-watcher-and-game-running
show running game on profile and sidebar
2024-06-20 20:06:07 -03:00
Zamitto
9eff4010d7 feat: clear local games on signout
feat: signout modal text
2024-06-20 20:05:33 -03:00
Chubby Granny Chaser
57de748ad3 Merge branch 'rc/v2.0' of github.com:hydralauncher/hydra into rc/v2.0 2024-06-20 23:59:48 +01:00
Zamitto
7b453852b6 Merge branch 'rc/v2.0' into feature/refator-process-watcher-and-game-running
# Conflicts:
#	src/locales/en/translation.json
#	src/locales/pt/translation.json
#	src/renderer/src/app.tsx
#	src/renderer/src/pages/user/user-content.tsx
2024-06-20 19:59:32 -03:00
Chubby Granny Chaser
48a6b6e31d Merge branch 'rc/v2.0' into fix/surprise-me-button 2024-06-20 23:14:53 +01:00
Chubby Granny Chaser
abe9e3099f Merge pull request #613 from hydralauncher/feature/auth-window
Feature/auth window
2024-06-20 23:10:42 +01:00
Zamitto
adcb505ab7 feat: signout modal text 2024-06-20 18:38:21 -03:00
Zamitto
468af807b0 feat: signout modal text 2024-06-20 18:38:20 -03:00
Chubby Granny Chaser
c928d6fd4b fix: fixing surprise button z-index 2024-06-20 22:11:37 +01:00
Chubby Granny Chaser
8aa02e33f5 Merge branch 'rc/v2.0' of github.com:hydralauncher/hydra into rc/v2.0 2024-06-20 22:03:50 +01:00
Chubby Granny Chaser
9de7d4a61e feat: adding toast when signing in and out 2024-06-20 22:02:11 +01:00
Chubby Granny Chaser
633bb7820b Merge branch 'rc/v2.0' of github.com:hydralauncher/hydra into feature/auth-window 2024-06-20 21:33:33 +01:00
Zamitto
67f8b609ba fix: sign_out and sign_in 2024-06-20 14:39:10 -03:00
Zamitto
a02eac4ecb fix: adjust i18n 2024-06-20 14:19:40 -03:00
Zamitto
973db98090 fix: padding adjustment 2024-06-20 12:20:13 -03:00
Ecron
4744d1ed52 Update index.ts expoting Catalan language file 2024-06-20 17:09:36 +02:00
Zamitto
48e05dcaa5 update background transparency 2024-06-20 12:08:16 -03:00
Zamitto
f019820458 fix: game session duration calculation 2024-06-20 11:48:26 -03:00
Zamitto
e092d701b4 Merge branch 'rc/v2.0' into feature/refator-process-watcher-and-game-running 2024-06-20 11:32:15 -03:00
Zamitto
d347991e0b fix: game session duration calculation 2024-06-20 11:32:13 -03:00
Zamitto
b3ca63c62a fix: sidebar with dib display name 2024-06-20 10:48:07 -03:00
Zamitto
6b6b472315 fix sending delta in millis to api 2024-06-20 10:38:42 -03:00
Zamitto
0fe57fbc3b side bar css 2024-06-20 10:37:49 -03:00
Zamitto
570259c5c7 remove unused on-game-close event 2024-06-20 10:06:30 -03:00
Zamitto
94a25a2383 fix border radius for profile background with game hero 2024-06-20 10:04:24 -03:00
Chubby Granny Chaser
b1b48e2ec0 fix: fixing auth url 2024-06-20 13:24:33 +01:00
Chubby Granny Chaser
8a9892bdbe Merge branch 'rc/v2.0' of github.com:hydralauncher/hydra into rc/v2.0 2024-06-20 13:22:28 +01:00
Chubby Granny Chaser
71d79a4a15 feat: adding auth window 2024-06-20 13:22:12 +01:00
JackEnx
b60d9aa4db fix: memory usage 2024-06-20 09:11:17 -03:00
Zamitto
e4f1abaa5a fix: merge with remote games not updating local games correctly 2024-06-20 00:01:39 -03:00
Zamitto
c01c589f2a fix: add missin hook dependency 2024-06-19 23:52:33 -03:00
Zamitto
678f63fdef Merge branch 'rc/v2.0' into feature/refator-process-watcher-and-game-running 2024-06-19 23:03:30 -03:00
Zamitto
6b31586734 fix: images not loading with local protocol 2024-06-19 23:01:16 -03:00
Zamitto
188fe4537a feat: game session start time stamp 2024-06-19 22:25:11 -03:00
Chubby Granny Chaser
884ba47b9b ci: adding main_vite_api_url 2024-06-20 01:30:38 +01:00
Chubby Granny Chaser
33c827d6ec ci: adding main_vite_api_url 2024-06-20 01:25:23 +01:00
Chubby Granny Chaser
5944fc5c4b ci: adding main_vite_api_url 2024-06-20 01:24:43 +01:00
Chubby Granny Chaser
54c419804c ci: adding main_vite_api_url 2024-06-20 01:23:22 +01:00
Chubby Granny Chaser
571947cd23 Merge pull request #599 from hydralauncher/feature/user-profile
feat: user profile page
2024-06-20 01:08:24 +01:00
Zamitto
800e99fda0 Merge branch 'feature/user-profile' into feature/refator-process-watcher-and-game-running
# Conflicts:
#	src/main/services/hydra-api.ts
#	src/main/services/process-watcher.ts
#	src/renderer/src/declaration.d.ts
2024-06-19 21:05:22 -03:00
Zamitto
4f32043966 Merge branch 'rc/v2.0' into feature/user-profile
# Conflicts:
#	src/main/services/hydra-api.ts
#	src/renderer/src/app.tsx
2024-06-19 21:02:16 -03:00
Zamitto
fc8e62cdea background 2024-06-19 20:58:32 -03:00
Chubby Granny Chaser
b337fd8d64 Merge pull request #601 from hydralauncher/feature/sync-library
feat: sync library with api
2024-06-20 00:50:08 +01:00
Zamitto
c6da57995d add cover 2024-06-19 20:41:44 -03:00
Zamitto
56c3607400 game background image profile page 2024-06-19 20:41:43 -03:00
Zamitto
4a59a52174 feat: show running game on sidebar 2024-06-19 20:41:43 -03:00
Zamitto
e933cec888 feat: process watcher send list of running process 2024-06-19 20:41:43 -03:00
JackEnx
e56a8209e1 fix: refresh session token 2024-06-19 20:21:50 -03:00
Chubby Granny Chaser
0805728a79 ci: updating version and hero 2024-06-19 23:24:50 +01:00
Chubby Granny Chaser
93c6ef8510 Merge branch 'feature/user-profile' of github.com:hydralauncher/hydra into feature/user-profile 2024-06-19 20:58:21 +01:00
Chubby Granny Chaser
335ae5b3dc chore: adding s3 domains to CSP 2024-06-19 20:57:52 +01:00
Zamitto
887d97fd20 feat: get mime from library that checks the file binary 2024-06-19 15:33:24 -03:00
Zamitto
17cfc7bb02 feat: add event and check if user is logged in 2024-06-19 12:07:33 -03:00
Zamitto
6b03705d54 better skeleton loading on user profile 2024-06-19 11:57:23 -03:00
Zamitto
4dd0e43611 feat: add sign out confirm modal 2024-06-19 11:14:06 -03:00
Zamitto
dc662b1c7d remove unused translation strings 2024-06-19 10:44:55 -03:00
Zamitto
ee094dd7af i18n and html form validation 2024-06-19 10:26:31 -03:00
Chubby Granny Chaser
61c5fc3957 fix: preventing page reload on form submit 2024-06-19 09:59:59 +01:00
Chubby Granny Chaser
1fb1c9e81a feat: adding local file protocol 2024-06-19 09:48:11 +01:00
Chubby Granny Chaser
1ef8e3fce3 Merge branch 'feature/user-profile' of github.com:hydralauncher/hydra into feature/user-profile 2024-06-19 05:08:32 +01:00
Chubby Granny Chaser
e42ba4d527 fix: fixing profile avatar width 2024-06-19 05:07:54 +01:00
Zamitto
411a08247f color and size adjustment 2024-06-19 00:40:43 -03:00
Zamitto
191023ac38 clear profileBackground if there is no image 2024-06-19 00:31:13 -03:00
Zamitto
50d9b9f022 remove unused css 2024-06-19 00:30:41 -03:00
Chubby Granny Chaser
c1d1dec49d Merge branch 'feature/user-profile' of github.com:hydralauncher/hydra into feature/user-profile 2024-06-19 04:29:36 +01:00
Chubby Granny Chaser
aa33635912 fix: fixing games grid 2024-06-19 04:27:34 +01:00
Zamitto
3b2b78dc7c use logger 2024-06-19 00:09:13 -03:00
Zamitto
2e5a324669 clear remote ids on sign in 2024-06-19 00:07:15 -03:00
Zamitto
dce2f1b333 fix: not updating profile pic preview 2024-06-18 23:47:50 -03:00
Zamitto
2c9129c7b6 delete user auth if it is not logged in 2024-06-18 23:15:16 -03:00
Chubby Granny Chaser
944f3891bf feat: dispatching event when remote games are fetched 2024-06-19 02:35:57 +01:00
Zamitto
634fc61c09 adjust profile grid and header title 2024-06-18 22:25:42 -03:00
Chubby Granny Chaser
ca81281f1f Merge branch 'feature/sync-library' of github.com:hydralauncher/hydra into feature/sync-library 2024-06-19 02:16:18 +01:00
Zamitto
b07451e91d refactor removeGameFromLibrary to handle error 2024-06-18 21:58:11 -03:00
Zamitto
ab4cf23f97 post to /games on startGameDownload 2024-06-18 21:53:20 -03:00
Zamitto
6179fb9cf6 call batch games on hydra start up 2024-06-18 21:49:41 -03:00
Zamitto
cf84bf56b3 missing parse to int in put /games/:gameId 2024-06-18 21:46:20 -03:00
Zamitto
1eef86a40c reset modal values on close 2024-06-18 21:43:06 -03:00
Chubby Granny Chaser
a8624058e4 feat: adding user local storage cache 2024-06-18 20:29:37 +01:00
Zamitto
eea19d43c2 reloading user profile on update 2024-06-18 13:50:42 -03:00
Zamitto
9c37711bbf reloading user profile on update 2024-06-18 12:29:58 -03:00
Zamitto
30fb588d3c fix debug log 2024-06-18 12:15:26 -03:00
Zamitto
27ef85f653 debug logs 2024-06-18 12:15:22 -03:00
Zamitto
e467bbff66 update user 2024-06-18 12:12:44 -03:00
Zamitto
59b2096d06 patching user displayName and profileImageUrl 2024-06-18 12:02:27 -03:00
Ecron
3b40413257 Added Catalan translation.
Added Catalan translation.
2024-06-18 16:46:13 +02:00
Zamitto
af69509c61 feat: adding modal to edit profile 2024-06-18 01:02:36 -03:00
Chubby Granny Chaser
19c45644d6 Merge branch 'feature/sync-library' of github.com:hydralauncher/hydra into feature/sync-library 2024-06-18 03:13:17 +01:00
Zamitto
7eb69f6e16 fix debug log 2024-06-17 22:25:56 -03:00
Zamitto
c01ed86071 debug logs 2024-06-17 22:22:55 -03:00
Zamitto
7fc376b47f feat: batch games and code refactor 2024-06-17 21:56:45 -03:00
Zamitto
da5cc11bff feat: sync library 2024-06-17 21:56:45 -03:00
Chubby Granny Chaser
79ca354da1 feat: adding profile picture background 2024-06-18 00:09:26 +01:00
Chubby Granny Chaser
b3e2346808 Merge branch 'feature/user-profile' of github.com:hydralauncher/hydra into feature/user-profile 2024-06-17 23:05:00 +01:00
Chubby Granny Chaser
2ae10decf7 feat: adding average color to profile hero 2024-06-17 23:04:10 +01:00
Zamitto
e14e49cdcc feat: batch games and code refactor 2024-06-17 00:13:12 -03:00
Zamitto
ce13f6aa21 feat: sync library 2024-06-17 00:13:11 -03:00
Zamitto
15176a12de add missing dependency on useEffect 2024-06-16 23:47:31 -03:00
Zamitto
16f862d389 rename method 2024-06-16 22:19:36 -03:00
Chubby Granny Chaser
e7ba7b87b6 Merge branch 'feature/user-profile' of github.com:hydralauncher/hydra into feature/user-profile 2024-06-17 02:13:58 +01:00
Chubby Granny Chaser
524bfe91ef feat: adding background to profile 2024-06-17 02:13:43 +01:00
Zamitto
63e74648c4 add missing call to get user 2024-06-16 22:12:35 -03:00
Zamitto
d048d562a3 rename username parameter to userId 2024-06-16 19:51:09 -03:00
Zamitto
05cb66f2a4 remove unused method 2024-06-16 18:55:00 -03:00
Zamitto
8b8494ee64 organize code 2024-06-16 18:53:20 -03:00
Zamitto
ab5e6c1f7a update entity 2024-06-16 18:48:04 -03:00
Zamitto
54d137e3ae fix warning 2024-06-16 18:39:28 -03:00
Zamitto
38e6f010d6 organize code 2024-06-16 17:08:45 -03:00
Zamitto
16c4460011 feat: refactor deeplnik handler 2024-06-16 17:02:37 -03:00
Zamitto
1bf2c8faf9 feat: replace context with slice 2024-06-16 16:52:22 -03:00
Zamitto
1f72bb6138 change game to library 2024-06-16 15:40:21 -03:00
Zamitto
32566e5dfc feat: handle login from deeplink 2024-06-16 14:08:06 -03:00
Zamitto
55c214eae6 fix profileImageUrl 2024-06-15 22:37:32 -03:00
Zamitto
3ac06fbce5 feat: files and components 2024-06-15 20:31:26 -03:00
Zamitto
76259c2b54 feat: loading from me endpoint and updating sidebar profile 2024-06-15 19:55:29 -03:00
Zamitto
aeaeb1f086 show games library in a grid 2024-06-14 23:23:35 -03:00
Zamitto
1997dbcd5d update text 2024-06-14 20:37:45 -03:00
Zamitto
e8a1aa0616 feat: ui 2024-06-14 18:23:57 -03:00
Zamitto
ca21d8afe6 ui changes 2024-06-14 15:16:51 -03:00
Zamitto
fa2a92d5ed feat: adding time played / last played 2024-06-14 14:47:14 -03:00
Zamitto
d05150a078 feat: update with user endpoint changes 2024-06-13 23:56:46 -03:00
Zamitto
6b2549ed13 feat: get iconUrl 2024-06-13 23:45:43 -03:00
Zamitto
c8fa8f99d2 fix warnings 2024-06-13 23:45:43 -03:00
Zamitto
ee7b139093 i11y 2024-06-13 23:45:34 -03:00
Zamitto
3f0a1207e9 feat: use convertSteamGameToCatalogueEntry 2024-06-13 23:45:34 -03:00
Zamitto
56f0439aaf feat: add los broxas cdn to security policy 2024-06-13 23:45:34 -03:00
Zamitto
83122bb864 feat: structure profile content and update response 2024-06-13 23:45:34 -03:00
Zamitto
4e73009997 feat: showing first content on profile page 2024-06-13 23:45:34 -03:00
Zamitto
b8895afc0a getting user profile from api 2024-06-13 23:45:33 -03:00
Zamitto
a974141360 feat: user profile 2024-06-13 23:41:02 -03:00
Zamitto
8fad9b05e6 Merge pull request #596 from hydralauncher/feature/integrate-hydra-api
feat: create HydraApi
2024-06-13 23:38:23 -03:00
Zamitto
1797abb2da refactor user preferences and create user auth entity 2024-06-13 23:31:32 -03:00
Zamitto
9e5118d1dc remove zod schema 2024-06-13 23:11:40 -03:00
Zamitto
7bbaae91c9 fix: await and conditional 2024-06-13 22:52:29 -03:00
Zamitto
ba08e0b112 feat: refactor api 2024-06-13 21:08:30 -03:00
Zamitto
f21a8bf784 feat: create HydraApi 2024-06-13 20:12:13 -03:00
Zamitto
81f2e509c5 feat: create HydraApi 2024-06-13 20:08:30 -03:00
Zamitto
d31d056e5e Merge pull request #560 from alexandregv/feat/fr-README
Add French README
2024-06-12 23:36:50 -03:00
Zamitto
aa21f7815d Merge branch 'main' into feat/fr-README 2024-06-12 23:25:14 -03:00
Zamitto
e5a261e75f Merge pull request #593 from hydralauncher/feat/adding-right-content-to-textfield
feat: adding right content to text field
2024-06-12 20:56:49 -03:00
Zamitto
a8f9478815 Merge pull request #592 from xxDRV/patch-9
Updated RU translation to fit new features
2024-06-12 15:35:46 -03:00
Chubby Granny Chaser
50665b4472 feat: adding right content to text field 2024-06-12 18:19:38 +01:00
Zamitto
42eff5e906 Merge branch 'main' into romanian 2024-06-12 13:35:41 -03:00
Zamitto
0b8cc4e335 Merge branch 'main' into patch-9 2024-06-12 13:33:41 -03:00
Chubby Granny Chaser
55d1bfb34d Merge pull request #590 from hydralauncher/feature/adding-animation-to-game-details
Feature/adding animation to game details
2024-06-12 17:32:20 +01:00
Chubby Granny Chaser
713a3f4c50 Merge branch 'main' into feature/adding-animation-to-game-details 2024-06-12 17:27:37 +01:00
Antecess
95ce191533 Updated RU translation to fit new features 2024-06-12 21:16:24 +05:00
Chubby Granny Chaser
33e9caf614 Merge pull request #587 from Lianela/main
New translation.json spanish
2024-06-12 09:34:26 +01:00
Chubby Granny Chaser
5cd497d0c9 Merge branch 'main' into feature/adding-animation-to-game-details 2024-06-12 00:01:17 +01:00
Chubby Granny Chaser
9840418257 fix: fixing multiple state update when scrolling 2024-06-12 00:00:46 +01:00
Chubby Granny Chaser
c68cb3211d fix: fixing multiple state update when scrolling 2024-06-11 23:59:58 +01:00
Lianela
4d37dddcab New translation.json spanish
- Added new translations
- Deleted old ones to match english translation
2024-06-10 23:51:49 -06:00
Zamitto
d29f266ca1 Merge branch 'main' into romanian 2024-06-10 13:04:01 -03:00
Zamitto
abd33d737d Merge pull request #576 from hydralauncher/build/win-portable-release
build: add windows portable version
2024-06-08 22:14:45 -03:00
Zamitto
bc82cf2539 Merge branch 'main' into build/win-portable-release
# Conflicts:
#	.github/workflows/build.yml
2024-06-08 21:51:46 -03:00
Zamitto
8c1851bb4c feat: remove auto download if is portable version 2024-06-08 21:24:53 -03:00
Zamitto
bcef86fd94 Merge branch 'main' into build/win-portable-release 2024-06-08 16:38:03 -03:00
Chubby Granny Chaser
d2aef7ca98 Merge pull request #562 from hydralauncher/feature/add-download-sources
Feature/add download sources
2024-06-08 20:36:10 +01:00
Chubby Granny Chaser
4b97639972 Merge pull request #575 from hydralauncher/feature/game-options-modal
feat: game options modal
2024-06-08 20:30:09 +01:00
Chubby Granny Chaser
bf33fa7ed9 chore: merge with main 2024-06-08 20:29:07 +01:00
Chubby Granny Chaser
53f4394a49 chore: merge with main 2024-06-08 20:28:41 +01:00
Zamitto
2af875fc51 Merge pull request #529 from hydralauncher/feat/macos-test
feat: adjust auto update and tray icon for macos
2024-06-08 16:22:47 -03:00
Chubby Granny Chaser
9e2e317938 chore: changing last_selected_option to last_downloaded_option 2024-06-08 19:26:24 +01:00
Chubby Granny Chaser
ac5ad7e962 chore: removing console.log 2024-06-08 19:25:31 +01:00
Chubby Granny Chaser
4a194b3be5 chore: removing console.log 2024-06-08 19:22:10 +01:00
Chubby Granny Chaser
d700e2706c feat: adding last selected option to repacks modal 2024-06-08 19:18:24 +01:00
Chubby Granny Chaser
80a25bf409 feat: adding modal animations 2024-06-08 18:58:23 +01:00
Zamitto
ca73316ee9 code adjustment 2024-06-08 11:33:59 -03:00
Zamitto
cc9a38acf8 cancel download before remove game from library 2024-06-08 11:24:26 -03:00
Chubby Granny Chaser
dc8276bb34 feat: adding english translation 2024-06-08 15:24:10 +01:00
Zamitto
e3d0ef598b minor spelling mistake 2024-06-08 10:52:40 -03:00
Zamitto
c7d72b0adc better ui on modal #3 2024-06-08 10:48:48 -03:00
Zamitto
2e427b33e2 add danger style to button 2024-06-08 01:17:21 -03:00
Zamitto
f1b30eb969 i18n 2024-06-08 00:16:29 -03:00
Zamitto
d8446263eb better ui on modal 2024-06-08 00:11:08 -03:00
Zamitto
9eef445b1a trying better ui on modal #1 2024-06-07 23:37:13 -03:00
Zamitto
163b17324e set executable as null on remove game from library 2024-06-07 18:55:03 -03:00
Zamitto
97abef740c undo modal change 2024-06-07 15:49:03 -03:00
Zamitto
6946fd3bd0 add artifact 2024-06-07 14:35:22 -03:00
Zamitto
8669c1d660 feat: add modal to confirm remove from library 2024-06-07 14:23:34 -03:00
Zamitto
ceb8f164b7 i18n for sidebar 2024-06-07 14:07:15 -03:00
Zamitto
08eda5573d feat: using showItemInFolder to open exe and download paths 2024-06-07 14:03:57 -03:00
Zamitto
cead92d900 disable button logic 2024-06-07 13:14:17 -03:00
Zamitto
3a86e3569a feat: add/remove game from library 2024-06-07 12:28:06 -03:00
Zamitto
c6105bcdfd refactor hero panel 2024-06-07 11:43:57 -03:00
Zamitto
81a3ede4bd refactor hero panel 2024-06-07 10:31:37 -03:00
Zamitto
b51b185323 undo build pipeline changes 2024-06-07 09:16:02 -03:00
Zamitto
f5055c42aa undo post install changes 2024-06-07 09:13:32 -03:00
Zamitto
7013f7c65d refactoring modal 2024-06-06 23:56:05 -03:00
Zamitto
b7a61f4567 remove log and undo release change 2024-06-06 12:14:08 -03:00
Zamitto
0faca5c9a1 build portable 2024-06-06 12:09:51 -03:00
Zamitto
06d2733fc5 build portable 2024-06-06 00:34:28 -03:00
Zamitto
4f4ada8d54 show toast if game has no executable selected 2024-06-05 22:54:51 -03:00
Zamitto
58dff75f64 i18n 2024-06-05 22:42:46 -03:00
Zamitto
1494d64da4 Merge branch 'main' into feat/macos-test 2024-06-05 21:46:37 -03:00
Zamitto
95a7922806 hero-panel show HeroPanelPlaytime 2024-06-05 21:35:44 -03:00
Zamitto
de178d672e feat: show HeroPanelPlaytime if playTime is not 0 2024-06-05 20:55:05 -03:00
Zamitto
e8b28ccf90 organize ui 2024-06-05 20:29:42 -03:00
Zamitto
45d8923561 feat: double click on sidebar opens game 2024-06-05 18:38:22 -03:00
Zamitto
086ee8ac04 feat: create game shortcut 2024-06-05 16:42:45 -03:00
Zamitto
6dfd7279dc Merge branch 'feature/add-download-sources' into feature/game-options-modal 2024-06-05 16:17:49 -03:00
Chubby Granny Chaser
4a4a800b07 feat: adding icon parser to download notification 2024-06-05 20:15:59 +01:00
Zamitto
366cb1ac2f separator 2024-06-05 15:29:50 -03:00
Zamitto
87eaf021b4 Merge branch 'feature/add-download-sources' into feature/game-options-modal 2024-06-05 13:35:02 -03:00
Chubby Granny Chaser
6b8ab895e3 feat: adding download source resync 2024-06-05 15:07:53 +01:00
Chubby Granny Chaser
d123f63095 chore: resolving merge conflict on downloads 2024-06-05 14:30:12 +01:00
Chubby Granny Chaser
9eb90bac62 feat: moving notifications 2024-06-05 14:20:32 +01:00
Chubby Granny Chaser
ef036d6f57 feat: moving notifications 2024-06-05 14:18:40 +01:00
Zamitto
5b85a9f2b7 Merge branch 'feature/add-download-sources' into feature/game-options-modal
# Conflicts:
#	src/renderer/src/pages/game-details/hero/hero-panel-actions.tsx
2024-06-05 07:41:30 -03:00
Zamitto
038cc377ec Merge pull request #574 from hydralauncher/feature/delete-installation-folder-dont-set-game-as-removed
Feature/delete installation folder dont set game as removed
2024-06-05 07:37:33 -03:00
Zamitto
13a4708a02 Merge pull request #573 from hydralauncher/feature/allow-user-change-install-directory
feat: allow change install directory
2024-06-05 07:37:22 -03:00
Panetina
42864a4bea Merge branch 'main' into romanian 2024-06-05 12:03:48 +03:00
Zamitto
581f7983aa undo addGameToLibrary change 2024-06-05 00:21:29 -03:00
Zamitto
48b6d1c941 feat: create game options modal
fix error when getSteamAppDetails fails

dont set game as removed when deleting instalation folder

fix game not deleting installation folder

organize code

feat: add open game executable path and installer path
2024-06-04 23:49:15 -03:00
Zamitto
2c26fed478 adjust delete-game-folder 2024-06-04 23:42:44 -03:00
Zamitto
7ac7d92a28 feat: dont set game as removed when deleting instalation folder 2024-06-04 23:34:51 -03:00
Zamitto
3f50738e37 Merge branch 'main' into feature/allow-user-change-install-directory 2024-06-04 23:18:59 -03:00
Zamitto
d6e57c20c7 Merge pull request #567 from hydralauncher/feature/download-queue
Feature/download queue
2024-06-04 20:44:06 -03:00
Chubby Granny Chaser
1290d25ae5 fix: fixing remove installer button on downloads page 2024-06-04 22:01:09 +01:00
Chubby Granny Chaser
c7ae4db79d Merge pull request #568 from rickxz/style(downloads)/improve-responsive-design
style(downloads): make game actions buttons the same size in smaller devices and crop repack title
2024-06-04 21:53:16 +01:00
Chubby Granny Chaser
4f34743f94 fix: fixing remove installer button on downloads page 2024-06-04 21:52:32 +01:00
rickxz
76fc992d65 style(downloads): make game actions buttons the same size in smaller devices and crop repack title 2024-06-04 16:16:21 -03:00
Chubby Granny Chaser
588cb983c2 fix: adding sorting to download list 2024-06-04 16:59:47 +01:00
Chubby Granny Chaser
73b4b2c13c feat: adding download queue 2024-06-04 15:33:47 +01:00
Panetina
d70b46d475 Translated to romanian
Translated everything to romanian.
Discord: panyel if there are any issues
2024-06-04 15:20:52 +03:00
Chubby Granny Chaser
0b68ddda78 feat: adding resync button 2024-06-04 11:28:11 +01:00
Zamitto
34e6947a6a feat: allow change install directory 2024-06-04 00:00:38 -03:00
Chubby Granny Chaser
ea923d5082 fix: removing repacks from worker threads to fix race condition 2024-06-03 23:09:47 +01:00
Chubby Granny Chaser
4559e23610 feat: adding badges 2024-06-03 22:16:07 +01:00
Chubby Granny Chaser
5afe78467e Merge branch 'feature/add-download-sources' of github.com:hydralauncher/hydra into feature/add-download-sources 2024-06-03 21:40:02 +01:00
Chubby Granny Chaser
0ea2cd39db feat: adding auto refresh of download sources 2024-06-03 21:39:37 +01:00
Zamitto
7ec082be23 making screenshots nullable 2024-06-03 16:56:21 -03:00
Chubby Granny Chaser
3da751a67b feat: removing requirements.txt 2024-06-03 16:59:32 +01:00
Chubby Granny Chaser
b32f1f9210 feat: removing hydra.db 2024-06-03 16:58:47 +01:00
Chubby Granny Chaser
6eed76268b feat: removing hydra.db 2024-06-03 16:57:23 +01:00
Chubby Granny Chaser
c6242fa3e1 perf: improving get-random-game performance 2024-06-03 16:56:12 +01:00
Chubby Granny Chaser
467ea29ec2 fix: removing all indices from flexsearch index 2024-06-03 16:43:49 +01:00
Chubby Granny Chaser
4b1248b865 fix: updating translation for removed 2024-06-03 16:30:16 +01:00
Zamitto
577c2da6e5 add page column back (with nullable) 2024-06-03 11:50:05 -03:00
Chubby Granny Chaser
8fccbb6d81 feat: removing unique from download source name 2024-06-03 15:07:55 +01:00
Chubby Granny Chaser
3aa20aa7d9 feat: migrating repacks to a worker 2024-06-03 14:45:12 +01:00
Chubby Granny Chaser
0722868c35 feat: migrating repacks to a worker 2024-06-03 14:39:51 +01:00
Chubby Granny Chaser
1dd13303d5 feat: migrating repacks to a worker 2024-06-03 14:39:17 +01:00
Chubby Granny Chaser
485ee11449 feat: migrating repacks to a worker 2024-06-03 14:35:17 +01:00
Chubby Granny Chaser
5a85033486 feat: migrating repacks to a worker 2024-06-03 14:34:02 +01:00
Chubby Granny Chaser
eb3eb88f23 feat: updating settings general 2024-06-03 02:21:22 +01:00
Chubby Granny Chaser
3a16eb2913 feat: updating settings general 2024-06-03 02:19:13 +01:00
Chubby Granny Chaser
59066117c9 feat: updating settings general 2024-06-03 02:18:52 +01:00
Chubby Granny Chaser
28de50b244 feat: updating settings general 2024-06-03 02:17:58 +01:00
Chubby Granny Chaser
48e07370e4 feat: adding import download source 2024-06-03 02:12:05 +01:00
Alexandre GV
299cf801ea Add "fr" badge to all READMEs 2024-06-02 19:28:35 +02:00
Alexandre GV
a9e2996e90 Move "en" badge at first in README.fr.md 2024-06-02 19:26:11 +02:00
Alexandre GV
334d487be6 Add missing 's' in anchor link 2024-06-02 19:25:08 +02:00
Alexandre GV
8a1c3ac642 Fix accents 2024-06-02 19:23:21 +02:00
Alexandre GV
062bc6cf19 Create README.fr.md 2024-06-02 19:20:58 +02:00
Zamitto
d505ccb4c5 change releases url to latest release 2024-06-02 02:27:47 -03:00
Zamitto
8bdd70e7d3 remove debug log 2024-06-02 02:24:52 -03:00
Zamitto
7ebd91a652 remove duplicity and simplify AppUpdaterEvent 2024-06-02 02:23:20 -03:00
Zamitto
b742a464c9 Merge remote-tracking branch 'origin/main' into feat/macos-test 2024-06-02 02:14:52 -03:00
Zamitto
5f08fd0f5e remove !important 2024-06-02 02:14:43 -03:00
Zamitto
fc9990bb72 simplify used hooks 2024-06-01 10:44:14 -03:00
Zamitto
4ea04b3dbc Merge pull request #551 from piradata/patch-1
missing whitespace on readme
2024-05-31 23:16:53 -03:00
Zamitto
e45991cb7c feat: add tray for macos 2024-05-31 23:14:14 -03:00
PIRADATA
078d18c75e missing whitespace on readme 2024-05-31 23:05:03 -03:00
Zamitto
5528330265 feat: add darwin conditional for open-game-installer 2024-05-31 16:26:43 -03:00
Zamitto
89464f4d3e Merge branch 'main' into feat/macos-test 2024-05-31 16:23:20 -03:00
Zamitto
a29562641c Merge pull request #304 from scrlkx/linux-install
fix: unable to install games on linux
2024-05-31 16:22:49 -03:00
Zamitto
227eb6ff2d revert changes for debug 2024-05-31 15:39:23 -03:00
Zamitto
2038bd1fbe feat: refactors 2024-05-31 15:03:29 -03:00
Daniel Freitas
4ba82d3e82 Merge branch 'linux-install' of github.com:scrlkx/hydra into linux-install 2024-05-31 14:46:46 -03:00
Daniel Freitas
95a0d55426 feat: look for a single alternative setup when installing 2024-05-31 14:45:26 -03:00
Zamitto
45f30a9208 feat: handle auto update for macos 2024-05-31 13:21:03 -03:00
Daniel Freitas
81f453d60f undo: add logs folder to .gitignore 2024-05-30 22:23:07 -03:00
Daniel Freitas
f88cd61a23 chore: add logs folder to gitignore 2024-05-30 21:39:11 -03:00
Daniel Freitas
0cdb25e705 chore: typo 2024-05-30 21:38:30 -03:00
Zamitto
2138aa9711 more logs 2024-05-30 21:35:38 -03:00
Daniel Freitas
fdd7f753b3 feat: better handle of different game installing formats 2024-05-30 21:29:08 -03:00
Zamitto
a354d76652 remove .zip from artifacts 2024-05-30 20:04:28 -03:00
Zamitto
521921d90e add some debug logs 2024-05-30 19:41:25 -03:00
Zamitto
e93f02ca76 reorganize post install 2024-05-30 13:46:06 -03:00
Zamitto
e83e7dc680 remove debug log 2024-05-30 13:44:36 -03:00
Zamitto
a9edb5a9cf update pipelines 2024-05-30 13:40:20 -03:00
Zamitto
257d331343 Merge branch 'main' into feat/macos-test 2024-05-30 13:30:41 -03:00
Zamitto
6b4e0108f1 go back to latest 2024-05-30 13:15:09 -03:00
Zamitto
290f305ee0 test build 2024-05-30 13:11:11 -03:00
Zamitto
61580d5765 test build 2024-05-30 12:54:23 -03:00
Zamitto
5f292bc53a remove step to install aria2 2024-05-30 12:23:51 -03:00
Zamitto
2a02936648 test 2024-05-30 12:18:44 -03:00
Zamitto
eaa5b46b1f update build and postinstall for mac 2024-05-30 11:59:12 -03:00
Zamitto
8705efc9b6 Merge branch 'main' into feat/macos-test
# Conflicts:
#	.github/workflows/build.yml
2024-05-30 10:55:39 -03:00
Zamitto
1bfb90f1a0 Merge branch 'main' into linux-install 2024-05-30 10:34:34 -03:00
Zamitto
2de142dd73 Merge pull request #402 from piradata/teste-locale2
Add option to choose locale from settings menu
2024-05-30 10:28:31 -03:00
Zamitto
2e41d16afe Merge branch 'main' into teste-locale2 2024-05-30 10:21:37 -03:00
Chubby Granny Chaser
b66f58d120 Merge pull request #545 from Lianela/main
New translations added to Spanish
2024-05-30 11:13:36 +01:00
Lianela
42d36a01ea Real-Debrid update translation.json
Translated new translations regarding Real-Debrid
2024-05-30 02:22:51 -04:00
piradata
bbd11bb0b7 fix type any warning on lint 2024-05-30 02:53:49 -03:00
piradata
d62039fba1 use lodash to sort 2024-05-30 02:48:23 -03:00
piradata
5e019c41f4 generate options tags inside select component 2024-05-30 02:43:45 -03:00
piradata
8543aecda8 linter 2024-05-30 02:15:21 -03:00
piradata
9308982eaa little improvement to clean code 2024-05-30 02:14:48 -03:00
Zamitto
3690154cb6 Update select.css.ts 2024-05-29 22:29:36 -03:00
Zamitto
37b5cb6b60 Merge branch 'main' into teste-locale2 2024-05-29 22:25:46 -03:00
Zamitto
08bdad8bfd Merge branch 'main' into linux-install 2024-05-29 22:21:52 -03:00
Chubby Granny Chaser
ddd9ea69df Merge pull request #543 from hydralauncher/feature/aria2
Feature/aria2
2024-05-30 02:20:35 +01:00
Chubby Granny Chaser
244db861a4 feat: removing checking_files i18n string 2024-05-30 02:13:04 +01:00
Chubby Granny Chaser
94a517bdfb fix: play button not showing when manually adding game to library 2024-05-30 01:28:28 +01:00
Chubby Granny Chaser
9980e2f737 fix: play button not showing when manually adding game to library 2024-05-30 01:26:44 +01:00
Chubby Granny Chaser
c9cb279213 fix: play button not showing when manually adding game to library 2024-05-30 01:24:47 +01:00
Chubby Granny Chaser
e6829ca39b fix: adding windowshide true to aria2c 2024-05-30 01:08:52 +01:00
Chubby Granny Chaser
1171e95b87 fix: fixing stale downloads not resetting 2024-05-30 00:40:39 +01:00
Chubby Granny Chaser
84c746ef35 feat: adding toast for saving real debrid with no token 2024-05-30 00:21:28 +01:00
Chubby Granny Chaser
50c3503e37 chore: disabling resuming real debrid downloads when real debrid is not set 2024-05-30 00:17:17 +01:00
Chubby Granny Chaser
a34a774fb7 chore: disabling resuming real debrid downloads when real debrid is not set 2024-05-30 00:13:53 +01:00
Zamitto
4d61b8586d use node fs 2024-05-29 19:55:37 -03:00
Zamitto
077f78c252 update system tray games to use lastTimePlayed after column migration 2024-05-29 19:55:18 -03:00
Zamitto
0a7ebc5c78 update postinstall to download aria2 linux binary 2024-05-29 18:57:02 -03:00
Chubby Granny Chaser
0751d6093f fix: fixing memory leak on check-for-updates 2024-05-29 22:36:37 +01:00
Chubby Granny Chaser
34a44e7fa9 feat: kill aria2c 2024-05-29 22:14:07 +01:00
Chubby Granny Chaser
d353002eab feat: using retry system to connect to aria2 2024-05-29 21:53:13 +01:00
Chubby Granny Chaser
ffb3d79954 feat: using retry system to connect to aria2 2024-05-29 21:50:35 +01:00
Chubby Granny Chaser
85516c1744 feat: correcting date in process-watcher 2024-05-29 17:20:47 +01:00
Chubby Granny Chaser
08a336b392 feat: updating real-debrid translations 2024-05-29 16:22:30 +01:00
Chubby Granny Chaser
183b85d66a feat: adding real debrid user auth 2024-05-28 14:01:28 +01:00
Zamitto
3dcd60d675 Merge pull request #530 from Papela/patch-1
Typo correction
2024-05-28 09:18:12 -03:00
Papela
8b580ab789 Typo correction
Using "reiniciar" (restart) instead of "reinstalar" (reinstall)
2024-05-28 09:08:30 +02:00
Zamitto
ab14eb4bea Atualizar o build.yml 2024-05-28 00:43:55 -03:00
Zamitto
aaedfb13f2 test python version 2024-05-28 00:27:41 -03:00
Zamitto
f14b4d25aa test macos build 2024-05-28 00:00:39 -03:00
Zamitto
15d95a1ff2 Merge pull request #528 from Lianela/main
New string added in Spanish translation
2024-05-27 23:27:59 -03:00
Lianela
7300d6383a translation.json 2024-05-27 18:43:40 -06:00
Lianela
a71958b550 Line 33 added to spanish translation.json
"version_available" translated
2024-05-27 17:47:12 -06:00
Zamitto
0c97deaa48 Merge pull request #524 from hydralauncher/feat/update-lastTimePlayed-column
change game column lastTimePlayed to datetime
2024-05-27 20:10:01 -03:00
Zamitto
7c1d9565ba add missing interpolation xd 2024-05-27 22:55:03 -03:00
Zamitto
d6ea0d817e user parameters on raw query 2024-05-27 18:52:03 -03:00
Zamitto
2db32f270c Merge branch 'main' into feat/update-lastTimePlayed-column 2024-05-27 18:44:35 -03:00
Zamitto
f9996d0646 Merge pull request #523 from hydralauncher/feat/refactor-auto-update
feat/refactor auto update
2024-05-27 15:43:44 -03:00
Zamitto
05bef7f80c update sql comments 2024-05-27 00:34:17 -03:00
Zamitto
85cb2a4cc8 feat: add migration 2024-05-27 00:32:20 -03:00
Zamitto
f252abc7a7 feat: change column type to datetime 2024-05-26 22:56:56 -03:00
Zamitto
bd9b4d3385 update locales 2024-05-26 22:25:09 -03:00
Zamitto
1299eecc12 remove unused import 2024-05-26 22:12:00 -03:00
Zamitto
cdd18a8ce2 feat: remove splash and add new subheader to request user to restart and install update 2024-05-26 21:49:32 -03:00
Zamitto
179db348e1 Merge branch 'main' into teste-locale2 2024-05-26 19:52:19 -03:00
Zamitto
016f47d17f Merge pull request #521 from hydralauncher/feat/change-logs-path
Change logs path to match hydra.db
2024-05-26 19:51:13 -03:00
Zamitto
dda8791f6d update gitignore 2024-05-26 20:42:12 -03:00
Zamitto
21305d3e39 Merge pull request #504 from Kadu-H/main
Fix main window maximizing from splash
2024-05-26 16:14:22 -03:00
Zamitto
965046db27 Merge branch 'main' into main 2024-05-26 15:41:39 -03:00
Zamitto
35e3339519 Change logs path to match hydra.db 2024-05-26 15:33:21 -03:00
Zamitto
cbb48fbea6 Merge branch 'main' into linux-install 2024-05-26 14:41:36 -03:00
Zamitto
c648ce3d59 Merge pull request #487 from hydralauncher/build/update-linux-packages
build(linux): add rpm package, icon and mimeType
2024-05-26 14:30:46 -03:00
Zamitto
b105dbfb77 Merge branch 'main' into linux-install 2024-05-26 14:21:01 -03:00
Zamitto
8f6175b319 Merge branch 'main' into build/update-linux-packages 2024-05-26 14:20:30 -03:00
Zamitto
ff948016ea Fix icon and change linux category to Game 2024-05-26 14:15:39 -03:00
Zamitto
008f91f05a Merge pull request #519 from Lianela/main
Fixed an error in Spanish translation
2024-05-26 13:58:42 -03:00
Zamitto
41d8f06112 Merge branch 'main' into main 2024-05-26 13:15:59 -03:00
Zamitto
67c39af6db Merge pull request #518 from Giasko0/main
Fixed incorrect translation of variable in italian translation
2024-05-26 13:15:16 -03:00
Giasko
b6e2b8e00c Added missing translations 2024-05-26 11:21:34 +02:00
Kdu
9aa106a63f Update to fix main window maximizing from splash
The code checks whether the initial window starts maximized; If so, it prevents the splash from starting maximized and leaves the main window maximized.
2024-05-25 19:33:38 -03:00
Kdu
2cf20332f4 Merge branch 'main' into main 2024-05-25 19:29:45 -03:00
Kdu
0809104052 Update to fix main window maximizing from splash
The code checks whether the initial window starts maximized; If so, it prevents the splash from starting maximized and leaves the main window maximized.
2024-05-25 19:23:10 -03:00
Kdu
1e84a1558f Update to fix main window maximizing from splash
The code checks whether the initial window starts maximized; If so, it prevents the splash from starting maximized and leaves the main window maximized.
2024-05-25 19:18:08 -03:00
Lianela
5d9d4e5985 Update translation.json
Bug fixed - ETA was bugged, making a word be repeated twice, changed to a different one to fix this
2024-05-25 15:29:08 -06:00
Giasko
cd6a21d4f3 Fixed incorrect translation of variable 2024-05-25 22:25:25 +02:00
Zamitto
f859d51717 Merge pull request #516 from xxDRV/patch-8
Updated RU to fit splash screen feature
2024-05-25 15:40:16 -03:00
Antecess
de2f61b592 Updated RU to fit splash screen feature 2024-05-25 22:53:17 +05:00
Zamitto
06686c8a9b Merge pull request #486 from hydralauncher/feat/replace-winston-with-electron-log
feat: replace log lib
2024-05-25 00:14:25 -03:00
Zamitto
b16acd181d refactor switch case into ifs 2024-05-24 23:58:37 -03:00
Chubby Granny Chaser
bbb4b8d16b Merge branch 'main' into feat/replace-winston-with-electron-log 2024-05-25 03:52:45 +01:00
Zamitto
1a2b415a27 Merge branch 'main' into build/update-linux-packages 2024-05-24 22:21:47 -03:00
Zamitto
7469c005d4 undoing snap/flatpak change as it is breaking pipeline for now 2024-05-24 22:20:47 -03:00
Zamitto
f68ce9248f Merge pull request #490 from Lianela/main
Added a button to redirect to "README.es.md"
2024-05-24 22:07:23 -03:00
Zamitto
5dfdbbe3e2 Merge branch 'main' into main 2024-05-24 22:00:31 -03:00
Zamitto
e9561080f3 Merge pull request #500 from expload233/main
Add new Chinese simplified Translation text
2024-05-24 21:59:15 -03:00
Kdu
4d72392f1d Fix main window maximizing from splash
The code checks whether the initial window starts maximized, if so, prevents the splash from starting maximized and leaves the main window maximized.
2024-05-24 15:02:45 -03:00
Daniel Freitas
ee17b5106c Merge branch 'main' into linux-install 2024-05-24 13:54:41 -03:00
Kdu
e5cffbe598 Fix main window maximization from splash
The code checks whether the initial window is maximized, if so, it leaves the main window also maximized.
2024-05-24 12:46:37 -03:00
expload
43197ee153 format code 2024-05-24 11:06:18 +00:00
expload
d0b5fe54eb Add new Chinese simplified Translation text 2024-05-24 19:00:58 +08:00
Lianela
797a2ed456 Merge branch 'main' into main 2024-05-23 19:41:53 -06:00
Chubby Granny Chaser
86816dc3c3 Merge branch 'main' of github.com:hydralauncher/hydra into feature/aria2 2024-05-24 00:27:13 +01:00
Chubby Granny Chaser
d431c01d1b feat: adding new messages to hero panel 2024-05-24 00:26:21 +01:00
Zamitto
83c32de0c2 Merge pull request #494 from hydralauncher/fix/add-new-steam-cdn-url
fix: add updated steam cdn url
2024-05-23 18:09:34 -03:00
Zamitto
00ba2e01d1 update version to 1.2.4 2024-05-23 18:00:48 -03:00
Zamitto
274377f119 add new steam cdn url 2024-05-23 18:00:20 -03:00
Lianela
9af2e69b58 Merge branch 'main' into main 2024-05-22 23:09:38 -06:00
Lianela
38255eb41d Update README.es.md
Replaced spanish button with the english readme button
2024-05-22 23:04:11 -06:00
Lianela
cf5710e461 Update README.be.md
Button added to redirect to the readme in spanish
2024-05-22 23:00:09 -06:00
Lianela
5f8a5a857e README.uk-UA.md button added
Button added to redirect to the readme in spanish
2024-05-22 22:59:51 -06:00
Lianela
36f1fc1242 README.ru.md button added
Button added to redirect to the readme in spanish
2024-05-22 22:58:43 -06:00
Lianela
b5f2650704 README.pt-BR.md button added
Button added to redirect to the readme in spanish
2024-05-22 22:58:22 -06:00
Lianela
8572b02315 README.pl.md button added
Button added to redirect to the readme in spanish
2024-05-22 22:57:27 -06:00
Lianela
3b35d3fc52 README.es.md button
Added the button to redirect to the readme in spanish
2024-05-22 22:56:49 -06:00
Zamitto
0d43dcec8e Update select.css.ts 2024-05-22 22:08:16 -03:00
Zamitto
952b10fb06 Update settings-general.tsx 2024-05-22 21:02:02 -03:00
Zamitto
8f63bc5f15 Merge branch 'main' into teste-locale2 2024-05-22 20:44:31 -03:00
Zamitto
676da22690 update file list in release pipeline 2024-05-22 16:05:20 -03:00
Fhilipe Coelho
d8e8dceadf build(linux): add flatpak/rpm package and remove snap 2024-05-22 16:03:56 -03:00
Zamitto
48cebe729e Merge pull request #482 from Lianela/main
Updated Spanish translation
2024-05-22 15:54:29 -03:00
Lianela
19e26cba28 Final README.es.md
Added a fully translated Spanish readme
Added "es" badge: (https://img.shields.io/badge/lang-es-red)
2024-05-22 12:47:16 -06:00
Lianela
cdb876fa72 Add files via upload 2024-05-22 12:45:22 -06:00
Zamitto
a921887271 feat: replace log lib 2024-05-22 13:40:21 -03:00
Lianela
2099d72840 Update translation.json 2024-05-21 22:05:33 -06:00
Lianela
8924f25d7c Update translation.json 2024-05-21 22:04:25 -06:00
Lianela
7c9e15e75c Update translation.json 2024-05-21 22:00:43 -06:00
Lianela
5031ee47ca Update translation.json
Added new splash translation
2024-05-21 21:53:44 -06:00
Chubby Granny Chaser
a240c3ae24 feat: adding download method toggle 2024-05-22 01:06:25 +01:00
Chubby Granny Chaser
a21a381e2a feat: adding toast component 2024-05-22 00:13:28 +01:00
Chubby Granny Chaser
0162ebd133 feat: adding toast component 2024-05-22 00:12:57 +01:00
Zamitto
bffe74f0c7 update pipe name 2024-05-21 20:07:34 -03:00
Zamitto
bf97d744e2 Merge pull request #466 from hydralauncher/feat/splash-screen-for-updates
Feat: splash screen for updates
2024-05-21 18:32:25 -03:00
Zamitto
d4bebd18e8 update seed and fix conditional order 2024-05-21 17:21:13 -03:00
Zamitto
b3480eb70b simplify events 2024-05-21 17:04:06 -03:00
Zamitto
e3da07141c hardcoding db path 2024-05-21 16:32:29 -03:00
Zamitto
7280429162 remove debug mock 2024-05-21 14:13:47 -03:00
Zamitto
0b0d2d6b10 update color for progress 2024-05-21 14:06:19 -03:00
Zamitto
551b0b3c91 removes percentage text; uses png without background; 2024-05-21 14:02:27 -03:00
Zamitto
d20d3d0b77 refactor to use html5 progress tag 2024-05-21 13:11:48 -03:00
Zamitto
a5dc101e6b update css 2024-05-21 00:02:23 -03:00
Zamitto
8957b1b1dd Merge branch 'main' into feat/splash-screen-for-updates 2024-05-20 22:43:20 -03:00
Zamitto
42626efd05 Merge pull request #469 from hydralauncher/chore/update-package-name
change package name to hydralauncher
2024-05-20 20:28:39 -03:00
Zamitto
69828e6926 revert package.json to original 2024-05-20 19:03:50 -03:00
Zamitto
9c28a6e9d0 rename function 2024-05-20 19:03:19 -03:00
Zamitto
a817a26be1 smoother way to show main window after splash 2024-05-20 19:03:19 -03:00
Zamitto
0b33cb339c update to hydralauncher 2024-05-20 18:53:26 -03:00
Zamitto
41908433c5 change package name linux to hydra-launcher
# Conflicts:
#	package.json
2024-05-20 16:40:33 -03:00
Zamitto
fab15ccded Merge branch 'main' into teste-locale2 2024-05-20 16:39:33 -03:00
Zamitto
5667c813d9 feat: add strings to translations file 2024-05-20 16:06:47 -03:00
Zamitto
39ceb38ecd Merge branch 'main' into feat/splash-screen-for-updates 2024-05-20 15:54:18 -03:00
Zamitto
06f58291f7 Merge pull request #467 from hydralauncher/chore/update-python-link-on-readmes
update python version on README links
2024-05-20 15:53:58 -03:00
Zamitto
07cfbab77f remove un needed changes 2024-05-20 15:52:40 -03:00
Zamitto
3670c4f0ff update python version on README 2024-05-20 15:43:02 -03:00
Zamitto
485d396b91 fix for build 2024-05-20 15:12:55 -03:00
Zamitto
5aa6c72594 update python version on README 2024-05-20 14:58:28 -03:00
Zamitto
6fdb591784 refactor events 2024-05-20 14:57:23 -03:00
Zamitto
ae6edaa058 set current logger to log auto update 2024-05-20 13:57:42 -03:00
Zamitto
3062b88f4a feat: progress bar and trying to animate 2024-05-20 13:45:55 -03:00
Zamitto
f90dd82cbd feat: remove auto play 2024-05-20 13:17:19 -03:00
Zamitto
a8f072dd1b Merge branch 'main' into feat/splash-screen-for-updates
# Conflicts:
#	package.json
2024-05-20 12:22:11 -03:00
Zamitto
05a1cf9343 Merge pull request #465 from hydralauncher/chore/bumps-version
bump version to 1.2.3
2024-05-20 11:07:59 -03:00
Chubby Granny Chaser
da607fe741 fix: fixing downloads screen 2024-05-20 15:07:52 +01:00
Zamitto
399d47ca9d bump version to 1.2.3 2024-05-20 11:03:50 -03:00
Zamitto
317fe48927 Merge pull request #455 from v1mkss/polish
Adding a readme file for the Polish language
2024-05-19 23:34:06 -03:00
Chubby Granny Chaser
4941709296 feat: adding aria2 2024-05-20 02:21:11 +01:00
v1mkss
20bf7009e5 A small fix 2024-05-19 21:39:15 +03:00
v1mkss
a01a105afa Adding Polish readme 2024-05-19 21:35:59 +03:00
Zamitto
33c6203f29 prevent duplicate windows when running on dev 2024-05-19 14:56:06 -03:00
Zamitto
b9f5baef34 silent install and add more info 2024-05-19 14:39:44 -03:00
Zamitto
811878e364 feat: events working 2024-05-19 14:18:32 -03:00
Zamitto
3b17953a82 create electron event 2024-05-19 01:43:47 -03:00
Zamitto
484e79dba3 WIP: showing splash screen 2024-05-18 22:45:26 -03:00
Zamitto
7eee942dcb Merge branch 'main' into feat/splash-screen-for-updates 2024-05-18 22:28:54 -03:00
Chubby Granny Chaser
a89e6760da Merge pull request #442 from hydralauncher/feature/steam-client-icon-cache
feat: adding steam client icon cache
2024-05-18 23:31:42 +01:00
Zamitto
e2257d7ca5 Merge branch 'main' into feat/splash-screen-for-updates 2024-05-18 19:25:38 -03:00
Zamitto
be13ecc5aa fix: sanity check in case repack is null 2024-05-18 19:05:55 -03:00
Chubby Granny Chaser
5b864367e8 fix: adding alphabetical sort to steam games 2024-05-18 23:01:04 +01:00
Chubby Granny Chaser
0ccaed8d55 ci: adding portable to artifact 2024-05-18 22:26:02 +01:00
Chubby Granny Chaser
0491124a7d ci: adding portable to artifact 2024-05-18 22:24:35 +01:00
Chubby Granny Chaser
ac4956c25b ci: changing order of git hooks 2024-05-18 22:09:13 +01:00
Chubby Granny Chaser
c7920fe9f7 ci: changing order of git hooks 2024-05-18 22:08:52 +01:00
Chubby Granny Chaser
f31ae47ab2 Merge pull request #439 from hydralauncher/feat/replace-disable-hardware-acceleration-with-no-sandbox
feat: replace disableHardwareAcceleration with --no-sandbox
2024-05-18 22:08:31 +01:00
Chubby Granny Chaser
3f305eaca0 Merge branch 'feature/steam-client-icon-cache' of github.com:hydralauncher/hydra into feature/steam-client-icon-cache 2024-05-18 22:02:59 +01:00
Chubby Granny Chaser
9290d94e2a ci: changing order of git hooks 2024-05-18 22:02:06 +01:00
Chubby Granny Chaser
756cf19c23 ci: changing order of git hooks 2024-05-18 22:01:18 +01:00
Chubby Granny Chaser
7a13ecd2b7 Merge branch 'main' into feature/steam-client-icon-cache 2024-05-18 22:00:08 +01:00
Chubby Granny Chaser
19f022e0f6 feat: adding steam client icon cache 2024-05-18 21:55:12 +01:00
Zamitto
026729e8c9 Merge branch 'main' into feat/replace-disable-hardware-acceleration-with-no-sandbox 2024-05-18 16:36:40 -03:00
Zamitto
7f918aaaca Merge pull request #440 from hydralauncher/revert-270-feature/better-repack-modal
Revert "More friendly experience when presenting repack options"
2024-05-18 16:29:53 -03:00
Zamitto
d98a01df2f creares release workflow and change build workflow to run on PR 2024-05-18 16:28:44 -03:00
Zamitto
2cb76a9ad4 Revert "More friendly experience when presenting repack options" 2024-05-18 16:26:16 -03:00
Zamitto
250c6901b7 feat: replace disableHardwareAcceleration with --no-sandbox 2024-05-18 15:04:54 -03:00
Zamitto
e5fec91062 Merge pull request #270 from ChristoferMendes/feature/better-repack-modal
More friendly experience when presenting repack options
2024-05-18 15:00:50 -03:00
Zamitto
6fd38df79e Merge branch 'main' into feature/better-repack-modal 2024-05-18 14:57:54 -03:00
Zamitto
d924c64710 Update web-torrent-data.ts
Small adjustment to webTorrentData logic
2024-05-18 14:55:56 -03:00
PIRADATA
6ae5f92ba9 Merge branch 'main' into teste-locale2 2024-05-18 00:30:36 -03:00
piradata
4e1927a7eb missing ";" 2024-05-18 00:29:23 -03:00
piradata
1d4547c2c8 apply suggestions 2024-05-18 00:28:59 -03:00
Zamitto
10943408e9 messing around and testing 2024-05-18 00:13:43 -03:00
ChristoferMendes
d8937b3672 Merge branch 'main' into feature/better-repack-modal 2024-05-17 08:27:47 -03:00
ChristoferMendes
38d652c507 Merge branch 'main' into feature/better-repack-modal 2024-05-16 08:41:22 -03:00
ChristoferMendes
539f444ab5 feat(webTorrentHealth): update recursive function with a loop 2024-05-16 08:34:42 -03:00
piradata
653afa7210 linter 2024-05-16 02:52:10 -03:00
piradata
72aa822655 add language selection menu 2024-05-16 02:51:51 -03:00
ChristoferMendes
7a2b693397 refactor: Improve error handling and retry logic in getSeedersAndPeers function 2024-05-15 20:06:53 -03:00
Zamitto
04a5dbb71d Merge branch 'main' into feature/better-repack-modal 2024-05-15 17:48:42 -03:00
ChristoferMendes
7bdf7f8c2d Merge remote-tracking branch 'upstream/main' into feature/better-repack-modal 2024-05-14 15:36:26 -03:00
Daniel Freitas
8f3306fd87 Merge branch 'main' into linux-install 2024-05-13 22:41:49 -03:00
ChristoferMendes
95e802372f Merge branch 'main' of github.com:ChristoferMendes/hydra into feature/better-repack-modal 2024-05-13 22:31:45 -03:00
ChristoferMendes
9c261551c3 feat: Add toCapitalize function for capitalizing strings 2024-05-13 22:28:34 -03:00
ChristoferMendes
4e9e9deec1 style: Remove unnecessary whitespace and newline in translation.json 2024-05-13 22:15:44 -03:00
ChristoferMendes
1c56227fa3 feat(searcher): Add repacker check to isMultiplayerRepack function 2024-05-13 22:14:38 -03:00
Zamitto
81ea790d73 Merge branch 'main' into feature/better-repack-modal 2024-05-13 19:04:20 -03:00
Daniel Freitas
3560295416 Merge branch 'main' into linux-install 2024-05-13 08:58:15 -03:00
ChristoferMendes
0d089bb5c4 Merge branch 'main' into feature/better-repack-modal 2024-05-13 08:27:31 -03:00
Hydra
d99bb7e46b Merge branch 'main' into linux-install 2024-05-13 10:49:11 +01:00
Hydra
ec77de5e1d Merge branch 'main' into linux-install 2024-05-13 10:44:13 +01:00
Christofer Luiz dos Santos Mendes
82edc6d438 Merge branch 'main' into feature/better-repack-modal 2024-05-12 22:40:08 -03:00
ChristoferMendes
26db88966f refactor: Update getRepackLanguageBasedOnRepacker function parameters and use user preferences 2024-05-12 21:54:03 -03:00
ChristoferMendes
f2af65d4cd style: Update formatting in various files 2024-05-12 21:40:30 -03:00
ChristoferMendes
e6b62399f7 fix: solve merge conflict markers 2024-05-12 21:35:10 -03:00
ChristoferMendes
713392ee29 style: Remove unnecessary code in translation.json 2024-05-12 21:34:23 -03:00
ChristoferMendes
c7da83cae1 Merge branch 'main' into feature/better-repack-modal 2024-05-12 21:33:12 -03:00
ChristoferMendes
f9343ca0c2 style: Remove lucide-react icons and replace them with SVG components 2024-05-12 21:29:06 -03:00
ChristoferMendes
6053b7cd67 refactor: Remove unused "repack_language_code" translations from multiple locale files 2024-05-12 21:20:56 -03:00
ChristoferMendes
0333282915 refactor: Update import paths and improve async function in get-magnet-health 2024-05-12 21:16:15 -03:00
ChristoferMendes
23ab98294a feat: Add webtorrent-health package to dependencies 2024-05-12 21:06:05 -03:00
ChristoferMendes
27bff9d2e6 fix: Replace getMagnetData with getMagnetHealth in references and implementations 2024-05-12 21:06:02 -03:00
ChristoferMendes
6b9f902b2c feat: Replace OpenWebTorrent service with WebTorrentData service 2024-05-12 21:05:46 -03:00
Hydra
a65ec67820 Merge branch 'main' into linux-install 2024-05-13 00:58:06 +01:00
ChristoferMendes
4616f69a29 refactor: Update function names in repack tracker to use 'savePage' instead of 'saveRepacks' 2024-05-12 20:53:58 -03:00
ChristoferMendes
02417dda40 style: update tag component CSS formatting 2024-05-12 20:52:09 -03:00
ChristoferMendes
5f468d5b2e style: Update translation keys for "multi_player" to "multiplayer" in multiple language files 2024-05-12 20:50:55 -03:00
ChristoferMendes
0aa36c5a57 fix: update tag styles to match variables 2024-05-12 20:50:51 -03:00
ChristoferMendes
2f0cd24fb8 refactor: Improve the structure of useMagnetData function 2024-05-12 14:25:13 -03:00
ChristoferMendes
dce700b189 Merge branch 'main' into feature/better-repack-modal 2024-05-12 14:23:22 -03:00
ChristoferMendes
e55d41889d refactor: Simplify code by removing unnecessary try-catch block 2024-05-12 14:20:17 -03:00
Daniel Freitas
ac18b5388a Merge branch 'main' into linux-install 2024-05-12 10:23:42 -03:00
Daniel Freitas
de4307e2a5 fix: game installing do not reach linux steps 2024-05-11 22:19:12 -03:00
ChristoferMendes
8f6922fc8a feat: Add multi-language and multiplayer tags in RepacksModal 2024-05-10 12:32:50 -03:00
ChristoferMendes
ff6a204686 feat: Add getMagnetData function to global declaration 2024-05-10 12:17:53 -03:00
ChristoferMendes
92f35bad9f refactor: Update function calls from savePage to saveRepacks in multiple files 2024-05-10 12:14:23 -03:00
ChristoferMendes
b84df28f39 feat: Add openWebTorrent service for fetching seeders and peers 2024-05-10 12:12:45 -03:00
ChristoferMendes
09bd7dcc36 feat: Add lucide-react package to dependencies 2024-05-10 12:11:30 -03:00
ChristoferMendes
06ed5e07bf feat: Add new functionality to display repack language and seeders/peers in RepacksModal 2024-05-10 12:10:43 -03:00
ChristoferMendes
ada218cea1 feat: Add functions for multiplayer repack, multi-language support, and repack language based on repacker 2024-05-10 12:10:28 -03:00
ChristoferMendes
2662ba3875 style: Add styling for tags container in repacks modal 2024-05-10 12:10:22 -03:00
ChristoferMendes
58693fdb00 feat: Add SeedersAndPeers component with skeleton loader 2024-05-10 12:10:08 -03:00
ChristoferMendes
1872ff1d24 feat: Add tooltip component with styles and visibility logic 2024-05-10 12:09:59 -03:00
ChristoferMendes
08c4906465 feat: Add new Tag component with styling for tags 2024-05-10 12:09:44 -03:00
ChristoferMendes
a0344ea491 feat(events): Add new event for getting magnet data 2024-05-10 11:43:36 -03:00
ChristoferMendes
02c4f0a0e6 feat: Add repack language codes to translation files 2024-05-10 11:42:53 -03:00
287 changed files with 12576 additions and 6249 deletions

View File

@@ -1,4 +1,3 @@
MAIN_VITE_STEAMGRIDDB_API_KEY=YOUR_API_KEY
MAIN_VITE_ONLINEFIX_USERNAME=YOUR_USERNAME
MAIN_VITE_ONLINEFIX_PASSWORD=YOUR_PASSWORD
MAIN_VITE_API_URL=API_URL
MAIN_VITE_SENTRY_DSN=YOUR_SENTRY_DSN

View File

@@ -1,8 +1,6 @@
name: Build
on:
push:
branches: main
on: pull_request
jobs:
build:
@@ -39,18 +37,22 @@ jobs:
if: matrix.os == 'ubuntu-latest'
run: yarn build:linux
env:
MAIN_VITE_STEAMGRIDDB_API_KEY: ${{ secrets.STEAMGRIDDB_API_KEY }}
MAIN_VITE_ONLINEFIX_USERNAME: ${{ secrets.ONLINEFIX_USERNAME }}
MAIN_VITE_ONLINEFIX_PASSWORD: ${{ secrets.ONLINEFIX_PASSWORD }}
MAIN_VITE_API_URL: ${{ vars.MAIN_VITE_API_URL }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
MAIN_VITE_SENTRY_DSN: ${{ vars.MAIN_VITE_SENTRY_DSN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Build Windows
if: matrix.os == 'windows-latest'
run: yarn build:win
env:
MAIN_VITE_STEAMGRIDDB_API_KEY: ${{ secrets.STEAMGRIDDB_API_KEY }}
MAIN_VITE_ONLINEFIX_USERNAME: ${{ secrets.ONLINEFIX_USERNAME }}
MAIN_VITE_ONLINEFIX_PASSWORD: ${{ secrets.ONLINEFIX_PASSWORD }}
MAIN_VITE_API_URL: ${{ vars.MAIN_VITE_API_URL }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
MAIN_VITE_SENTRY_DSN: ${{ vars.MAIN_VITE_SENTRY_DSN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create artifact
@@ -58,7 +60,8 @@ jobs:
with:
name: Build-${{ matrix.os }}
path: |
dist/*.exe
dist/win-unpacked/**
dist/*-portable.exe
dist/*.zip
dist/*.dmg
dist/*.deb
@@ -66,21 +69,3 @@ jobs:
dist/*.tar.gz
dist/*.yml
dist/*.blockmap
- name: Release
uses: softprops/action-gh-release@v1
with:
draft: true
files: |
dist/*.exe
dist/*.zip
dist/*.dmg
dist/*.AppImage
dist/*.snap
dist/*.deb
dist/*.rpm
dist/*.tar.gz
dist/*.yml
dist/*.blockmap
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -1,6 +1,6 @@
name: Lint
on: [pull_request]
on: pull_request
jobs:
lint:

76
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,76 @@
name: Release
on:
push:
branches: main
jobs:
build:
strategy:
matrix:
os: [windows-latest, ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Check out Git repository
uses: actions/checkout@v4
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 20.11.1
- name: Install dependencies
run: yarn
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: 3.9
- name: Install dependencies
run: pip install -r requirements.txt
- name: Build with cx_Freeze
run: python torrent-client/setup.py build
- name: Build Linux
if: matrix.os == 'ubuntu-latest'
run: yarn build:linux
env:
MAIN_VITE_ONLINEFIX_USERNAME: ${{ secrets.ONLINEFIX_USERNAME }}
MAIN_VITE_ONLINEFIX_PASSWORD: ${{ secrets.ONLINEFIX_PASSWORD }}
MAIN_VITE_API_URL: ${{ vars.MAIN_VITE_API_URL }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
MAIN_VITE_SENTRY_DSN: ${{ vars.MAIN_VITE_SENTRY_DSN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Build Windows
if: matrix.os == 'windows-latest'
run: yarn build:win
env:
MAIN_VITE_ONLINEFIX_USERNAME: ${{ secrets.ONLINEFIX_USERNAME }}
MAIN_VITE_ONLINEFIX_PASSWORD: ${{ secrets.ONLINEFIX_PASSWORD }}
MAIN_VITE_API_URL: ${{ vars.MAIN_VITE_API_URL }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
MAIN_VITE_SENTRY_DSN: ${{ vars.MAIN_VITE_SENTRY_DSN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Release
uses: softprops/action-gh-release@v1
with:
draft: true
files: |
dist/*.exe
dist/*.zip
dist/*.dmg
dist/*.AppImage
dist/*.snap
dist/*.deb
dist/*.rpm
dist/*.tar.gz
dist/*.yml
dist/*.blockmap
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

5
.gitignore vendored
View File

@@ -1,6 +1,7 @@
.vscode
node_modules
hydra-download-manager
hydra-download-manager/
aria2/
fastlist.exe
__pycache__
dist
@@ -9,4 +10,4 @@ out
*.log*
.env
.vite
sentry.properties

View File

@@ -1,2 +1 @@
yarn lint
yarn typecheck
yarn format

View File

@@ -1 +1,2 @@
yarn format
yarn lint
yarn typecheck

View File

@@ -1,5 +1,6 @@
out
dist
seeds
pnpm-lock.yaml
LICENSE.md
tsconfig.json

View File

@@ -18,6 +18,8 @@
[![ru](https://img.shields.io/badge/lang-ru-yellow.svg)](README.ru.md)
[![uk-UA](https://img.shields.io/badge/lang-uk--UA-blue)](README.uk-UA.md)
[![be](https://img.shields.io/badge/lang-be-orange)](README.be.md)
[![es](https://img.shields.io/badge/lang-es-red)](README.es.md)
[![fr](https://img.shields.io/badge/lang-fr-blue)](README.fr.md)
![Hydra Catalogue](./docs/screenshot.png)
@@ -119,7 +121,7 @@ yarn
### Усталёўка Python 3.9
Упэўніцеся, што ў вас усталяваны Python 3.9 на вашым кампутары. Вы можаце загрузіць і ўсталяваць яго з [python.org](https://www.python.org/downloads/release/python-3919/).
Упэўніцеся, што ў вас усталяваны Python 3.9 на вашым кампутары. Вы можаце загрузіць і ўсталяваць яго з [python.org](https://www.python.org/downloads/release/python-3913/).
### Усталёўка залежнасцяў Python

183
README.es.md Normal file
View File

@@ -0,0 +1,183 @@
<br>
<div align="center">
[<img src="./resources/icon.png" width="144"/>](https://hydralauncher.site)
<h1 align="center">Hydra Launcher</h1>
<p align="center">
<strong>Hydra es un launcher de juegos con su propio cliente de bittorrent y gestor propio de repacks.</strong>
</p>
[![build](https://img.shields.io/github/actions/workflow/status/hydralauncher/hydra/build.yml)](https://github.com/hydralauncher/hydra/actions)
[![release](https://img.shields.io/github/package-json/v/hydralauncher/hydra)](https://github.com/hydralauncher/hydra/releases)
[![be](https://img.shields.io/badge/lang-be-orange)](README.be.md)
[![pl](https://img.shields.io/badge/lang-pl-white)](README.pl.md)
[![pt-BR](https://img.shields.io/badge/lang-pt--BR-green.svg)](README.pt-BR.md)
[![ru](https://img.shields.io/badge/lang-ru-yellow.svg)](README.ru.md)
[![uk-UA](https://img.shields.io/badge/lang-uk--UA-blue)](README.uk-UA.md)
[![en](https://img.shields.io/badge/lang-en-red.svg)](README.md)
[![fr](https://img.shields.io/badge/lang-fr-blue)](README.fr.md)
![Hydra Catalogue](./docs/screenshot.png)
</div>
## Tabla de Contenidos
- [Acerca de](#acerca-de)
- [Características](#caracteristicas)
- [Instalación](#Instalacion)
- [Contribuir](#contribuir)
- [Únete a nuestro Telegram](#unete-a-nuestro-telegram)
- [Haz un fork y clona tu repositorio](#haz-un-fork-y-clona-tu-repositorio)
- [Maneras en las que puedes contribuir](#maneras-en-las-que-puedes-contribuir)
- [Estructura del proyecto](#estructura-del-proyecto)
- [Compilar desde el código fuente](#compilar-desde-el-código-fuente)
- [Instalar Node.js](#instalar-nodejs)
- [Instalar Yarn](#instalar-yarn)
- [Instalar Dependencias de Node](#instalar-dependencias-de-node)
- [Instalar Python 3.9](#instalar-python-39)
- [Instalar Dependencias de Python](#Instalar-dependencias-de-python)
- [Variables del Entorno](#variables-del-entorno)
- [Ejecución](#ejecucion)
- [Compilación](#compilacion)
- [Compilar el cliente de bittorrent](#compilar-el-cliente-de-bittorrent)
- [Compilar la aplicación Electron](#compilar-la-aplicacion-electron)
- [Colaboradores](#colaboradores)
## Acerca de
**Hydra** es un **Launcher de Juegos** con su propio **Cliente Bittorrent** y **autogestor de Repacks**.
<br>
El launcher está escrito en TypeScript (Electron) y Python, el cuál se encarga del sistema de torrent usando libtorrent.
## Caracteristicas
- Buscador e instalador autogestionado de repacks a través de las páginas más confiables en él [Megahilo](https://www.reddit.com/r/Piracy/wiki/megathread/)
- Cliente propio de bittorrent integrado
- Integración de How Long To Beat (HLTB) en la página del juego
- Customización de rutas de descargas
- Notificaciones en actualizaciones a listas de repacks
- Soporte a Windows y Linux
- En constante actualización
- Y mucho más ...
## Instalacion
Sigue los pasos de abajo para instalar:
1. Descarga la última versión de Hydra desde la página de [Releases](https://github.com/hydralauncher/hydra/releases/latest).
- Descarga solo el .exe si quieres instalar Hydra en Windows.
- Descarga el .deb o .rpm o .zip si quieres instalar Hydra en Linux. (Depende de tu distro de Linux)
2. Ejecuta el archivo descargado.
3. ¡Disfruta de Hydra!
## <a name="contribuir"> Contribuir
### <a name="unete-a-nuestro-telegram"></a> Unete a nuestro Telegram
Puedes unirte a nuestra conversación y discusiones en nuestro canal de [Telegram](https://t.me/hydralauncher).
### Haz un fork y clona tu repositorio
1. Realiza un fork del repositorio [(Haz click acá para hacer un fork ahora)](https://github.com/hydralauncher/hydra/fork)
2. Clona el código forkeado `git clone https://github.com/tu_nombredeusuario/hydra`
3. Crea una nueva rama
4. Sube tus commits
5. Envía nuevas solicitudes de pull
### Maneras en las que puedes contribuir
- Traducción: Queremos que Hydra esté disponible para todas las personas que sean posible. Siéntete libre de ayudarnos a traducirlo a nuevos lenguajes o actualizar y mejorar las ya disponibles en Hydra.
- Código: Hydra está hecho con Typescript, Electron y un poquito de Python. Si quieres contribuir, ¡únete a nuestro [Telegram](https://t.me/hydralauncher)!
### Estructura del proyecto
- torrent-client: Usamos libtorrent, una librería de Python que se encarga de manejar las descargas torrent
- src/renderer: El UI de la aplicación
- src/main: El resto de la lógica va acá.
## Compilar desde el código fuente
### Instalar Node.js
Asegúrate que tienes Node.js instalado en tú máquina. Si no es así, puedes descargarlo e instalarlo desde [nodejs.org](https://nodejs.org/).
### Instalar Yarn
Yarn es un gestor de paquetes para Node.js. Si no tienes aún instalado Yarn todavía, puedes hacerlo siguiendo las instrucciones en [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/).
### Instalar Dependencias de Node
Dirígete hasta el directorio del proyecto e instala las dependencias de Node usando Yarn:
```bash
cd hydra
yarn
```
### Instalar Python 3.9
Asegúrate que tienes Python 3.9 instalado en tu máquina. Puedes descargarlo e instalarlo desde [python.org](https://www.python.org/downloads/release/python-3913/).
### Instalar Dependencias de Python
Instala las dependencias de Python requeridas usando pip:
```bash
pip install -r requirements.txt
```
## Variables del Entorno
Necesitas una llave API de SteamGridDB para así poder obtener los íconos de los juegos en la instalación.
Si quieres también tener los repacks de onlinefix, necesitarás añadir tus credenciales al .env
Una vez que los tengas, puedes copiar o renombrar el archivo `.env.example` cómo `.env` y colocarlo en `STEAMGRIDDB_API_KEY`, `ONLINEFIX_USERNAME`, `ONLINEFIX_PASSWORD`.
## Ejecucion
Una vez que tengas todas las cosas listas, puedes ejecutar el siguiente comando para así iniciar el proceso de Electron y el cliente de bittorrent:
```bash
yarn dev
```
## Compilacion
### Compilar el cliente de bittorrent
Crea el cliente bittorrent usando este comando:
```bash
python torrent-client/setup.py build
```
### Compilar la aplicacion Electron
Crea la aplicación de Electron usando este comando:
En Windows:
```bash
yarn build:win
```
En Linux:
```bash
yarn build:linux
```
## Colaboradores
<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
</a>
## Licencia
Hydra está licenciado bajo la [MIT License](LICENSE).

183
README.fr.md Normal file
View File

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

View File

@@ -13,11 +13,13 @@
[![build](https://img.shields.io/github/actions/workflow/status/hydralauncher/hydra/build.yml)](https://github.com/hydralauncher/hydra/actions)
[![release](https://img.shields.io/github/package-json/v/hydralauncher/hydra)](https://github.com/hydralauncher/hydra/releases)
[![be](https://img.shields.io/badge/lang-be-orange)](README.be.md)
[![pl](https://img.shields.io/badge/lang-pl-white)](README.pl.md)
[![pt-BR](https://img.shields.io/badge/lang-pt--BR-green.svg)](README.pt-BR.md)
[![en](https://img.shields.io/badge/lang-en-red.svg)](README.md)
[![ru](https://img.shields.io/badge/lang-ru-yellow.svg)](README.ru.md)
[![uk-UA](https://img.shields.io/badge/lang-uk--UA-blue)](README.uk-UA.md)
[![be](https://img.shields.io/badge/lang-be-orange)](README.be.md)
[![es](https://img.shields.io/badge/lang-es-red)](README.es.md)
[![fr](https://img.shields.io/badge/lang-fr-blue)](README.fr.md)
![Hydra Catalogue](./docs/screenshot.png)
@@ -119,7 +121,7 @@ yarn
### Install Python 3.9
Ensure you have Python 3.9 installed on your machine. You can download and install it from [python.org](https://www.python.org/downloads/release/python-3919/).
Ensure you have Python 3.9 installed on your machine. You can download and install it from [python.org](https://www.python.org/downloads/release/python-3913/).
### Install Python Dependencies
@@ -134,7 +136,7 @@ pip install -r requirements.txt
You'll need an SteamGridDB API Key in order to fetch the game icons on installation.
If you want to have onlinefix as a repacker you'll need to add your credentials to the .env
Once you have it, you can copy or rename the `.env.example` file to `.env`and put it on`STEAMGRIDDB_API_KEY`, `ONLINEFIX_USERNAME`, `ONLINEFIX_PASSWORD`.
Once you have it, you can copy or rename the `.env.example` file to `.env` and put it on`STEAMGRIDDB_API_KEY`, `ONLINEFIX_USERNAME`, `ONLINEFIX_PASSWORD`.
## Running

187
README.pl.md Normal file
View File

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

View File

@@ -13,11 +13,13 @@
[![build](https://img.shields.io/github/actions/workflow/status/hydralauncher/hydra/build.yml)](https://github.com/hydralauncher/hydra/actions)
[![release](https://img.shields.io/github/package-json/v/hydralauncher/hydra)](https://github.com/hydralauncher/hydra/releases)
[![pt-BR](https://img.shields.io/badge/lang-pt--BR-green.svg)](README.pt-BR.md)
[![be](https://img.shields.io/badge/lang-be-orange)](README.be.md)
[![en](https://img.shields.io/badge/lang-en-red.svg)](README.md)
[![pl](https://img.shields.io/badge/lang-pl-white)](README.pl.md)
[![ru](https://img.shields.io/badge/lang-ru-yellow.svg)](README.ru.md)
[![uk-UA](https://img.shields.io/badge/lang-uk--UA-blue)](README.uk-UA.md)
[![be](https://img.shields.io/badge/lang-be-orange)](README.be.md)
[![es](https://img.shields.io/badge/lang-es-red)](README.es.md)
[![fr](https://img.shields.io/badge/lang-fr-blue)](README.fr.md)
![Hydra Catalogue](./docs/screenshot.png)
@@ -119,7 +121,7 @@ yarn
### <a name="install-python-39"></a> Instale Python 3.9
Certifique-se de ter o Python 3.9 instalado em sua máquina. Você pode baixá-lo e instalá-lo em [python.org](https://www.python.org/downloads/release/python-3919/).
Certifique-se de ter o Python 3.9 instalado em sua máquina. Você pode baixá-lo e instalá-lo em [python.org](https://www.python.org/downloads/release/python-3913/).
### <a name="install-python-dependencies"></a> Instale Python Dependencies

View File

@@ -13,11 +13,13 @@
[![build](https://img.shields.io/github/actions/workflow/status/hydralauncher/hydra/build.yml)](https://github.com/hydralauncher/hydra/actions)
[![release](https://img.shields.io/github/package-json/v/hydralauncher/hydra)](https://github.com/hydralauncher/hydra/releases)
[![pt-BR](https://img.shields.io/badge/lang-pt--BR-green.svg)](README.pt-BR.md)
[![en](https://img.shields.io/badge/lang-en-red.svg)](README.md)
[![ru](https://img.shields.io/badge/lang-ru-yellow.svg)](README.ru.md)
[![uk-UA](https://img.shields.io/badge/lang-uk--UA-blue)](README.uk-UA.md)
[![be](https://img.shields.io/badge/lang-be-orange)](README.be.md)
[![en](https://img.shields.io/badge/lang-en-red.svg)](README.md)
[![pl](https://img.shields.io/badge/lang-pl-white)](README.pl.md)
[![pt-BR](https://img.shields.io/badge/lang-pt--BR-green.svg)](README.pt-BR.md)
[![uk-UA](https://img.shields.io/badge/lang-uk--UA-blue)](README.uk-UA.md)
[![es](https://img.shields.io/badge/lang-es-red)](README.es.md)
[![fr](https://img.shields.io/badge/lang-fr-blue)](README.fr.md)
![Hydra Catalogue](./docs/screenshot.png)
@@ -119,7 +121,7 @@ yarn
### Установка Python 3.9
Убедитесь, что у вас установлен Python 3.9 на вашем компьютере. Вы можете загрузить и установить его с [python.org](https://www.python.org/downloads/release/python-3919/).
Убедитесь, что у вас установлен Python 3.9 на вашем компьютере. Вы можете загрузить и установить его с [python.org](https://www.python.org/downloads/release/python-3913/).
### Установка зависимостей Python

View File

@@ -13,11 +13,13 @@
[![build](https://img.shields.io/github/actions/workflow/status/hydralauncher/hydra/build.yml)](https://github.com/hydralauncher/hydra/actions)
[![release](https://img.shields.io/github/package-json/v/hydralauncher/hydra)](https://github.com/hydralauncher/hydra/releases)
[![pt-BR](https://img.shields.io/badge/lang-pt--BR-green.svg)](README.pt-BR.md)
[![en](https://img.shields.io/badge/lang-en-red.svg)](README.md)
[![ru](https://img.shields.io/badge/lang-ru-yellow.svg)](README.ru.md)
[![uk-UA](https://img.shields.io/badge/lang-uk--UA-blue)](README.uk-UA.md)
[![be](https://img.shields.io/badge/lang-be-orange)](README.be.md)
[![en](https://img.shields.io/badge/lang-en-red.svg)](README.md)
[![pl](https://img.shields.io/badge/lang-pl-white)](README.pl.md)
[![pt-BR](https://img.shields.io/badge/lang-pt--BR-green.svg)](README.pt-BR.md)
[![ru](https://img.shields.io/badge/lang-ru-yellow.svg)](README.ru.md)
[![es](https://img.shields.io/badge/lang-es-red)](README.es.md)
[![fr](https://img.shields.io/badge/lang-fr-blue)](README.fr.md)
![Hydra Catalogue](./docs/screenshot.png)
@@ -123,7 +125,7 @@ yarn
### Встановіть Python 3.9
Переконайтеся, що на вашому комп'ютері встановлено Python 3.9. Ви можете завантажити та встановити його з [python.org](https://www.python.org/downloads/release/python-3919/).
Переконайтеся, що на вашому комп'ютері встановлено Python 3.9. Ви можете завантажити та встановити його з [python.org](https://www.python.org/downloads/release/python-3913/).
### Встановіть Python залежності

Binary file not shown.

BIN
build/icons/512x512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

View File

@@ -3,9 +3,10 @@ productName: Hydra
directories:
buildResources: build
extraResources:
- aria2
- hydra-download-manager
- hydra.db
- fastlist.exe
- seeds
- from: node_modules/create-desktop-shortcuts/src/windows.vbs
files:
- "!**/.vscode/*"
- "!src/*"
@@ -17,13 +18,18 @@ asarUnpack:
- resources/**
win:
executableName: Hydra
requestedExecutionLevel: requireAdministrator
target:
- nsis
- portable
nsis:
artifactName: ${name}-${version}-setup.${ext}
shortcutName: ${productName}
uninstallDisplayName: ${productName}
createDesktopShortcut: always
oneClick: false
allowToChangeInstallationDirectory: true
portable:
artifactName: ${name}-${version}-portable.${ext}
mac:
entitlementsInherit: build/entitlements.mac.plist
extendInfo:
@@ -39,8 +45,11 @@ linux:
- AppImage
- snap
- deb
- rpm
maintainer: electronjs.org
category: Utility
category: Game
mimeTypes:
- x-scheme-handler/hydralauncher
appImage:
artifactName: ${name}-${version}.${ext}
npmRebuild: false

View File

@@ -6,8 +6,16 @@ import {
externalizeDepsPlugin,
} from "electron-vite";
import react from "@vitejs/plugin-react";
import { sentryVitePlugin } from "@sentry/vite-plugin";
import { vanillaExtractPlugin } from "@vanilla-extract/vite-plugin";
import svgr from "vite-plugin-svgr";
const sentryPlugin = sentryVitePlugin({
authToken: process.env.SENTRY_AUTH_TOKEN,
org: "hydra-launcher",
project: "hydra-launcher",
});
export default defineConfig(({ mode }) => {
loadEnv(mode);
@@ -27,7 +35,7 @@ export default defineConfig(({ mode }) => {
"@shared": resolve("src/shared"),
},
},
plugins: [externalizeDepsPlugin(), swcPlugin()],
plugins: [externalizeDepsPlugin(), swcPlugin(), sentryPlugin],
},
preload: {
plugins: [externalizeDepsPlugin()],
@@ -43,7 +51,7 @@ export default defineConfig(({ mode }) => {
"@shared": resolve("src/shared"),
},
},
plugins: [svgr(), react(), vanillaExtractPlugin()],
plugins: [svgr(), react(), vanillaExtractPlugin(), sentryPlugin],
},
};
});

BIN
hydra.db

Binary file not shown.

View File

@@ -1,10 +1,9 @@
{
"name": "hydra",
"version": "1.2.2",
"name": "hydralauncher",
"version": "2.0.2",
"description": "Hydra",
"main": "./out/main/index.js",
"author": "Los Broxas",
"homepage": "https://hydralauncher.site",
"repository": {
"type": "git",
"url": "https://github.com/hydralauncher/hydra.git"
@@ -39,8 +38,10 @@
"@fontsource/fira-sans": "^5.0.20",
"@primer/octicons-react": "^19.9.0",
"@reduxjs/toolkit": "^2.2.3",
"@sentry/electron": "^5.1.0",
"@vanilla-extract/css": "^1.14.2",
"@vanilla-extract/recipes": "^0.5.2",
"aria2": "^4.1.2",
"auto-launch": "^5.0.6",
"axios": "^1.6.8",
"better-sqlite3": "^9.5.0",
@@ -48,27 +49,32 @@
"classnames": "^2.5.1",
"color": "^4.2.3",
"color.js": "^1.2.0",
"create-desktop-shortcuts": "^1.11.0",
"date-fns": "^3.6.0",
"easydl": "^1.1.1",
"electron-log": "^5.1.4",
"electron-updater": "^6.1.8",
"fetch-cookie": "^3.0.1",
"file-type": "^19.0.0",
"flexsearch": "^0.7.43",
"i18next": "^23.11.2",
"i18next-browser-languagedetector": "^7.2.1",
"icojs": "^0.19.3",
"iso-639-1": "3.1.2",
"jsdom": "^24.0.0",
"jsonwebtoken": "^9.0.2",
"lodash-es": "^4.17.21",
"lottie-react": "^2.4.0",
"node-7z-archive": "^1.1.7",
"parse-torrent": "^11.0.16",
"ps-list": "^8.1.1",
"piscina": "^4.5.1",
"react-i18next": "^14.1.0",
"react-loading-skeleton": "^3.4.0",
"react-redux": "^9.1.1",
"react-router-dom": "^6.22.3",
"sudo-prompt": "^9.2.1",
"typeorm": "^0.3.20",
"user-agents": "^1.1.193",
"winston": "^3.13.0",
"yaml": "^2.4.1"
"yaml": "^2.4.1",
"zod": "^3.23.8"
},
"devDependencies": {
"@commitlint/cli": "^19.3.0",
@@ -76,17 +82,21 @@
"@electron-toolkit/eslint-config-prettier": "^2.0.0",
"@electron-toolkit/eslint-config-ts": "^1.0.1",
"@electron-toolkit/tsconfig": "^1.0.1",
"@sentry/vite-plugin": "^2.20.1",
"@swc/core": "^1.4.16",
"@types/auto-launch": "^5.0.5",
"@types/color": "^3.0.6",
"@types/jsdom": "^21.1.6",
"@types/jsonwebtoken": "^9.0.6",
"@types/lodash-es": "^4.17.12",
"@types/node": "^20.12.7",
"@types/parse-torrent": "^5.8.7",
"@types/react": "^18.2.48",
"@types/react-dom": "^18.2.18",
"@types/user-agents": "^1.0.4",
"@vanilla-extract/vite-plugin": "^4.0.7",
"@vitejs/plugin-react": "^4.2.1",
"electron": "^28.2.0",
"electron": "^30.0.9",
"electron-builder": "^24.9.1",
"electron-vite": "^2.0.0",
"eslint": "^8.56.0",

View File

@@ -1,8 +1,50 @@
const fs = require("fs");
const { default: axios } = require("axios");
const util = require("node:util");
const fs = require("node:fs");
if (process.platform === "win32") {
fs.copyFileSync(
"node_modules/ps-list/vendor/fastlist-0.3.0-x64.exe",
"fastlist.exe"
);
}
const exec = util.promisify(require("node:child_process").exec);
const downloadAria2 = async () => {
if (fs.existsSync("aria2")) {
console.log("Aria2 already exists, skipping download...");
return;
}
const file =
process.platform === "win32"
? "aria2-1.37.0-win-64bit-build1.zip"
: "aria2-1.37.0-1-x86_64.pkg.tar.zst";
const downloadUrl =
process.platform === "win32"
? `https://github.com/aria2/aria2/releases/download/release-1.37.0/${file}`
: "https://archlinux.org/packages/extra/x86_64/aria2/download/";
console.log(`Downloading ${file}...`);
const response = await axios.get(downloadUrl, { responseType: "stream" });
const stream = response.data.pipe(fs.createWriteStream(file));
stream.on("finish", async () => {
console.log(`Downloaded ${file}, extracting...`);
if (process.platform === "win32") {
await exec(`npx extract-zip ${file}`);
console.log("Extracted. Renaming folder...");
fs.renameSync(file.replace(".zip", ""), "aria2");
} else {
await exec(`tar --zstd -xvf ${file} usr/bin/aria2c`);
console.log("Extracted. Copying binary file...");
fs.mkdirSync("aria2");
fs.copyFileSync("usr/bin/aria2c", "aria2/aria2c");
fs.rmSync("usr", { recursive: true });
}
console.log(`Extracted ${file}, removing compressed downloaded file...`);
fs.rmSync(file);
});
};
downloadAria2();

View File

@@ -3,3 +3,4 @@ cx_Freeze
cx_Logging; sys_platform == 'win32'
lief; sys_platform == 'win32'
pywin32; sys_platform == 'win32'
psutil

1
seeds/steam-games.json Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,6 @@
{
"home": {
"featured": "مميّز",
"recently_added": "مضاف مؤخراً",
"trending": "شائع",
"surprise_me": "فاجئني",
"no_results": "لم يتم العثور على نتائج"
@@ -12,16 +11,10 @@
"settings": "إعدادات",
"my_library": "مكتبتي",
"downloading_metadata": "{{title}} (جارٍ تنزيل البيانات الوصفية...)",
"checking_files": "{{title}} ({{percentage}} - جارٍ التحقق من الملفات...)",
"paused": "{{title}} (متوقف)",
"downloading": "{{title}} ({{percentage}} - جارٍ التنزيل...)",
"filter": "بحث في المكتبة",
"follow_us": "تابعنا",
"home": "الرئيسية",
"discord": "انضم إلى الـDiscord الخاص بنا",
"telegram": "انضم إلى قناة Telegram الخاصة بنا",
"x": "تابعنا على X",
"github": "ساهم في مشروعنا على GitHub"
"home": "الرئيسية"
},
"header": {
"search": "ابحث عن الألعاب",
@@ -34,7 +27,6 @@
"bottom_panel": {
"no_downloads_in_progress": "لا يوجد تنزيلات جارية",
"downloading_metadata": "جارٍ تنزيل بيانات وصف {{title}}",
"checking_files": "جارٍ التحقق من ملفات {{title}}… ({{percentage}} مكتملة)",
"downloading": "جارٍ تنزيل {{title}}… ({{percentage}} مكتملة) - الانتهاء {{eta}} - {{speed}}"
},
"catalogue": {
@@ -52,22 +44,15 @@
"pause": "إيقاف",
"cancel": "إلغاء",
"remove": "إزالة",
"remove_from_list": "إزالة",
"space_left_on_disk": "{{space}} متبقية على القرص",
"eta": "الوقت المتبقي {{eta}}",
"downloading_metadata": "جاري تنزيل البيانات الوصفية...",
"checking_files": "جاري التحقق من الملفات...",
"filter": "تصفية حزم إعادة التجميع",
"requirements": "متطلبات النظام",
"minimum": "الحد الأدنى",
"recommended": "موصى به",
"no_minimum_requirements": "{{title}} لا تتوفر معلومات عن الحد الأدنى للمتطلبات",
"no_recommended_requirements": "{{title}} لا تتوفر معلومات عن المتطلبات الموصى بها",
"paused_progress": "{{progress}} (متوقف)",
"release_date": "تم الإصدار في {{date}}",
"publisher": "نشر بواسطة {{publisher}}",
"copy_link_to_clipboard": "نسخ الرابط",
"copied_link_to_clipboard": "تم نسخ الرابط",
"hours": "ساعات",
"minutes": "دقائق",
"amount_hours": "{{amount}} ساعات",
@@ -88,14 +73,6 @@
"repacks_modal_description": "اختر الحزمة التي تريد تنزيلها",
"select_folder_hint": "لتغيير المجلد الافتراضي، انتقل إلى الإعدادات",
"download_now": "تنزيل الآن",
"installation_instructions": "إرشادات التثبيت",
"installation_instructions_description": "هناك خطوات إضافية مطلوبة لتثبيت هذه اللعبة",
"online_fix_instruction": "تتطلب ألعاب OnlineFix كلمة مرور لاستخراجها. عند الحاجة، استخدم كلمة المرور التالية:",
"dodi_installation_instruction": "عند فتح مثبت DODI، اضغط على مفتاح التشغيل لأعلى <0 /> لبدء عملية التثبيت:",
"dont_show_it_again": "لا تعرضها مرة أخرى",
"copy_to_clipboard": "نسخ",
"copied_to_clipboard": "تم النسخ",
"got_it": "حسنأ",
"no_shop_details": "لم يتم استرداد تفاصيل المتجر.",
"download_options": "خيارات التنزيل",
"download_path": "مسار التنزيل",
@@ -118,24 +95,16 @@
"eta": "الوقت المتبقي {{eta}}",
"paused": "متوقفة مؤقتًا",
"verifying": "جار التحقق…",
"completed_at": "اكتمل في {{date}}",
"completed": "اكتمل",
"cancelled": "ملغي",
"download_again": "تحميل مرة أخرى",
"cancel": "إلغاء",
"filter": "تصفية الألعاب التي تم تنزيلها",
"remove": "إزالة",
"downloading_metadata": "جار تنزيل البيانات الوصفية…",
"checking_files": "جار التحقق من الملفات…",
"starting_download": "يبدأ التنزيل…",
"deleting": "جار حذف المثبت…",
"delete": "إزالة المثبت",
"remove_from_list": "إزالة",
"delete_modal_title": "هل أنت متأكد؟",
"delete_modal_description": "سيؤدي هذا إلى إزالة جميع ملفات التثبيت من جهاز الكمبيوتر الخاص بك",
"install": "تثبيت",
"real_debrid": "Real Debrid",
"torrent": "تورنت"
"install": "تثبيت"
},
"settings": {
"downloads_path": "مسار التنزيلات",
@@ -143,16 +112,13 @@
"notifications": "الإشعارات",
"enable_download_notifications": "عند اكتمال التنزيل",
"enable_repack_list_notifications": "عند إضافة حزمة جديدة",
"telemetry": "القياس عن بعد",
"telemetry_description": "تفعيل إحصائيات الاستخدام مجهولة المصدر",
"real_debrid_api_token_label": "رمز واجهة برمجة التطبيقات (API) لـReal Debrid ",
"real_debrid_api_token_label": "رمز واجهة برمجة التطبيقات (API) لـReal-Debrid ",
"quit_app_instead_hiding": "إنهاء هايدرا بدلاً من التصغير الى شريط الحالة",
"launch_with_system": "تشغيل هايدرا عند بدء تشغيل النظام",
"general": "عام",
"behavior": "السلوك",
"enable_real_debrid": "تفعيل Real Debrid ",
"real_debrid": "Real Debrid",
"real_debrid_api_token_hint": "يمكنك الحصول على مفتاح API الخاص بك هنا.",
"enable_real_debrid": "تفعيل Real-Debrid ",
"real_debrid_api_token_hint": "يمكنك الحصول على مفتاح API الخاص بك هنا",
"save_changes": "حفظ التغييرات"
},
"notifications": {

View File

@@ -1,7 +1,6 @@
{
"home": {
"featured": "Рэкамэндаванае",
"recently_added": "Нядаўна дададзенае",
"trending": "Актуальнае",
"surprise_me": "Здзіві мяне",
"no_results": "Няма вынікаў"
@@ -12,16 +11,10 @@
"settings": "Налады",
"my_library": "Мая бібліятэка",
"downloading_metadata": "{{title}} (Сцягванне мэтаданых…)",
"checking_files": "{{title}} ({{percentage}} - Праверка файлаў…)",
"paused": "{{title}} (Спынена)",
"downloading": "{{title}} ({{percentage}} - Сцягванне…)",
"filter": "Фільтар бібліятэкі",
"follow_us": "Падпісвайцеся на нас",
"home": "Галоўная",
"discord": "Далучайцеся да Discord",
"telegram": "Далучайцеся да Telegram",
"x": "Падпісвайцеся на X",
"github": "Зрабіць свой унёсак на GitHub"
"home": "Галоўная"
},
"header": {
"search": "Пошук",
@@ -34,7 +27,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Няма актыўных сцягванняў",
"downloading_metadata": "Сцягванне мэтаданых {{title}}…",
"checking_files": "Праверка файлаў {{title}}… ({{percentage}} скончана)",
"downloading": "Сцягванне {{title}}… ({{percentage}} скончана) - Канчатак {{eta}} - {{speed}}"
},
"catalogue": {
@@ -52,22 +44,15 @@
"pause": "Спыніць",
"cancel": "Скасаваць",
"remove": "Выдаліць",
"remove_from_list": "Выдаліць",
"space_left_on_disk": "{{space}} засталося на дыску",
"eta": "Канчатак {{eta}}",
"downloading_metadata": "Сцягванне мэтаданых…",
"checking_files": "Праверка файлаў…",
"filter": "Фільтар рэпакаў",
"requirements": "Сістэмныя патрэбаванни",
"minimum": "Мінімальныя",
"recommended": "Рэкамендуемыя",
"no_minimum_requirements": "{{title}} ня ўтрымлівае інфармацыі пра мінімальныя патрабаванні",
"no_recommended_requirements": "{{title}} ня ўтрымлівае інфармацыі пра рэкамендуемыя патрабаванні",
"paused_progress": "{{progress}} (Спынена)",
"release_date": "Выпушчана {{date}}",
"publisher": "Выдана {{publisher}}",
"copy_link_to_clipboard": "Скапіяваць спасылку",
"copied_link_to_clipboard": "Спасылка скапіявана",
"hours": "гадзін",
"minutes": "хвілін",
"amount_hours": "{{amount}} гадзін",
@@ -86,17 +71,8 @@
"playing_now": "Зараз гуляе",
"change": "Змяніць",
"repacks_modal_description": "Абярыце рэпак, які хочаце сцягнуць",
"downloads_path": "Шлях сцягвання",
"select_folder_hint": "Каб змяніць папку па змоўчанні, адкрыйце",
"download_now": "Сцягнуць зараз",
"installation_instructions": "Інструкцыя ўсталёўкі",
"installation_instructions_description": "Усталёўка гэтай гульні патрабуе дадатковых крокаў",
"online_fix_instruction": "Гульні з OnlineFix патрабуюць пароль для вымання. Калі неабходна, выкарыстоўвайце наступны пароль:",
"dodi_installation_instruction": "Калі вы адкрыеце ўсталёўшчык DODI, націсніце на клявіятуры клявішу 'уверх' <0 />, каб пачаць працэс усталёўкі:",
"dont_show_it_again": "Не паказваць зноў",
"copy_to_clipboard": "Капіяваць",
"copied_to_clipboard": "Скапіявана",
"got_it": "Зразумела"
"download_now": "Сцягнуць зараз"
},
"activation": {
"title": "Актываваць Hydra",
@@ -112,19 +88,13 @@
"eta": "Канчатак {{eta}}",
"paused": "Спынена",
"verifying": "Праверка…",
"completed_at": "Скончана а {{date}}",
"completed": "Скончана",
"cancelled": "Скасавана",
"download_again": "Сцягнуць зноў",
"cancel": "Скасаваць",
"filter": "Фільтар сцягнутых гульняў",
"remove": "Выдаліць",
"downloading_metadata": "Сцягванне мэтаданых…",
"checking_files": "Праверка файлаў…",
"starting_download": "Пачатак сцягвання…",
"deleting": "Выдаленне ўсталёўшчыка…",
"delete": "Выдаліць усталёўшчык",
"remove_from_list": "Выдаліць",
"delete_modal_title": "Вы ўпэўнены?",
"delete_modal_description": "Гэта выдаліць усе файлы ўсталёвак з вашага кампутара",
"install": "Усталяваць"
@@ -135,8 +105,6 @@
"notifications": "Апавяшчэнні",
"enable_download_notifications": "Па сканчэнні сцягванні",
"enable_repack_list_notifications": "Пры даданні новага рэпака",
"telemetry": "Тэлеметрыя",
"telemetry_description": "Уключыць ананімную статыстыку выкарыстання",
"behavior": "Паводзіны",
"quit_app_instead_hiding": "Закрываць праграму замест таго, каб хаваць яе ў трэй",
"launch_with_system": "Запускаць праграму пры запуску сыстэмы"

View File

@@ -0,0 +1,148 @@
{
"home": {
"featured": "Destacats",
"trending": "Populars",
"surprise_me": "Sorprèn-me",
"no_results": "No s'ha trobat res"
},
"sidebar": {
"catalogue": "Catàleg",
"downloads": "Baixades",
"settings": "Configuració",
"my_library": "Biblioteca",
"downloading_metadata": "{{title}} (S'estan baixant les metadades…)",
"paused": "{{title}} (Pausat)",
"downloading": "{{title}} ({{percentage}} - S'està baixant…)",
"filter": "Filtra la biblioteca",
"home": "Inici"
},
"header": {
"search": "Cerca jocs",
"home": "Inici",
"catalogue": "Catàleg",
"downloads": "Baixades",
"search_results": "Resultats de la cerca",
"settings": "Configuració",
"version_available_install": "Hi ha disponible la versió {{version}}. Feu clic aquí per a reiniciar i instal·lar-la.",
"version_available_download": "Hi ha disponible la versió {{version}}. Feu clic aquí per a baixar-la."
},
"bottom_panel": {
"no_downloads_in_progress": "Cap baixada en curs",
"downloading_metadata": "S'estan baixant les metadades de: {{title}}…",
"downloading": "S'està baixant: {{title}}… ({{percentage}} complet) - Finalització: {{eta}} - {{speed}}"
},
"catalogue": {
"next_page": "Pàgina següent",
"previous_page": "Pàgina anterior"
},
"game_details": {
"open_download_options": "Obre les opcions de baixada",
"download_options_zero": "No hi ha opcions de baixada",
"download_options_one": "{{count}} opció de baixada",
"download_options_other": "{{count}} opcions de baixada",
"updated_at": "Actualitzat: {{updated_at}}",
"install": "Instal·la",
"resume": "Reprèn",
"pause": "Pausa",
"cancel": "Cancel·la",
"remove": "Elimina",
"space_left_on_disk": "{{space}} lliures al disc",
"eta": "Finalització: {{eta}}",
"downloading_metadata": "S'estan baixant les metadades…",
"filter": "Filtra els reempaquetats",
"requirements": "Requisits del sistema",
"minimum": "Mínims",
"recommended": "Recomanats",
"release_date": "Publicat el {{date}}",
"publisher": "Publicat per {{publisher}}",
"hours": "hores",
"minutes": "minuts",
"amount_hours": "{{amount}} hores",
"amount_minutes": "{{amount}} minuts",
"accuracy": "{{accuracy}}% de precisió",
"add_to_library": "Afegeix a la biblioteca",
"remove_from_library": "Elimina de la biblioteca",
"no_downloads": "No hi ha baixades disponibles",
"play_time": "Jugat durant {{amount}}",
"last_time_played": "Última partida: {{period}}",
"not_played_yet": "Encara no has jugat al {{title}}",
"next_suggestion": "Suggeriment següent",
"play": "Inicia",
"deleting": "S'està eliminant l'instal·lador…",
"close": "Tanca",
"playing_now": "S'està jugant",
"change": "Canvia",
"repacks_modal_description": "Tria quin reempaquetat vols baixar",
"select_folder_hint": "Per a canviar la carpeta predefinida, vés a la <0>Configuració</0>",
"download_now": "Baixa ara",
"no_shop_details": "No s'han pogut recuperar els detalls de la tenda.",
"download_options": "Opcions de baixada",
"download_path": "Ruta de baixada",
"previous_screenshot": "Captura anterior",
"next_screenshot": "Captura següent",
"screenshot": "Captura {{number}}",
"open_screenshot": "Obre la captura {{number}}"
},
"activation": {
"title": "Activa l'Hydra",
"installation_id": "ID d'instal·lació:",
"enter_activation_code": "Introdueix el codi d'activació",
"message": "Si no saps on demanar-ho, no ho hauries de tenir.",
"activate": "Activa",
"loading": "S'està carregant…"
},
"downloads": {
"resume": "Reprèn",
"pause": "Pausa",
"eta": "Finalització {{eta}}",
"paused": "Pausada",
"verifying": "S'està verificant…",
"completed": "Completada",
"cancel": "Cancel·la",
"filter": "Filtra els jocs baixats",
"remove": "Elimina",
"downloading_metadata": "S'estan baixant les metadades…",
"deleting": "S'està eliminant l'instal·lador…",
"delete": "Elimina l'instal·lador",
"delete_modal_title": "N'estàs segur?",
"delete_modal_description": "S'eliminaran de l'ordinador tots els fitxers d'instal·lació",
"install": "Instal·la"
},
"settings": {
"downloads_path": "Ruta de baixades",
"change": "Actualitza",
"notifications": "Notificacions",
"enable_download_notifications": "Quan finalitzi una baixada",
"enable_repack_list_notifications": "Quan s'afegeixi un nou reempaquetat",
"real_debrid_api_token_label": "Testimoni de l'API de Real Debrid",
"quit_app_instead_hiding": "Tanca l'Hydra en compte de minimitzar-la a la safata",
"launch_with_system": "Inicia l'Hydra quan s'iniciï el sistema",
"general": "General",
"behavior": "Comportament",
"enable_real_debrid": "Activa el Real Debrid",
"real_debrid_api_token_hint": "Pots obtenir la teva clau de l'API <0>aquí</0>.",
"save_changes": "Desa els canvis"
},
"notifications": {
"download_complete": "La baixada ha finalitzat",
"game_ready_to_install": "{{title}} ja es pot instal·lar",
"repack_list_updated": "S'ha actualitzat la llista de reempaquetats",
"repack_count_one": "S'ha afegit {{count}} reempaquetat",
"repack_count_other": "S'han afegit {{count}} reempaquetats"
},
"system_tray": {
"open": "Obre l'Hydra",
"quit": "Tanca"
},
"game_card": {
"no_downloads": "No hi ha baixades disponibles"
},
"binary_not_found_modal": {
"title": "Programes no instal·lats",
"description": "No s'ha trobat els executables del Wine o el Lutris al sistema.",
"instructions": "Comprova quina és la manera correcta d'instal·lar qualsevol d'ells en la teva distribució de Linux perquè el joc pugui executar-se amb normalitat."
},
"modal": {
"close": "Botó de tancar"
}
}

View File

@@ -1,7 +1,6 @@
{
"home": {
"featured": "Anbefalet",
"recently_added": "Nyligt tilføjet",
"trending": "Trender",
"surprise_me": "Overrask mig",
"no_results": "Ingen resultater fundet"
@@ -12,16 +11,10 @@
"settings": "Indstillinger",
"my_library": "Mit bibliotek",
"downloading_metadata": "{{title}} (Downloader metadata…)",
"checking_files": "{{title}} ({{percentage}} - Tjekker filer…)",
"paused": "{{title}} (Paused)",
"downloading": "{{title}} ({{percentage}} - Downloading…)",
"filter": "Filtrer bibliotek",
"follow_us": "Følg os",
"home": "Hjem",
"discord": "Tilslut dig vores Discord",
"telegram": "Tilslut dig vores Telegram",
"x": "Følg på X",
"github": "Bidrag på GitHub"
"home": "Hjem"
},
"header": {
"search": "Søg spil",
@@ -34,7 +27,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Ingen downloads igang",
"downloading_metadata": "Downloader {{title}} metadata…",
"checking_files": "Tjekker {{title}} filer… ({{percentage}} færdig)",
"downloading": "Downloader {{title}}… ({{percentage}} færdig) - Konklusion {{eta}} - {{speed}}"
},
"catalogue": {
@@ -52,22 +44,15 @@
"pause": "Pause",
"cancel": "Annullér",
"remove": "Fjern",
"remove_from_list": "Fjern",
"space_left_on_disk": "{{space}} tilbage på harddisken",
"eta": "Konklusion {{eta}}",
"downloading_metadata": "Downloader metadata…",
"checking_files": "Tjekker filer…",
"filter": "Filtrer repacks",
"requirements": "System behov",
"minimum": "Mindste",
"recommended": "Anbefalet",
"no_minimum_requirements": "{{title}} angiver ikke mindste behov informationer",
"no_recommended_requirements": "{{title}} angiver ikke anbefalet behov informationer",
"paused_progress": "{{progress}} (Pauset)",
"release_date": "Offentliggjort den {{date}}",
"publisher": "Udgivet af {{publisher}}",
"copy_link_to_clipboard": "Kopier link",
"copied_link_to_clipboard": "Link kopieret",
"hours": "timer",
"minutes": "minutter",
"amount_hours": "{{amount}} timer",
@@ -86,17 +71,8 @@
"playing_now": "Spiller nu",
"change": "Ændré",
"repacks_modal_description": "Vælg den repack du vil downloade",
"downloads_path": "Downloads sti",
"select_folder_hint": "For at ændre standard mappen, gå til <0>Instillingerne</0>",
"download_now": "Download nu",
"installation_instructions": "Installations Instrukser",
"installation_instructions_description": "Yderligere skridt er krævet for at installere dette spil",
"online_fix_instruction": "OnlineFix spil kræver et kodeord for at kunne blive udpakket. Når krævet, brug det følgende kodeord:",
"dodi_installation_instruction": "Når du åbner DODI installatør, tryk på op-knappen på dit tastatur <0 /> for at starte installations processen:",
"dont_show_it_again": "Vis ikke igen",
"copy_to_clipboard": "Kopier",
"copied_to_clipboard": "Kopieret",
"got_it": "Forstået"
"download_now": "Download nu"
},
"activation": {
"title": "Aktivér Hydra",
@@ -112,24 +88,16 @@
"eta": "Konklusion {{eta}}",
"paused": "Pauset",
"verifying": "Verificerer…",
"completed_at": "Færdiggjort på {{date}}",
"completed": "Færdigt",
"cancelled": "Annulleret",
"download_again": "Download igen",
"cancel": "Annullér",
"filter": "Filtrer downloadet spil",
"remove": "Fjern",
"downloading_metadata": "Downloader metadata…",
"checking_files": "Tjekker filer…",
"starting_download": "Starter download…",
"deleting": "Sletter installatør…",
"delete": "Fjern installatør",
"remove_from_list": "Fjern",
"delete_modal_title": "Er du sikker?",
"delete_modal_description": "Dette vil fjerne alle installations filerne fra din computer",
"install": "Installér",
"real_debrid": "Real Debrid",
"torrent": "Torrent"
"install": "Installér"
},
"settings": {
"downloads_path": "Downloads sti",
@@ -137,16 +105,12 @@
"notifications": "Notifikationer",
"enable_download_notifications": "Når et download bliver færdigt",
"enable_repack_list_notifications": "Når en ny repack bliver tilføjet",
"telemetry": "Telemetri",
"telemetry_description": "Slå anonymt brugs statistik til",
"real_debrid_api_token_description": "Real Debrid API token",
"quit_app_instead_hiding": "Afslut Hydra instedet for at minimere til processlinjen",
"launch_with_system": "Åben Hydra ved start af systemet",
"general": "Generelt",
"behavior": "Opførsel",
"enable_real_debrid": "Slå Real Debrid til",
"real_debrid": "Real Debrid",
"real_debrid_api_token_hint": "Du kan få din API nøgle <0>her</0>.",
"enable_real_debrid": "Slå Real-Debrid til",
"real_debrid_api_token_hint": "Du kan få din API nøgle <0>her</0>",
"save_changes": "Gem ændringer"
},
"notifications": {

View File

@@ -1,7 +1,9 @@
{
"app": {
"successfully_signed_in": "Successfully signed in"
},
"home": {
"featured": "Featured",
"recently_added": "Recently added",
"trending": "Trending",
"surprise_me": "Surprise me",
"no_results": "No results found"
@@ -12,16 +14,19 @@
"settings": "Settings",
"my_library": "My library",
"downloading_metadata": "{{title}} (Downloading metadata…)",
"checking_files": "{{title}} ({{percentage}} - Checking files…)",
"paused": "{{title}} (Paused)",
"downloading": "{{title}} ({{percentage}} - Downloading…)",
"filter": "Filter library",
"follow_us": "Follow us",
"home": "Home",
"discord": "Join our Discord",
"telegram": "Join our Telegram",
"x": "Follow on X",
"github": "Contribute on GitHub"
"queued": "{{title}} (Queued)",
"game_has_no_executable": "Game has no executable selected",
"sign_in": "Sign in",
"sort_by": "Sort by",
"latest_added": "Latest added",
"alphabetically": "Alphabetically",
"last_launched": "Last launched",
"number_of_hours": "Number of hours",
"installed_or_not": "Installed or not"
},
"header": {
"search": "Search games",
@@ -29,13 +34,16 @@
"catalogue": "Catalogue",
"downloads": "Downloads",
"search_results": "Search results",
"settings": "Settings"
"settings": "Settings",
"version_available_install": "Version {{version}} available. Click here to restart and install.",
"version_available_download": "Version {{version}} available. Click here to download."
},
"bottom_panel": {
"no_downloads_in_progress": "No downloads in progress",
"downloading_metadata": "Downloading {{title}} metadata…",
"checking_files": "Checking {{title}} files… ({{percentage}} complete)",
"downloading": "Downloading {{title}}… ({{percentage}} complete) - Conclusion {{eta}} - {{speed}}"
"downloading": "Downloading {{title}}… ({{percentage}} complete) - Conclusion {{eta}} - {{speed}}",
"calculating_eta": "Downloading {{title}}… ({{percentage}} complete) - Calculating remaining time…",
"checking_files": "Checking {{title}} files… ({{percentage}} complete)"
},
"catalogue": {
"next_page": "Next page",
@@ -52,22 +60,17 @@
"pause": "Pause",
"cancel": "Cancel",
"remove": "Remove",
"remove_from_list": "Remove",
"space_left_on_disk": "{{space}} left on disk",
"eta": "Conclusion {{eta}}",
"calculating_eta": "Calculating remaining time…",
"downloading_metadata": "Downloading metadata…",
"checking_files": "Checking files…",
"filter": "Filter repacks",
"requirements": "System requirements",
"minimum": "Minimum",
"recommended": "Recommended",
"no_minimum_requirements": "{{title}} doesn't provide minimum requirements information",
"no_recommended_requirements": "{{title}} doesn't provide recommended requirements information",
"paused_progress": "{{progress}} (Paused)",
"paused": "Paused",
"release_date": "Released on {{date}}",
"publisher": "Published by {{publisher}}",
"copy_link_to_clipboard": "Copy link",
"copied_link_to_clipboard": "Link copied",
"hours": "hours",
"minutes": "minutes",
"amount_hours": "{{amount}} hours",
@@ -88,21 +91,35 @@
"repacks_modal_description": "Choose the repack you want to download",
"select_folder_hint": "To change the default folder, go to the <0>Settings</0>",
"download_now": "Download now",
"installation_instructions": "Installation Instructions",
"installation_instructions_description": "Additional steps are required to install this game",
"online_fix_instruction": "OnlineFix games requires a password to be extracted. When required, use the following password:",
"dodi_installation_instruction": "When you open DODI installer, press your keyboard up key <0 /> to start the installation process:",
"dont_show_it_again": "Don't show it again",
"copy_to_clipboard": "Copy",
"copied_to_clipboard": "Copied",
"got_it": "Got it",
"no_shop_details": "Could not retrieve shop details.",
"download_options": "Download options",
"download_path": "Download path",
"previous_screenshot": "Previous screenshot",
"next_screenshot": "Next screenshot",
"screenshot": "Screenshot {{number}}",
"open_screenshot": "Open screenshot {{number}}"
"open_screenshot": "Open screenshot {{number}}",
"download_settings": "Download settings",
"downloader": "Downloader",
"select_executable": "Select",
"no_executable_selected": "No executable selected",
"open_folder": "Open folder",
"open_download_location": "See downloaded files",
"create_shortcut": "Create desktop shortcut",
"remove_files": "Remove files",
"remove_from_library_title": "Are you sure?",
"remove_from_library_description": "This will remove {{game}} from your library",
"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_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",
"download_in_progress": "Download in progress",
"download_paused": "Download paused",
"last_downloaded_option": "Last downloaded option",
"create_shortcut_success": "Shortcut created successfully",
"create_shortcut_error": "Error creating shortcut"
},
"activation": {
"title": "Activate Hydra",
@@ -118,24 +135,24 @@
"eta": "Conclusion {{eta}}",
"paused": "Paused",
"verifying": "Verifying…",
"completed_at": "Completed in {{date}}",
"completed": "Completed",
"cancelled": "Cancelled",
"download_again": "Download again",
"removed": "Not downloaded",
"cancel": "Cancel",
"filter": "Filter downloaded games",
"remove": "Remove",
"downloading_metadata": "Downloading metadata…",
"checking_files": "Checking files…",
"starting_download": "Starting download…",
"deleting": "Deleting installer…",
"delete": "Remove installer",
"remove_from_list": "Remove",
"delete_modal_title": "Are you sure?",
"delete_modal_description": "This will remove all the installation files from your computer",
"install": "Install",
"real_debrid": "Real Debrid",
"torrent": "Torrent"
"download_in_progress": "In progress",
"queued_downloads": "Queued downloads",
"downloads_completed": "Completed",
"queued": "Queued",
"no_downloads_title": "Such empty",
"no_downloads_description": "You haven't downloaded anything with Hydra yet, but it's never too late to start.",
"checking_files": "Checking files…"
},
"settings": {
"downloads_path": "Downloads path",
@@ -143,17 +160,45 @@
"notifications": "Notifications",
"enable_download_notifications": "When a download is complete",
"enable_repack_list_notifications": "When a new repack is added",
"telemetry": "Telemetry",
"telemetry_description": "Enable anonymous usage statistics",
"real_debrid_api_token_label": "Real Debrid API token",
"quit_app_instead_hiding": "Quit Hydra instead of minimizing to tray",
"real_debrid_api_token_label": "Real-Debrid API token",
"quit_app_instead_hiding": "Don't hide Hydra when closing",
"launch_with_system": "Launch Hydra on system start-up",
"general": "General",
"behavior": "Behavior",
"enable_real_debrid": "Enable Real Debrid",
"real_debrid": "Real Debrid",
"real_debrid_api_token_hint": "You can get your API key <0>here</0>.",
"save_changes": "Save changes"
"download_sources": "Download sources",
"language": "Language",
"real_debrid_api_token": "API Token",
"enable_real_debrid": "Enable Real-Debrid",
"real_debrid_description": "Real-Debrid is an unrestricted downloader that allows you to download files instantly and at the best of your Internet speed.",
"real_debrid_invalid_token": "Invalid API token",
"real_debrid_api_token_hint": "You can get your API token <0>here</0>",
"real_debrid_free_account_error": "The account \"{{username}}\" is a free account. Please subscribe to Real-Debrid",
"real_debrid_linked_message": "Account \"{{username}}\" linked",
"save_changes": "Save changes",
"changes_saved": "Changes successfully saved",
"download_sources_description": "Hydra will fetch the download links from these sources. The source URL must be a direct link to a .json file containing the download links.",
"validate_download_source": "Validate",
"remove_download_source": "Remove",
"add_download_source": "Add source",
"download_count_zero": "No downloads in list",
"download_count_one": "{{countFormatted}} download in list",
"download_count_other": "{{countFormatted}} downloads in list",
"download_options_zero": "No download available",
"download_options_one": "{{countFormatted}} download available",
"download_options_other": "{{countFormatted}} downloads available",
"download_source_url": "Download source URL",
"add_download_source_description": "Insert the URL containing the .json file",
"download_source_up_to_date": "Up-to-date",
"download_source_errored": "Errored",
"sync_download_sources": "Sync sources",
"removed_download_source": "Download source removed",
"added_download_source": "Added download source",
"download_sources_synced": "All download sources are synced",
"insert_valid_json_url": "Insert a valid JSON url",
"found_download_option_zero": "No download option found",
"found_download_option_one": "Found {{countFormatted}} download option",
"found_download_option_other": "Found {{countFormatted}} download options",
"import": "Import"
},
"notifications": {
"download_complete": "Download complete",
@@ -176,5 +221,30 @@
},
"modal": {
"close": "Close button"
},
"forms": {
"toggle_password_visibility": "Toggle password visibility"
},
"user_profile": {
"amount_hours": "{{amount}} hours",
"amount_minutes": "{{amount}} minutes",
"last_time_played": "Last played {{period}}",
"activity": "Recent activity",
"library": "Library",
"total_play_time": "Total playtime: {{amount}}",
"no_recent_activity_title": "Hmmm… nothing here",
"no_recent_activity_description": "You haven't played any games recently. It's time to change that!",
"display_name": "Display name",
"saving": "Saving",
"save": "Save",
"edit_profile": "Edit Profile",
"saved_successfully": "Saved successfully",
"try_again": "Please, try again",
"sign_out_modal_title": "Are you sure?",
"cancel": "Cancel",
"successfully_signed_out": "Successfully signed out",
"sign_out": "Sign out",
"playing_for": "Playing for {{amount}}",
"sign_out_modal_text": "Your library is linked with your current account. When signing out, your library will not be visible anymore, and any progress will not be saved. Continue with sign out?"
}
}

View File

@@ -1,7 +1,9 @@
{
"app": {
"successfully_signed_in": "Sesión iniciada correctamente"
},
"home": {
"featured": "Destacado",
"recently_added": "Recién Añadidos",
"trending": "Tendencias",
"surprise_me": "¡Sorpréndeme!",
"no_results": "No se encontraron resultados"
@@ -12,16 +14,13 @@
"settings": "Ajustes",
"my_library": "Mi biblioteca",
"downloading_metadata": "{{title}} (Descargando metadatos…)",
"checking_files": "{{title}} ({{percentage}} - Analizando archivos…)",
"paused": "{{title}} (Pausado)",
"downloading": "{{title}} ({{percentage}} - Descargando…)",
"filter": "Buscar en la biblioteca",
"follow_us": "Síguenos",
"home": "Inicio",
"discord": "Únete a nuestro Discord",
"telegram": "Únete a nuestro Telegram",
"x": "Síguenos en X",
"github": "Contribuye en GitHub"
"queued": "{{title}} (En Cola)",
"game_has_no_executable": "El juego no tiene un ejecutable",
"sign_in": "Iniciar sesión"
},
"header": {
"search": "Buscar juegos",
@@ -29,13 +28,16 @@
"catalogue": "Catálogo",
"downloads": "Descargas",
"search_results": "Resultados de búsqueda",
"settings": "Ajustes"
"settings": "Ajustes",
"version_available_install": "Version {{version}} disponible. Haz clic aquí para reiniciar e instalar.",
"version_available_download": "Version {{version}} disponible. Haz clic aquí para descargar."
},
"bottom_panel": {
"no_downloads_in_progress": "Sin descargas en progreso",
"downloading_metadata": "Descargando metadatos de {{title}}…",
"checking_files": "Analizando archivos de {{title}} - ({{percentage}} completado)",
"downloading": "Descargando {{title}}… ({{percentage}} completado) - Finalizando {{eta}} - {{speed}}"
"downloading": "Descargando {{title}} ({{percentage}} completado) - Finalizando {{eta}} - {{speed}}",
"calculating_eta": "Descargando {{title}}… ({{percentage}} completado) - Calculando tiempo restante…",
"checking_files": "Verificando archivos de {{title}}… ({{percentage}} completado)"
},
"catalogue": {
"next_page": "Siguiente página",
@@ -52,22 +54,17 @@
"pause": "Pausa",
"cancel": "Cancelar",
"remove": "Eliminar",
"remove_from_list": "Quitar",
"space_left_on_disk": "{{space}} restantes en el disco",
"eta": "Finalizando en {{eta}}",
"eta": "Tiempo restante: {{eta}}",
"calculating_eta": "Calculando tiempo restante…",
"downloading_metadata": "Descargando metadatos…",
"checking_files": "Analizando archivos…",
"filter": "Buscar repacks",
"requirements": "Requisitos del Sistema",
"minimum": "Mínimos",
"recommended": "Recomendados",
"no_minimum_requirements": "Sin requisitos mínimos para {{title}}",
"no_recommended_requirements": "{{title}} no tiene requisitos recomendados",
"paused_progress": "{{progress}} (Pausado)",
"paused": "Pausado",
"release_date": "Fecha de lanzamiento: {{date}}",
"publisher": "Publicado por: {{publisher}}",
"copy_link_to_clipboard": "Copiar enlace",
"copied_link_to_clipboard": "Enlace copiado",
"hours": "horas",
"minutes": "minutos",
"amount_hours": "{{amount}} horas",
@@ -88,21 +85,35 @@
"repacks_modal_description": "Selecciona el repack que quieres descargar",
"select_folder_hint": "Para cambiar la carpeta predeterminada, ve a <0>Ajustes</0>",
"download_now": "Descargar ahora",
"installation_instructions": "Instrucciones de instalación",
"installation_instructions_description": "Se requieren de pasos adicionales para instalar este juego",
"online_fix_instruction": "Los juegos de OnlineFix requieren una contraseña para ser extraídos. Cuando se requiera, usa la siguiente contraseña:",
"dodi_installation_instruction": "Cuando abras el instalador de DODI, presiona la tecla hacia arriba del teclado <0 /> para iniciar el proceso de instalación:",
"dont_show_it_again": "No mostrar de nuevo",
"copy_to_clipboard": "Copiar",
"copied_to_clipboard": "Copiado",
"got_it": "Entendido",
"no_shop_details": "No se pudieron obtener detalles de la tienda.",
"download_options": "Opciones de descarga",
"download_path": "Ruta de descarga",
"previous_screenshot": "Anterior captura",
"next_screenshot": "Siguiente captura",
"screenshot": "Captura {{number}}",
"open_screenshot": "Abrir captura {{number}}"
"open_screenshot": "Abrir captura {{number}}",
"download_settings": "Ajustes de descarga",
"downloader": "Método de descarga",
"select_executable": "Seleccionar",
"no_executable_selected": "No se seleccionó un ejecutable",
"open_folder": "Abrir carpeta",
"open_download_location": "Ver archivos descargados",
"create_shortcut": "Crear acceso directo en el escritorio",
"remove_files": "Eliminar archivos",
"remove_from_library_title": "¿Estás seguro?",
"remove_from_library_description": "Esto eliminará {{game}} de tu biblioteca",
"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_description": "Buscar actualizaciones u otras versiones de este juego",
"danger_zone_section_title": "Zona de Peligro",
"danger_zone_section_description": "Eliminar este juego de tu librería o los archivos descargados por Hydra",
"download_in_progress": "Descarga en progreso",
"download_paused": "Descarga pausada",
"last_downloaded_option": "Última opción descargada",
"create_shortcut_success": "Atajo creado con éxito",
"create_shortcut_error": "Error al crear un atajo"
},
"activation": {
"title": "Activar Hydra",
@@ -118,24 +129,24 @@
"eta": "Finalizando en {{eta}}",
"paused": "En Pausa",
"verifying": "Verificando…",
"completed_at": "Completado el {{date}}",
"completed": "Completado",
"cancelled": "Cancelado",
"download_again": "Descargar de nuevo",
"removed": "No descargado",
"cancel": "Cancelar",
"filter": "Buscar juegos descargados",
"remove": "Eliminar",
"downloading_metadata": "Descargando metadatos…",
"checking_files": "Verificando archivos…",
"starting_download": "Iniciando descarga…",
"deleting": "Eliminando instalador…",
"delete": "Eliminar instalador",
"remove_from_list": "Eliminar",
"delete_modal_title": "¿Estás seguro?",
"delete_modal_description": "Esto eliminará todos los archivos de instalación de tu computadora.",
"install": "Instalar",
"real_debrid": "Real Debrid",
"torrent": "Torrent"
"download_in_progress": "En progreso",
"queued_downloads": "Descargas en cola",
"downloads_completed": "Completado",
"queued": "En cola",
"no_downloads_title": "Esto está tan... vacío",
"no_downloads_description": "No has descargado nada con Hydra... aún, ¡pero nunca es tarde para comenzar!.",
"checking_files": "Verificando archivos…"
},
"settings": {
"downloads_path": "Ruta de descarga",
@@ -143,17 +154,45 @@
"notifications": "Notificaciones",
"enable_download_notifications": "Cuando se completa una descarga",
"enable_repack_list_notifications": "Cuando se añade un repack nuevo",
"telemetry": "Telemetría",
"telemetry_description": "Habilitar recopilación de datos de manera anónima",
"real_debrid_api_token_label": "Token API de Real Debrid",
"real_debrid_api_token_label": "Token API de Real-Debrid",
"quit_app_instead_hiding": "Salir de Hydra en vez de minimizar en la bandeja del sistema",
"launch_with_system": "Iniciar Hydra al inicio del sistema",
"general": "General",
"behavior": "Otros",
"enable_real_debrid": "Activar Real Debrid",
"real_debrid": "Real Debrid",
"real_debrid_api_token_hint": "Puedes obtener tu clave de API <0>aquí</0>.",
"save_changes": "Guardar cambios"
"download_sources": "Fuentes de descarga",
"language": "Idioma",
"real_debrid_api_token": "Token API",
"enable_real_debrid": "Activar Real-Debrid",
"real_debrid_description": "Real-Debrid es una forma de descargar sin restricciones archivos instantáneamente con la máxima velocidad de tu internet.",
"real_debrid_invalid_token": "Token de API inválido",
"real_debrid_api_token_hint": "Puedes obtener tu clave de API <0>aquí</0>",
"real_debrid_free_account_error": "La cuenta \"{{username}}\" es una cuenta gratuita. Por favor, suscríbete a Real-Debrid",
"real_debrid_linked_message": "Cuenta \"{{username}}\" vinculada",
"save_changes": "Guardar cambios",
"changes_saved": "Ajustes guardados exitosamente",
"download_sources_description": "Hydra buscará los enlaces de descarga de estas fuentes. La URL de origen debe ser un enlace directo a un archivo .json que contenga los enlaces de descarga",
"validate_download_source": "Validar",
"remove_download_source": "Eliminar",
"add_download_source": "Añadir fuente de descarga",
"download_count_zero": "No hay descargas en la lista",
"download_count_one": "{{countFormatted}} descarga en la lista",
"download_count_other": "{{countFormatted}} descargas en la lista",
"download_options_zero": "No hay descargas disponibles",
"download_options_one": "{{countFormatted}} descarga disponible",
"download_options_other": "{{countFormatted}} descargas disponibles",
"download_source_url": "Descargar URL de origen",
"add_download_source_description": "Introduce la URL con el archivo .json",
"download_source_up_to_date": "Al día",
"download_source_errored": "Error",
"sync_download_sources": "Sincronizar fuentes",
"removed_download_source": "Fuente de descarga eliminada",
"added_download_source": "Fuente de descarga añadida",
"download_sources_synced": "Todas las fuentes de descargas están actualizadas.",
"insert_valid_json_url": "Introduce una URL JSON válida",
"found_download_option_zero": "No se encontró una opción de descarga",
"found_download_option_one": "Se encontró {{countFormatted}} opción de descarga",
"found_download_option_other": "Se encontraron {{countFormatted}} opciones de descarga",
"import": "Importar"
},
"notifications": {
"download_complete": "Descarga completada",
@@ -176,5 +215,30 @@
},
"modal": {
"close": "Botón de cierre"
},
"forms": {
"toggle_password_visibility": "Cambiar visibilidad de contraseña"
},
"user_profile": {
"amount_hours": "{{amount}} horas",
"amount_minutes": "{{amount}} minutos",
"last_time_played": "Última vez jugado {{period}}",
"activity": "Actividad reciente",
"library": "Biblioteca",
"total_play_time": "Total de tiempo jugado: {{amount}}",
"no_recent_activity_title": "Que raro, no hay nada por acá, ¿que tal si jugamos algo para empezar?",
"no_recent_activity_description": "No has jugado ningún juego recientemente, ¡vamos a cambiar eso ahora!",
"display_name": "Nombre a mostrar",
"saving": "Guardando",
"save": "Guardar",
"edit_profile": "Editar perfil",
"saved_successfully": "Guardado exitosamente",
"try_again": "Por favor, intenta de nuevo",
"sign_out_modal_title": "¿Estás seguro?",
"cancel": "Cancelar",
"successfully_signed_out": "Sesión cerrada exitosamente",
"sign_out": "Cerrar sesión",
"playing_for": "Jugando por {{amount}}",
"sign_out_modal_text": "Tu biblioteca se ha vinculado con tu cuenta. Cuando cierres sesión, tú biblioteca ya no será visible y cualquier progreso no se guardará. ¿Continuar con el cierre de sesión?"
}
}

View File

@@ -1,7 +1,6 @@
{
"home": {
"featured": "پیشنهادی",
"recently_added": "تازه اضافه شده",
"trending": "پرطرفدار",
"surprise_me": "سوپرایزم کن",
"no_results": "اتمام‌ای پیدا نشد"
@@ -12,16 +11,10 @@
"settings": "تنظیمات",
"my_library": "کتابخانه‌ی من",
"downloading_metadata": "{{title}} (در حال دانلود متادیتا...)",
"checking_files": "{{title}} ({{percentage}} - در حال بررسی فایل‌ها...)",
"paused": "{{title}} (متوقف شده)",
"downloading": "{{title}} ({{percentage}} - در حال دانلود…)",
"filter": "فیلتر کردن کتابخانه",
"follow_us": "دنبال کردن ما",
"home": "خانه",
"discord": "عضویت در دیسکورد ما",
"telegram": "عضویت در تلگرام ما",
"x": "دنبال کرد در ایکس",
"github": "مشارکت در گیتهاب"
"home": "خانه"
},
"header": {
"search": "جستجوی بازی‌ها",
@@ -34,7 +27,6 @@
"bottom_panel": {
"no_downloads_in_progress": "دانلودی در حال انجام نیست",
"downloading_metadata": "درحال دانلود متادیتاهای {{title}}…",
"checking_files": "در حال چک کردن فایل‌های {{title}}…. ({{percentage}} تکمیل شده)",
"downloading": "در حال دانلود {{title}}… ({{percentage}} تکمیل شده) - اتمام {{eta}} - {{speed}}"
},
"catalogue": {
@@ -52,22 +44,15 @@
"pause": "توقف",
"cancel": "بیخیال",
"remove": "حذف",
"remove_from_list": "حذف",
"space_left_on_disk": "{{space}} فضا در دیسک باقی‌مانده",
"eta": "اتمام {{eta}}",
"downloading_metadata": "در حال دانلود متادیتاها…",
"checking_files": "در حال چک کردن فایل‌ها",
"filter": "فیلترکردن ریپک‌ها",
"requirements": "سیستم مورد نیاز",
"minimum": "حداقل",
"recommended": "پیشنهادی",
"no_minimum_requirements": "{{title}} اطلاعات حداقل سیستم مورد نیاز را فراهم نکرده",
"no_recommended_requirements": "{{title}} اطلاعات پیشنهادی سیستم مورد نیاز را فراهم نکرده",
"paused_progress": "{{progress}} (متوقف شده)",
"release_date": "منتشر شده در {{date}}",
"publisher": "منتشر شده توسط {{publisher}}",
"copy_link_to_clipboard": "کپی لینک",
"copied_link_to_clipboard": "لینک کپی شد",
"hours": "ساعت",
"minutes": "دقیقه",
"amount_hours": "{{amount}} ساعت",
@@ -86,17 +71,8 @@
"playing_now": "در حال بازی",
"change": "تغییر",
"repacks_modal_description": "ریپک مورد نظر برای دانلود را انتخاب کنید",
"downloads_path": "آدرس دانلودها",
"select_folder_hint": "برای تغییر پوشه‌ی پیش‌فرض به <0>Settings</0> بروید",
"download_now": "الان دانلود کن",
"installation_instructions": "دستورات نصب",
"installation_instructions_description": "قدم‌های دیگری برای نصب این بازی نیاز است",
"online_fix_instruction": "بازی‌های OnlineFix برای اکسترکت‌ شدن به پسوورد نیاز دارند. در صورت نیاز، از این پسوورد استفاده کنید:",
"dodi_installation_instruction": "زمانی که اینستالر DODI را باز کردید، دکمه‌ی <0 /> را فشار دهید تا فرایند نصب شروع شود:",
"dont_show_it_again": "دیگر نمایش نده",
"copy_to_clipboard": "کپی",
"copied_to_clipboard": "کپی شد",
"got_it": "فهمیدم"
"download_now": "الان دانلود کن"
},
"activation": {
"title": "فعال کردن هایدرا",
@@ -112,24 +88,16 @@
"eta": "اتمام {{eta}}",
"paused": "متوقف شده",
"verifying": "در حال اعتبارسنجی…",
"completed_at": "پایان یافته در {{date}}",
"completed": "پایان یافته",
"cancelled": "لغو شده",
"download_again": "دانلود مجدد",
"cancel": "لغو",
"filter": "فیلتر بازی‌های دانلود شده",
"remove": "حذف",
"downloading_metadata": "در حال دانلود متادیتاها…",
"checking_files": "در حال چک کردن فایل‌ها…",
"starting_download": "در حال آغار دانلود…",
"deleting": "در حال پاک کردن اینستالر…",
"delete": "پاک کردن",
"remove_from_list": "حذف",
"delete_modal_title": "مطمئنی؟",
"delete_modal_description": "این کار تمام فایل‌های اینستالر را از کامپیوتر شما حذف می‌کند",
"install": "نصف",
"real_debrid": "Real Debrid",
"torrent": "تورنت"
"install": "نصف"
},
"settings": {
"downloads_path": "مسیر دانلودها",
@@ -137,15 +105,11 @@
"notifications": "نوتیفیکشن‌ها",
"enable_download_notifications": "زمانی که یک دانلود تمام شد",
"enable_repack_list_notifications": "زمانی که یک ریپک جدید اضافه شد",
"telemetry": "تلمتری",
"telemetry_description": "فعال کردن آمارگیری استفاده ناشناس",
"real_debrid_api_token_description": "توکن Real Debrid",
"quit_app_instead_hiding": "به جای کوچک کردن، از هایدرا خارج شو",
"launch_with_system": "زمانی که سیستم روشن می‌شود، هایدرا را باز کن",
"general": "کلی",
"behavior": "رفتار",
"enable_real_debrid": "فعال‌سازی Real Debrid",
"real_debrid": "Real Debrid",
"enable_real_debrid": "فعال‌سازی Real-Debrid",
"real_debrid_api_token_hint": "کلید API خود را از <ب0>اینجا</0> بگیرید.",
"save_changes": "ذخیره تغییرات"
},

View File

@@ -1,7 +1,6 @@
{
"home": {
"featured": "En vedette",
"recently_added": "Récemment ajouté",
"trending": "Tendance",
"surprise_me": "Surprenez-moi",
"no_results": "Aucun résultat trouvé"
@@ -12,12 +11,10 @@
"settings": "Paramètres",
"my_library": "Ma bibliothèque",
"downloading_metadata": "{{title}} (Téléchargement des métadonnées…)",
"checking_files": "{{title}} ({{percentage}} - Vérification des fichiers…)",
"paused": "{{title}} (En pause)",
"downloading": "{{title}} ({{percentage}} - Téléchargement en cours…)",
"filter": "Filtrer la bibliothèque",
"home": "Page daccueil",
"follow_us": "Suivez-nous"
"home": "Page daccueil"
},
"header": {
"search": "Recherche",
@@ -30,7 +27,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Aucun téléchargement en cours",
"downloading_metadata": "Téléchargement des métadonnées de {{title}}…",
"checking_files": "Vérification des fichiers de {{title}}… ({{percentage}} terminé)",
"downloading": "Téléchargement de {{title}}… ({{percentage}} terminé) - Fin dans {{eta}} - {{speed}}"
},
"game_details": {
@@ -43,22 +39,15 @@
"pause": "Pause",
"cancel": "Annuler",
"remove": "Supprimer",
"remove_from_list": "Retirer",
"space_left_on_disk": "{{space}} restant sur le disque",
"eta": "Fin dans {{eta}}",
"downloading_metadata": "Téléchargement des métadonnées en cours…",
"checking_files": "Vérification des fichiers…",
"filter": "Filtrer les repacks",
"requirements": "Configuration requise",
"minimum": "Minimum",
"recommended": "Recommandée",
"no_minimum_requirements": "{{title}} ne fournit pas d'informations sur les configurations minimales",
"no_recommended_requirements": "{{title}} ne fournit pas d'informations sur les configurations recommandées",
"paused_progress": "{{progress}} (En pause)",
"release_date": "Sorti le {{date}}",
"publisher": "Édité par {{publisher}}",
"copy_link_to_clipboard": "Copier le lien",
"copied_link_to_clipboard": "Lien copié",
"hours": "heures",
"minutes": "minutes",
"amount_hours": "{{amount}} heures",
@@ -91,17 +80,11 @@
"eta": "Fin dans {{eta}}",
"paused": "En pause",
"verifying": "Vérification en cours…",
"completed_at": "Terminé en {{date}}",
"completed": "Terminé",
"cancelled": "Annulé",
"download_again": "Télécharger à nouveau",
"cancel": "Annuler",
"filter": "Filtrer les jeux téléchargés",
"remove": "Supprimer",
"downloading_metadata": "Téléchargement des métadonnées en cours…",
"checking_files": "Vérification des fichiers…",
"starting_download": "Démarrage du téléchargement…",
"remove_from_list": "Retirer",
"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?",
@@ -114,8 +97,7 @@
"notifications": "Notifications",
"enable_download_notifications": "Quand un téléchargement est terminé",
"enable_repack_list_notifications": "Quand un nouveau repack est ajouté",
"telemetry": "Télémétrie",
"telemetry_description": "Activer les statistiques d'utilisation anonymes"
"language": "Langue"
},
"notifications": {
"download_complete": "Téléchargement terminé",

View File

@@ -1,7 +1,6 @@
{
"home": {
"featured": "Featured",
"recently_added": "Nemrég hozzáadott",
"trending": "Népszerű",
"surprise_me": "Lepj meg",
"no_results": "Nem található"
@@ -12,11 +11,9 @@
"settings": "Beállítások",
"my_library": "Könyvtáram",
"downloading_metadata": "{{title}} (Metadata letöltése…)",
"checking_files": "{{title}} ({{percentage}} - Fájlok ellenőrzése…)",
"paused": "{{title}} (Szünet)",
"downloading": "{{title}} ({{percentage}} - Letöltés…)",
"filter": "Könyvtár szűrése",
"follow_us": "Kövess minket",
"home": "Főoldal"
},
"header": {
@@ -30,7 +27,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Nincsenek folyamatban lévő letöltések",
"downloading_metadata": "{{title}} metaadatainak letöltése…",
"checking_files": "{{title}} fájlok ellenőrzése… ({{percentage}} kész)",
"downloading": "{{title}} letöltése… ({{percentage}} kész) - Befejezés {{eta}} - {{speed}}"
},
"catalogue": {
@@ -48,22 +44,15 @@
"pause": "Szüneteltetés",
"cancel": "Mégse",
"remove": "Eltávolítás",
"remove_from_list": "Eltávolítás",
"space_left_on_disk": "{{space}} szabad hely a lemezen",
"eta": "Befejezés {{eta}}",
"downloading_metadata": "Metaadatok letöltése…",
"checking_files": "Fájlok ellenőrzése…",
"filter": "Repackek szűrése",
"requirements": "Rendszerkövetelmények",
"minimum": "Minimális",
"recommended": "Ajánlott",
"no_minimum_requirements": "{{title}} nem tartalmaz információt a minimális követelményekről",
"no_recommended_requirements": "{{title}} nem tartalmaz információt az ajánlott követelményekről",
"paused_progress": "{{progress}} (Szünetel)",
"release_date": "Megjelenés: {{date}}",
"publisher": "Kiadta: {{publisher}}",
"copy_link_to_clipboard": "Link másolása",
"copied_link_to_clipboard": "Link másolva",
"hours": "óra",
"minutes": "perc",
"amount_hours": "{{amount}} óra",
@@ -82,7 +71,6 @@
"playing_now": "Jelenleg játszva",
"change": "Változtatás",
"repacks_modal_description": "Choose the repack you want to download",
"downloads_path": "Letöltések helye",
"select_folder_hint": "Ahhoz, hogy megváltoztasd a helyet, hozzákell férned a",
"download_now": "Töltsd le most"
},
@@ -100,19 +88,13 @@
"eta": "Befejezés {{eta}}",
"paused": "Szüneteltetve",
"verifying": "Ellenőrzés…",
"completed_at": "Befejezve {{date}}-kor",
"completed": "Befejezve",
"cancelled": "Megszakítva",
"download_again": "Újra letöltés",
"cancel": "Mégse",
"filter": "Letöltött játékok szűrése",
"remove": "Eltávolítás",
"downloading_metadata": "Metaadatok letöltése…",
"checking_files": "Fájlok ellenőrzése…",
"starting_download": "Letöltés indítása…",
"deleting": "Telepítő törlése…",
"delete": "Telepítő eltávolítása",
"remove_from_list": "Eltávolítás",
"delete_modal_title": "Biztos vagy benne?",
"delete_modal_description": "Ez eltávolít minden telepítési fájlt a számítógépedről",
"install": "Telepítés"
@@ -122,9 +104,7 @@
"change": "Frissítés",
"notifications": "Értesítések",
"enable_download_notifications": "Amikor egy letöltés befejeződik",
"enable_repack_list_notifications": "Amikor egy új repack hozzáadásra kerül",
"telemetry": "Telemetria",
"telemetry_description": "Névtelen felhasználási statisztikák engedélyezése"
"enable_repack_list_notifications": "Amikor egy új repack hozzáadásra kerül"
},
"notifications": {
"download_complete": "Letöltés befejeződött",

View File

@@ -1,7 +1,6 @@
{
"home": {
"featured": "Unggulan",
"recently_added": "Terbaru",
"trending": "Trending",
"surprise_me": "Kejutkan Saya",
"no_results": "Tidak ada hasil"
@@ -12,16 +11,10 @@
"settings": "Pengaturan",
"my_library": "Koleksi saya",
"downloading_metadata": "{{title}} (Mengunduh metadata…)",
"checking_files": "{{title}} ({{percentage}} - Memeriksa file…)",
"paused": "{{title}} (Terhenti)",
"downloading": "{{title}} ({{percentage}} - Mengunduh…)",
"filter": "Filter koleksi",
"follow_us": "Ikuti kami",
"home": "Beranda",
"discord": "Gabung Discord kami",
"telegram": "Gabung Telegram kami",
"x": "Ikuti akun X kami",
"github": "Kontribusi di GitHub"
"home": "Beranda"
},
"header": {
"search": "Pencarian",
@@ -34,7 +27,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Tidak ada unduhan berjalan",
"downloading_metadata": "Mengunduh metadata {{title}}...",
"checking_files": "Memeriksa file {{title}}… ({{percentage}} selesai)",
"downloading": "Mengunduh {{title}}… ({{percentage}} selesai) - Perkiraan {{eta}} - {{speed}}"
},
"catalogue": {
@@ -52,22 +44,15 @@
"pause": "Hentikan sementara",
"cancel": "Batalkan",
"remove": "Hapus",
"remove_from_list": "Hapus",
"space_left_on_disk": "{{space}} tersisa pada disk",
"eta": "Perkiraan {{eta}}",
"downloading_metadata": "Mengunduh metadata…",
"checking_files": "Memeriksa file…",
"filter": "Saring repacks",
"requirements": "Keperluan sistem",
"minimum": "Minimum",
"recommended": "Rekomendasi",
"no_minimum_requirements": "{{title}} Tidak ada informasi kebutuhan sistem",
"no_recommended_requirements": "{{title}} Tidak ada informasi rekomendasi kebutuhan sistem",
"paused_progress": "{{progress}} (Terhenti)",
"release_date": "Dirilis pada {{date}}",
"publisher": "Dipublikasikan oleh {{publisher}}",
"copy_link_to_clipboard": "Salin tautan",
"copied_link_to_clipboard": "Tautan tersalin",
"hours": "jam",
"minutes": "menit",
"amount_hours": "{{amount}} jam",
@@ -86,17 +71,8 @@
"playing_now": "Memainkan sekarang",
"change": "Ubah",
"repacks_modal_description": "Pilih repack yang kamu ingin unduh",
"downloads_path": "Lokasi Unduhan",
"select_folder_hint": "Untuk merubah folder bawaan, akses melalui",
"download_now": "Unduh sekarang",
"installation_instructions": "Instruksi Instalasi",
"installation_instructions_description": "Langkah tambahan dibutuhkan untuk meng-instal game ini",
"online_fix_instruction": "OnlineFix games mebutuhkan kata sandi untuk ekstraksi. Saat diperlukan, gunakan kata sandi ini:",
"dodi_installation_instruction": "Saat menjalankan DODI installer, tekan tombol atas pada keyboard <0 /> untuk melanjutkan proses instalasi:",
"dont_show_it_again": "Jangan tunjukkan lagi",
"copy_to_clipboard": "Salin",
"copied_to_clipboard": "Tersalin",
"got_it": "Paham"
"download_now": "Unduh sekarang"
},
"activation": {
"title": "Aktivasi Hydra",
@@ -112,19 +88,13 @@
"eta": "Perkiraan {{eta}}",
"paused": "Terhenti sementara",
"verifying": "Memeriksa…",
"completed_at": "Selesai pada {{date}}",
"completed": "Selesai",
"cancelled": "Dibatalkan",
"download_again": "Unduh lagi",
"cancel": "Batalkan",
"filter": "Saring game yang diunduh",
"remove": "Hapus",
"downloading_metadata": "Mengunduh metadata…",
"checking_files": "Memeriksa file…",
"starting_download": "Memulai unduhan…",
"deleting": "Menghapus file instalasi…",
"delete": "Hapus file instalasi",
"remove_from_list": "Hapus",
"delete_modal_title": "Kamu yakin?",
"delete_modal_description": "Proses ini akan menghapus semua file instalasi dari komputer kamu",
"install": "Install"
@@ -135,8 +105,6 @@
"notifications": "Pengingat",
"enable_download_notifications": "Saat unduhan selesai",
"enable_repack_list_notifications": "Saat repack terbaru ditambahkan",
"telemetry": "Telemetri",
"telemetry_description": "Izinkan statistik penggunaan data anonim",
"behavior": "Perilaku",
"quit_app_instead_hiding": "Tutup aplikasi alih-alih menyembunyikan aplikasi",
"launch_with_system": "Jalankan saat memulai sistem"

View File

@@ -16,3 +16,6 @@ export { default as ko } from "./ko/translation.json";
export { default as da } from "./da/translation.json";
export { default as ar } from "./ar/translation.json";
export { default as fa } from "./fa/translation.json";
export { default as ro } from "./ro/translation.json";
export { default as ca } from "./ca/translation.json";
export { default as kk } from "./kk/translation.json";

View File

@@ -1,7 +1,6 @@
{
"home": {
"featured": "In primo piano",
"recently_added": "Aggiunti di recente",
"trending": "Di tendenza",
"surprise_me": "Sorprendimi",
"no_results": "Nessun risultato trovato"
@@ -12,16 +11,10 @@
"settings": "Impostazioni",
"my_library": "La mia libreria",
"downloading_metadata": "{{title}} (Scaricamento metadati…)",
"checking_files": "{{title}} ({{percentage}} - Verifica file…)",
"paused": "{{title}} (In pausa)",
"downloading": "{{title}} ({{percentage}} - Download…)",
"filter": "Filtra libreria",
"follow_us": "Seguici",
"home": "Home",
"discord": "Unisciti al nostro Discord",
"telegram": "Unisciti al nostro Telegram",
"x": "Segui su X",
"github": "Contribuisci su GitHub"
"home": "Home"
},
"header": {
"search": "Cerca",
@@ -34,7 +27,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Nessun download in corso",
"downloading_metadata": "Scaricamento metadati di {{title}}…",
"checking_files": "Verifica file di {{title}}… ({{percentage}} completato)",
"downloading": "Download di {{title}}… ({{percentage}} completato) - Conclusione {{eta}} - {{speed}}"
},
"catalogue": {
@@ -52,27 +44,20 @@
"pause": "Metti in pausa",
"cancel": "Annulla",
"remove": "Rimuovi",
"remove_from_list": "Rimuovi",
"space_left_on_disk": "{{space}} rimasto sul disco",
"eta": "Conclusione {{eta}}",
"downloading_metadata": "Scaricamento metadati…",
"checking_files": "Verifica file…",
"filter": "Filtra repack",
"requirements": "Requisiti di sistema",
"minimum": "Minimi",
"recommended": "Consigliati",
"no_minimum_requirements": "{{title}} non fornisce informazioni sui requisiti minimi",
"no_recommended_requirements": "{{title}} non fornisce informazioni sui requisiti consigliati",
"paused_progress": "{{progress}} (In pausa)",
"release_date": "Rilasciato il {{date}}",
"publisher": "Pubblicato da {{publisher}}",
"copy_link_to_clipboard": "Copia link",
"copied_link_to_clipboard": "Link copiato",
"hours": "ore",
"minutes": "minuti",
"amount_hours": "{{amount}} ore",
"amount_minutes": "{{amount}} minuti",
"accuracy": "{{accuratezza}}% di accuratezza",
"accuracy": "{{accuracy}}% di accuratezza",
"add_to_library": "Aggiungi alla libreria",
"remove_from_library": "Rimuovi dalla libreria",
"no_downloads": "Nessun download disponibile",
@@ -86,17 +71,15 @@
"playing_now": "Stai giocando adesso",
"change": "Aggiorna",
"repacks_modal_description": "Scegli il repack che vuoi scaricare",
"downloads_path": "Percorso dei download",
"select_folder_hint": "Per cambiare la cartella predefinita, accedi alle",
"download_now": "Scarica ora",
"installation_instructions": "Istruzioni di installazione",
"installation_instructions_description": "Sono necessari passaggi aggiuntivi per installare questo gioco",
"online_fix_instruction": "I giochi OnlineFix richiedono una password per essere estratti. Quando richiesto, utilizza la seguente password:",
"dodi_installation_instruction": "Quando apri l'installatore di DODI, premi il tasto su della tua tastiera <0 /> per avviare il processo di installazione:",
"dont_show_it_again": "Non mostrarlo più",
"copy_to_clipboard": "Copia",
"copied_to_clipboard": "Copiato",
"got_it": "Capito"
"no_shop_details": "Impossibile recuperare i dettagli del negozio.",
"download_options": "Opzioni di download",
"download_path": "Percorso di download",
"previous_screenshot": "Screenshot precedente",
"next_screenshot": "Screenshot successivo",
"screenshot": "Screenshot {{number}}",
"open_screenshot": "Apri screenshot {{number}}"
},
"activation": {
"title": "Attiva Hydra",
@@ -112,19 +95,13 @@
"eta": "Conclusione {{eta}}",
"paused": "In pausa",
"verifying": "Verifica…",
"completed_at": "Completato in {{date}}",
"completed": "Completato",
"cancelled": "Annullato",
"download_again": "Scarica di nuovo",
"cancel": "Annulla",
"filter": "Filtra giochi scaricati",
"remove": "Rimuovi",
"downloading_metadata": "Scaricamento metadati…",
"checking_files": "Verifica file…",
"starting_download": "Avvio download…",
"deleting": "Eliminazione dell'installer…",
"delete": "Rimuovi installer",
"remove_from_list": "Rimuovi",
"delete_modal_title": "Sei sicuro?",
"delete_modal_description": "Questo rimuoverà tutti i file di installazione dal tuo computer",
"install": "Installa"
@@ -135,8 +112,14 @@
"notifications": "Notifiche",
"enable_download_notifications": "Quando un download è completo",
"enable_repack_list_notifications": "Quando viene aggiunto un nuovo repack",
"telemetry": "Telemetria",
"telemetry_description": "Abilita statistiche di utilizzo anonime"
"real_debrid_api_token_label": "Token API Real Debrid",
"quit_app_instead_hiding": "Esci da Hydra invece di nascondere nell'area di notifica",
"launch_with_system": "Apri Hydra all'avvio",
"general": "Generale",
"behavior": "Comportamento",
"enable_real_debrid": "Abilita Real Debrid",
"real_debrid_api_token_hint": "Puoi trovare la tua chiave API <0>here</0>",
"save_changes": "Salva modifiche"
},
"notifications": {
"download_complete": "Download completato",

View File

@@ -0,0 +1,242 @@
{
"app": {
"successfully_signed_in": "Сәтті кіру"
},
"home": {
"featured": "Ұсынылған",
"trending": "Трендте",
"surprise_me": "Таңқалдыр",
"no_results": "Ештеңе табылмады"
},
"sidebar": {
"catalogue": "Каталог",
"downloads": "Жүктеулер",
"settings": "Параметрлер",
"my_library": "Кітапхана",
"downloading_metadata": "{{title}} (Метадеректерді жүктеу…)",
"paused": "{{title}} (Тоқтатылды)",
"downloading": "{{title}} ({{percentage}} - Жүктеу…)",
"filter": "Кітапхана фильтрі",
"home": "Басты бет",
"queued": "{{title}} (Кезекте)",
"game_has_no_executable": "Ойынды іске қосу файлы таңдалмаған",
"sign_in": "Кіру"
},
"header": {
"search": "Іздеу",
"home": "Басты бет",
"catalogue": "Каталог",
"downloads": "Жүктеулер",
"search_results": "Іздеу нәтижелері",
"settings": "Параметрлер",
"version_available_install": "Қол жетімді нұсқа {{version}}. Қайта іске қосу және орнату үшін мұнда басыңыз.",
"version_available_download": "Қол жетімді нұсқа {{version}}. Жүктеу үшін мұнда басыңыз."
},
"bottom_panel": {
"no_downloads_in_progress": "Белсенді жүктеулер жоқ",
"downloading_metadata": "Метадеректерді жүктеу {{title}}…",
"downloading": "Жүктеу {{title}}… ({{percentage}} аяқталды) - Аяқтау {{eta}} - {{speed}}",
"calculating_eta": "Жүктеу {{title}}… ({{percentage}} аяқталды) - Қалған уақытты есептеу…"
},
"catalogue": {
"next_page": "Келесі бет",
"previous_page": "Алдыңғы бет"
},
"game_details": {
"open_download_options": "Жүктеу нұсқаларын ашу",
"download_options_zero": "Жүктеу нұсқалары жоқ",
"download_options_one": "{{count}} жүктеу нұсқасы",
"download_options_other": "{{count}} жүктеу нұсқалары",
"updated_at": "Жаңартылды {{updated_at}}",
"install": "Орнату",
"resume": "Жандандыру",
"pause": "Тоқтату",
"cancel": "Болдырмау",
"remove": "Жою",
"space_left_on_disk": "{{space}} бос орын",
"eta": "Аяқтау {{eta}}",
"calculating_eta": "Қалған уақытты есептеу…",
"downloading_metadata": "Метадеректерді жүктеу…",
"filter": "Репактар фильтрі",
"requirements": "Жүйелік талаптар",
"minimum": "Минималды",
"recommended": "Ұсынылған",
"paused": "Тоқтатылды",
"release_date": "Шыққан күні {{date}}",
"publisher": "Баспагер {{publisher}}",
"hours": "сағат",
"minutes": "минут",
"amount_hours": "{{amount}} сағат",
"amount_minutes": "{{amount}} минут",
"accuracy": "дәлдік {{accuracy}}%",
"add_to_library": "Кітапханаға қосу",
"remove_from_library": "Кітапханадан жою",
"no_downloads": "Жүктеулер жоқ",
"play_time": "Ойнау уақыты {{amount}}",
"last_time_played": "Соңғы ойнаған уақыт {{period}}",
"not_played_yet": "Сіз {{title}} ойнамағансыз",
"next_suggestion": "Келесі ұсыныс",
"play": "Ойнау",
"deleting": "Орнатушыны жою…",
"close": "Жабу",
"playing_now": "Қазір ойнап жатыр",
"change": "Өзгерту",
"repacks_modal_description": "Жүктеу үшін репакты таңдаңыз",
"select_folder_hint": "Әдепкі жүктеу қалтасын өзгерту үшін <0>Параметрлер</0> ашыңыз",
"download_now": "Қазір жүктеу",
"no_shop_details": "Сипаттаманы алу мүмкін болмады",
"download_options": "Жүктеу нұсқалары",
"download_path": "Жүктеу жолы",
"previous_screenshot": "Алдыңғы скриншот",
"next_screenshot": "Келесі скриншот",
"screenshot": "Скриншот {{number}}",
"open_screenshot": "Скриншотты ашу {{number}}",
"download_settings": "Жүктеу параметрлері",
"downloader": "Жүктегіш",
"select_executable": "Таңдау",
"no_executable_selected": "Файл таңдалмаған",
"open_folder": "Қалтаны ашу",
"open_download_location": "Жүктеу қалтасын қарау",
"create_shortcut": "Жұмыс үстелінде жарлық жасау",
"remove_files": "Файлдарды жою",
"remove_from_library_title": "Сіз сенімдісіз бе?",
"remove_from_library_description": "{{game}} сіздің кітапханаңыздан жойылады.",
"options": "Параметрлер",
"executable_section_title": "Файл",
"executable_section_description": "\"Ойнау\" батырмасын басқанда іске қосылатын файл жолы",
"downloads_secion_title": "Жүктеулер",
"downloads_section_description": "Ойынның жаңартулары немесе басқа нұсқалары бар-жоғын тексеру",
"danger_zone_section_title": "Қауіпті аймақ",
"danger_zone_section_description": "Осы ойынды кітапханаңыздан жою немесе Hydra жүктеген файлдарды жою",
"download_in_progress": "Жүктеу жүріп жатыр",
"download_paused": "Жүктеу тоқтатылды",
"last_downloaded_option": "Соңғы жүктеу нұсқасы",
"create_shortcut_success": "Жарлық жасалды",
"create_shortcut_error": "Жарлық жасау мүмкін болмады"
},
"activation": {
"title": "Hydra-ны белсендіру",
"installation_id": "Орнату ID:",
"enter_activation_code": "Активтендіру кодын енгізіңіз",
"message": "Егер оның қайдан алуға болатынын білмесеңіз, сізде оның болмауы керек.",
"activate": "Белсендіру",
"loading": "Жүктеу…"
},
"downloads": {
"resume": "Жандандыру",
"pause": "Тоқтату",
"eta": "Аяқтау {{eta}}",
"paused": "Тоқтатылды",
"verifying": "Тексеру…",
"completed": "Аяқталды",
"removed": "Жүктелмеген",
"cancel": "Болдырмау",
"filter": "Жүктелген ойындар фильтрі",
"remove": "Жою",
"downloading_metadata": "Метадеректерді жүктеу…",
"deleting": "Орнатушыны жою…",
"delete": "Орнатушыны жою",
"delete_modal_title": "Сіз сенімдісіз бе?",
"delete_modal_description": "Бұл барлық орнатушыларды компьютеріңізден жояды",
"install": "Орнату",
"download_in_progress": "Жүктеу жүріп жатыр",
"queued_downloads": "Кезектегі жүктеулер",
"downloads_completed": "Аяқталды",
"queued": "Кезекте",
"no_downloads_title": "Мұнда бос...",
"no_downloads_description": "Сіз Hydra арқылы әлі ештеңе жүктемегенсіз, бірақ бастау ешқашан кеш емес."
},
"settings": {
"downloads_path": "Жүктеу жолы",
"change": "Өзгерту",
"notifications": "Хабарламалар",
"enable_download_notifications": "Жүктеу аяқталғанда",
"enable_repack_list_notifications": "Жаңа репак қосылғанда",
"real_debrid_api_token_label": "Real-Debrid API-токен",
"quit_app_instead_hiding": "Hydra-ны трейге жасырудың орнына жабу",
"launch_with_system": "Жүйемен бірге Hydra-ны іске қосу",
"general": "Жалпы",
"behavior": "Мінез-құлық",
"download_sources": "Жүктеу көздері",
"language": "Тіл",
"real_debrid_api_token": "API Кілті",
"enable_real_debrid": "Real-Debrid-ті қосу",
"real_debrid_description": "Real-Debrid - бұл шектеусіз жүктеуші, ол интернетте орналастырылған файлдарды тез жүктеуге немесе жеке желі арқылы кез келген блоктарды айналып өтіп, оларды бірден плеерге беруге мүмкіндік береді.",
"real_debrid_invalid_token": "Қате API кілті",
"real_debrid_api_token_hint": "API кілтін <0>осы жерден</0> алуға болады",
"real_debrid_free_account_error": "\"{{username}}\" аккаунты жазылымға ие емес. Real-Debrid жазылымын алыңыз",
"real_debrid_linked_message": "\"{{username}}\" аккаунты байланған",
"save_changes": "Өзгерістерді сақтау",
"changes_saved": "Өзгерістер сәтті сақталды",
"download_sources_description": "Hydra осы көздерден жүктеу сілтемелерін алады. URL-да жүктеу сілтемелері бар .json файлына тікелей сілтеме болуы керек.",
"validate_download_source": "Тексеру",
"remove_download_source": "Жою",
"add_download_source": "Жүктеу көзін қосу",
"download_count_zero": "Жүктеулер тізімінде жоқ",
"download_count_one": "{{countFormatted}} жүктеу тізімде",
"download_count_other": "{{countFormatted}} жүктеу тізімде",
"download_options_zero": "Қолжетімді жүктеулер жоқ",
"download_options_one": "{{countFormatted}} жүктеу нұсқасы қол жетімді",
"download_options_other": "{{countFormatted}} жүктеу нұсқалары қол жетімді",
"download_source_url": "Көздің сілтемесі",
"add_download_source_description": ".json файлға сілтемені қойыңыз",
"download_source_up_to_date": "Жаңартылған",
"download_source_errored": "Қате",
"sync_download_sources": "Көздерді синхрондау",
"removed_download_source": "Жүктеу көзі жойылды",
"added_download_source": "Жүктеу көзі қосылды",
"download_sources_synced": "Барлық жүктеу көздері синхрондалды",
"insert_valid_json_url": "Жарамды JSON URL енгізіңіз",
"found_download_option_zero": "Жүктеу нұсқалары табылмады",
"found_download_option_one": "{{countFormatted}} жүктеу нұсқасы табылды",
"found_download_option_other": "{{countFormatted}} жүктеу нұсқалары табылды",
"import": "Импорттау"
},
"notifications": {
"download_complete": "Жүктеу аяқталды",
"game_ready_to_install": "{{title}} орнатуға дайын",
"repack_list_updated": "Репактар тізімі жаңартылды",
"repack_count_one": "{{count}} репак қосылды",
"repack_count_other": "{{count}} репактар қосылды"
},
"system_tray": {
"open": "Hydra-ны ашу",
"quit": "Шығу"
},
"game_card": {
"no_downloads": "Жүктеулер жоқ"
},
"binary_not_found_modal": {
"title": "Бағдарламалар орнатылмаған",
"description": "Wine немесе Lutris табылмады",
"instructions": "Linux дистрибутивіңізге олардың кез келгенін дұрыс орнатудың жолын біліңіз осылайша ойын дұрыс жұмыс істей алады"
},
"modal": {
"close": "Жабу"
},
"forms": {
"toggle_password_visibility": "Құпиясөзді көрсету"
},
"user_profile": {
"amount_hours": "{{amount}} сағат",
"amount_minutes": "{{amount}} минут",
"last_time_played": "Соңғы ойын {{period}}",
"activity": "Соңғы әрекет",
"library": "Кітапхана",
"total_play_time": "Барлығы ойнаған: {{amount}}",
"no_recent_activity_title": "Хммм... Мұнда ештеңе жоқ",
"no_recent_activity_description": "Сіз ұзақ уақыт бойы ештеңе ойнаған жоқсыз. Мұны өзгерту керек!",
"display_name": "Көрсету аты",
"saving": "Сақтау",
"save": "Сақталды",
"edit_profile": "Профильді өзгерту",
"saved_successfully": "Сәтті сақталды",
"try_again": "Қайта көріңіз",
"sign_out_modal_title": "Сіз сенімдісіз бе?",
"cancel": "Болдырмау",
"successfully_signed_out": "Аккаунттан сәтті шығу",
"sign_out": "Шығу",
"playing_for": "Ойнаған {{amount}}",
"sign_out_modal_text": "Сіздің кітапханаңыз ағымдағы аккаунтпен байланысты. Жүйеден шыққанда сіздің кітапханаңыз қол жетімсіз болады және прогресс сақталмайды. Шығу?"
}
}

View File

@@ -1,7 +1,6 @@
{
"home": {
"featured": "추천",
"recently_added": "최근 추가됨",
"trending": "인기",
"surprise_me": "무작위 추천",
"no_results": "결과 없음"
@@ -12,16 +11,10 @@
"settings": "설정",
"my_library": "내 라이브러리",
"downloading_metadata": "{{title}} (메타데이터 다운로드 중…)",
"checking_files": "{{title}} ({{percentage}} - 파일 검사 중…)",
"paused": "{{title}} (일시 정지됨)",
"downloading": "{{title}} ({{percentage}} - 다운로드 중…)",
"filter": "라이브러리 정렬",
"follow_us": "공식 SNS",
"home": "홈",
"discord": "공식 디스코드",
"telegram": "공식 텔레그램",
"x": "공식 X (구 트위터)",
"github": "GitHub에서 기여하기"
"home": "홈"
},
"header": {
"search": "게임 검색하기",
@@ -34,7 +27,6 @@
"bottom_panel": {
"no_downloads_in_progress": "진행중인 다운로드 없음",
"downloading_metadata": "{{title}}의 메타데이터를 다운로드 중…",
"checking_files": "{{title}}의 파일들을 검사 중… ({{percentage}} 완료)",
"downloading": "{{title}}의 파일들을 다운로드 중… ({{percentage}} 완료) - 완료까지 {{eta}} - {{speed}}"
},
"catalogue": {
@@ -52,22 +44,15 @@
"pause": "일시 정지",
"cancel": "취소",
"remove": "제거",
"remove_from_list": "목록에서 제거",
"space_left_on_disk": "여유 저장 용량 {{space}} 남음",
"eta": "완료까지 {{eta}}",
"downloading_metadata": "메타데이터 다운로드 중…",
"checking_files": "파일 검사 중…",
"filter": "리팩들을 다음과 같이 정렬하기",
"requirements": "시스템 사양",
"minimum": "최저 사양",
"recommended": "권장 사양",
"no_minimum_requirements": "{{title}}의 최저 사양을 제공받지 못 함",
"no_recommended_requirements": "{{title}}의 권장 사양을 제공받지 못 함",
"paused_progress": "{{progress}} (일시 정지)",
"release_date": "{{date}}에 발매됨",
"publisher": "{{publisher}} 배급",
"copy_link_to_clipboard": "링크 복사하기",
"copied_link_to_clipboard": "링크 복사됨",
"hours": "시",
"minutes": "분",
"amount_hours": "{{amount}} 시간",
@@ -86,17 +71,8 @@
"playing_now": "현재 플레이 중",
"change": "바꾸기",
"repacks_modal_description": "다운로드 할 리팩을 선택해 주세요",
"downloads_path": "다운로드 경로",
"select_folder_hint": "기본 폴더를 바꾸려면 <0>설정</0>으로 가세요",
"download_now": "지금 다운로드",
"installation_instructions": "설치 방법",
"installation_instructions_description": "이 게임을 설치하기 위해서는 추가적인 단계가 필요합니다",
"online_fix_instruction": "OnlineFix 게임들은 압축 해제 시 암호가 필요합니다. 비밀번호를 물을 때 다음을 암호로 사용하기:",
"dodi_installation_instruction": "DODI 인스톨러를 실행했다면 키보드의 위 방향키를 눌러 설치를 시작하세요:",
"dont_show_it_again": "다시 보지 않기",
"copy_to_clipboard": "복사하기",
"copied_to_clipboard": "복사됨",
"got_it": "알았습니다"
"download_now": "지금 다운로드"
},
"activation": {
"title": "Hydra 실행",
@@ -112,24 +88,16 @@
"eta": "완료까지 {{eta}}",
"paused": "일시 정지됨",
"verifying": "검증중…",
"completed_at": "{{date}}에 완료됨",
"completed": "완료됨",
"cancelled": "취소됨",
"download_again": "다시 다운로드 하기",
"cancel": "취소",
"filter": "다운로드 된 게임들을 정렬하기",
"remove": "제거하기",
"downloading_metadata": "메타데이터 다운로드 중…",
"checking_files": "파일 검사 중…",
"starting_download": "다운로드 개시 중…",
"deleting": "인스톨러 삭제 중…",
"delete": "인스톨러 삭제하기",
"remove_from_list": "제거하기",
"delete_modal_title": "정말로 하시겠습니까?",
"delete_modal_description": "이 기기의 모든 설치 파일들이 제거될 것입니다",
"install": "설치",
"real_debrid": "Real Debrid",
"torrent": "Torrent"
"install": "설치"
},
"settings": {
"downloads_path": "다운로드 경로",
@@ -137,15 +105,11 @@
"notifications": "알림",
"enable_download_notifications": "다운로드가 완료되었을 때",
"enable_repack_list_notifications": "새 리팩이 추가되었을 때",
"telemetry": "자동 데이터 수집",
"telemetry_description": "익명 사용 통계를 활성화",
"real_debrid_api_token_description": "Real Debrid API 토큰",
"quit_app_instead_hiding": "작업 표시줄 트레이로 최소화하는 대신 Hydra를 종료",
"launch_with_system": "컴퓨터가 시작되었을 때 Hydra 실행",
"general": "일반",
"behavior": "행동",
"enable_real_debrid": "Real Debrid 활성화",
"real_debrid": "Real Debrid",
"enable_real_debrid": "Real-Debrid 활성화",
"real_debrid_api_token_hint": "API 키를 <0>이곳</0>에서 얻으세요.",
"save_changes": "변경 사항 저장"
},

View File

@@ -1,7 +1,6 @@
{
"home": {
"featured": "Uitgelicht",
"recently_added": "Recent Toegevoegd",
"trending": "Trending",
"surprise_me": "Verrasing",
"no_results": "Geen resultaten gevonden"
@@ -12,16 +11,10 @@
"settings": "Instellingen",
"my_library": "Mijn Bibliotheek",
"downloading_metadata": "{{title}} (Downloading metadata…)",
"checking_files": "{{title}} ({{percentage}} - Folders checken…)",
"paused": "{{title}} (Gepauzeerd)",
"downloading": "{{title}} ({{percentage}} - Downloading…)",
"filter": "Filter Bibliotheek",
"follow_us": "volg ons",
"home": "Home",
"discord": "Volg onze Discord",
"telegram": "Volg onze Telegram",
"x": "Volg ons op X",
"github": "Contribute op GitHub"
"home": "Home"
},
"header": {
"search": "Zoek spellen",
@@ -34,7 +27,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Geen Downloads bezig",
"downloading_metadata": "Downloading {{title}} metadata…",
"checking_files": "Checking {{title}} files… ({{percentage}} complete)",
"downloading": "Downloading {{title}}… ({{percentage}} complete) - Conclusion {{eta}} - {{speed}}"
},
"catalogue": {
@@ -52,22 +44,15 @@
"pause": "Pauze",
"cancel": "Stoppen",
"remove": "Verwijderen",
"remove_from_list": "Verwijdere van lijst",
"space_left_on_disk": "{{space}} Over op schijf",
"eta": "Conclusie {{eta}}",
"downloading_metadata": "Downloading metadata…",
"checking_files": "Files nakijken…",
"filter": "Filter repacks",
"requirements": "Systeem vereisten",
"minimum": "Minimaal",
"recommended": "Aanbevolen",
"no_minimum_requirements": "{{title}} biedt geen informatie over de minimale vereisten",
"no_recommended_requirements": "{{title}} biedt geen informatie over aanbevolen vereisten",
"paused_progress": "{{progress}} (Paused)",
"release_date": "Uitgebracht op {{date}}",
"publisher": "Gepubliceerd door {{publisher}}",
"copy_link_to_clipboard": "Kopieer link",
"copied_link_to_clipboard": "Link Gekopieerd",
"hours": "uren",
"minutes": "minuten",
"amount_hours": "{{amount}} uren",
@@ -86,17 +71,8 @@
"playing_now": "Speel nu",
"change": "Verander",
"repacks_modal_description": "Kies de herverpakking die u wilt downloaden",
"downloads_path": "Downloads path",
"select_folder_hint": "Om de standaardmap te wijzigen, gaat u naar <0>instellingen</0>",
"download_now": "Download nu",
"installation_instructions": "Installatie instructies",
"installation_instructions_description": "Er zijn extra stappen vereist om deze game te installeren",
"online_fix_instruction": "OnlineFix-spellen vereisen dat een wachtwoord wordt uitgepakt. Gebruik indien nodig het volgende wachtwoord:",
"dodi_installation_instruction": "Wanneer u het DODI-installatieprogramma opent, drukt u op de toets omhoog <0 /> op uw toetsenbord om het installatieproces te starten:",
"dont_show_it_again": "Laat het niet meer zien",
"copy_to_clipboard": "Kopiëren",
"copied_to_clipboard": "Gekopieerd",
"got_it": "Begrepen"
"download_now": "Download nu"
},
"activation": {
"title": "Activeer Hydra",
@@ -112,24 +88,16 @@
"eta": "Conclusie{{eta}}",
"paused": "Gepauzeerd",
"verifying": "Verifiëren…",
"completed_at": "Voltooid binnen {{date}}",
"completed": "Voltooid",
"cancelled": "Geannuleerd",
"download_again": "Opnieuw downloaden",
"cancel": "Annuleren",
"filter": "Filter gedownloade games",
"remove": "Verwijderen",
"downloading_metadata": "Metagegevens downloaden",
"checking_files": "Bestanden controleren",
"starting_download": "download starten",
"deleting": "Installatieprogramma verwijderen…",
"delete": "Installatieprogramma verwijderen",
"remove_from_list": "Verwijderen",
"delete_modal_title": "Weet je het zeker?",
"delete_modal_description": "Hiermee worden alle installatiebestanden van uw computer verwijderd",
"install": "Installeren",
"real_debrid": "Real Debrid",
"torrent": "Torrent"
"install": "Installeren"
},
"settings": {
"downloads_path": "Downloadpad",
@@ -137,15 +105,12 @@
"notifications": "Meldingen",
"enable_download_notifications": "Wanneer een download voltooid is",
"enable_repack_list_notifications": "Wanneer een nieuwe herverpakking wordt toegevoegd",
"telemetry": "Telemetrie",
"telemetry_description": "Schakel anonieme gebruiksstatistieken in",
"real_debrid_api_token_label": "Real Debrid API token",
"real_debrid_api_token_label": "Real-Debrid API token",
"quit_app_instead_hiding": "Sluit Hydra af in plaats van te minimaliseren naar de lade",
"launch_with_system": "Start Hydra bij het opstarten van het systeem",
"general": "Algemeen",
"behavior": "Gedrag",
"enable_real_debrid": "Enable Real Debrid",
"real_debrid": "Real Debrid",
"enable_real_debrid": "Enable Real-Debrid",
"real_debrid_api_token_hint": "U kunt uw API-sleutel <0>hier</0> verkrijgen.",
"save_changes": "Wijzigingen opslaan"
},

View File

@@ -1,7 +1,6 @@
{
"home": {
"featured": "Wyróżnione",
"recently_added": "Ostatnio dodane",
"trending": "Trendujące",
"surprise_me": "Zaskocz mnie",
"no_results": "Nie znaleziono wyników"
@@ -12,16 +11,10 @@
"settings": "Ustawienia",
"my_library": "Moja biblioteka",
"downloading_metadata": "{{title}} (Pobieranie metadata…)",
"checking_files": "{{title}} ({{percentage}} - Sprawdzanie plików…)",
"paused": "{{title}} (Zatrzymano)",
"downloading": "{{title}} ({{percentage}} - Pobieranie…)",
"filter": "Filtruj biblioteke",
"follow_us": "Śledź nas",
"home": "Główna",
"discord": "Dołącz nasz Discord",
"telegram": "Dołącz nasz Telegram",
"x": "Śledź na X",
"github": "Przyczyń się na GitHub"
"home": "Główna"
},
"header": {
"search": "Szukaj",
@@ -34,7 +27,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Brak pobierań w toku",
"downloading_metadata": "Pobieranie {{title}} metadata…",
"checking_files": "Sprawdzanie {{title}} plików… (ukończone w {{percentage}})",
"downloading": "Pobieranie {{title}}… (ukończone w {{percentage}}) - Podsumowanie {{eta}} - {{speed}}"
},
"catalogue": {
@@ -52,22 +44,15 @@
"pause": "Zatrzymaj",
"cancel": "Anuluj",
"remove": "Usuń",
"remove_from_list": "Usuń",
"space_left_on_disk": "{{space}} wolnego na dysku",
"eta": "Podsumowanie {{eta}}",
"downloading_metadata": "Pobieranie metadata…",
"checking_files": "Sprawdzanie plików…",
"filter": "Filtruj repacki",
"requirements": "Wymagania systemowe",
"minimum": "Minimalne",
"recommended": "Zalecane",
"no_minimum_requirements": "{{title}} nie zawiera informacji o minimalnych wymaganiach",
"no_recommended_requirements": "{{title}} nie zawiera informacji o zalecanych wymaganiach",
"paused_progress": "{{progress}} (Zatrzymano)",
"release_date": "Wydano w {{date}}",
"publisher": "Opublikowany przez {{publisher}}",
"copy_link_to_clipboard": "Kopiuj łącze",
"copied_link_to_clipboard": "Skopiowano łącze",
"hours": "godzin",
"minutes": "minut",
"amount_hours": "{{amount}} godzin",
@@ -88,14 +73,6 @@
"repacks_modal_description": "Wybierz repack, który chcesz pobrać",
"select_folder_hint": "Aby zmienić domyślny folder, przejdź do",
"download_now": "Pobierz teraz",
"installation_instructions": "Instrukcja instalacji",
"installation_instructions_description": "Do zainstalowania tej gry wymagane są dodatkowe kroki",
"online_fix_instruction": "Gry OnlineFix wymagają hasła do wyodrębnienia. W razie potrzeby użyj następującego hasła:",
"dodi_installation_instruction": "Po otwarciu instalatora DODI naciśnij klawisz <0 /> w górę, aby rozpocząć proces instalacji:",
"dont_show_it_again": "Nie pokazuj tego ponownie",
"copy_to_clipboard": "Skopiuj",
"copied_to_clipboard": "Skopiowano",
"got_it": "Rozumiem",
"no_shop_details": "Nie udało się pobrać danych sklepu.",
"download_options": "Opcje pobierania",
"download_path": "Ścieżka pobierania",
@@ -118,24 +95,16 @@
"eta": "Podsumowanie {{eta}}",
"paused": "Zatrzymano",
"verifying": "Weryfikowanie…",
"completed_at": "Zakończono w {{date}}",
"completed": "Zakończono",
"cancelled": "Anulowano",
"download_again": "Pobierz ponownie",
"cancel": "Anuluj",
"filter": "Filtruj pobrane gry",
"remove": "Usuń",
"downloading_metadata": "Pobieranie metadata…",
"checking_files": "Sprawdzanie plików…",
"starting_download": "Rozpoczęto pobieranie…",
"deleting": "Usuwanie instalatora…",
"delete": "Usuń instalator",
"remove_from_list": "Usuń",
"delete_modal_title": "Czy na pewno?",
"delete_modal_description": "Spowoduje to usunięcie wszystkich plików instalacyjnych z komputera",
"install": "Instaluj",
"real_debrid": "Real Debrid",
"torrent": "Torrent"
"install": "Instaluj"
},
"settings": {
"downloads_path": "Ścieżka pobierania",
@@ -143,16 +112,14 @@
"notifications": "Powiadomienia",
"enable_download_notifications": "Gdy pobieranie zostanie zakończone",
"enable_repack_list_notifications": "Gdy dodawany jest nowy repack",
"telemetry": "Telemetria",
"telemetry_description": "Włącz anonimowe statystyki użycia",
"real_debrid_api_token_label": "Real Debrid API token",
"real_debrid_api_token_label": "Real-Debrid API token",
"quit_app_instead_hiding": "Zamknij Hydr zamiast minimalizować do zasobnika",
"launch_with_system": "Uruchom Hydra przy starcie systemu",
"general": "Ogólne",
"behavior": "Zachowania",
"enable_real_debrid": "Włącz Real Debrid",
"real_debrid": "Real Debrid",
"real_debrid_api_token_hint": "Możesz uzyskać swój klucz API <0>tutaj</0>.",
"language": "Język",
"enable_real_debrid": "Włącz Real-Debrid",
"real_debrid_api_token_hint": "Możesz uzyskać swój klucz API <0>tutaj</0>",
"save_changes": "Zapisz zmiany"
},
"notifications": {

View File

@@ -1,7 +1,9 @@
{
"app": {
"successfully_signed_in": "Autenticado com sucesso"
},
"home": {
"featured": "Destaque",
"recently_added": "Recém adicionados",
"featured": "Destaques",
"trending": "Populares",
"surprise_me": "Surpreenda-me",
"no_results": "Nenhum resultado encontrado"
@@ -9,33 +11,39 @@
"sidebar": {
"catalogue": "Catálogo",
"downloads": "Downloads",
"settings": "Configurações",
"settings": "Ajustes",
"my_library": "Minha biblioteca",
"downloading_metadata": "{{title}} (Baixando metadados…)",
"checking_files": "{{title}} ({{percentage}} - Verificando arquivos…)",
"paused": "{{title}} (Pausado)",
"downloading": "{{title}} ({{percentage}} - Baixando…)",
"filter": "Filtrar biblioteca",
"home": "Início",
"follow_us": "Acompanhe-nos",
"discord": "Entre no nosso Discord",
"telegram": "Entre no nosso Telegram",
"x": "Siga-nos no X",
"github": "Contribua no GitHub"
"queued": "{{title}} (Na fila)",
"game_has_no_executable": "Jogo não possui executável selecionado",
"sign_in": "Login",
"sort_by": "Ordenar por",
"latest_added": "Adicionado recente",
"alphabetically": "Alfabeticamente",
"last_launched": "Último jogado",
"number_of_hours": "Qtd. de horas jogadas",
"installed_or_not": "Instalado ou não"
},
"header": {
"search": "Buscar jogos",
"catalogue": "Catálogo",
"downloads": "Downloads",
"search_results": "Resultados da busca",
"settings": "Configurações",
"home": "Início"
"settings": "Ajustes",
"home": "Início",
"version_available_install": "Versão {{version}} disponível. Clique aqui para reiniciar e instalar.",
"version_available_download": "Versão {{version}} disponível. Clique aqui para fazer o download."
},
"bottom_panel": {
"no_downloads_in_progress": "Sem downloads em andamento",
"downloading_metadata": "Baixando metadados de {{title}}…",
"checking_files": "Verificando arquivos de {{title}}… ({{percentage}} completo)",
"downloading": "Baixando {{title}}… ({{percentage}} completo) - Conclusão {{eta}} - {{speed}}"
"downloading": "Baixando {{title}}… ({{percentage}} concluído) - Conclusão {{eta}} - {{speed}}",
"calculating_eta": "Baixando {{title}}… ({{percentage}} concluído) - Calculando tempo restante…",
"checking_files": "Verificando arquivos de {{title}}…"
},
"game_details": {
"open_download_options": "Ver opções de download",
@@ -47,22 +55,17 @@
"pause": "Pausar",
"cancel": "Cancelar",
"remove": "Remover",
"remove_from_list": "Remover",
"space_left_on_disk": "{{space}} livres em disco",
"eta": "Conclusão {{eta}}",
"calculating_eta": "Calculando tempo restante…",
"downloading_metadata": "Baixando metadados…",
"checking_files": "Verificando arquivos…",
"filter": "Filtrar repacks",
"requirements": "Requisitos do sistema",
"minimum": "Mínimos",
"recommended": "Recomendados",
"no_minimum_requirements": "{{title}} não possui informações de requisitos mínimos",
"no_recommended_requirements": "{{title}} não possui informações de requisitos recomendados",
"paused_progress": "{{progress}} (Pausado)",
"paused": "Pausado",
"release_date": "Lançado em {{date}}",
"publisher": "Publicado por {{publisher}}",
"copy_link_to_clipboard": "Copiar link",
"copied_link_to_clipboard": "Link copiado",
"hours": "horas",
"minutes": "minutos",
"amount_hours": "{{amount}} horas",
@@ -82,23 +85,37 @@
"playing_now": "Jogando agora",
"change": "Mudar",
"repacks_modal_description": "Escolha o repack do jogo que deseja baixar",
"select_folder_hint": "Para trocar a pasta padrão, acesse a <0>Tela de Configurações</0>",
"download_now": "Baixe agora",
"installation_instructions": "Instruções de Instalação",
"installation_instructions_description": "Passos adicionais são necessários para instalar esse jogo",
"online_fix_instruction": "Jogos OnlineFix precisam de uma senha para serem extraídos. Quando solicitado, utilize a seguinte senha:",
"dodi_installation_instruction": "Quando o instalador do DODI for aberto, pressione a seta para cima <0 /> do teclado para iniciar o processo de instalação:",
"dont_show_it_again": "Não mostrar novamente",
"copy_to_clipboard": "Copiar",
"copied_to_clipboard": "Copiado",
"got_it": "Entendi",
"select_folder_hint": "Para trocar o diretório padrão, acesse a <0>Tela de Ajustes</0>",
"download_now": "Iniciar download",
"no_shop_details": "Não foi possível obter os detalhes da loja.",
"download_options": "Opções de download",
"download_path": "Diretório de download",
"previous_screenshot": "Captura de tela anterior",
"next_screenshot": "Próxima captura de tela",
"screenshot": "Captura de tela {{number}}",
"open_screenshot": "Ver captura de tela {{number}}"
"open_screenshot": "Ver captura de tela {{number}}",
"download_settings": "Ajustes do download",
"downloader": "Downloader",
"select_executable": "Selecionar",
"no_executable_selected": "Nenhum executável selecionado",
"open_folder": "Abrir pasta",
"open_download_location": "Ver arquivos baixados",
"create_shortcut": "Criar atalho na área de trabalho",
"remove_files": "Remover arquivos",
"options": "Opções",
"remove_from_library_description": "Isso irá remover {{game}} da sua biblioteca",
"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_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",
"download_in_progress": "Download em andamento",
"download_paused": "Download pausado",
"last_downloaded_option": "Última opção baixada",
"create_shortcut_success": "Atalho criado com sucesso",
"create_shortcut_error": "Erro ao criar atalho"
},
"activation": {
"title": "Ativação",
@@ -114,24 +131,24 @@
"eta": "Conclusão {{eta}}",
"paused": "Pausado",
"verifying": "Verificando…",
"completed_at": "Concluído em {{date}}",
"completed": "Concluído",
"cancelled": "Cancelado",
"download_again": "Baixar novamente",
"removed": "Cancelado",
"cancel": "Cancelar",
"filter": "Filtrar jogos baixados",
"remove": "Remover",
"downloading_metadata": "Baixando metadados…",
"checking_files": "Verificando arquivos…",
"starting_download": "Iniciando download…",
"remove_from_list": "Remover",
"delete": "Remover instalador",
"delete_modal_description": "Isso removerá todos os arquivos de instalação do seu computador",
"delete_modal_title": "Tem certeza?",
"deleting": "Excluindo instalador…",
"install": "Instalar",
"torrent": "Torrent",
"real_debrid": "Real Debrid"
"download_in_progress": "Baixando agora",
"queued_downloads": "Na fila",
"downloads_completed": "Completo",
"queued": "Na fila",
"no_downloads_title": "Nada por aqui…",
"no_downloads_description": "Você ainda não baixou nada pelo Hydra, mas nunca é tarde para começar.",
"checking_files": "Verificando arquivos…"
},
"settings": {
"downloads_path": "Diretório dos downloads",
@@ -139,17 +156,45 @@
"notifications": "Notificações",
"enable_download_notifications": "Quando um download for concluído",
"enable_repack_list_notifications": "Quando a lista de repacks for atualizada",
"telemetry": "Telemetria",
"telemetry_description": "Habilitar estatísticas de uso anônimas",
"real_debrid_api_token_label": "Token de API do Real Debrid",
"quit_app_instead_hiding": "Fechar o aplicativo em vez de minimizá-lo",
"launch_with_system": "Iniciar aplicativo na inicialização do sistema",
"real_debrid_api_token_label": "Token de API do Real-Debrid",
"quit_app_instead_hiding": "Encerrar o Hydra ao invés de minimizá-lo ao fechar",
"launch_with_system": "Iniciar o Hydra junto com o sistema",
"general": "Geral",
"behavior": "Comportamento",
"enable_real_debrid": "Habilitar Real Debrid",
"real_debrid": "Real Debrid",
"real_debrid_api_token_hint": "Você pode obter sua chave de API <0>aqui</0>.",
"save_changes": "Salvar mudanças"
"download_sources": "Fontes de download",
"language": "Idioma",
"real_debrid_api_token": "Token de API",
"enable_real_debrid": "Habilitar Real-Debrid",
"real_debrid_api_token_hint": "Você pode obter seu token de API <0>aqui</0>",
"real_debrid_description": "O Real-Debrid é um downloader sem restrições que permite baixar arquivos instantaneamente e com a melhor velocidade da sua Internet.",
"real_debrid_invalid_token": "Token de API inválido",
"real_debrid_free_account_error": "A conta \"{{username}}\" é uma conta gratuita. Por favor, assine a Real-Debrid",
"real_debrid_linked_message": "Conta \"{{username}}\" vinculada",
"save_changes": "Salvar mudanças",
"changes_saved": "Ajustes salvos com sucesso",
"download_sources_description": "Hydra vai buscar links de download em todas as fonte habilitadas. A URL da fonte deve ser um link direto para um arquivo .json contendo uma lista de links.",
"validate_download_source": "Validar",
"remove_download_source": "Remover",
"add_download_source": "Adicionar fonte",
"download_count_zero": "Sem downloads na lista",
"download_count_one": "{{countFormatted}} download na lista",
"download_count_other": "{{countFormatted}} downloads na lista",
"download_options_zero": "Sem downloads disponíveis",
"download_options_one": "{{countFormatted}} download disponível",
"download_options_other": "{{countFormatted}} downloads disponíveis",
"download_source_url": "URL da fonte",
"add_download_source_description": "Insira a URL contendo o arquivo .json",
"download_source_up_to_date": "Sincronizada",
"download_source_errored": "Falhou",
"sync_download_sources": "Sincronizar",
"removed_download_source": "Fonte removida",
"added_download_source": "Fonte adicionada",
"download_sources_synced": "As fontes foram sincronizadas",
"insert_valid_json_url": "Insira a url de um JSON válido",
"found_download_option_zero": "Nenhuma opção de download encontrada",
"found_download_option_one": "{{countFormatted}} opção de download encontrada",
"found_download_option_other": "{{countFormatted}} opções de download encontradas",
"import": "Importar"
},
"notifications": {
"download_complete": "Download concluído",
@@ -176,5 +221,30 @@
},
"modal": {
"close": "Botão de fechar"
},
"forms": {
"toggle_password_visibility": "Alternar visibilidade da senha"
},
"user_profile": {
"amount_hours": "{{amount}} horas",
"amount_minutes": "{{amount}} minutos",
"last_time_played": "Jogou {{period}}",
"activity": "Atividade recente",
"library": "Biblioteca",
"total_play_time": "Tempo total de jogo: {{amount}}",
"no_recent_activity_title": "Hmmm… nada por aqui",
"no_recent_activity_description": "Parece que você não jogou nada recentemente. Que tal começar agora?",
"display_name": "Nome de exibição",
"saving": "Salvando…",
"save": "Salvar",
"edit_profile": "Editar Perfil",
"saved_successfully": "Salvo com sucesso",
"try_again": "Por favor, tente novamente",
"cancel": "Cancelar",
"successfully_signed_out": "Deslogado com sucesso",
"sign_out": "Sair da conta",
"sign_out_modal_title": "Tem certeza?",
"playing_for": "Jogando por {{amount}}",
"sign_out_modal_text": "Sua biblioteca de jogos está associada com a sua conta atual. Ao sair, sua biblioteca não aparecerá mais no Hydra e qualquer progresso não será salvo. Deseja continuar?"
}
}

View File

@@ -0,0 +1,159 @@
{
"home": {
"featured": "Recomandate",
"trending": "Populare",
"surprise_me": "Surprinde-mă",
"no_results": "Niciun rezultat găsit"
},
"sidebar": {
"catalogue": "Catalog",
"downloads": "Descărcări",
"settings": "Setări",
"my_library": "Biblioteca mea",
"downloading_metadata": "{{title}} (Se descarcă metadata...)",
"paused": "{{title}} (Pauzat)",
"downloading": "{{title}} ({{percentage}} - Se descarcă...)",
"filter": "Filtrează biblioteca",
"home": "Acasă"
},
"header": {
"search": "Caută jocuri",
"home": "Acasă",
"catalogue": "Catalog",
"downloads": "Descărcări",
"search_results": "Rezultatele căutării",
"settings": "Setări"
},
"bottom_panel": {
"no_downloads_in_progress": "Nicio descărcare în curs",
"downloading_metadata": "Se descarcă metadata pentru {{title}}...",
"downloading": "Se descarcă {{title}}... ({{percentage}} complet) - Concluzie {{eta}} - {{speed}}",
"calculating_eta": "Se descarcă {{title}}... ({{percentage}} complet) - Calculare timp rămas..."
},
"catalogue": {
"next_page": "Pagina următoare",
"previous_page": "Pagina anterioară"
},
"game_details": {
"open_download_options": "Deschide opțiunile de descărcare",
"download_options_zero": "Nicio opțiune de descărcare",
"download_options_one": "{{count}} opțiune de descărcare",
"download_options_other": "{{count}} opțiuni de descărcare",
"updated_at": "Actualizat la {{updated_at}}",
"install": "Instalează",
"resume": "Reia",
"pause": "Pauză",
"cancel": "Anulează",
"remove": "Elimină",
"space_left_on_disk": "{{space}} liber pe disc",
"eta": "Concluzie {{eta}}",
"calculating_eta": "Calculare timp rămas...",
"downloading_metadata": "Se descarcă metadata...",
"filter": "Filtrează repack-urile",
"requirements": "Cerințe de sistem",
"minimum": "Minim",
"recommended": "Recomandat",
"paused": "Pauzat",
"release_date": "Lansat pe {{date}}",
"publisher": "Publicat de {{publisher}}",
"hours": "ore",
"minutes": "minute",
"amount_hours": "{{amount}} ore",
"amount_minutes": "{{amount}} minute",
"accuracy": "{{accuracy}}% acuratețe",
"add_to_library": "Adaugă în bibliotecă",
"remove_from_library": "Elimină din bibliotecă",
"no_downloads": "Nicio descărcare disponibilă",
"play_time": "Jucat timp de {{amount}}",
"last_time_played": "Ultima dată jucat {{period}}",
"not_played_yet": "Nu ai jucat încă {{title}}",
"next_suggestion": "Sugestia următoare",
"play": "Joacă",
"deleting": "Se șterge programul de instalare...",
"close": "Închide",
"playing_now": "Se joacă acum",
"change": "Schimbă",
"repacks_modal_description": "Alege repack-ul pe care vrei să-l descarci",
"select_folder_hint": "Pentru a schimba folderul predefinit, mergi la <0>Setări</0>",
"download_now": "Descarcă acum",
"no_shop_details": "Nu s-au putut obține detalii din magazin.",
"download_options": "Opțiuni de descărcare",
"download_path": "Locația de descărcare",
"previous_screenshot": "Captura de ecran anterioară",
"next_screenshot": "Captura de ecran următoare",
"screenshot": "Captură de ecran {{number}}",
"open_screenshot": "Deschide captura de ecran {{number}}",
"download_settings": "Setări de descărcare",
"downloader": "Program de descărcare"
},
"activation": {
"title": "Activează Hydra",
"installation_id": "ID-ul de instalare:",
"enter_activation_code": "Introdu codul de activare",
"message": "Dacă nu știi de unde să ceri acest lucru, atunci nu ar trebui să-l ai.",
"activate": "Activează",
"loading": "Se încarcă..."
},
"downloads": {
"resume": "Reia",
"pause": "Pauză",
"eta": "Concluzie {{eta}}",
"paused": "Pauzat",
"verifying": "Se verifică...",
"completed": "Completat",
"removed": "Nu este descărcat",
"cancel": "Anulează",
"filter": "Filtrează jocurile descărcate",
"remove": "Elimină",
"downloading_metadata": "Se descarcă metadata...",
"deleting": "Se șterge programul de instalare...",
"delete": "Elimină programul de instalare",
"delete_modal_title": "Ești sigur?",
"delete_modal_description": "Aceasta va elimina toate fișierele de instalare de pe computer",
"install": "Instalează"
},
"settings": {
"downloads_path": "Locația de descărcare",
"change": "Actualizează",
"notifications": "Notificări",
"enable_download_notifications": "Când o descărcare este completă",
"enable_repack_list_notifications": "Când un nou repack este adăugat",
"real_debrid_api_token_label": "Token API Real-Debrid",
"quit_app_instead_hiding": "Nu ascunde Hydra la închidere",
"launch_with_system": "Lansează Hydra la pornirea sistemului",
"general": "General",
"behavior": "Comportament",
"language": "Limbă",
"real_debrid_api_token": "Token API",
"enable_real_debrid": "Activează Real-Debrid",
"real_debrid_description": "Real-Debrid este un descărcător fără restricții care îți permite să descarci fișiere instantaneu și la cea mai bună viteză a internetului tău.",
"real_debrid_invalid_token": "Token API invalid",
"real_debrid_api_token_hint": "Poți obține token-ul tău API <0>aici</0>",
"real_debrid_free_account_error": "Contul \"{{username}}\" este un cont gratuit. Te rugăm să te abonezi la Real-Debrid",
"real_debrid_linked_message": "Contul \"{{username}}\" a fost legat",
"save_changes": "Salvează modificările",
"changes_saved": "Modificările au fost salvate cu succes"
},
"notifications": {
"download_complete": "Descărcare completă",
"game_ready_to_install": "{{title}} este gata de instalare",
"repack_list_updated": "Lista de repack-uri a fost actualizată",
"repack_count_one": "{{count}} repack adăugat",
"repack_count_other": "{{count}} repack-uri adăugate"
},
"system_tray": {
"open": "Deschide Hydra",
"quit": "Ieși"
},
"game_card": {
"no_downloads": "Nicio descărcare disponibilă"
},
"binary_not_found_modal": {
"title": "Programele nu sunt instalate",
"description": "Fișierele executabile Wine sau Lutris nu au fost găsite pe sistemul tău",
"instructions": "Verifică modul corect de instalare a oricăruia dintre acestea pe distribuția ta Linux pentru ca jocul să ruleze normal"
},
"modal": {
"close": "Buton de închidere"
}
}

View File

@@ -1,7 +1,9 @@
{
"app": {
"successfully_signed_in": "Успешный вход"
},
"home": {
"featured": "Рекомендованное",
"recently_added": "Новинки",
"trending": "В тренде",
"surprise_me": "Удиви меня",
"no_results": "Ничего не найдено"
@@ -12,16 +14,13 @@
"settings": "Настройки",
"my_library": "Библиотека",
"downloading_metadata": "{{title}} (Загрузка метаданных…)",
"checking_files": "{{title}} ({{percentage}} - Проверка файлов…)",
"paused": "{{title}} (Приостановлено)",
"downloading": "{{title}} ({{percentage}} - Загрузка…)",
"filter": "Фильтр библиотеки",
"follow_us": "Подписывайтесь на нас",
"home": "Главная",
"discord": "Присоединяйтесь к Discord",
"telegram": "Присоединяйтесь к Telegram",
"x": "Подписывайтесь на X",
"github": "Внести свой вклад на GitHub"
"queued": "{{title}} (В очереди)",
"game_has_no_executable": "Файл запуска игры не выбран",
"sign_in": "Войти"
},
"header": {
"search": "Поиск",
@@ -29,13 +28,15 @@
"catalogue": "Каталог",
"downloads": "Загрузки",
"search_results": "Результаты поиска",
"settings": "Настройки"
"settings": "Настройки",
"version_available_install": "Доступна версия {{version}}. Нажмите здесь для перезапуска и установки.",
"version_available_download": "Доступна версия {{version}}. Нажмите здесь для загрузки."
},
"bottom_panel": {
"no_downloads_in_progress": "Нет активных загрузок",
"downloading_metadata": "Загрузка метаданных {{title}}…",
"checking_files": "Проверка файлов {{title}}… ({{percentage}} завершено)",
"downloading": "Загрузка {{title}}… ({{percentage}} завершено) - Окончание {{eta}} - {{speed}}"
"downloading": "Загрузка {{title}}… ({{percentage}} завершено) - Окончание {{eta}} - {{speed}}",
"calculating_eta": "Загрузка {{title}}… ({{percentage}} завершено) - Подсчёт оставшегося времени…"
},
"catalogue": {
"next_page": "Следующая страница",
@@ -52,22 +53,17 @@
"pause": "Приостановить",
"cancel": "Отменить",
"remove": "Удалить",
"remove_from_list": "Удалить",
"space_left_on_disk": "{{space}} свободно на диске",
"eta": "Окончание {{eta}}",
"calculating_eta": "Подсчёт оставшегося времени…",
"downloading_metadata": "Загрузка метаданных…",
"checking_files": "Проверка файлов…",
"filter": "Фильтр репаков",
"requirements": "Системные требования",
"minimum": "Минимальные",
"recommended": "Рекомендуемые",
"no_minimum_requirements": "Для {{title}} не указаны минимальные требования",
"no_recommended_requirements": "Для {{title}} не указаны рекомендуемые требования",
"paused_progress": "{{progress}} (Приостановлено)",
"paused": "Приостановлено",
"release_date": "Выпущено {{date}}",
"publisher": "Издатель {{publisher}}",
"copy_link_to_clipboard": "Копировать ссылку",
"copied_link_to_clipboard": "Ссылка скопирована",
"hours": "часов",
"minutes": "минут",
"amount_hours": "{{amount}} часов",
@@ -88,21 +84,35 @@
"repacks_modal_description": "Выберите репак для загрузки",
"select_folder_hint": "Чтобы изменить папку загрузок по умолчанию, откройте <0>Настройки</0>",
"download_now": "Загрузить сейчас",
"installation_instructions": "Инструкция по установке",
"installation_instructions_description": "Для установки этой игры требуются дополнительные шаги",
"online_fix_instruction": "В играх с OnlineFix требуется ввести пароль для извлечения. При необходимости используйте следующий пароль:",
"dodi_installation_instruction": "Когда вы откроете установщик DODI, нажмите на клавиатуре клавишу 'вверх' <0 />, чтобы начать процесс установки:",
"dont_show_it_again": "Не показывать снова",
"copy_to_clipboard": "Копировать",
"copied_to_clipboard": "Скопировано",
"got_it": "Понятно",
"no_shop_details": "Не удалось получить описание",
"download_options": "Вариантов загрузки",
"download_path": "Путь для загрузок",
"previous_screenshot": "Предыдущий скриншот",
"next_screenshot": "Следующий скриншот",
"screenshot": "Скриншот {{number}}",
"open_screenshot": "Открыть скриншот {{number}}"
"open_screenshot": "Открыть скриншот {{number}}",
"download_settings": "Параметры загрузки",
"downloader": "Загрузчик",
"select_executable": "Выбрать",
"no_executable_selected": "Файл не выбран",
"open_folder": "Открыть папку",
"open_download_location": "Просмотреть папку загрузок",
"create_shortcut": "Создать ярлык на рабочем столе",
"remove_files": "Удалить файлы",
"remove_from_library_title": "Вы уверены?",
"remove_from_library_description": "{{game}} будет удалена из вашей библиотеки.",
"options": "Настройки",
"executable_section_title": "Файл",
"executable_section_description": "Путь к файлу, который будет запущен при нажатии на \"Play\"",
"downloads_secion_title": "Загрузки",
"downloads_section_description": "Проверить наличие обновлений или других версий игры",
"danger_zone_section_title": "Опасная зона",
"danger_zone_section_description": "Удалить эту игру из вашей библиотеки или файлы скачанные Hydra",
"download_in_progress": "Идёт загрузка",
"download_paused": "Загрузка приостановлена",
"last_downloaded_option": "Последний вариант загрузки",
"create_shortcut_success": "Ярлык создан",
"create_shortcut_error": "Не удалось создать ярлык"
},
"activation": {
"title": "Активировать Hydra",
@@ -118,24 +128,23 @@
"eta": "Окончание {{eta}}",
"paused": "Приостановлено",
"verifying": "Проверка…",
"completed_at": "Завершено в {{date}}",
"completed": "Завершено",
"cancelled": "Отменено",
"download_again": "Загрузить снова",
"cancel": "Отменить",
"removed": "Не скачано",
"cancel": "Отмена",
"filter": "Фильтр загруженных игр",
"remove": "Удалить",
"downloading_metadata": "Загрузка метаданных…",
"checking_files": "Проверка файлов…",
"starting_download": "Начало загрузки…",
"deleting": "Удаление установщика…",
"delete": "Удалить установщик",
"remove_from_list": "Удалить",
"delete_modal_title": "Вы уверены?",
"delete_modal_description": "Это удалит все установщики с вашего компьютера",
"install": "Установить",
"real_debrid": "Real Debrid",
"torrent": "Torrent"
"download_in_progress": "В процессе",
"queued_downloads": "Загрузки в очереди",
"downloads_completed": "Завершено",
"queued": "В очереди",
"no_downloads_title": "Здесь так пусто...",
"no_downloads_description": "Вы ещё ничего не скачали через Hydra, но никогда не поздно начать."
},
"settings": {
"downloads_path": "Путь загрузок",
@@ -143,17 +152,45 @@
"notifications": "Уведомления",
"enable_download_notifications": "По завершении загрузки",
"enable_repack_list_notifications": "При добавлении нового репака",
"telemetry": "Телеметрия",
"telemetry_description": "Отправлять анонимную статистику использования",
"real_debrid_api_token_label": "Real Debrid API-токен",
"quit_app_instead_hiding": "Закрывать Hydra вместо того, чтобы сворачивать его в трей",
"launch_with_system": "Запуск Hydra вместе с системой",
"real_debrid_api_token_label": "Real-Debrid API-токен",
"quit_app_instead_hiding": "Закрывать приложение вместо сворачивания в трей",
"launch_with_system": "Запускать Hydra вместе с системой",
"general": "Основные",
"behavior": "Поведение",
"enable_real_debrid": "Включить Real Debrid",
"real_debrid": "Real Debrid",
"real_debrid_api_token_hint": "API ключ можно получить <0>здесь</0>.",
"save_changes": "Сохранить изменения"
"download_sources": "Источники загрузки",
"language": "Язык",
"real_debrid_api_token": "API Ключ",
"enable_real_debrid": "Включить Real-Debrid",
"real_debrid_description": "Real-Debrid - это неограниченный загрузчик, который позволяет быстро скачивать файлы, размещенные в Интернете, или мгновенно передавать их в плеер через частную сеть, позволяющую обходить любые блокировки.",
"real_debrid_invalid_token": "Неверный API ключ",
"real_debrid_api_token_hint": "API ключ можно получить <0>здесь</0>",
"real_debrid_free_account_error": "Аккаунт \"{{username}}\" - не имеет подписки. Пожалуйста, оформите подписку на Real-Debrid",
"real_debrid_linked_message": "Привязан аккаунт \"{{username}}\"",
"save_changes": "Сохранить изменения",
"changes_saved": "Изменения успешно сохранены",
"download_sources_description": "Hydra будет получать ссылки на загрузки из этих источников. URL должна содержать прямую ссылку на .json-файл с ссылками для загрузок.",
"validate_download_source": "Проверить",
"remove_download_source": "Удалить",
"add_download_source": "Добавить источник",
"download_count_zero": "В списке нет загрузок",
"download_count_one": "{{countFormatted}} загрузка в списке",
"download_count_other": "{{countFormatted}} загрузок в списке",
"download_options_zero": "Нет доступных загрузок",
"download_options_one": "{{countFormatted}} вариант загрузки доступен",
"download_options_other": "{{countFormatted}} вариантов загрузки доступно",
"download_source_url": "Ссылка на источник",
"add_download_source_description": "Вставьте ссылку на .json-файл",
"download_source_up_to_date": "Обновлён",
"download_source_errored": "Ошибка",
"sync_download_sources": "Синхронизировать источники",
"removed_download_source": "Источник загрузок удален",
"added_download_source": "Источник загрузок добавлен",
"download_sources_synced": "Все источники загрузок синхронизированы",
"insert_valid_json_url": "Вставьте действительный URL JSON-файла",
"found_download_option_zero": "Не найдено вариантов загрузки",
"found_download_option_one": "Найден {{countFormatted}} вариант загрузки",
"found_download_option_other": "Найдено {{countFormatted}} вариантов загрузки",
"import": "Импортировать"
},
"notifications": {
"download_complete": "Загрузка завершена",
@@ -176,5 +213,30 @@
},
"modal": {
"close": "Закрыть"
},
"forms": {
"toggle_password_visibility": "Показывать пароль"
},
"user_profile": {
"amount_hours": "{{amount}} часов",
"amount_minutes": "{{amount}} минут",
"last_time_played": "Последняя игра {{period}}",
"activity": "Недавняя активность",
"library": "Библиотека",
"total_play_time": "Всего сыграно: {{amount}}",
"no_recent_activity_title": "Хммм... Тут ничего нет",
"no_recent_activity_description": "Вы давно ни во что не играли. Пора это изменить!",
"display_name": "Отображаемое имя",
"saving": "Сохранение",
"save": "Сохранить",
"edit_profile": "Редактировать Профиль",
"saved_successfully": "Успешно сохранено",
"try_again": "Пожалуйста, попробуйте ещё раз",
"sign_out_modal_title": "Вы уверены?",
"cancel": "Отменить",
"successfully_signed_out": "Успешный выход из аккаунта",
"sign_out": "Выйти",
"playing_for": "Сыграно {{amount}}",
"sign_out_modal_text": "Ваша библиотека связана с текущей учетной записью. При выходе из системы ваша библиотека станет недоступна, и прогресс не будет сохранен. Выйти?"
}
}

View File

@@ -1,7 +1,6 @@
{
"home": {
"featured": "Öne çıkan",
"recently_added": "Son eklenen",
"trending": "Popüler",
"surprise_me": "Şaşırt beni",
"no_results": "Sonuç bulunamadı"
@@ -12,16 +11,10 @@
"settings": "Ayarlar",
"my_library": "Kütüphane",
"downloading_metadata": "{{title}} (Metadata indiriliyor…)",
"checking_files": "{{title}} ({{percentage}} - Dosyalar kontrol ediliyor…)",
"paused": "{{title}} (Duraklatıldı)",
"downloading": "{{title}} ({{percentage}} - İndiriliyor…)",
"filter": "Kütüphaneyi filtrele",
"follow_us": "Bizi takip et",
"home": "Ana menü",
"discord": "Discord'umuza katıl",
"telegram": "Telegram'umuza katıl",
"x": "X'te bizi takip et",
"github": "GitHub'da bize katkı yap"
"home": "Ana menü"
},
"header": {
"search": "Ara",
@@ -34,7 +27,6 @@
"bottom_panel": {
"no_downloads_in_progress": "İndirilen bir şey yok",
"downloading_metadata": "{{title}} metadatası indiriliyor…",
"checking_files": "{{title}} dosyaları kontrol ediliyor… ({{percentage}} tamamlandı)",
"downloading": "{{title}} indiriliyor… ({{percentage}} tamamlandı) - Bitiş {{eta}} - {{speed}}"
},
"catalogue": {
@@ -52,22 +44,15 @@
"pause": "Duraklat",
"cancel": "İptal et",
"remove": "Sil",
"remove_from_list": "Sil",
"space_left_on_disk": "Diskte {{space}} yer kaldı",
"eta": "Bitiş {{eta}}",
"downloading_metadata": "Metadata indiriliyor…",
"checking_files": "Dosyalar kontrol ediliyor…",
"filter": "Repackleri filtrele",
"requirements": "Sistem gereksinimleri",
"minimum": "Minimum",
"recommended": "Önerilen",
"no_minimum_requirements": "{{title}} minimum sistem gereksinim bilgilerini karşılamıyor",
"no_recommended_requirements": "{{title}} önerilen sistem gereksinim bilgilerini karşılamıyor",
"paused_progress": "{{progress}} (Duraklatıldı)",
"release_date": "{{date}} tarihinde çıktı",
"publisher": "{{publisher}} tarihinde yayınlandı",
"copy_link_to_clipboard": "Link'i kopyala",
"copied_link_to_clipboard": "Link kopyalandı",
"hours": "saatler",
"minutes": "dakikalar",
"amount_hours": "{{amount}} saat",
@@ -86,17 +71,8 @@
"playing_now": "Şimdi oynanıyor",
"change": "Değiştir",
"repacks_modal_description": "İndirmek istediğiiniz repacki seçin",
"downloads_path": "İndirme yolu",
"select_folder_hint": "Varsayılan klasörü değiştirmek için ulaşmanız gereken ayar",
"download_now": "Şimdi",
"installation_instructions": "Kurulum",
"installation_instructions_description": "Bu oyunu kurmak için ek adımlar gerekiyor",
"online_fix_instruction": "OnlineFix oyunlarını ayıklamak için parola gerekiyor. Gerekli olduğunda bu parolayı kullanın:",
"dodi_installation_instruction": "Dodi installerını açtığınızda, kurulumu başlatmak için bu tuşa basın <0 />:",
"dont_show_it_again": "Tekrar gösterme",
"copy_to_clipboard": "Kopyala",
"copied_to_clipboard": "Kopyalandı",
"got_it": "Tamam"
"download_now": "Şimdi"
},
"activation": {
"title": "Hydra'yı aktif et",
@@ -112,19 +88,13 @@
"eta": "Bitiş {{eta}}",
"paused": "Duraklatıldı",
"verifying": "Doğrulanıyor…",
"completed_at": "{{date}} tarihinde tamamlanacak",
"completed": "Tamamlandı",
"cancelled": "İptal edildi",
"download_again": "Tekrar indir",
"cancel": "İptal et",
"filter": "Yüklü oyunları filtrele",
"remove": "Kaldır",
"downloading_metadata": "Metadata indiriliyor…",
"checking_files": "Dosyalar kontrol ediliyor…",
"starting_download": "İndirme başlatılıyor…",
"deleting": "Installer siliniyor…",
"delete": "Installer'ı sil",
"remove_from_list": "Kaldır",
"delete_modal_title": "Emin misiniz?",
"delete_modal_description": "Bu bilgisayarınızdan tüm kurulum dosyalarını silecek",
"install": "Kur"
@@ -134,9 +104,7 @@
"change": "Güncelle",
"notifications": "Bildirimler",
"enable_download_notifications": "Bir indirme bittiğinde",
"enable_repack_list_notifications": "Yeni bir repack eklendiğinde",
"telemetry": "Telemetri",
"telemetry_description": "Anonim kullanım istatistiklerini aktifleştir"
"enable_repack_list_notifications": "Yeni bir repack eklendiğinde"
},
"notifications": {
"download_complete": "İndirme tamamlandı",

View File

@@ -1,7 +1,9 @@
{
"app": {
"successfully_signed_in": "Успішний вхід в систему"
},
"home": {
"featured": "Рекомендоване",
"recently_added": "Нове",
"trending": "У тренді",
"surprise_me": "Здивуй мене",
"no_results": "Результатів не знайдено"
@@ -12,16 +14,13 @@
"settings": "Налаштування",
"my_library": "Бібліотека",
"downloading_metadata": "{{title}} (Завантаження метаданих…)",
"checking_files": "{{title}} ({{percentage}} - Перевірка файлів…)",
"paused": "{{title}} (Призупинено)",
"downloading": "{{title}} ({{percentage}} - Завантаження…)",
"filter": "Фільтр бібліотеки",
"follow_us": "Підписуйтесь на нас",
"home": "Головна",
"discord": "Приєднуйтесь до Discord",
"telegram": "Приєднуйтесь до Telegram",
"x": "Підписуйтесь на X",
"github": "Зробіть свій внесок на GitHub"
"game_has_no_executable": "Не було вибрано файл для запуску гри",
"queued": "{{title}} в черзі",
"sign_in": "Увійти"
},
"header": {
"search": "Пошук",
@@ -29,13 +28,15 @@
"catalogue": "Каталог",
"downloads": "Завантаження",
"search_results": "Результати пошуку",
"settings": "Налаштування"
"settings": "Налаштування",
"version_available_download": "Доступна версія {{version}}. Натисніть тут, щоб перезапустити та встановити.",
"version_available_install": "Доступна версія {{version}}. Натисніть тут для завантаження."
},
"bottom_panel": {
"no_downloads_in_progress": "Немає активних завантажень",
"downloading_metadata": "Завантаження метаданих {{title}}…",
"checking_files": "Перевірка файлів {{title}}… ({{percentage}} завершено)",
"downloading": "Завантаження {{title}}… ({{percentage}} завершено) - Закінчення {{eta}} - {{speed}}"
"downloading": "Завантаження {{title}}… ({{percentage}} завершено) - Закінчення {{eta}} - {{speed}}",
"calculating_eta": "Завантаження {{title}}… ({{percentage}} завершено) - Обчислення залишкового часу…"
},
"catalogue": {
"next_page": "Наступна сторінка",
@@ -52,22 +53,15 @@
"pause": "Призупинити",
"cancel": "Скасувати",
"remove": "Видалити",
"remove_from_list": "Видалити",
"space_left_on_disk": "{{space}} вільно на диску",
"eta": "Закінчення {{eta}}",
"downloading_metadata": "Завантаження метаданих…",
"checking_files": "Перевірка файлів…",
"filter": "Фільтр репаків",
"requirements": "Системні вимоги",
"minimum": "Мінімальні",
"recommended": "Рекомендовані",
"no_minimum_requirements": "Для {{title}} не вказані мінімальні вимоги",
"no_recommended_requirements": "Для {{title}} не вказані рекомендовані вимоги",
"paused_progress": "{{progress}} (Призупинено)",
"release_date": "Випущено {{date}}",
"publisher": "Видавець {{publisher}}",
"copy_link_to_clipboard": "Скопіювати посилання",
"copied_link_to_clipboard": "Посилання скопійовано",
"hours": "годин",
"minutes": "хвилин",
"amount_hours": "{{amount}} годин",
@@ -86,23 +80,43 @@
"playing_now": "Поточна гра",
"change": "Змінити",
"repacks_modal_description": "Виберіть репак, який хочете завантажити",
"downloads_path": "Шлях завантажень",
"select_folder_hint": "Щоб змінити теку за замовчуванням, відкрийте",
"download_now": "Завантажити зараз",
"installation_instructions": "Інструкція зі встановлення",
"installation_instructions_description": "Для встановлення цієї гри потрібні додаткові кроки",
"online_fix_instruction": "В іграх з OnlineFix потрібно ввести пароль для вилучення. За необхідності використовуйте наступний пароль:",
"dodi_installation_instruction": "Коли ви відкриєте інсталятор DODI, натисніть на клавіатурі клавішу 'вгору' <0 />, щоб почати процес встановлення:",
"dont_show_it_again": "Не показувати це знову",
"copy_to_clipboard": "Копіювати",
"copied_to_clipboard": "Скопійовано",
"got_it": "Зрозуміло"
"calculating_eta": "Обчислення залишкового часу…",
"create_shortcut": "Створити ярлик на робочому столі",
"danger_zone_section_description": "Видалити цю гру з вашої бібліотеки або файли скачані Hydra",
"danger_zone_section_title": "Небезпечна зона",
"download_in_progress": "Триває завантаження.",
"download_options": "Варіантів завантаження",
"download_path": "Тека для завантажень",
"download_paused": "Завантаження призупинено",
"download_settings": "Налаштування завантаження",
"downloader": "Завантажувач",
"downloads_secion_title": "Завантаження",
"downloads_section_description": "Перевірити наявність оновлень або інших версій гри",
"executable_section_description": "Шлях до файлу, який буде запущений при натисканні на кнопку \"Play\"",
"executable_section_title": "Файл",
"last_downloaded_option": "Останній варіант завантаження",
"next_screenshot": "Наступний скрішнот",
"no_executable_selected": "Файл не вибрано",
"no_shop_details": "Не вдалося отримати опис",
"open_download_location": "Переглянути папку завантажень",
"open_folder": "Відкрити папку",
"open_screenshot": "Відкрити скріншот",
"options": "Налаштування",
"paused": "Призупинено",
"previous_screenshot": "Попередній скріншот",
"remove_files": "Видалити файли",
"remove_from_library_description": "{{game}} буде видалено з вашої бібліотеки",
"remove_from_library_title": "Ви впевнені?",
"screenshot": "Скріншот",
"select_executable": "Обрати"
},
"activation": {
"title": "Активувати Hydra",
"installation_id": "ID установки:",
"enter_activation_code": "Введіть ваш активаційний код",
"message": "Якщо ви не знаєте, де його запросити, то не повинні мати цього.",
"message": "Якщо ви не знаєте, де його запросити, то не повинні мати його.",
"activate": "Активувати",
"loading": "Завантаження…"
},
@@ -112,22 +126,23 @@
"eta": "Закінчення {{eta}}",
"paused": "Призупинено",
"verifying": "Перевірка…",
"completed_at": "Завершено в {{date}}",
"completed": "Завершено",
"cancelled": "Скасовано",
"download_again": "Завантажити знову",
"cancel": "Скасувати",
"filter": "Фільтр завантажених ігор",
"remove": "Видалити",
"downloading_metadata": "Завантаження метаданих…",
"checking_files": "Перевірка файлів…",
"starting_download": "Початок завантаження…",
"deleting": "Видалення інсталятора…",
"delete": "Видалити інсталятор",
"remove_from_list": "Видалити",
"delete_modal_title": "Ви впевнені?",
"delete_modal_description": "Це видалить усі інсталяційні файли з вашого комп'ютера",
"install": "Встановити"
"install": "Встановити",
"download_in_progress": "В процесі",
"downloads_completed": "Завершено",
"no_downloads_description": "Ви ще нічого не завантажили через Hydra, але ніколи не пізно почати.",
"no_downloads_title": "Тут так пусто...",
"queued": "В черзі",
"queued_downloads": "Завантаження в черзі",
"removed": "Не завантажено"
},
"settings": {
"downloads_path": "Тека завантажень",
@@ -135,11 +150,45 @@
"notifications": "Повідомлення",
"enable_download_notifications": "Після завершення завантаження",
"enable_repack_list_notifications": "Коли додається новий репак",
"telemetry": "Телеметрія",
"telemetry_description": "Відправляти анонімну статистику використання",
"behavior": "Поведінка",
"quit_app_instead_hiding": "Закривати програму замість того, щоб згортати її в трей",
"launch_with_system": "Запускати програми із запуском комп'ютера"
"quit_app_instead_hiding": "Закривати Hydra замість того, щоб згортати її в трей",
"launch_with_system": "Запускати Hydra із запуском комп'ютера",
"add_download_source": "Добавити джерело",
"add_download_source_description": "Введіть посилання на .json-файл",
"added_download_source": "Джерело для завантаження було додано",
"changes_saved": "Зміни успішно збережено",
"download_count_one": "{{countFormatted}} завантаження в списку",
"download_count_other": "{{countFormatted}} завантажень в списку",
"download_count_zero": "В списку немає завантажень",
"download_options_one": "{{countFormatted}} доступний варіант завантаження",
"download_options_other": "{{countFormatted}} доступних варіантів завантаження",
"download_options_zero": "Немає доступних завантажень",
"download_source_errored": "Помилка",
"download_source_up_to_date": "Оновлено",
"download_source_url": "Посилання на джерело",
"download_sources": "Джерела для завантаження",
"download_sources_description": "Hydra буде отримувати посилання для завантажень із цих джерел. URL має містити пряме посилання на .json-файл із посиланнями для завантажень.",
"download_sources_synced": "Всі джерела для завантаження синхронізовано",
"enable_real_debrid": "Включити Real-Debrid",
"found_download_option_one": "Знайдено {{countFormatted}} варіант завантаження",
"found_download_option_other": "Знайдено {{countFormatted}} варіантів завантаження",
"found_download_option_zero": "Немає доступних завантажень",
"general": "Основні",
"import": "Імпортувати",
"insert_valid_json_url": "Вставте дійсний URL JSON-файлу",
"language": "Мова",
"real_debrid_api_token": "API-токен",
"real_debrid_api_token_hint": "API токен можливо отримати <0>тут</0>",
"real_debrid_api_token_label": "Real-Debrid API-токен",
"real_debrid_description": "Real-Debrid — це необмежений завантажувач, який дозволяє швидко завантажувати файли, розміщені в Інтернеті, або миттєво передавати їх у плеєр через приватну мережу, що дозволяє обходити будь-які блокування.",
"real_debrid_free_account_error": "Акаунт \"{{username}}\" - не має наявної підписки. Будь ласка, оформіть підписку на Real-Debrid",
"real_debrid_invalid_token": "Невірний API-токен",
"real_debrid_linked_message": "Акаунт \"{{username}}\" привязаний",
"remove_download_source": "Видалити",
"removed_download_source": "Джерело завантажень було видалено",
"save_changes": "Зберегти зміни",
"sync_download_sources": "Синхронізувати джерела",
"validate_download_source": "Перевірити"
},
"notifications": {
"download_complete": "Завантаження завершено",
@@ -162,5 +211,30 @@
},
"modal": {
"close": "Закрити"
},
"forms": {
"toggle_password_visibility": "Показувати пароль"
},
"user_profile": {
"activity": "Остання активність",
"amount_hours": "{{amount}} годин",
"amount_minutes": "{{amount}} хвилин",
"cancel": "Скасувати",
"display_name": "Відображуване ім'я",
"edit_profile": "Редагувати профіль",
"last_time_played": "Остання гра {{period}}",
"library": "Бібліотека",
"no_recent_activity_description": "Ви давно не грали в ігри. Пора це змінити!",
"no_recent_activity_title": "Хммм... Тут нічого немає",
"playing_for": "Зіграно {{amount}}",
"save": "Збережено",
"saved_successfully": "Успішно збережено",
"saving": "Збереження",
"sign_out": "Вийти",
"sign_out_modal_text": "Ваша бібліотека пов'язана з поточним обліковим записом. При виході з системи ваша бібліотека буде недоступною, і прогрес не буде збережено. Продовжити вихід?",
"sign_out_modal_title": "Ви впевнені?",
"successfully_signed_out": "Успішний вихід з акаунту",
"total_play_time": "Всього зіграно: {{amount}}",
"try_again": "Будь ласка, попробуйте ще раз"
}
}

View File

@@ -1,7 +1,9 @@
{
"app": {
"successfully_signed_in": "已成功登录"
},
"home": {
"featured": "特色推荐",
"recently_added": "最近添加",
"trending": "最近热门",
"surprise_me": "向我推荐",
"no_results": "没有找到结果"
@@ -12,30 +14,29 @@
"settings": "设置",
"my_library": "我的游戏库",
"downloading_metadata": "{{title}} (正在下载元数据…)",
"checking_files": "{{title}} ({{percentage}} - 正在检查文件…)",
"paused": "{{title}} (已暂停)",
"downloading": "{{title}} ({{percentage}} - 正在下载…)",
"filter": "筛选游戏库",
"follow_us": "关注我们",
"home": "主页",
"discord": "加入我们的Discord",
"telegram": "加入我们的Telegram",
"x": "在X上关注我们",
"github": "在GitHub上贡献"
"queued": "{{title}} (已加入下载队列)",
"game_has_no_executable": "未选择游戏的可执行文件",
"sign_in": "登入"
},
"header": {
"search": "搜索",
"search": "搜索游戏",
"home": "主页",
"catalogue": "游戏目录",
"downloads": "下载中心",
"search_results": "搜索结果",
"settings": "设置"
"settings": "设置",
"version_available_install": "版本 {{version}} 已可用. 点击此处重新启动并安装.",
"version_available_download": "版本 {{version}} 可用. 点击此处下载."
},
"bottom_panel": {
"no_downloads_in_progress": "没有正在进行的下载",
"downloading_metadata": "正在下载{{title}}的元数据…",
"checking_files": "正在检查{{title}}的文件… ({{percentage}}完成)",
"downloading": "正在下载{{title}}… ({{percentage}}完成) - 剩余时间{{eta}} - 速度{{speed}}"
"downloading": "正在下载{{title}}… ({{percentage}}完成) - 剩余时间{{eta}} - 速度{{speed}}",
"calculating_eta": "正在下载 {{title}}… (已完成{{percentage}}.) - 正在计算剩余时间..."
},
"catalogue": {
"next_page": "下一页",
@@ -52,22 +53,15 @@
"pause": "暂停",
"cancel": "取消",
"remove": "移除",
"remove_from_list": "从列表中移除",
"space_left_on_disk": "磁盘剩余空间{{space}}",
"eta": "预计完成时间{{eta}}",
"downloading_metadata": "正在下载元数据…",
"checking_files": "正在检查文件…",
"filter": "筛选重打包",
"requirements": "配置要求",
"minimum": "最低要求",
"recommended": "推荐要求",
"no_minimum_requirements": "{{title}}没有提供最低要求信息",
"no_recommended_requirements": "{{title}}没有提供推荐要求信息",
"paused_progress": "{{progress}} (已暂停)",
"release_date": "发布于{{date}}",
"publisher": "发行商{{publisher}}",
"copy_link_to_clipboard": "复制链接",
"copied_link_to_clipboard": "链接已复制",
"hours": "小时",
"minutes": "分钟",
"amount_hours": "{{amount}}小时",
@@ -86,21 +80,34 @@
"playing_now": "正在游戏中",
"change": "更改",
"repacks_modal_description": "选择您想要下载的重打包",
"downloads_path": "下载路径",
"select_folder_hint": "要更改默认文件夹,请访问",
"settings": "设置",
"download_now": "立即下载",
"installation_instructions": "安装说明",
"installation_instructions_description": "安装这个游戏需要额外的步骤",
"online_fix_instruction": "OnlineFix游戏需要密码才能解压。需要时,使用以下密码:",
"dodi_installation_instruction": "打开DODI安装程序时,按键盘上的键<0 />开始安装过程:",
"dont_show_it_again": "不再显示",
"copied_to_clipboard": "已复制到剪贴板",
"got_it": "我已知晓",
"previous_screenshot": "上一张截图",
"next_screenshot": "下一张截图",
"screenshot": "截图 {{number}}",
"open_screenshot": "打开截图 {{number}}"
"open_screenshot": "打开截图 {{number}}",
"download_settings": "下载设置",
"downloader": "下载器",
"select_executable": "选择",
"no_executable_selected": "没有可执行文件被指定",
"open_folder": "打开目录",
"open_download_location": "查看已下载的文件",
"create_shortcut": "创建桌面快捷方式",
"remove_files": "删除文件",
"remove_from_library_title": "你确定吗?",
"remove_from_library_description": "这将会把 {{game}} 从你的库中移除",
"options": "选项",
"executable_section_title": "可执行文件",
"executable_section_description": "点击 \"Play\" 时将执行的文件的路径",
"downloads_secion_title": "下载",
"downloads_section_description": "查看此游戏的更新或其他版本",
"danger_zone_section_title": "危险操作",
"danger_zone_section_description": "从您的库或Hydra下载的文件中删除此游戏",
"download_in_progress": "下载进行中",
"download_paused": "下载暂停",
"last_downloaded_option": "上次下载的选项",
"create_shortcut_success": "成功创建快捷方式",
"create_shortcut_error": "创建快捷方式出错"
},
"activation": {
"title": "激活 Hydra",
@@ -116,24 +123,22 @@
"eta": "预计完成时间{{eta}}",
"paused": "已暂停",
"verifying": "正在验证…",
"completed_at": "完成于{{date}}",
"completed": "已完成",
"cancelled": "已取消",
"download_again": "再次下载",
"cancel": "取消",
"filter": "筛选已下载游戏",
"remove": "移除",
"downloading_metadata": "正在下载元数据…",
"checking_files": "正在检查文件…",
"starting_download": "开始下载…",
"deleting": "正在删除安装程序…",
"delete": "移除安装程序",
"remove_from_list": "移除",
"delete_modal_title": "您确定吗?",
"delete_modal_description": "这将从您的电脑上移除所有的安装文件",
"install": "安装",
"real_debrid": "Real Debrid",
"torrent": "种子"
"download_in_progress": "进行中",
"queued_downloads": "在队列中的下载",
"downloads_completed": "已完成",
"queued": "下载列表",
"no_downloads_title": "空空如也",
"no_downloads_description": "你还未使用Hydra下载任何游戏,但什么时候开始,都为时不晚。"
},
"settings": {
"downloads_path": "下载路径",
@@ -141,38 +146,72 @@
"notifications": "通知",
"enable_download_notifications": "下载完成时",
"enable_repack_list_notifications": "添加新重打包时",
"telemetry": "遥测",
"telemetry_description": "启用匿名使用统计",
"real_debrid_api_token_description": "Real Debrid API密钥",
"real_debrid_api_token_label": "Real-Debrid API 令牌",
"quit_app_instead_hiding": "关闭Hydra而不是最小化到托盘",
"launch_with_system": "系统启动时运行 Hydra",
"general": "通用",
"behavior": "行为",
"general": "常规",
"quit_app_instead_hiding": "关闭应用程序而不是最小化到托盘",
"launch_with_system": "随系统启动时运行应用程序",
"enable_real_debrid": "启用 Real Debrid",
"real_debrid": "Real Debrid",
"download_sources": "下载源",
"language": "语言",
"real_debrid_api_token": "API 令牌",
"enable_real_debrid": "启用 Real-Debrid",
"real_debrid_description": "Real-Debrid 是一个无限制的下载器,允许您以最快的互联网速度即时下载文件。",
"real_debrid_invalid_token": "无效的 API 令牌",
"real_debrid_api_token_hint": "您可以从<0>这里</0>获取API密钥.",
"save_changes": "保存更改"
},
"notifications": {
"download_complete": "下载完成",
"game_ready_to_install": "{{title}}已准备好安装",
"repack_list_updated": "重打包列表已更新",
"repack_count_one": "已添加{{count}}个重打包",
"repack_count_other": "添加{{count}}个重打包"
},
"system_tray": {
"open": "打开Hydra",
"quit": "退出"
},
"game_card": {
"no_downloads": "没有可用的下载"
},
"binary_not_found_modal": {
"title": "程序未安装",
"description": "在您的系统上未找到Wine或Lutris的可执行文件",
"instructions": "检查在您的Linux发行版上正确安装它们的方法,以便游戏可以正常运行"
"real_debrid_free_account_error": "账户 \"{{username}}\" 是免费账户。请订阅 Real-Debrid",
"real_debrid_linked_message": "账户 \"{{username}}\" 已链接",
"save_changes": "保存更改",
"changes_saved": "更改已成功保存",
"download_sources_description": "Hydra 将从这些源获取下载链接。源 URL 必须是直接链接到包含下载链接的 .json 文件。",
"validate_download_source": "验证",
"remove_download_source": "移除",
"add_download_source": "添加源",
"download_count_zero": "列表中无下载",
"download_count_one": "列表中有 {{countFormatted}} 个下载",
"download_count_other": "列表中有 {{countFormatted}} 个下载",
"download_options_zero": "无可用下载",
"download_options_one": "有 {{countFormatted}} 个下载可用",
"download_options_other": "有 {{countFormatted}} 个下载可用",
"download_source_url": "下载源 URL",
"add_download_source_description": "插入包含 .json 文件的 URL",
"download_source_up_to_date": "已更新",
"download_source_errored": "出错",
"sync_download_sources": "同步源",
"removed_download_source": "已移除下载源",
"added_download_source": "已添加下载源",
"download_sources_synced": "所有下载源已同步",
"insert_valid_json_url": "插入有效的 JSON 网址",
"found_download_option_zero": "未找到下载选项",
"found_download_option_one": "找到 {{countFormatted}} 个下载选项",
"found_download_option_other": "找到 {{countFormatted}} 个下载选项",
"import": "导入"
},
"modal": {
"close": "关闭按钮"
},
"forms": {
"toggle_password_visibility": "切换密码可见性"
},
"user_profile": {
"amount_hours": "{{amount}} 小时",
"amount_minutes": "{{amount}} 分钟",
"last_time_played": "上次游玩时间 {{period}}",
"activity": "近期活动",
"library": "库",
"total_play_time": "总游戏时长: {{amount}}",
"no_recent_activity_title": "Emmm… 这里暂时啥都没有",
"no_recent_activity_description": "你最近没玩过任何游戏。是时候做出改变了!",
"display_name": "昵称",
"saving": "保存中",
"save": "保存",
"edit_profile": "编辑资料",
"saved_successfully": "成功保存",
"try_again": "请重试",
"sign_out_modal_title": "你确定吗?",
"cancel": "取消",
"successfully_signed_out": "登出成功",
"sign_out": "登出",
"playing_for": "Playing for {{amount}}",
"sign_out_modal_text": "您的资料库与您当前的账户相关联。注销后,您的资料库将不再可见,任何进度也不会保存。继续退出吗?"
}
}

View File

@@ -1,45 +1,16 @@
import { app } from "electron";
import path from "node:path";
export const repackersOn1337x = [
"DODI",
"FitGirl",
"0xEMPRESS",
"KaOsKrew",
"TinyRepacks",
] as const;
export const repackers = [
...repackersOn1337x,
"Xatab",
"TinyRepacks",
"CPG",
"GOG",
"onlinefix",
] as const;
export const months = [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec",
];
export const defaultDownloadsPath = app.getPath("downloads");
export const databasePath = path.join(
app.getPath("appData"),
app.getName(),
"hydra",
"hydra.db"
);
export const INSTALLATION_ID_LENGTH = 6;
export const ACTIVATION_KEY_MULTIPLIER = 7;
export const logsPath = path.join(app.getPath("appData"), "hydra", "logs");
export const seedsPath = app.isPackaged
? path.join(process.resourcesPath, "seeds")
: path.join(__dirname, "..", "..", "seeds");

View File

@@ -1,25 +1,37 @@
import { DataSource } from "typeorm";
import {
DownloadQueue,
DownloadSource,
Game,
GameShopCache,
Repack,
UserPreferences,
SteamGame,
} from "@main/entity";
import type { SqliteConnectionOptions } from "typeorm/driver/sqlite/SqliteConnectionOptions";
import type { BetterSqlite3ConnectionOptions } from "typeorm/driver/better-sqlite3/BetterSqlite3ConnectionOptions";
import { databasePath } from "./constants";
import migrations from "./migrations";
import { UserAuth } from "./entity/user-auth";
export const createDataSource = (options: Partial<SqliteConnectionOptions>) =>
export const createDataSource = (
options: Partial<BetterSqlite3ConnectionOptions>
) =>
new DataSource({
type: "better-sqlite3",
database: databasePath,
entities: [Game, Repack, UserPreferences, GameShopCache, SteamGame],
entities: [
Game,
Repack,
UserPreferences,
GameShopCache,
DownloadSource,
DownloadQueue,
UserAuth,
],
synchronize: true,
database: databasePath,
...options,
});
export const dataSource = createDataSource({
migrations: migrations,
migrations,
});

80
src/main/declaration.d.ts vendored Normal file
View File

@@ -0,0 +1,80 @@
declare module "aria2" {
export type Aria2Status =
| "active"
| "waiting"
| "paused"
| "error"
| "complete"
| "removed";
export interface StatusResponse {
gid: string;
status: Aria2Status;
totalLength: string;
completedLength: string;
uploadLength: string;
bitfield: string;
downloadSpeed: string;
uploadSpeed: string;
infoHash?: string;
numSeeders?: string;
seeder?: boolean;
pieceLength: string;
numPieces: string;
connections: string;
errorCode?: string;
errorMessage?: string;
followedBy?: string[];
following: string;
belongsTo: string;
dir: string;
files: {
path: string;
length: string;
completedLength: string;
selected: string;
}[];
bittorrent?: {
announceList: string[][];
comment: string;
creationDate: string;
mode: "single" | "multi";
info: {
name: string;
verifiedLength: string;
verifyIntegrityPending: string;
};
};
}
export default class Aria2 {
constructor(options: any);
open: () => Promise<void>;
call(
method: "addUri",
uris: string[],
options: { dir: string }
): Promise<string>;
call(
method: "tellStatus",
gid: string,
keys?: string[]
): Promise<StatusResponse>;
call(method: "pause", gid: string): Promise<string>;
call(method: "forcePause", gid: string): Promise<string>;
call(method: "unpause", gid: string): Promise<string>;
call(method: "remove", gid: string): Promise<string>;
call(method: "forceRemove", gid: string): Promise<string>;
call(method: "pauseAll"): Promise<string>;
call(method: "forcePauseAll"): Promise<string>;
listNotifications: () => [
"onDownloadStart",
"onDownloadPause",
"onDownloadStop",
"onDownloadComplete",
"onDownloadError",
"onBtDownloadComplete",
];
on: (event: string, callback: (params: any) => void) => void;
}
}

View File

@@ -0,0 +1,25 @@
import {
Entity,
PrimaryGeneratedColumn,
CreateDateColumn,
UpdateDateColumn,
OneToOne,
JoinColumn,
} from "typeorm";
import type { Game } from "./game.entity";
@Entity("download_queue")
export class DownloadQueue {
@PrimaryGeneratedColumn()
id: number;
@OneToOne("Game", "downloadQueue")
@JoinColumn()
game: Game;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}

View File

@@ -0,0 +1,41 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
OneToMany,
} from "typeorm";
import type { Repack } from "./repack.entity";
import { DownloadSourceStatus } from "@shared";
@Entity("download_source")
export class DownloadSource {
@PrimaryGeneratedColumn()
id: number;
@Column("text", { nullable: true, unique: true })
url: string;
@Column("text")
name: string;
@Column("text", { nullable: true })
etag: string | null;
@Column("int", { default: 0 })
downloadCount: number;
@Column("text", { default: DownloadSourceStatus.UpToDate })
status: DownloadSourceStatus;
@OneToMany("Repack", "downloadSource", { cascade: true })
repacks: Repack[];
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}

View File

@@ -9,8 +9,9 @@ import {
} from "typeorm";
import { Repack } from "./repack.entity";
import type { GameShop } from "@types";
import { Downloader, GameStatus } from "@shared";
import type { GameShop, GameStatus } from "@types";
import { Downloader } from "@shared";
import type { DownloadQueue } from "./download-queue.entity";
@Entity("game")
export class Game {
@@ -20,11 +21,14 @@ export class Game {
@Column("text", { unique: true })
objectID: string;
@Column("text", { unique: true, nullable: true })
remoteId: string | null;
@Column("text")
title: string;
@Column("text")
iconUrl: string;
@Column("text", { nullable: true })
iconUrl: string | null;
@Column("text", { nullable: true })
folderName: string | null;
@@ -53,22 +57,28 @@ export class Game {
@Column("float", { default: 0 })
progress: number;
@Column("float", { default: 0 })
fileVerificationProgress: number;
@Column("int", { default: 0 })
bytesDownloaded: number;
@Column("text", { nullable: true })
@Column("datetime", { nullable: true })
lastTimePlayed: Date | null;
@Column("float", { default: 0 })
fileSize: number;
@OneToOne(() => Repack, { nullable: true })
@Column("text", { nullable: true })
uri: string | null;
/**
* @deprecated
*/
@OneToOne("Repack", "game", { nullable: true })
@JoinColumn()
repack: Repack;
@OneToOne("DownloadQueue", "game")
downloadQueue: DownloadQueue;
@Column("boolean", { default: false })
isDeleted: boolean;

View File

@@ -2,4 +2,6 @@ export * from "./game.entity";
export * from "./repack.entity";
export * from "./user-preferences.entity";
export * from "./game-shop-cache.entity";
export * from "./steam-game.entity";
export * from "./download-source.entity";
export * from "./download-queue.entity";
export * from "./user-auth";

View File

@@ -4,7 +4,9 @@ import {
Column,
CreateDateColumn,
UpdateDateColumn,
ManyToOne,
} from "typeorm";
import { DownloadSource } from "./download-source.entity";
@Entity("repack")
export class Repack {
@@ -17,7 +19,10 @@ export class Repack {
@Column("text", { unique: true })
magnet: string;
@Column("int")
/**
* @deprecated
*/
@Column("int", { nullable: true })
page: number;
@Column("text")
@@ -29,6 +34,9 @@ export class Repack {
@Column("datetime")
uploadDate: Date | string;
@ManyToOne(() => DownloadSource, { nullable: true, onDelete: "CASCADE" })
downloadSource: DownloadSource;
@CreateDateColumn()
createdAt: Date;

View File

@@ -1,10 +0,0 @@
import { Column, Entity, PrimaryColumn } from "typeorm";
@Entity("steam_game")
export class SteamGame {
@PrimaryColumn()
id: number;
@Column()
name: string;
}

View File

@@ -0,0 +1,37 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
} from "typeorm";
@Entity("user_auth")
export class UserAuth {
@PrimaryGeneratedColumn()
id: number;
@Column("text", { default: "" })
userId: string;
@Column("text", { default: "" })
displayName: string;
@Column("text", { nullable: true })
profileImageUrl: string | null;
@Column("text", { default: "" })
accessToken: string;
@Column("text", { default: "" })
refreshToken: string;
@Column("int", { default: 0 })
tokenExpirationTimestamp: number;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}

View File

@@ -0,0 +1,18 @@
import jwt from "jsonwebtoken";
import * as Sentry from "@sentry/electron/main";
import { userAuthRepository } from "@main/repository";
import { registerEvent } from "../register-event";
const getSessionHash = async (_event: Electron.IpcMainInvokeEvent) => {
const auth = await userAuthRepository.findOne({ where: { id: 1 } });
if (!auth) return null;
const payload = jwt.decode(auth.accessToken) as jwt.JwtPayload;
Sentry.setContext("sessionId", payload.sessionId);
return payload.sessionId;
};
registerEvent("getSessionHash", getSessionHash);

View File

@@ -0,0 +1,7 @@
import { registerEvent } from "../register-event";
import { WindowManager } from "@main/services";
const openAuthWindow = async (_event: Electron.IpcMainInvokeEvent) =>
WindowManager.openAuthWindow();
registerEvent("openAuthWindow", openAuthWindow);

View File

@@ -0,0 +1,35 @@
import { registerEvent } from "../register-event";
import * as Sentry from "@sentry/electron/main";
import { HydraApi, PythonInstance, gamesPlaytime } from "@main/services";
import { dataSource } from "@main/data-source";
import { DownloadQueue, Game, UserAuth } from "@main/entity";
const signOut = async (_event: Electron.IpcMainInvokeEvent) => {
const databaseOperations = dataSource
.transaction(async (transactionalEntityManager) => {
await transactionalEntityManager.getRepository(DownloadQueue).delete({});
await transactionalEntityManager.getRepository(Game).delete({});
await transactionalEntityManager
.getRepository(UserAuth)
.delete({ id: 1 });
})
.then(() => {
/* Removes all games being played */
gamesPlaytime.clear();
});
/* Removes user from Sentry */
Sentry.setUser(null);
/* Disconnects libtorrent */
PythonInstance.killTorrent();
await Promise.all([
databaseOperations,
HydraApi.post("/auth/logout").catch(() => {}),
]);
};
registerEvent("signOut", signOut);

View File

@@ -0,0 +1,42 @@
import { AppUpdaterEvent } from "@types";
import { registerEvent } from "../register-event";
import updater, { UpdateInfo } from "electron-updater";
import { WindowManager } from "@main/services";
import { app } from "electron";
const { autoUpdater } = updater;
const sendEvent = (event: AppUpdaterEvent) => {
WindowManager.mainWindow?.webContents.send("autoUpdaterEvent", event);
};
const sendEventsForDebug = false;
const isAutoInstallAvailable =
process.platform !== "darwin" && process.env.PORTABLE_EXECUTABLE_FILE == null;
const mockValuesForDebug = () => {
sendEvent({ type: "update-available", info: { version: "1.3.0" } });
sendEvent({ type: "update-downloaded" });
};
const checkForUpdates = async (_event: Electron.IpcMainInvokeEvent) => {
autoUpdater
.once("update-available", (info: UpdateInfo) => {
sendEvent({ type: "update-available", info });
})
.once("update-downloaded", () => {
sendEvent({ type: "update-downloaded" });
});
if (app.isPackaged) {
autoUpdater.autoDownload = isAutoInstallAvailable;
autoUpdater.checkForUpdates();
} else if (sendEventsForDebug) {
mockValuesForDebug();
}
return isAutoInstallAvailable;
};
registerEvent("checkForUpdates", checkForUpdates);

View File

@@ -0,0 +1,14 @@
import { app } from "electron";
import { registerEvent } from "../register-event";
import updater from "electron-updater";
const { autoUpdater } = updater;
const restartAndInstallUpdate = async (_event: Electron.IpcMainInvokeEvent) => {
autoUpdater.removeAllListeners();
if (app.isPackaged) {
autoUpdater.quitAndInstall(true, true);
}
};
registerEvent("restartAndInstallUpdate", restartAndInstallUpdate);

View File

@@ -1,95 +1,36 @@
import { formatName, getSteamAppAsset, repackerFormatter } from "@main/helpers";
import type { CatalogueCategory, CatalogueEntry, GameShop } from "@types";
import { getSteamAppAsset } from "@main/helpers";
import type { CatalogueEntry, GameShop } from "@types";
import { stateManager } from "@main/state-manager";
import { searchGames, searchRepacks } from "../helpers/search-games";
import { registerEvent } from "../register-event";
import { requestSteam250 } from "@main/services";
const repacks = stateManager.getValue("repacks");
const getStringForLookup = (index: number): string => {
const repack = repacks[index];
const formatter =
repackerFormatter[repack.repacker as keyof typeof repackerFormatter];
return formatName(formatter(repack.title));
};
import { RepacksManager, requestSteam250 } from "@main/services";
import { formatName } from "@shared";
const resultSize = 12;
const getCatalogue = async (
_event: Electron.IpcMainInvokeEvent,
category: CatalogueCategory
) => {
if (!repacks.length) return [];
if (category === "trending") {
return getTrendingCatalogue(resultSize);
}
return getRecentlyAddedCatalogue(resultSize);
};
const getTrendingCatalogue = async (
resultSize: number
): Promise<CatalogueEntry[]> => {
const results: CatalogueEntry[] = [];
const getCatalogue = async (_event: Electron.IpcMainInvokeEvent) => {
const trendingGames = await requestSteam250("/90day");
for (
let i = 0;
i < trendingGames.length && results.length < resultSize;
i++
) {
if (!trendingGames[i]) continue;
const { title, objectID } = trendingGames[i]!;
const repacks = searchRepacks(title);
if (title && repacks.length) {
const catalogueEntry = {
objectID,
title,
shop: "steam" as GameShop,
cover: getSteamAppAsset("library", objectID),
};
results.push({ ...catalogueEntry, repacks });
}
}
return results;
};
const getRecentlyAddedCatalogue = async (
resultSize: number
): Promise<CatalogueEntry[]> => {
const results: CatalogueEntry[] = [];
for (let i = 0; results.length < resultSize; i++) {
const stringForLookup = getStringForLookup(i);
if (!stringForLookup) {
for (let i = 0; i < resultSize; i++) {
if (!trendingGames[i]) {
i++;
continue;
}
const games = searchGames({ query: stringForLookup });
const { title, objectID } = trendingGames[i]!;
const repacks = RepacksManager.search({ query: formatName(title) });
for (const game of games) {
const isAlreadyIncluded = results.some(
(result) => result.objectID === game?.objectID
);
const catalogueEntry = {
objectID,
title,
shop: "steam" as GameShop,
cover: getSteamAppAsset("library", objectID),
};
if (!game || !game.repacks.length || isAlreadyIncluded) {
continue;
}
results.push(game);
}
results.push({ ...catalogueEntry, repacks });
}
return results.slice(0, resultSize);
return results;
};
registerEvent("getCatalogue", getCatalogue);

View File

@@ -1,11 +1,12 @@
import { gameShopCacheRepository, steamGameRepository } from "@main/repository";
import { gameShopCacheRepository } from "@main/repository";
import { getSteamAppDetails } from "@main/services";
import type { ShopDetails, GameShop, SteamAppDetails } from "@types";
import { registerEvent } from "../register-event";
import { steamGamesWorker } from "@main/workers";
const getLocalizedSteamAppDetails = (
const getLocalizedSteamAppDetails = async (
objectID: string,
language: string
): Promise<ShopDetails | null> => {
@@ -13,19 +14,22 @@ const getLocalizedSteamAppDetails = (
return getSteamAppDetails(objectID, language);
}
return Promise.all([
steamGameRepository.findOne({ where: { id: Number(objectID) } }),
getSteamAppDetails(objectID, language),
]).then(([steamGame, localizedAppDetails]) => {
if (steamGame && localizedAppDetails) {
return {
...localizedAppDetails,
name: steamGame.name,
};
}
return getSteamAppDetails(objectID, language).then(
async (localizedAppDetails) => {
const steamGame = await steamGamesWorker.run(Number(objectID), {
name: "getById",
});
return null;
});
if (steamGame && localizedAppDetails) {
return {
...localizedAppDetails,
name: steamGame.name,
};
}
return null;
}
);
};
const getGameShopDetails = async (

View File

@@ -1,39 +1,28 @@
import type { CatalogueEntry, GameShop } from "@types";
import type { CatalogueEntry } from "@types";
import { registerEvent } from "../register-event";
import { searchRepacks } from "../helpers/search-games";
import { stateManager } from "@main/state-manager";
import { getSteamAppAsset } from "@main/helpers";
const steamGames = stateManager.getValue("steamGames");
import { steamGamesWorker } from "@main/workers";
import { convertSteamGameToCatalogueEntry } from "../helpers/search-games";
import { RepacksManager } from "@main/services";
const getGames = async (
_event: Electron.IpcMainInvokeEvent,
take = 12,
cursor = 0
): Promise<{ results: CatalogueEntry[]; cursor: number }> => {
const results: CatalogueEntry[] = [];
const steamGames = await steamGamesWorker.run(
{ limit: take, offset: cursor },
{ name: "list" }
);
let i = 0 + cursor;
const entries = RepacksManager.findRepacksForCatalogueEntries(
steamGames.map((game) => convertSteamGameToCatalogueEntry(game))
);
while (results.length < take) {
const game = steamGames[i];
const repacks = searchRepacks(game.name);
if (repacks.length) {
results.push({
objectID: String(game.id),
title: game.name,
shop: "steam" as GameShop,
cover: getSteamAppAsset("library", String(game.id)),
repacks,
});
}
i++;
}
return { results, cursor: i };
return {
results: entries,
cursor: cursor + entries.length,
};
};
registerEvent("getGames", getGames);

View File

@@ -3,21 +3,34 @@ import { shuffle } from "lodash-es";
import { getSteam250List } from "@main/services";
import { registerEvent } from "../register-event";
import { searchGames, searchRepacks } from "../helpers/search-games";
import { searchSteamGames } from "../helpers/search-games";
import type { Steam250Game } from "@types";
const state = { games: Array<Steam250Game>(), index: 0 };
const filterGames = async (games: Steam250Game[]) => {
const results: Steam250Game[] = [];
for (const game of games) {
const catalogue = await searchSteamGames({ query: game.title });
if (catalogue.length) {
const [steamGame] = catalogue;
if (steamGame.repacks.length) {
results.push(game);
}
}
}
return results;
};
const getRandomGame = async (_event: Electron.IpcMainInvokeEvent) => {
if (state.games.length == 0) {
const steam250List = await getSteam250List();
const filteredSteam250List = steam250List.filter((game) => {
const repacks = searchRepacks(game.title);
const catalogue = searchGames({ query: game.title });
return repacks.length && catalogue.length;
});
const filteredSteam250List = await filterGames(steam250List);
state.games = shuffle(filteredSteam250List);
}

View File

@@ -1,11 +1,9 @@
import { searchRepacks } from "../helpers/search-games";
import { RepacksManager } from "@main/services";
import { registerEvent } from "../register-event";
const searchGameRepacks = (
_event: Electron.IpcMainInvokeEvent,
query: string
) => {
return searchRepacks(query);
};
) => RepacksManager.search({ query });
registerEvent("searchGameRepacks", searchGameRepacks);

View File

@@ -1,12 +1,10 @@
import { registerEvent } from "../register-event";
import { searchGames } from "../helpers/search-games";
import { searchSteamGames } from "../helpers/search-games";
import { CatalogueEntry } from "@types";
const searchGamesEvent = async (
_event: Electron.IpcMainInvokeEvent,
query: string
): Promise<CatalogueEntry[]> => {
return searchGames({ query, take: 12 });
};
): Promise<CatalogueEntry[]> => searchSteamGames({ query, limit: 12 });
registerEvent("searchGames", searchGamesEvent);

View File

@@ -0,0 +1,42 @@
import { registerEvent } from "../register-event";
import { dataSource } from "@main/data-source";
import { DownloadSource } from "@main/entity";
import axios from "axios";
import { downloadSourceSchema } from "../helpers/validators";
import { insertDownloadsFromSource } from "@main/helpers";
import { RepacksManager } from "@main/services";
const addDownloadSource = async (
_event: Electron.IpcMainInvokeEvent,
url: string
) => {
const response = await axios.get(url);
const source = downloadSourceSchema.parse(response.data);
const downloadSource = await dataSource.transaction(
async (transactionalEntityManager) => {
const downloadSource = await transactionalEntityManager
.getRepository(DownloadSource)
.save({
url,
name: source.name,
downloadCount: source.downloads.length,
});
await insertDownloadsFromSource(
transactionalEntityManager,
downloadSource,
source.downloads
);
return downloadSource;
}
);
await RepacksManager.updateRepacks();
return downloadSource;
};
registerEvent("addDownloadSource", addDownloadSource);

View File

@@ -0,0 +1,16 @@
import { downloadSourceRepository } from "@main/repository";
import { registerEvent } from "../register-event";
const getDownloadSources = async (_event: Electron.IpcMainInvokeEvent) => {
return downloadSourceRepository
.createQueryBuilder("downloadSource")
.leftJoin("downloadSource.repacks", "repacks")
.orderBy("downloadSource.createdAt", "DESC")
.loadRelationCountAndMap(
"downloadSource.repackCount",
"downloadSource.repacks"
)
.getMany();
};
registerEvent("getDownloadSources", getDownloadSources);

View File

@@ -0,0 +1,13 @@
import { downloadSourceRepository } from "@main/repository";
import { registerEvent } from "../register-event";
import { RepacksManager } from "@main/services";
const removeDownloadSource = async (
_event: Electron.IpcMainInvokeEvent,
id: number
) => {
await downloadSourceRepository.delete(id);
await RepacksManager.updateRepacks();
};
registerEvent("removeDownloadSource", removeDownloadSource);

View File

@@ -0,0 +1,7 @@
import { registerEvent } from "../register-event";
import { fetchDownloadSourcesAndUpdate } from "@main/helpers";
const syncDownloadSources = async (_event: Electron.IpcMainInvokeEvent) =>
fetchDownloadSourcesAndUpdate();
registerEvent("syncDownloadSources", syncDownloadSources);

View File

@@ -0,0 +1,34 @@
import { registerEvent } from "../register-event";
import axios from "axios";
import { downloadSourceRepository } from "@main/repository";
import { downloadSourceSchema } from "../helpers/validators";
import { RepacksManager } from "@main/services";
const validateDownloadSource = async (
_event: Electron.IpcMainInvokeEvent,
url: string
) => {
const response = await axios.get(url);
const source = downloadSourceSchema.parse(response.data);
const existingSource = await downloadSourceRepository.findOne({
where: { url },
});
if (existingSource)
throw new Error("Source with the same url already exists");
const repacks = RepacksManager.repacks;
const existingUris = source.downloads
.flatMap((download) => download.uris)
.filter((uri) => repacks.some((repack) => repack.magnet === uri));
return {
name: source.name,
downloadCount: source.downloads.length - existingUris.length,
};
};
registerEvent("validateDownloadSource", validateDownloadSource);

View File

@@ -0,0 +1,10 @@
import { shell } from "electron";
export const parseExecutablePath = (path: string) => {
if (process.platform === "win32" && path.endsWith(".lnk")) {
const { target } = shell.readShortcutLink(path);
return target;
}
return path;
};

View File

@@ -1,40 +1,11 @@
import flexSearch from "flexsearch";
import { orderBy } from "lodash-es";
import flexSearch from "flexsearch";
import type { GameRepack, GameShop, CatalogueEntry } from "@types";
import type { GameShop, CatalogueEntry, SteamGame } from "@types";
import { formatName, getSteamAppAsset, repackerFormatter } from "@main/helpers";
import { stateManager } from "@main/state-manager";
const { Index } = flexSearch;
const repacksIndex = new Index();
const steamGamesIndex = new Index({ tokenize: "forward" });
const repacks = stateManager.getValue("repacks");
const steamGames = stateManager.getValue("steamGames");
for (let i = 0; i < repacks.length; i++) {
const repack = repacks[i];
const formatter =
repackerFormatter[repack.repacker as keyof typeof repackerFormatter];
repacksIndex.add(i, formatName(formatter(repack.title)));
}
for (let i = 0; i < steamGames.length; i++) {
const steamGame = steamGames[i];
steamGamesIndex.add(i, formatName(steamGame.name));
}
export const searchRepacks = (title: string): GameRepack[] => {
return orderBy(
repacksIndex
.search(formatName(title))
.map((index) => repacks.at(index as number)!),
["uploadDate"],
"desc"
);
};
import { getSteamAppAsset } from "@main/helpers";
import { steamGamesWorker } from "@main/workers";
import { RepacksManager } from "@main/services";
export interface SearchGamesArgs {
query?: string;
@@ -42,27 +13,29 @@ export interface SearchGamesArgs {
skip?: number;
}
export const searchGames = ({
query,
take,
skip,
}: SearchGamesArgs): CatalogueEntry[] => {
const results = steamGamesIndex
.search(formatName(query || ""), { limit: take, offset: skip })
.map((index) => {
const result = steamGames.at(index as number)!;
export const convertSteamGameToCatalogueEntry = (
game: SteamGame
): CatalogueEntry => ({
objectID: String(game.id),
title: game.name,
shop: "steam" as GameShop,
cover: getSteamAppAsset("library", String(game.id)),
repacks: [],
});
return {
objectID: String(result.id),
title: result.name,
shop: "steam" as GameShop,
cover: getSteamAppAsset("library", String(result.id)),
repacks: searchRepacks(result.name),
};
});
export const searchSteamGames = async (
options: flexSearch.SearchOptions
): Promise<CatalogueEntry[]> => {
const steamGames = (await steamGamesWorker.run(options, {
name: "search",
})) as SteamGame[];
const result = RepacksManager.findRepacksForCatalogueEntries(
steamGames.map((game) => convertSteamGameToCatalogueEntry(game))
);
return orderBy(
results,
result,
[({ repacks }) => repacks.length, "repacks"],
["desc"]
);

View File

@@ -0,0 +1,13 @@
import { z } from "zod";
export const downloadSourceSchema = z.object({
name: z.string().max(255),
downloads: z.array(
z.object({
title: z.string().max(255),
uris: z.array(z.string()),
uploadDate: z.string().max(255),
fileSize: z.string().max(255),
})
),
});

View File

@@ -10,12 +10,16 @@ import "./catalogue/search-games";
import "./catalogue/search-game-repacks";
import "./hardware/get-disk-free-space";
import "./library/add-game-to-library";
import "./library/create-game-shortcut";
import "./library/close-game";
import "./library/delete-game-folder";
import "./library/get-game-by-object-id";
import "./library/get-library";
import "./library/open-game";
import "./library/open-game-executable-path";
import "./library/open-game-installer";
import "./library/open-game-installer-path";
import "./library/update-executable-path";
import "./library/remove-game";
import "./library/remove-game-from-library";
import "./misc/open-external";
@@ -27,7 +31,25 @@ import "./torrenting/start-game-download";
import "./user-preferences/get-user-preferences";
import "./user-preferences/update-user-preferences";
import "./user-preferences/auto-launch";
import "./autoupdater/check-for-updates";
import "./autoupdater/restart-and-install-update";
import "./user-preferences/authenticate-real-debrid";
import "./download-sources/get-download-sources";
import "./download-sources/validate-download-source";
import "./download-sources/add-download-source";
import "./download-sources/remove-download-source";
import "./download-sources/sync-download-sources";
import "./auth/sign-out";
import "./auth/open-auth-window";
import "./auth/get-session-hash";
import "./user/get-user";
import "./profile/get-me";
import "./profile/update-profile";
ipcMain.handle("ping", () => "pong");
ipcMain.handle("getVersion", () => app.getVersion());
ipcMain.handle(
"isPortableVersion",
() => process.env.PORTABLE_EXECUTABLE_FILE != null
);
ipcMain.handle("getDefaultDownloadsPath", () => defaultDownloadsPath);

View File

@@ -3,15 +3,16 @@ import { gameRepository } from "@main/repository";
import { registerEvent } from "../register-event";
import type { GameShop } from "@types";
import { getFileBase64 } from "@main/helpers";
import { getSteamGameIconUrl } from "@main/services";
import { getFileBase64, getSteamAppAsset } from "@main/helpers";
import { steamGamesWorker } from "@main/workers";
import { createGame } from "@main/services/library-sync";
const addGameToLibrary = async (
_event: Electron.IpcMainInvokeEvent,
objectID: string,
title: string,
gameShop: GameShop,
executablePath: string | null
shop: GameShop
) => {
return gameRepository
.update(
@@ -19,26 +20,40 @@ const addGameToLibrary = async (
objectID,
},
{
shop: gameShop,
shop,
status: null,
executablePath,
isDeleted: false,
}
)
.then(async ({ affected }) => {
if (!affected) {
const iconUrl = await getFileBase64(
await getSteamGameIconUrl(objectID)
);
await gameRepository.insert({
title,
iconUrl,
objectID,
shop: gameShop,
executablePath,
const steamGame = await steamGamesWorker.run(Number(objectID), {
name: "getById",
});
const iconUrl = steamGame?.clientIcon
? getSteamAppAsset("icon", objectID, steamGame.clientIcon)
: null;
await gameRepository
.insert({
title,
iconUrl,
objectID,
shop,
})
.then(() => {
if (iconUrl) {
getFileBase64(iconUrl).then((base64) =>
gameRepository.update({ objectID }, { iconUrl: base64 })
);
}
});
}
const game = await gameRepository.findOne({ where: { objectID } });
createGame(game!);
});
};

View File

@@ -1,39 +1,45 @@
import path from "node:path";
import { gameRepository } from "@main/repository";
import { getProcesses } from "@main/helpers";
import { registerEvent } from "../register-event";
import { PythonInstance, logger } from "@main/services";
import sudo from "sudo-prompt";
import { app } from "electron";
const getKillCommand = (pid: number) => {
if (process.platform == "win32") {
return `taskkill /PID ${pid}`;
}
return `kill -9 ${pid}`;
};
const closeGame = async (
_event: Electron.IpcMainInvokeEvent,
gameId: number
) => {
const processes = await getProcesses();
const processes = await PythonInstance.getProcessList();
const game = await gameRepository.findOne({
where: { id: gameId, isDeleted: false },
});
if (!game) return false;
const executablePath = game.executablePath!;
const basename = path.win32.basename(executablePath);
const basenameWithoutExtension = path.win32.basename(
executablePath,
path.extname(executablePath)
);
if (!game) return;
const gameProcess = processes.find((runningProcess) => {
if (process.platform === "win32") {
return runningProcess.name === basename;
}
return [basename, basenameWithoutExtension].includes(runningProcess.name);
return runningProcess.exe === game.executablePath;
});
if (gameProcess) return process.kill(gameProcess.pid);
return false;
if (gameProcess) {
try {
process.kill(gameProcess.pid);
} catch (err) {
sudo.exec(
getKillCommand(gameProcess.pid),
{ name: app.getName() },
(error, _stdout, _stderr) => {
logger.error(error);
}
);
}
}
};
registerEvent("closeGame", closeGame);

View File

@@ -0,0 +1,39 @@
import { gameRepository } from "@main/repository";
import { registerEvent } from "../register-event";
import { IsNull, Not } from "typeorm";
import createDesktopShortcut from "create-desktop-shortcuts";
import path from "node:path";
import { app } from "electron";
import { removeSymbolsFromName } from "@shared";
const createGameShortcut = async (
_event: Electron.IpcMainInvokeEvent,
id: number
): Promise<boolean> => {
const game = await gameRepository.findOne({
where: { id, executablePath: Not(IsNull()) },
});
if (game) {
const filePath = game.executablePath;
const windowVbsPath = app.isPackaged
? path.join(process.resourcesPath, "windows.vbs")
: undefined;
const options = {
filePath,
name: removeSymbolsFromName(game.title),
};
return createDesktopShortcut({
windows: { ...options, VBScriptPath: windowVbsPath },
linux: options,
osx: options,
});
}
return false;
};
registerEvent("createGameShortcut", createGameShortcut);

View File

@@ -1,7 +1,6 @@
import path from "node:path";
import fs from "node:fs";
import { GameStatus } from "@shared";
import { gameRepository } from "@main/repository";
import { getDownloadsPath } from "../helpers/get-downloads-path";
@@ -13,11 +12,18 @@ const deleteGameFolder = async (
gameId: number
): Promise<void> => {
const game = await gameRepository.findOne({
where: {
id: gameId,
status: GameStatus.Cancelled,
isDeleted: false,
},
where: [
{
id: gameId,
isDeleted: false,
status: "removed",
},
{
id: gameId,
progress: 1,
isDeleted: false,
},
],
});
if (!game) return;
@@ -29,7 +35,7 @@ const deleteGameFolder = async (
);
if (fs.existsSync(folderPath)) {
return new Promise((resolve, reject) => {
await new Promise<void>((resolve, reject) => {
fs.rm(
folderPath,
{ recursive: true, force: true, maxRetries: 5, retryDelay: 200 },
@@ -45,6 +51,11 @@ const deleteGameFolder = async (
});
}
}
await gameRepository.update(
{ id: gameId },
{ downloadPath: null, folderName: null, status: null, progress: 0 }
);
};
registerEvent("deleteGameFolder", deleteGameFolder);

View File

@@ -11,9 +11,6 @@ const getGameByObjectID = async (
objectID,
isDeleted: false,
},
relations: {
repack: true,
},
});
registerEvent("getGameByObjectID", getGameByObjectID);

View File

@@ -1,31 +1,17 @@
import { gameRepository } from "@main/repository";
import { searchRepacks } from "../helpers/search-games";
import { registerEvent } from "../register-event";
import { GameStatus } from "@shared";
import { sortBy } from "lodash-es";
const getLibrary = async () =>
gameRepository
.find({
where: {
isDeleted: false,
},
order: {
createdAt: "desc",
},
relations: {
repack: true,
},
})
.then((games) =>
sortBy(
games.map((game) => ({
...game,
repacks: searchRepacks(game.title),
})),
(game) => (game.status !== GameStatus.Cancelled ? 0 : 1)
)
);
gameRepository.find({
where: {
isDeleted: false,
},
relations: {
downloadQueue: true,
},
order: {
createdAt: "desc",
},
});
registerEvent("getLibrary", getLibrary);

View File

@@ -0,0 +1,18 @@
import { shell } from "electron";
import { gameRepository } from "@main/repository";
import { registerEvent } from "../register-event";
const openGameExecutablePath = async (
_event: Electron.IpcMainInvokeEvent,
gameId: number
) => {
const game = await gameRepository.findOne({
where: { id: gameId, isDeleted: false },
});
if (!game || !game.executablePath) return;
shell.showItemInFolder(game.executablePath);
};
registerEvent("openGameExecutablePath", openGameExecutablePath);

View File

@@ -0,0 +1,27 @@
import { shell } from "electron";
import path from "node:path";
import { gameRepository } from "@main/repository";
import { getDownloadsPath } from "../helpers/get-downloads-path";
import { registerEvent } from "../register-event";
const openGameInstallerPath = async (
_event: Electron.IpcMainInvokeEvent,
gameId: number
) => {
const game = await gameRepository.findOne({
where: { id: gameId, isDeleted: false },
});
if (!game || !game.folderName || !game.downloadPath) return true;
const gamePath = path.join(
game.downloadPath ?? (await getDownloadsPath()),
game.folderName!
);
shell.showItemInFolder(gamePath);
return true;
};
registerEvent("openGameInstallerPath", openGameInstallerPath);

View File

@@ -1,13 +1,28 @@
import { gameRepository } from "@main/repository";
import { generateYML } from "../helpers/generate-lutris-yaml";
import { shell } from "electron";
import path from "node:path";
import fs from "node:fs";
import { writeFile } from "node:fs/promises";
import { spawnSync, exec } from "node:child_process";
import { registerEvent } from "../register-event";
import { shell } from "electron";
import { gameRepository } from "@main/repository";
import { generateYML } from "../helpers/generate-lutris-yaml";
import { getDownloadsPath } from "../helpers/get-downloads-path";
import { registerEvent } from "../register-event";
const executeGameInstaller = (filePath: string) => {
if (process.platform === "win32") {
shell.openPath(filePath);
return true;
}
if (spawnSync("which", ["wine"]).status === 0) {
exec(`wine "${filePath}"`);
return true;
}
return false;
};
const openGameInstaller = async (
_event: Electron.IpcMainInvokeEvent,
@@ -17,7 +32,7 @@ const openGameInstaller = async (
where: { id: gameId, isDeleted: false },
});
if (!game) return true;
if (!game || !game.folderName) return true;
const gamePath = path.join(
game.downloadPath ?? (await getDownloadsPath()),
@@ -29,15 +44,29 @@ const openGameInstaller = async (
return true;
}
const setupPath = path.join(gamePath, "setup.exe");
if (!fs.existsSync(setupPath)) {
if (process.platform === "darwin") {
shell.openPath(gamePath);
return true;
}
if (process.platform === "win32") {
shell.openPath(setupPath);
return true;
if (fs.lstatSync(gamePath).isFile()) {
return executeGameInstaller(gamePath);
}
const setupPath = path.join(gamePath, "setup.exe");
if (fs.existsSync(setupPath)) {
return executeGameInstaller(setupPath);
}
const gamePathFileNames = fs.readdirSync(gamePath);
const gamePathExecutableFiles = gamePathFileNames.filter(
(fileName: string) => path.extname(fileName).toLowerCase() === ".exe"
);
if (gamePathExecutableFiles.length === 1) {
return executeGameInstaller(
path.join(gamePath, gamePathExecutableFiles[0])
);
}
if (spawnSync("which", ["lutris"]).status === 0) {
@@ -47,12 +76,8 @@ const openGameInstaller = async (
return true;
}
if (spawnSync("which", ["wine"]).status === 0) {
exec(`wine "${setupPath}"`);
return true;
}
return false;
shell.openPath(gamePath);
return true;
};
registerEvent("openGameInstaller", openGameInstaller);

View File

@@ -2,15 +2,18 @@ import { gameRepository } from "@main/repository";
import { registerEvent } from "../register-event";
import { shell } from "electron";
import { parseExecutablePath } from "../helpers/parse-executable-path";
const openGame = async (
_event: Electron.IpcMainInvokeEvent,
gameId: number,
executablePath: string
) => {
await gameRepository.update({ id: gameId }, { executablePath });
const parsedPath = parseExecutablePath(executablePath);
shell.openPath(executablePath);
await gameRepository.update({ id: gameId }, { executablePath: parsedPath });
shell.openPath(parsedPath);
};
registerEvent("openGame", openGame);

View File

@@ -1,11 +1,27 @@
import { registerEvent } from "../register-event";
import { gameRepository } from "../../repository";
import { HydraApi, logger } from "@main/services";
const removeGameFromLibrary = async (
_event: Electron.IpcMainInvokeEvent,
gameId: number
) => {
gameRepository.update({ id: gameId }, { isDeleted: true });
gameRepository.update(
{ id: gameId },
{ isDeleted: true, executablePath: null }
);
removeRemoveGameFromLibrary(gameId).catch((err) => {
logger.error("removeRemoveGameFromLibrary", err);
});
};
const removeRemoveGameFromLibrary = async (gameId: number) => {
const game = await gameRepository.findOne({ where: { id: gameId } });
if (game?.remoteId) {
HydraApi.delete(`/games/${game.remoteId}`).catch(() => {});
}
};
registerEvent("removeGameFromLibrary", removeGameFromLibrary);

View File

@@ -1,6 +1,5 @@
import { registerEvent } from "../register-event";
import { gameRepository } from "../../repository";
import { GameStatus } from "@shared";
const removeGame = async (
_event: Electron.IpcMainInvokeEvent,
@@ -9,10 +8,9 @@ const removeGame = async (
await gameRepository.update(
{
id: gameId,
status: GameStatus.Cancelled,
},
{
status: null,
status: "removed",
downloadPath: null,
bytesDownloaded: 0,
progress: 0,

View File

@@ -0,0 +1,21 @@
import { gameRepository } from "@main/repository";
import { registerEvent } from "../register-event";
import { parseExecutablePath } from "../helpers/parse-executable-path";
const updateExecutablePath = async (
_event: Electron.IpcMainInvokeEvent,
id: number,
executablePath: string
) => {
return gameRepository.update(
{
id,
},
{
executablePath: parseExecutablePath(executablePath),
}
);
};
registerEvent("updateExecutablePath", updateExecutablePath);

View File

@@ -0,0 +1,38 @@
import { registerEvent } from "../register-event";
import * as Sentry from "@sentry/electron/main";
import { HydraApi } from "@main/services";
import { UserProfile } from "@types";
import { userAuthRepository } from "@main/repository";
import { UserNotLoggedInError } from "@shared";
const getMe = async (
_event: Electron.IpcMainInvokeEvent
): Promise<UserProfile | null> => {
return HydraApi.get(`/profile/me`)
.then((response) => {
const me = response.data;
userAuthRepository.upsert(
{
id: 1,
displayName: me.displayName,
profileImageUrl: me.profileImageUrl,
userId: me.id,
},
["id"]
);
Sentry.setUser({ id: me.id, username: me.username });
return me;
})
.catch((err) => {
if (err instanceof UserNotLoggedInError) {
return null;
}
return userAuthRepository.findOne({ where: { id: 1 } });
});
};
registerEvent("getMe", getMe);

View File

@@ -0,0 +1,63 @@
import { registerEvent } from "../register-event";
import { HydraApi } from "@main/services";
import axios from "axios";
import fs from "node:fs";
import path from "node:path";
import { fileTypeFromFile } from "file-type";
import { UserProfile } from "@types";
const patchUserProfile = async (
displayName: string,
profileImageUrl?: string
) => {
if (profileImageUrl) {
return HydraApi.patch("/profile", {
displayName,
profileImageUrl,
});
} else {
return HydraApi.patch("/profile", {
displayName,
});
}
};
const updateProfile = async (
_event: Electron.IpcMainInvokeEvent,
displayName: string,
newProfileImagePath: string | null
) => {
if (!newProfileImagePath) {
return patchUserProfile(displayName).then(
(response) => response.data as UserProfile
);
}
const stats = fs.statSync(newProfileImagePath);
const fileBuffer = fs.readFileSync(newProfileImagePath);
const fileSizeInBytes = stats.size;
const profileImageUrl = await HydraApi.post(`/presigned-urls/profile-image`, {
imageExt: path.extname(newProfileImagePath).slice(1),
imageLength: fileSizeInBytes,
})
.then(async (preSignedResponse) => {
const { presignedUrl, profileImageUrl } = preSignedResponse.data;
const mimeType = await fileTypeFromFile(newProfileImagePath);
await axios.put(presignedUrl, fileBuffer, {
headers: {
"Content-Type": mimeType?.mime,
},
});
return profileImageUrl;
})
.catch(() => undefined);
return patchUserProfile(displayName, profileImageUrl).then(
(response) => response.data as UserProfile
);
};
registerEvent("updateProfile", updateProfile);

View File

@@ -1,53 +1,31 @@
import { gameRepository } from "@main/repository";
import { registerEvent } from "../register-event";
import { WindowManager } from "@main/services";
import { In } from "typeorm";
import { DownloadManager } from "@main/services";
import { GameStatus } from "@shared";
import { dataSource } from "@main/data-source";
import { DownloadQueue, Game } from "@main/entity";
const cancelGameDownload = async (
_event: Electron.IpcMainInvokeEvent,
gameId: number
) => {
const game = await gameRepository.findOne({
where: {
id: gameId,
isDeleted: false,
status: In([
GameStatus.Downloading,
GameStatus.DownloadingMetadata,
GameStatus.CheckingFiles,
GameStatus.Paused,
GameStatus.Seeding,
GameStatus.Finished,
]),
},
});
await dataSource.transaction(async (transactionalEntityManager) => {
await DownloadManager.cancelDownload(gameId);
if (!game) return;
DownloadManager.cancelDownload();
await transactionalEntityManager.getRepository(DownloadQueue).delete({
game: { id: gameId },
});
await gameRepository
.update(
await transactionalEntityManager.getRepository(Game).update(
{
id: game.id,
id: gameId,
},
{
status: GameStatus.Cancelled,
status: "removed",
bytesDownloaded: 0,
progress: 0,
}
)
.then((result) => {
if (
game.status !== GameStatus.Paused &&
game.status !== GameStatus.Seeding
) {
if (result.affected) WindowManager.mainWindow?.setProgressBar(-1);
}
});
);
});
};
registerEvent("cancelGameDownload", cancelGameDownload);

View File

@@ -1,30 +1,24 @@
import { registerEvent } from "../register-event";
import { gameRepository } from "../../repository";
import { In } from "typeorm";
import { DownloadManager, WindowManager } from "@main/services";
import { GameStatus } from "@shared";
import { DownloadManager } from "@main/services";
import { dataSource } from "@main/data-source";
import { DownloadQueue, Game } from "@main/entity";
const pauseGameDownload = async (
_event: Electron.IpcMainInvokeEvent,
gameId: number
) => {
DownloadManager.pauseDownload();
await dataSource.transaction(async (transactionalEntityManager) => {
await DownloadManager.pauseDownload();
await gameRepository
.update(
{
id: gameId,
status: In([
GameStatus.Downloading,
GameStatus.DownloadingMetadata,
GameStatus.CheckingFiles,
]),
},
{ status: GameStatus.Paused }
)
.then((result) => {
if (result.affected) WindowManager.mainWindow?.setProgressBar(-1);
await transactionalEntityManager.getRepository(DownloadQueue).delete({
game: { id: gameId },
});
await transactionalEntityManager
.getRepository(Game)
.update({ id: gameId }, { status: "paused" });
});
};
registerEvent("pauseGameDownload", pauseGameDownload);

View File

@@ -1,9 +1,11 @@
import { Not } from "typeorm";
import { registerEvent } from "../register-event";
import { gameRepository } from "../../repository";
import { getDownloadsPath } from "../helpers/get-downloads-path";
import { In } from "typeorm";
import { DownloadManager } from "@main/services";
import { GameStatus } from "@shared";
import { dataSource } from "@main/data-source";
import { DownloadQueue, Game } from "@main/entity";
const resumeGameDownload = async (
_event: Electron.IpcMainInvokeEvent,
@@ -14,35 +16,32 @@ const resumeGameDownload = async (
id: gameId,
isDeleted: false,
},
relations: { repack: true },
});
if (!game) return;
DownloadManager.pauseDownload();
if (game.status === GameStatus.Paused) {
const downloadsPath = game.downloadPath ?? (await getDownloadsPath());
if (game.status === "paused") {
await dataSource.transaction(async (transactionalEntityManager) => {
await DownloadManager.pauseDownload();
DownloadManager.resumeDownload(gameId);
await transactionalEntityManager
.getRepository(Game)
.update({ status: "active", progress: Not(1) }, { status: "paused" });
await gameRepository.update(
{
status: In([
GameStatus.Downloading,
GameStatus.DownloadingMetadata,
GameStatus.CheckingFiles,
]),
},
{ status: GameStatus.Paused }
);
await DownloadManager.resumeDownload(game);
await gameRepository.update(
{ id: game.id },
{
status: GameStatus.Downloading,
downloadPath: downloadsPath,
}
);
await transactionalEntityManager
.getRepository(DownloadQueue)
.delete({ game: { id: gameId } });
await transactionalEntityManager
.getRepository(DownloadQueue)
.insert({ game: { id: gameId } });
await transactionalEntityManager
.getRepository(Game)
.update({ id: gameId }, { status: "active" });
});
}
};

View File

@@ -1,38 +1,30 @@
import { getSteamGameIconUrl } from "@main/services";
import {
downloadQueueRepository,
gameRepository,
repackRepository,
userPreferencesRepository,
} from "@main/repository";
import { registerEvent } from "../register-event";
import type { GameShop } from "@types";
import { getFileBase64 } from "@main/helpers";
import { In } from "typeorm";
import type { StartGameDownloadPayload } from "@types";
import { getFileBase64, getSteamAppAsset } from "@main/helpers";
import { DownloadManager } from "@main/services";
import { Downloader, GameStatus } from "@shared";
import { Not } from "typeorm";
import { steamGamesWorker } from "@main/workers";
import { createGame } from "@main/services/library-sync";
const startGameDownload = async (
_event: Electron.IpcMainInvokeEvent,
repackId: number,
objectID: string,
title: string,
gameShop: GameShop,
downloadPath: string
payload: StartGameDownloadPayload
) => {
const userPreferences = await userPreferencesRepository.findOne({
where: { id: 1 },
});
const downloader = userPreferences?.realDebridApiToken
? Downloader.RealDebrid
: Downloader.Torrent;
const { repackId, objectID, title, shop, downloadPath, downloader } = payload;
const [game, repack] = await Promise.all([
gameRepository.findOne({
where: {
objectID,
shop,
},
}),
repackRepository.findOne({
@@ -42,18 +34,13 @@ const startGameDownload = async (
}),
]);
if (!repack || game?.status === GameStatus.Downloading) return;
DownloadManager.pauseDownload();
if (!repack) return;
await DownloadManager.pauseDownload();
await gameRepository.update(
{
status: In([
GameStatus.Downloading,
GameStatus.DownloadingMetadata,
GameStatus.CheckingFiles,
]),
},
{ status: GameStatus.Paused }
{ status: "active", progress: Not(1) },
{ status: "paused" }
);
if (game) {
@@ -62,39 +49,58 @@ const startGameDownload = async (
id: game.id,
},
{
status: GameStatus.DownloadingMetadata,
downloadPath: downloadPath,
status: "active",
progress: 0,
bytesDownloaded: 0,
downloadPath,
downloader,
repack: { id: repackId },
uri: repack.magnet,
isDeleted: false,
}
);
DownloadManager.downloadGame(game.id);
game.status = GameStatus.DownloadingMetadata;
return game;
} else {
const iconUrl = await getFileBase64(await getSteamGameIconUrl(objectID));
const createdGame = await gameRepository.save({
title,
iconUrl,
objectID,
downloader,
shop: gameShop,
status: GameStatus.Downloading,
downloadPath,
repack: { id: repackId },
const steamGame = await steamGamesWorker.run(Number(objectID), {
name: "getById",
});
DownloadManager.downloadGame(createdGame.id);
const iconUrl = steamGame?.clientIcon
? getSteamAppAsset("icon", objectID, steamGame.clientIcon)
: null;
const { repack: _, ...rest } = createdGame;
await gameRepository
.insert({
title,
iconUrl,
objectID,
downloader,
shop,
status: "active",
downloadPath,
uri: repack.magnet,
})
.then((result) => {
if (iconUrl) {
getFileBase64(iconUrl).then((base64) =>
gameRepository.update({ objectID }, { iconUrl: base64 })
);
}
return rest;
return result;
});
}
const updatedGame = await gameRepository.findOne({
where: {
objectID,
},
});
createGame(updatedGame!);
await downloadQueueRepository.delete({ game: { id: updatedGame!.id } });
await downloadQueueRepository.insert({ game: { id: updatedGame!.id } });
await DownloadManager.startDownload(updatedGame!);
};
registerEvent("startGameDownload", startGameDownload);

View File

@@ -0,0 +1,14 @@
import { RealDebridClient } from "@main/services/real-debrid";
import { registerEvent } from "../register-event";
const authenticateRealDebrid = async (
_event: Electron.IpcMainInvokeEvent,
apiToken: string
) => {
RealDebridClient.authorize(apiToken);
const user = await RealDebridClient.getUser();
return user;
};
registerEvent("authenticateRealDebrid", authenticateRealDebrid);

View File

@@ -6,13 +6,16 @@ const autoLaunch = async (
_event: Electron.IpcMainInvokeEvent,
enabled: boolean
) => {
if (!app.isPackaged) return;
const appLauncher = new AutoLaunch({
name: app.getName(),
});
if (enabled) {
appLauncher.enable().catch();
appLauncher.enable().catch(() => {});
} else {
appLauncher.disable().catch();
appLauncher.disable().catch(() => {});
}
};

View File

@@ -2,17 +2,17 @@ import { userPreferencesRepository } from "@main/repository";
import { registerEvent } from "../register-event";
import type { UserPreferences } from "@types";
import { RealDebridClient } from "@main/services/real-debrid";
import i18next from "i18next";
const updateUserPreferences = async (
_event: Electron.IpcMainInvokeEvent,
preferences: Partial<UserPreferences>
) => {
if (preferences.realDebridApiToken) {
RealDebridClient.authorize(preferences.realDebridApiToken);
if (preferences.language) {
i18next.changeLanguage(preferences.language);
}
await userPreferencesRepository.upsert(
return userPreferencesRepository.upsert(
{
id: 1,
...preferences,

View File

@@ -0,0 +1,56 @@
import { registerEvent } from "../register-event";
import { HydraApi } from "@main/services";
import { steamGamesWorker } from "@main/workers";
import { UserProfile } from "@types";
import { convertSteamGameToCatalogueEntry } from "../helpers/search-games";
import { getSteamAppAsset } from "@main/helpers";
const getUser = async (
_event: Electron.IpcMainInvokeEvent,
userId: string
): Promise<UserProfile | null> => {
try {
const response = await HydraApi.get(`/user/${userId}`);
const profile = response.data;
const recentGames = await Promise.all(
profile.recentGames.map(async (game) => {
const steamGame = await steamGamesWorker.run(Number(game.objectId), {
name: "getById",
});
const iconUrl = steamGame?.clientIcon
? getSteamAppAsset("icon", game.objectId, steamGame.clientIcon)
: null;
return {
...game,
...convertSteamGameToCatalogueEntry(steamGame),
iconUrl,
};
})
);
const libraryGames = await Promise.all(
profile.libraryGames.map(async (game) => {
const steamGame = await steamGamesWorker.run(Number(game.objectId), {
name: "getById",
});
const iconUrl = steamGame?.clientIcon
? getSteamAppAsset("icon", game.objectId, steamGame.clientIcon)
: null;
return {
...game,
...convertSteamGameToCatalogueEntry(steamGame),
iconUrl,
};
})
);
return { ...profile, libraryGames, recentGames };
} catch (err) {
return null;
}
};
registerEvent("getUser", getUser);

Some files were not shown because too many files have changed in this diff Show More