Compare commits

...

490 Commits

Author SHA1 Message Date
Nate
ee0e314b29 css fix 2025-01-18 18:45:54 -03:00
Nate
d50bb137e6 fixed everything 2025-01-18 15:17:52 -03:00
Nate
1bbf3b27bf added "as vars;" + vars.$ 2025-01-18 14:13:57 -03:00
Nate
3c9d036efd @import to @use 2025-01-18 13:48:00 -03:00
Nate
e97a6fe51a font syntax fix 2025-01-18 13:14:59 -03:00
Eight
ead094de01 Merge branch 'main' into feature/migration-to-scss 2025-01-18 13:08:30 -03:00
Nate
855a646d23 syntax fix 2025-01-17 22:42:14 -03:00
Nate
8192e5d8f1 full migration to scss 2025-01-17 20:16:57 -03:00
Nate
2bd4b69926 full migration to scss 2025-01-17 20:14:54 -03:00
Nate
62c6071395 full migration to scss 2025-01-17 20:03:20 -03:00
Nate
d1750fff59 full migration to scss 2025-01-17 20:00:00 -03:00
Nate
138244d5aa full migration to scss 2025-01-17 19:58:16 -03:00
Nate
d038398750 full migration to scss 2025-01-17 19:43:41 -03:00
Nate
b0eb7c16cd migration to scss 2025-01-17 19:26:27 -03:00
Nate
691dba26af migration to scss
all tsx files adjusted
added root vars on _variables.scss
2025-01-17 18:52:23 -03:00
Nate
ad330bd7a3 Merge branch 'feature/migration-to-scss' of https://github.com/hydralauncher/hydra into feature/migration-to-scss 2025-01-17 18:51:32 -03:00
Hachi-R
fe8f1b44db lint 2025-01-17 16:34:48 -03:00
Hachi-R
b9c072e7ac feat: integrate monaco editor 2025-01-17 16:34:06 -03:00
Nate
50df38856d migration to scss
no .tsx changes were made, yet
2025-01-17 14:11:35 -03:00
Chubby Granny Chaser
8a30e946e3 Merge pull request #1405 from vitorRibeiro7/hotfix-game-minimun-specs-accordion
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
fix: fix css bug on requirements details style
2025-01-17 16:09:17 +00:00
Hachi-R
f5395305eb Merge branch 'feature/migration-to-scss' of https://github.com/hydralauncher/hydra into feature/migration-to-scss 2025-01-17 12:37:33 -03:00
Hachi-R
3f29a78593 fix: show editor devtools in dev 2025-01-17 12:29:03 -03:00
Eight
71f3409275 Merge branch 'main' into feature/migration-to-scss 2025-01-17 12:27:30 -03:00
vitorRibeiro7
cd871ec359 refactor: add non re-render rules to useEffect 2025-01-17 12:25:35 -03:00
Hachi-R
c4f5d17b40 refactor: remove redundant condition 2025-01-17 12:25:00 -03:00
Chubby Granny Chaser
548b7c3f41 Merge branch 'main' into hotfix-game-minimun-specs-accordion 2025-01-17 15:18:28 +00:00
Hachi-R
686ec61a99 Merge branch 'main' into feature/migration-to-scss 2025-01-17 12:10:00 -03:00
Hachi-R
fb63ec864c feat: add editor window 2025-01-17 12:00:59 -03:00
vitorRibeiro7
bbcdb42708 ench: add dynamic height 2025-01-17 11:55:03 -03:00
vitorRibeiro7
e9d541498e fix: reset overflow hidden 2025-01-17 11:54:14 -03:00
vitorRibeiro7
4e34f41ee0 ench: remove maxHeight on sidebar section 2025-01-17 11:33:44 -03:00
vitorRibeiro7
049c27cdb7 fix; revert minHeight 2025-01-17 11:32:28 -03:00
Hachi-R
e07297fc53 lint 2025-01-17 10:30:35 -03:00
Hachi-R
c17839ae97 feat: add aparence tab to settings page 2025-01-17 10:27:59 -03:00
vitorRibeiro7
2ba653429f fix: fix css bug on requirements details style 2025-01-16 18:20:08 -03:00
Zamitto
9574e39d75 Merge pull request #1404 from hydrasources/patch-11
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
Update RU translation.json
2025-01-16 15:42:38 -03:00
hydrasources
8ebb5edfbc Update translation.json 2025-01-16 21:29:28 +03:00
Zamitto
69787ee068 Merge pull request #1402 from hydralauncher/feat/manage-account-buttons
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
feat: manage account buttons
2025-01-16 13:45:24 -03:00
Zamitto
d1fa4895e4 feat: adjust spacing 2025-01-16 12:58:09 -03:00
Hachi-R
395f77e17c refactor: change notifications header to paragraph 2025-01-16 12:18:25 -03:00
Zamitto
5d0e825880 fix: i18n 2025-01-16 11:57:28 -03:00
Zamitto
b06339d362 feat: handle refreshToken failure 2025-01-16 11:55:13 -03:00
Zamitto
3d0bf11359 feat: update text 2025-01-16 11:53:10 -03:00
Zamitto
2346a5bf86 feat: add renewal info 2025-01-16 11:32:59 -03:00
Hachi-R
f6707a5c84 lint 2025-01-16 11:30:24 -03:00
Hachi-R
ee4c564698 Merge branch 'main' into feature/migration-to-scss 2025-01-16 11:30:09 -03:00
Zamitto
81cb73c243 feat: code suggestion 2025-01-16 11:22:10 -03:00
Zamitto
923f7d7e80 feat: review 2025-01-16 09:48:08 -03:00
Zamitto
153ab05174 feat: remove unused string 2025-01-16 09:47:24 -03:00
Zamitto
ff0ef74066 feat: update icon order 2025-01-16 09:38:28 -03:00
Zamitto
bc2ee2dc4c feat: texts and layout 2025-01-16 01:12:34 -03:00
Zamitto
d866face54 feat: add account updated listener 2025-01-16 00:21:44 -03:00
Zamitto
44fd971c95 feat: refactor open auth 2025-01-15 23:56:37 -03:00
Zamitto
9941460c60 feat: code review 2025-01-15 17:13:36 -03:00
Zamitto
15f721ac39 feat: use Avatar component and remove non null assertion 2025-01-15 17:11:02 -03:00
Zamitto
56fabb2881 fix: hook dependencies 2025-01-15 17:08:07 -03:00
Zamitto
ffd3e37b48 feat: refactor 2025-01-15 16:57:41 -03:00
Zamitto
c4378c0ffc feat: update user details on settings account tab 2025-01-15 16:29:36 -03:00
Zamitto
af4fcb8f06 feat: manage account buttons 2025-01-15 15:49:11 -03:00
Zamitto
d4be5b8c66 Merge pull request #1386 from hydrasources/patch-10
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
Update RU translation.json
2025-01-07 13:48:35 -03:00
Zamitto
21a88b889f chore: run prettier 2025-01-07 13:45:31 -03:00
Zamitto
a0a3697516 fix: missing comma 2025-01-07 13:08:13 -03:00
Zamitto
317434f663 fix: lint error 2025-01-07 13:02:20 -03:00
hydrasources
cac2a7a70e Update translation.json 2025-01-07 18:53:34 +03:00
Chubby Granny Chaser
11700b7c16 Merge pull request #1378 from Shisuiicaro/Feature/Datanodes-Hoster
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
Feat: Datanodes Hoster
2025-01-07 08:40:45 +00:00
Chubby Granny Chaser
2407be0fb2 Merge branch 'main' into Feature/Datanodes-Hoster 2025-01-06 20:43:37 +00:00
Shisuys
2a31c32cda Update datanodes.ts 2025-01-05 17:32:09 -03:00
Zamitto
7a7f270482 Merge pull request #1384 from mikropsoft/main
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
Update TR Locales
2025-01-05 15:47:44 -03:00
Zamitto
ab2d8c351b Removing excessive new lines 2025-01-05 15:37:25 -03:00
𝗦𝗵𝗟𝗲𝗿𝗣
87acdea5ab Update TR Locales 2025-01-05 21:08:52 +03:00
Eight
385db5c936 Merge pull request #1301 from hydralauncher/feature/reset-achievements
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
feat: add reset achievements modal
2025-01-03 19:41:24 -03:00
Hachi-R
cade56bb12 feat: disable reset achievements button if user is not logged in 2025-01-03 19:15:31 -03:00
Hachi-R
3efb1425b9 lint 2025-01-03 18:50:13 -03:00
Hachi-R
2df57b071d feat: disable reset achievement button if has no achievements 2025-01-03 18:50:02 -03:00
Hachi-R
5061695500 lint 2025-01-03 18:22:25 -03:00
Hachi-R
190ddeb46e refactor: improve logging for deleted game achievements 2025-01-03 18:22:13 -03:00
Hachi-R
e6d76a5dbe lint 2025-01-03 17:56:39 -03:00
Hachi-R
2ddda4e4d2 refactor: remove error logging 2025-01-03 17:56:13 -03:00
Hachi-R
ef3bf98903 feat: add success and error toast 2025-01-03 17:36:55 -03:00
Hachi-R
b68fe300ba refactor: rename state variable for clarity 2025-01-03 17:24:37 -03:00
Hachi-R
29ba0cca85 fix: update button disabled state logic 2025-01-03 17:21:09 -03:00
Shisuys
82b1d710c2 Datanodes support 2025-01-03 16:58:37 -03:00
Hachi-R
93b86f8c6c refactor: improve reset achievements handling and modal state management 2025-01-03 12:38:06 -03:00
Hachi-R
8cf549ff05 refactor: enhance logging in resetGameAchievement 2025-01-03 12:16:32 -03:00
Hachi-R
257a71d626 fix: change console.info to console.log 2025-01-02 09:37:58 -03:00
Hachi-R
f3d617a13a feat: log response after deleting game achievements 2025-01-02 09:37:23 -03:00
Hachi-R
9672e649e4 feat: log deleted achievement files 2025-01-02 09:36:09 -03:00
Hachi-R
e2f798c627 refactor: simplify resetGameAchievements by replacing Promise.all with a for loop 2025-01-02 09:35:05 -03:00
Hachi-R
52c159fe51 fix: replace console.error with achievementsLogger.error 2025-01-02 09:34:28 -03:00
Hachi-R
9849fbb31c refactor: change ResetAchievementsModalProps to use Readonly type for better immutability 2025-01-02 06:36:55 -03:00
Hachi-R
addc2a74d3 lint 2025-01-02 06:28:45 -03:00
Hachi-R
10766526c5 refactor: streamline resetGameAchievements with a single try catch 2025-01-02 06:28:32 -03:00
Hachi-R
bfdc2787d4 feat: remove hame achievements from remote db 2025-01-02 06:14:56 -03:00
Hachi-R
c60cd4bee4 Merge remote-tracking branch 'origin/main' into feature/reset-achievements 2025-01-02 05:28:57 -03:00
Zamitto
59bc23bbd8 Merge pull request #1367 from hydralauncher/fix/issues
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
fix: issues
2025-01-01 20:32:05 -03:00
Zamitto
16b50fc22b feat: remove launch options temporarily 2025-01-01 20:19:57 -03:00
Zamitto
720a7aa2a0 chore: bump version 2025-01-01 19:53:48 -03:00
Zamitto
5c2bafcfe8 Merge pull request #1371 from hydralauncher/feature/adding-sentry
Feature/adding sentry
2025-01-01 19:48:17 -03:00
Chubby Granny Chaser
c30c685ee4 fix: fixing translation 2025-01-01 21:50:26 +00:00
Chubby Granny Chaser
fba86002d1 feat: adding translation for button 2025-01-01 21:38:28 +00:00
Chubby Granny Chaser
a121ef77c0 feat: adding translation for button 2025-01-01 21:32:22 +00:00
Chubby Granny Chaser
bd653be071 Merge branch 'main' into fix/issues 2025-01-01 21:31:36 +00:00
Zamitto
297ca5a190 Merge pull request #1369 from 7ROBE/patch-6
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
Update ar translation.json
2025-01-01 10:31:04 -03:00
7ROBE
6278600b98 Update translation.json 2025-01-01 11:11:41 +03:00
Zamitto
1226483deb fix: open game with parameters 2024-12-31 19:38:17 -03:00
Zamitto
0661cbd661 fix: steamGenres 2024-12-31 19:32:41 -03:00
Zamitto
ad204e3879 fix: issues 2024-12-31 14:06:44 -03:00
Zamitto
cbbe6993bd chore: bump version
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
2024-12-31 02:31:59 -03:00
Chubby Granny Chaser
3edadea0f3 Merge pull request #1365 from hydralauncher/feature/adding-sentry
feat: adding sentry to renderer
2024-12-31 05:30:57 +00:00
Chubby Granny Chaser
16259b5399 fix: fixing backups per game limit as conditional 2024-12-31 05:10:03 +00:00
Chubby Granny Chaser
726c753568 feat: adding sentry to renderer 2024-12-31 04:44:05 +00:00
Zamitto
ba2ac1eb93 Merge pull request #1364 from hydralauncher/feat/adjust-tray-icon-interaction
feat: double click shows windows
2024-12-31 00:12:45 -03:00
Zamitto
726d99a5c7 chore: bump version 2024-12-30 23:06:23 -03:00
Zamitto
402e5df9ac feat: double click shows windows 2024-12-30 22:38:16 -03:00
Zamitto
0ee55b7fd5 Merge pull request #1362 from bankov4eto/main
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
PR:[translation] Bulgarian language add missing strings
2024-12-30 15:27:22 -03:00
bankov4eto
8286390d9f Update translation.json
Added missing translation for the new strings 
{
  "catalogue": {
    "search": "Filter…",
    "developers": "Developers",
    "genres": "Genres",
    "tags": "Tags",
    "publishers": "Publishers",
    "download_sources": "Download sources",
    "result_count": "{{resultCount}} results",
    "filter_count": "{{filterCount}} available",
    "clear_filters": "Clear {{filterCount}} selected"
  },
  "game_details": {
    "launch_options": "Launch Options",
    "launch_options_description": "Advanced users may choose to enter modifications to their launch options",
    "launch_options_placeholder": "No parameter specified"
  },
  "downloads": {
    "seeding": "Seeding",
    "stop_seeding": "Stop seeding",
    "resume_seeding": "Resume seeding",
    "options": "Manage"
  },
  "settings": {
    "seed_after_download_complete": "Seed after download complete",
    "show_hidden_achievement_description": "Show hidden achievements description before unlocking them"
  },
  "user_profile": {
    "stats": "Stats",
    "achievements": "achievements",
    "games": "Games",
    "top_percentile": "Top {{percentile}}%",
    "ranking_updated_weekly": "Ranking is updated weekly",
    "playing": "Playing {{game}}",
    "achievements_unlocked": "Achievements Unlocked",
    "earned_points": "Earned points",
    "show_achievements_on_profile": "Show your achievements on your profile",
    "show_points_on_profile": "Show your earned points on your profile"
  },
  "achievement": {
    "hidden_achievement_tooltip": "This is a hidden achievement",
    "achievement_earn_points": "Earn {{points}} points with this achievement",
    "earned_points": "Earned points:",
    "available_points": "Available points:",
    "how_to_earn_achievements_points": "How to earn achievements points?"
  },
  "hydra_cloud": {
    "hydra_cloud": "Hydra Cloud",
    "hydra_cloud_feature_found": "You've just discovered a Hydra Cloud feature!",
    "learn_more": "Learn More"
  }
}
2024-12-29 13:30:07 +02:00
bankov4eto
6e00fb8e13 Update translation.json 2024-12-29 12:47:01 +02:00
bankov4eto
9f5d8cadda Update translation.json
Added missing translation for the new strings 
{
  "catalogue": {
    "search": "Filter…",
    "developers": "Developers",
    "genres": "Genres",
    "tags": "Tags",
    "publishers": "Publishers",
    "download_sources": "Download sources",
    "result_count": "{{resultCount}} results",
    "filter_count": "{{filterCount}} available",
    "clear_filters": "Clear {{filterCount}} selected"
  },
  "game_details": {
    "launch_options": "Launch Options",
    "launch_options_description": "Advanced users may choose to enter modifications to their launch options",
    "launch_options_placeholder": "No parameter specified"
  },
  "downloads": {
    "seeding": "Seeding",
    "stop_seeding": "Stop seeding",
    "resume_seeding": "Resume seeding",
    "options": "Manage"
  },
  "settings": {
    "seed_after_download_complete": "Seed after download complete",
    "show_hidden_achievement_description": "Show hidden achievements description before unlocking them"
  },
  "user_profile": {
    "stats": "Stats",
    "achievements": "achievements",
    "games": "Games",
    "top_percentile": "Top {{percentile}}%",
    "ranking_updated_weekly": "Ranking is updated weekly",
    "playing": "Playing {{game}}",
    "achievements_unlocked": "Achievements Unlocked",
    "earned_points": "Earned points",
    "show_achievements_on_profile": "Show your achievements on your profile",
    "show_points_on_profile": "Show your earned points on your profile"
  },
  "achievement": {
    "hidden_achievement_tooltip": "This is a hidden achievement",
    "achievement_earn_points": "Earn {{points}} points with this achievement",
    "earned_points": "Earned points:",
    "available_points": "Available points:",
    "how_to_earn_achievements_points": "How to earn achievements points?"
  },
  "hydra_cloud": {
    "hydra_cloud": "Hydra Cloud",
    "hydra_cloud_feature_found": "You've just discovered a Hydra Cloud feature!",
    "learn_more": "Learn More"
  }
}
2024-12-29 12:42:27 +02:00
Zamitto
9060d435cf Merge pull request #1355 from dvsouto/feat/launch-options
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
feat: add custom launch options to game
2024-12-28 13:14:32 -03:00
Zamitto
d8e7fca224 Merge branch 'main' into feat/launch-options 2024-12-28 12:50:38 -03:00
Zamitto
3bef2633fd Merge pull request #1354 from hydralauncher/feat/game-card-animation
feat: game card stats animation
2024-12-28 12:50:02 -03:00
Zamitto
db2688f3a7 feat: rename variable 2024-12-28 11:28:43 -03:00
Zamitto
4e282921ef chore: dont remove installation dirs in custom install script
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
2024-12-27 17:42:12 -03:00
Zamitto
b22b998c29 Merge branch 'main' into feat/game-card-animation 2024-12-27 15:36:29 -03:00
Davi Souto
423693040b feat: added debounce to the launch options input and removed unnecessary fragment in the clear button 2024-12-27 00:53:13 -03:00
Davi Souto
c098d8ffcf fix: added detached to the spawn to fix the game closing with the launcher 2024-12-26 22:17:22 -03:00
Davi Souto
e1904b853e fix: security and persistence adjustments 2024-12-26 21:45:18 -03:00
Davi Souto
520eb91a55 feat: add custom launch options to game 2024-12-26 20:56:25 -03:00
Zamitto
16eaf4261a feat: animation and number format 2024-12-26 20:38:41 -03:00
Zamitto
ec289fe4c7 feat: animation 2024-12-26 15:07:05 -03:00
Zamitto
1f000ab2b2 Merge pull request #1349 from Lianela/main
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
feat: spanish translation updated
2024-12-25 23:14:26 -03:00
Lianela
d6bd0ec221 feat: profile strings 2024-12-25 18:52:56 -06:00
Lianela
a9f8d1b42c feat: spanish translation updated
added seeding strings, updated hydra cloud and achievements strings, fixed mistake from previous commits
2024-12-25 18:38:38 -06:00
Zamitto
f5d5aa39dc feat: game card animation 2024-12-25 20:28:56 -03:00
Zamitto
83e662f633 Merge pull request #1335 from hydrasources/patch-1
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
Update README.uk-UA.md
2024-12-24 16:19:47 -03:00
Zamitto
c7b924bf2f Merge pull request #1336 from hydrasources/patch-2
Update README.be.md
2024-12-24 16:19:30 -03:00
Zamitto
e0d69ccf9d Merge pull request #1337 from hydrasources/patch-3
Update README.es.md
2024-12-24 16:12:19 -03:00
Zamitto
aa4e71076d Merge pull request #1338 from hydrasources/patch-4
Update README.fr.md
2024-12-24 16:11:14 -03:00
Zamitto
eccff27739 Merge pull request #1339 from hydrasources/patch-5
Update README.de.md
2024-12-24 16:10:53 -03:00
Zamitto
601b3b0a00 Merge pull request #1340 from hydrasources/patch-6
Update README.cs.md
2024-12-24 16:10:08 -03:00
Zamitto
1ceea5d5a3 Merge pull request #1341 from hydrasources/patch-7
Update README.da.md
2024-12-24 16:09:50 -03:00
Zamitto
9c99724e7d Merge pull request #1342 from hydrasources/patch-8
Update README.nb.md
2024-12-24 16:06:29 -03:00
Zamitto
55e0f42702 Merge pull request #1343 from hydrasources/patch-9
Update README.et.md
2024-12-24 16:06:02 -03:00
hydrasources
b355930eaf Update README.et.md 2024-12-24 20:19:26 +03:00
hydrasources
57b47951a1 Update README.nb.md 2024-12-24 20:18:34 +03:00
hydrasources
4780640ed0 Update README.da.md 2024-12-24 20:17:25 +03:00
hydrasources
8b92c8fdd9 Update README.cs.md 2024-12-24 20:16:40 +03:00
hydrasources
acd98d0aad Update README.de.md 2024-12-24 20:15:56 +03:00
hydrasources
27239f848e Update README.fr.md 2024-12-24 20:15:19 +03:00
hydrasources
c4d0a8eb94 Update README.es.md 2024-12-24 20:13:52 +03:00
hydrasources
60b12b2435 Update README.be.md 2024-12-24 20:09:33 +03:00
hydrasources
1c9515516f Update README.uk-UA.md 2024-12-24 20:08:33 +03:00
JackEnx
58a89372ab Merge pull request #1334 from hydralauncher/refactor/optimize-rpc
Refactor/optimize rpc
2024-12-24 14:07:12 -03:00
JackEnx
90841bf5e4 fix: gitignore 2024-12-24 13:50:40 -03:00
JackEnx
5564644378 refactor: rpc executable objects 2024-12-24 13:48:50 -03:00
Zamitto
89bfb517fb fix: seeding causing python process to crash
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
2024-12-24 02:15:27 -03:00
Chubby Granny Chaser
e1a1136e05 Merge branch 'main' of github.com:hydralauncher/hydra 2024-12-24 04:33:49 +00:00
Chubby Granny Chaser
4c6f87f6e7 chore: setting objects to expire in 3 days 2024-12-24 04:33:24 +00:00
Zamitto
3613ad156b Merge pull request #1326 from hydralauncher/fix/adding-debounce-to-search
fix: adding debounce to search
2024-12-24 01:09:12 -03:00
Zamitto
e50cb74d1d feat: move python rpc log to own file 2024-12-24 00:54:20 -03:00
Chubby Granny Chaser
36800c6368 Merge branch 'main' into fix/adding-debounce-to-search 2024-12-24 03:38:39 +00:00
Chubby Granny Chaser
f67395c94c fix: adding debounce to search 2024-12-24 03:35:29 +00:00
Zamitto
f8b9fe80fd Merge pull request #1325 from hydralauncher/fix/stop-seeding-games-that-are-not-downloaded-on-startup
fix: seeding
2024-12-24 00:35:18 -03:00
Zamitto
e211517e24 feat: revert change 2024-12-24 00:26:58 -03:00
Zamitto
538d3e5982 feat: set libtorrent flags 2024-12-24 00:23:50 -03:00
Zamitto
60e0b39f86 feat: use enum 2024-12-23 23:47:34 -03:00
Zamitto
789bccf77a chore: bump version 2024-12-23 23:45:21 -03:00
Zamitto
ce3ed6f17c fix: seeding 2024-12-23 23:44:33 -03:00
Zamitto
54c6b1f1af chore: update version_codename 2024-12-23 20:02:51 -03:00
Zamitto
dfb50e9a06 Merge pull request #1311 from hydralauncher/feat/achievements-points
feat: achievements points
2024-12-23 19:53:09 -03:00
Zamitto
017954b646 Merge branch 'main' into feat/achievements-points 2024-12-23 19:51:24 -03:00
Zamitto
73ac809bb3 Merge branch 'main' into feat/achievements-points 2024-12-23 19:51:06 -03:00
Chubby Granny Chaser
c0f35c5c54 Merge pull request #1313 from hydralauncher/feat/new-catalogue
Feat/new catalogue
2024-12-23 22:50:51 +00:00
Zamitto
84b10eaa0b chore: bump version 2024-12-23 19:50:23 -03:00
Chubby Granny Chaser
813b9e1586 Merge branch 'main' into feat/new-catalogue 2024-12-23 22:49:18 +00:00
Chubby Granny Chaser
92cdfa0526 chore: removing console log 2024-12-23 22:48:09 +00:00
Chubby Granny Chaser
a06333f716 feat: genre translation 2024-12-23 22:45:40 +00:00
Zamitto
01e3054ce9 Merge pull request #1318 from hydrasources/patch-15
Update README.ru.md
2024-12-23 19:27:20 -03:00
Zamitto
549ea750c0 chore: sonar warnings 2024-12-23 19:23:09 -03:00
Zamitto
aab4197156 feat: remove unused file 2024-12-23 19:16:55 -03:00
Zamitto
1bd32012d3 fix: build python 2024-12-23 19:14:09 -03:00
Zamitto
9f84538b76 fix: cancel download that is not active 2024-12-23 18:58:49 -03:00
Zamitto
e53f4808d5 Merge branch 'feat/new-catalogue' into feat/achievements-points 2024-12-23 18:55:26 -03:00
Zamitto
9b9545fb8f fix: wrong folder name 2024-12-23 18:55:13 -03:00
Chubby Granny Chaser
cbfe831e0c Merge branch 'feat/new-catalogue' of github.com:hydralauncher/hydra into feat/new-catalogue 2024-12-23 21:54:25 +00:00
Chubby Granny Chaser
7d277e0133 feat: adding translation for catalogue 2024-12-23 21:54:01 +00:00
Chubby Granny Chaser
d072a14aa3 feat: adding translation for catalogue 2024-12-23 21:52:01 +00:00
Hachi-R
ddc8d67d84 Merge branch 'feat/new-catalogue' of https://github.com/hydralauncher/hydra into feat/new-catalogue 2024-12-23 18:49:24 -03:00
Hachi-R
a499aae31f feat: smooth scrolling on pagination 2024-12-23 18:49:18 -03:00
Zamitto
aa0321df8f fix: continue http downloads 2024-12-23 18:38:27 -03:00
Chubby Granny Chaser
4aa7df65f5 chore: moving tags to redux 2024-12-23 21:38:17 +00:00
Chubby Granny Chaser
8dbb0726d0 chore: moving tags to redux 2024-12-23 21:37:23 +00:00
Zamitto
53b0c0b08f Merge branch 'feat/new-catalogue' into feat/achievements-points 2024-12-23 18:35:38 -03:00
Hachi-R
502f3b4aa7 refactor: move formatNumber hook usage to before early return 2024-12-23 18:19:22 -03:00
Hachi-R
85422837b0 Merge branch 'feat/new-catalogue' of https://github.com/hydralauncher/hydra into feat/new-catalogue 2024-12-23 18:16:01 -03:00
Hachi-R
26a35a902c feat: enhance pagination component with first and last page buttons 2024-12-23 18:15:48 -03:00
hydrasources
f2a058c8c5 Update README.ru.md 2024-12-24 00:09:56 +03:00
Zamitto
1b837377cb feat: update tray icon 2024-12-23 18:02:26 -03:00
Chubby Granny Chaser
7c497977a2 feat: merging with achievements 2024-12-23 20:51:58 +00:00
Chubby Granny Chaser
8c1c86c374 Merge branch 'feat/achievements-points' of github.com:hydralauncher/hydra into feat/new-catalogue 2024-12-23 20:50:36 +00:00
Zamitto
9e714f811b Merge branch 'feat/new-catalogue' into feat/achievements-points 2024-12-23 17:22:50 -03:00
Chubby Granny Chaser
a4754c947f feat: adding new icons 2024-12-23 20:18:00 +00:00
Zamitto
fdced15e40 Merge branch 'feat/new-catalogue' into feat/achievements-points 2024-12-23 17:15:09 -03:00
Chubby Granny Chaser
4c137d4602 feat: adding new icons 2024-12-23 19:58:16 +00:00
Zamitto
711cbb906c Merge branch 'feat/new-catalogue' into feat/achievements-points
# Conflicts:
#	yarn.lock
2024-12-23 16:53:28 -03:00
Chubby Granny Chaser
2e6766f195 feat: adding new icons 2024-12-23 19:44:03 +00:00
Chubby Granny Chaser
87bcfe90fe chore: merging with main 2024-12-23 19:27:57 +00:00
Zamitto
54886a2c5a Merge branch 'feat/new-catalogue' into feat/achievements-points 2024-12-23 16:19:20 -03:00
Chubby Granny Chaser
550cd3b3d5 chore: merging with main 2024-12-23 19:18:34 +00:00
Zamitto
f1c83808fb Merge branch 'main' into feat/achievements-points 2024-12-23 16:16:02 -03:00
Zamitto
fbe3276bac Merge pull request #1317 from hydrasources/patch-14
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
Update translation.json
2024-12-23 16:15:41 -03:00
Eight
1479c15312 Merge pull request #1223 from hydralauncher/feature/seed-completed-downloads
Feature/seed completed downloads
2024-12-23 16:12:54 -03:00
Chubby Granny Chaser
f738f91f24 fix: resetting pages when filter changes 2024-12-23 19:06:10 +00:00
Chubby Granny Chaser
aaecd203e1 feat: adding remove function to filter tags 2024-12-23 19:01:52 +00:00
Chubby Granny Chaser
4af5535f81 feat: adding remove function to filter tags 2024-12-23 19:00:55 +00:00
Chubby Granny Chaser
b5a9beb481 feat: adding remove function to filter tags 2024-12-23 18:57:41 +00:00
Zamitto
ed351109ba Merge branch 'feature/seed-completed-downloads' into feat/achievements-points 2024-12-23 15:27:47 -03:00
hydrasources
3ed5a2ff64 Update translation.json 2024-12-23 21:00:16 +03:00
Hachi-R
b8f5f90929 feat: enhance download handling for magnet and HTTP links in action function 2024-12-23 14:53:35 -03:00
Zamitto
1115cc03b1 Merge branch 'feature/seed-completed-downloads' into feat/achievements-points 2024-12-23 14:33:00 -03:00
Hachi-R
17879f9c70 refactor: remove unused seed process functionality from main application 2024-12-23 14:28:24 -03:00
Zamitto
1ff33be36f feat: remove download warning 2024-12-23 14:19:32 -03:00
Zamitto
0f396b83f1 Merge branch 'feature/seed-completed-downloads' into feat/achievements-points 2024-12-23 14:09:07 -03:00
Zamitto
e02875ad56 feat: improve friends playing game box 2024-12-23 14:08:56 -03:00
Hachi-R
230c24cca5 lint 2024-12-23 14:07:15 -03:00
Hachi-R
f853a2a39e feat: move initial seeding for DownloadManager 2024-12-23 14:07:03 -03:00
Hachi-R
843301c8b6 feat: implement pause and resume functionality for game seeding in DownloadManager 2024-12-23 13:50:57 -03:00
Zamitto
ea90b49604 chore: sonar adjustments 2024-12-23 10:50:35 -03:00
Zamitto
cf39b426e1 Merge branch 'feature/seed-completed-downloads' into feat/achievements-points 2024-12-23 10:41:15 -03:00
Zamitto
b74035979f feat: replace button with div on DropdownMenu 2024-12-23 10:34:18 -03:00
Zamitto
a3caa62ed3 feat: remove console log 2024-12-23 09:40:01 -03:00
Zamitto
2b44728c0e Merge branch 'feature/seed-completed-downloads' into feat/achievements-points 2024-12-23 09:39:08 -03:00
Zamitto
56217fbcf8 fix: bug after pause seed 2024-12-23 09:38:50 -03:00
Zamitto
c9be6b6b92 feat: replace console with logger 2024-12-23 09:17:47 -03:00
Zamitto
07d0e86031 Merge branch 'feature/seed-completed-downloads' into feat/achievements-points 2024-12-23 09:07:37 -03:00
Zamitto
59846cfe2f fix: processProfileImage path and body 2024-12-23 09:06:14 -03:00
Zamitto
ea3d922242 Merge branch 'feature/seed-completed-downloads' into feat/achievements-points 2024-12-23 08:51:24 -03:00
Hachi-R
f9719c995c feat: delay in seed process 2024-12-23 03:07:06 -03:00
Hachi-R
c755aa388b lint 2024-12-23 02:07:48 -03:00
Hachi-R
af2b422154 feat: integrate DownloadManager for active game downloads and streamline RPC handling 2024-12-23 02:07:37 -03:00
Hachi-R
e463ee569a feat: add initial download handling in Python RPC and update spawn method to accept download parameters 2024-12-23 01:25:01 -03:00
Zamitto
8f169ee113 fix: achievement panel when owner does not have the game 2024-12-23 00:00:10 -03:00
Zamitto
b8c456eb71 Merge branch 'feat/new-catalogue' into feat/achievements-points
# Conflicts:
#	src/renderer/src/app.tsx
2024-12-22 22:45:27 -03:00
Hachi-R
35d14b33ca lint 2024-12-22 22:40:51 -03:00
Hachi-R
3aa8230e17 feat: restart downloads and move seed process initiation to main.ts 2024-12-22 22:40:18 -03:00
Chubby Granny Chaser
4476b1b216 feat: removing publishers 2024-12-23 01:32:45 +00:00
Zamitto
12c827fe2a Merge branch 'feat/new-catalogue' into feat/achievements-points 2024-12-22 22:27:34 -03:00
Zamitto
6db6c14016 feat: hydra cloud modal 2024-12-22 22:25:20 -03:00
Chubby Granny Chaser
3a1fa9ab00 feat: removing publishers 2024-12-23 01:14:50 +00:00
Zamitto
fb8682e88d Merge branch 'feat/new-catalogue' into feat/achievements-points 2024-12-22 22:10:43 -03:00
Chubby Granny Chaser
618d6f8337 Merge branch 'feat/new-catalogue' of github.com:hydralauncher/hydra into feat/new-catalogue 2024-12-23 00:48:22 +00:00
Chubby Granny Chaser
214f7d3523 feat: removing publishers 2024-12-23 00:47:39 +00:00
Chubby Granny Chaser
b439a1af3f feat: removing publishers 2024-12-23 00:46:11 +00:00
Chubby Granny Chaser
602ee61cb6 feat: removing publishers 2024-12-23 00:42:08 +00:00
Zamitto
4d0a75e61f feat: refactor 2024-12-22 21:31:24 -03:00
Zamitto
cabddfb926 Merge branch 'feat/new-catalogue' into feat/achievements-points
# Conflicts:
#	src/preload/index.ts
#	src/renderer/src/app.tsx
#	src/renderer/src/features/index.ts
#	src/renderer/src/store.ts
#	yarn.lock
2024-12-22 21:22:52 -03:00
Zamitto
c20369fa57 Merge branch 'feature/seed-completed-downloads' into feat/achievements-points 2024-12-22 21:21:27 -03:00
Zamitto
d6b5fd1b9f feat: cloud ui 2024-12-22 21:21:05 -03:00
Chubby Granny Chaser
4edf1ed41f Merge branch 'main' into feat/new-catalogue 2024-12-23 00:14:22 +00:00
Chubby Granny Chaser
4607665908 fix: fixing download sources migration 2024-12-23 00:07:35 +00:00
Chubby Granny Chaser
c9f8148acf fix: fixing download sources migration 2024-12-23 00:07:02 +00:00
Chubby Granny Chaser
1fd930b0a3 fix: fixing download sources migration 2024-12-23 00:06:23 +00:00
Chubby Granny Chaser
c9c6d5ee46 fix: fixing download sources migration 2024-12-23 00:05:27 +00:00
Chubby Granny Chaser
496924b2a4 fix: fixing download sources migration 2024-12-22 23:42:49 +00:00
Chubby Granny Chaser
32032e1c8a fix: fixing download sources migration 2024-12-22 23:38:54 +00:00
Hachi-R
65b1ec9b1f refactor: replace dataSource with gameRepository in pauseGameSeed and resumeGameSeed events 2024-12-22 20:31:34 -03:00
Zamitto
7b724d4185 Merge branch 'feature/seed-completed-downloads' into feat/achievements-points 2024-12-22 20:27:09 -03:00
Zamitto
c8566dd2be feat: ui improvement 2024-12-22 20:27:04 -03:00
Hachi-R
79bb12ee61 lint 2024-12-22 20:21:16 -03:00
Hachi-R
db01980eb8 refactor: clean up code 2024-12-22 20:20:46 -03:00
Hachi-R
859d849d36 fix: update Portuguese translations and enhance dropdown menu styling 2024-12-22 19:30:05 -03:00
Hachi-R
855f0aa334 refactor: remove commented-out code in download-manager.ts 2024-12-22 18:50:19 -03:00
Zamitto
313ebc6055 feat: cloud modal 2024-12-22 18:05:54 -03:00
Zamitto
041b7d520c feat: ui adjustments and add friend playing game 2024-12-22 16:47:13 -03:00
Zamitto
93bc7c690f feat: ui adjustments 2024-12-22 12:38:31 -03:00
Zamitto
58a8f6fd6e Merge branch 'feature/seed-completed-downloads' into feat/achievements-points 2024-12-22 11:48:25 -03:00
Zamitto
1522b00579 feat: some visuals 2024-12-22 11:47:55 -03:00
Hachi-R
93712a7f5e refactor: remove commented-out code for torrent actions in main.py and torrent_downloader.py 2024-12-22 09:08:36 -03:00
Hachi-R
abb3db4e30 feat: implement directory size check and seed abort 2024-12-22 09:08:20 -03:00
Hachi-R
bd184fceda lint 2024-12-22 09:07:02 -03:00
Hachi-R
93ef0c256e feat: updated pauseGameSeed and resumeGameSeed events 2024-12-22 09:06:39 -03:00
Hachi-R
fd5b2e08a5 lint 2024-12-22 06:58:20 -03:00
Hachi-R
1a286df3f7 Merge branch 'main' into feature/seed-completed-downloads 2024-12-22 06:58:03 -03:00
Zamitto
06e59fdfa0 feat: adding panel 2024-12-21 20:49:50 -03:00
Hachi-R
9884a39abc refactor: replace resumeSeeding with resumeDownload in torrenting event handler 2024-12-21 16:44:49 -03:00
Hachi-R
90b320952b lint 2024-12-21 16:28:01 -03:00
Hachi-R
4b8569bd5e refactor: streamline download completion handling 2024-12-21 16:27:28 -03:00
Hachi-R
5714c23073 feat: implement seed process initiation in PythonRPC 2024-12-21 15:34:29 -03:00
Hachi-R
09ea3b27f4 feat: improve seed status response structure by including game ID 2024-12-21 14:39:16 -03:00
Hachi-R
5fbf0baa0f feat: enhance seed status retrieval 2024-12-21 10:15:04 -03:00
Zamitto
2c09520f98 Merge pull request #1315 from hydrasources/patch-12
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
fix: update language anchor in README.pt-BR.md
2024-12-20 22:57:25 -03:00
Zamitto
87189c070e chore: add openssl to readme 2024-12-20 22:56:42 -03:00
Zamitto
81cded0052 feat: add points to achievement list 2024-12-20 22:22:13 -03:00
Zamitto
89cd970d5a feat: refactor component 2024-12-20 20:31:31 -03:00
hydrasources
c2b7fb4823 Update README.pt-BR.md 2024-12-21 01:55:01 +03:00
Chubby Granny Chaser
f37b92261f feat: adding button to clear selected filters 2024-12-20 22:40:41 +00:00
Chubby Granny Chaser
b28d34cf66 feat: increasing number of results 2024-12-20 22:14:58 +00:00
Zamitto
a21c3dcdf1 Merge pull request #1314 from hydrasources/patch-10
Update RU translation.json
2024-12-20 18:57:28 -03:00
Chubby Granny Chaser
59655a819a feat: adding link direct from sources 2024-12-20 21:33:17 +00:00
Chubby Granny Chaser
d3450c5f65 feat: adding link direct from sources 2024-12-20 21:28:51 +00:00
Chubby Granny Chaser
3af0ae9f85 feat: adding scroll to filters 2024-12-20 18:59:51 +00:00
Chubby Granny Chaser
a557bbb948 feat: adding user tags 2024-12-20 18:43:17 +00:00
Chubby Granny Chaser
e78de55fe7 feat: adding user tags 2024-12-20 18:39:40 +00:00
Zamitto
065ea0c6fe feat: adjust log 2024-12-20 15:38:39 -03:00
hydrasources
9b22251705 Update translation.json 2024-12-20 20:53:41 +03:00
Zamitto
721d0c6da1 Merge branch 'main' into feat/achievements-points 2024-12-20 14:49:40 -03:00
Zamitto
170ac28bb5 fix: user data not being correctly loaded on hydra api setup 2024-12-20 14:48:04 -03:00
Chubby Granny Chaser
3be9053b76 feat: adding pacman 2024-12-20 17:33:13 +00:00
Chubby Granny Chaser
ede1dbc5e7 feat: adding source search 2024-12-20 17:12:59 +00:00
Chubby Granny Chaser
5551125865 feat: adding source search 2024-12-20 17:12:21 +00:00
Chubby Granny Chaser
eb744346f0 feat: adding source search 2024-12-20 17:10:33 +00:00
Chubby Granny Chaser
5d5ce092b7 feat: adding source search 2024-12-20 17:09:56 +00:00
Chubby Granny Chaser
109c12064d feat: adding source search 2024-12-20 17:07:51 +00:00
Zamitto
c9a553c5d3 fix: spanish translation
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
2024-12-20 12:53:12 -03:00
Zamitto
1fae3066fa feat: spanish translation adjustment 2024-12-20 12:53:09 -03:00
Zamitto
c8d1b2c19a feat: spanish translation adjustment 2024-12-20 12:31:32 -03:00
Zamitto
be89e0d60b feat: create stats box 2024-12-20 10:14:59 -03:00
Zamitto
076f33605a fix: spanish translation 2024-12-18 16:26:53 -03:00
Zamitto
eaf099d2ce Merge branch 'main' into feat/achievements-points 2024-12-18 16:13:29 -03:00
Chubby Granny Chaser
007731b71c Merge pull request #1283 from hydralauncher/ci/testing-build-webhook
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
ci: testing upload build script
2024-12-18 19:12:30 +00:00
Chubby Granny Chaser
0ca6c2cbff fix: removing pnpm lock file 2024-12-18 19:10:17 +00:00
Chubby Granny Chaser
94f0df096d Merge branch 'main' into ci/testing-build-webhook 2024-12-18 18:10:26 +00:00
Zamitto
55ed27511f Merge pull request #1306 from 7ROBE/patch-4
Update translation.json
2024-12-18 14:16:49 -03:00
Zamitto
294700a6ca Merge branch 'main' into feat/achievements-points 2024-12-18 14:15:55 -03:00
JackEnx
dfe70a5a95 Merge pull request #1299 from hydralauncher/feature/rpc
Feature/rpc
2024-12-18 14:14:30 -03:00
JackEnx
bc98f7c55e fix: closed game pestis in the watch processes 2024-12-18 13:02:13 -03:00
JackEnx
e2d16ba63e Merge branch 'feature/rpc' of https://github.com/hydralauncher/hydra into feature/rpc 2024-12-18 12:33:25 -03:00
JackEnx
4f7255a8d9 refactor: process watcher commands 2024-12-18 12:31:12 -03:00
Zamitto
ad59fcd3e9 Merge branch 'main' into feature/rpc 2024-12-18 12:29:07 -03:00
JackEnx
5222d319a3 refactor: add bundle.js in external script environment 2024-12-18 12:25:55 -03:00
JackEnx
1f3a6a9da6 refactor: add bundle.js in external script environment 2024-12-18 12:20:07 -03:00
7ROBE
d687c156ff Update translation.json 2024-12-18 18:01:13 +03:00
JackEnx
e95407e6f5 refactor: add URL to end of the env main external resources 2024-12-18 11:51:22 -03:00
Zamitto
23f9b5228c feat: adjustments 2024-12-17 23:40:30 -03:00
Zamitto
ac0d0efe0f feat: update interfaces 2024-12-17 16:14:09 -03:00
JackEnx
4c3eb98041 refactor: rpc url to a generic url 2024-12-17 15:48:11 -03:00
Zamitto
ce2cf89fd6 Merge pull request #1302 from hydralauncher/feat/hidden-achievement-description
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
feat: add description option for hidden achievements
2024-12-17 15:45:32 -03:00
JackEnx
347e38c413 refactor: move rpc game executables url to a env 2024-12-17 15:35:42 -03:00
Zamitto
3a964dcf17 feat: create game 2024-12-17 15:25:10 -03:00
Hachi-R
afcfcbf482 refactor: clean up reset game achievements logic 2024-12-17 13:55:45 -03:00
Hachi-R
ac6eb247df feat: implement reset game achievements functionality 2024-12-17 13:15:55 -03:00
Hachi-R
47a5f4d327 feat: add reset achievements modal 2024-12-17 11:10:25 -03:00
JackEnx
f2714bd0ab fix: process map promise return 2024-12-16 21:47:09 -03:00
JackEnx
66a8170fd2 fix: lint 2024-12-16 21:40:56 -03:00
JackEnx
9f8269d9a9 refactor: linux get game exe logic 2024-12-16 21:31:39 -03:00
JackEnx
64745b9147 feature: linux find opened game and wine path 2024-12-16 20:45:09 -03:00
Zamitto
b0bf33191b Merge branch 'main' into feat/hidden-achievement-description 2024-12-16 20:00:46 -03:00
Zamitto
500db90974 chore: readme link
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
2024-12-16 19:56:14 -03:00
Zamitto
e5f575705f Merge branch 'main' into feat/hidden-achievement-description 2024-12-16 19:55:19 -03:00
Zamitto
1acafe5b8f Merge pull request #1289 from hydralauncher/fix/handle-achievement-exception
fix: handle achievement exception
2024-12-16 19:54:56 -03:00
JackEnx
fcfaae7b58 refactor: move exec command to a function 2024-12-16 19:51:15 -03:00
JackEnx
311b011ec6 feature: linux game observe 2024-12-16 19:48:07 -03:00
JackEnx
efcf778c95 refactor: merged game queries to a single query 2024-12-16 18:52:11 -03:00
Zamitto
149c278e22 Merge branch 'main' into fix/handle-achievement-exception 2024-12-16 18:40:58 -03:00
JackEnx
431ad2ff2c refactor: Set descontruction to Set foreach 2024-12-16 18:39:30 -03:00
Zamitto
93a77dc027 Merge pull request #1296 from hydrasources/patch-7
Update README.ru.md
2024-12-16 18:20:25 -03:00
Zamitto
e5c6b54e7b Merge pull request #1298 from hydrasources/hydrasources-patch-1-6
Hydrasources patch 1 6
2024-12-16 18:19:43 -03:00
Zamitto
859dbb8655 Merge pull request #1295 from hydrasources/patch-4
Update translation.json
2024-12-16 18:19:23 -03:00
Zamitto
6c2f25a9a3 Merge pull request #1297 from hydrasources/patch-8
Update README.pt-BR.md
2024-12-16 18:19:04 -03:00
hydrasources
75140ccf97 Update README.da.md 2024-12-17 00:07:34 +03:00
hydrasources
df46f1f1d0 Update README.de.md 2024-12-17 00:07:15 +03:00
hydrasources
166e53ceaa Update README.nb.md 2024-12-17 00:05:37 +03:00
hydrasources
165e346d38 Update README.nb.md 2024-12-17 00:05:12 +03:00
hydrasources
8485544731 Update README.be.md 2024-12-17 00:03:55 +03:00
hydrasources
feb325c2c7 Update README.pt-BR.md 2024-12-17 00:01:13 +03:00
hydrasources
c611ff2229 Update README.ru.md 2024-12-16 23:58:55 +03:00
hydrasources
e75b2960c0 Update translation.json
I just forgot to update another line
2024-12-16 23:53:09 +03:00
JackEnx
1ffb9828f7 refactor: get system process map 2024-12-16 17:38:03 -03:00
JackEnx
fee1a92715 fix: executable lastIndeOf 2024-12-16 17:10:34 -03:00
Zamitto
8d7553e1cc Merge pull request #1290 from hydrasources/patch-3
Update translation.json
2024-12-16 17:03:49 -03:00
Zamitto
a40638b657 chore: lint 2024-12-16 16:55:10 -03:00
JackEnx
d9adc49e9f fix: executable slice 2024-12-16 16:53:09 -03:00
JackEnx
5607f6d524 refactor: move executable name replate outside the forof 2024-12-16 16:42:07 -03:00
hydrasources
d821fd7800 Update translation.json 2024-12-16 22:38:16 +03:00
JackEnx
e87f287476 refactor: remove redundant plataform validation 2024-12-16 16:37:50 -03:00
JackEnx
c2a52d3c18 refactor: reduce code redundance 2024-12-16 16:35:12 -03:00
JackEnx
08d320ad1c fix: win32 path 2024-12-16 16:34:00 -03:00
JackEnx
d17abdcd11 refactor: games id without path get only games objectID 2024-12-16 16:17:46 -03:00
JackEnx
19485b5ba1 feature: find game in execution executable path 2024-12-16 15:57:49 -03:00
Zamitto
1ea98613fb feat: add hidden achievement description option 2024-12-16 14:57:14 -03:00
JackEnx
b8b000d88c refactor: change game process set to map 2024-12-16 14:36:16 -03:00
Chubby Granny Chaser
1e99dae9de Merge branch 'main' of github.com:hydralauncher/hydra 2024-12-16 16:21:43 +00:00
Chubby Granny Chaser
cedb61cb38 feat: removing insert custom styles 2024-12-16 16:21:02 +00:00
hydrasources
1e78532dc5 Update translation.json 2024-12-14 16:09:30 +03:00
hydrasources
454beff2d3 Update translation.json 2024-12-14 16:04:19 +03:00
Zamitto
6f417d23d1 fix: handle achievement parse error causing hydra to never search new achievements in real time 2024-12-13 16:48:09 -03:00
Zamitto
58cbf78fb9 chore: update libs 2024-12-13 16:47:51 -03:00
JackEnx
ff917b7ecf Merge pull request #1230 from hydralauncher/fix/linux-game-tracking
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
fix: linux game tracking and closed button
2024-12-13 11:45:12 -03:00
Zamitto
b2d6d7e736 Merge branch 'main' into fix/linux-game-tracking 2024-12-13 11:31:05 -03:00
Zamitto
95d320a0fe Merge pull request #1287 from JarEXE/fix/traymenu
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
fix: workaround for broken or missing tray icon menu on linux
2024-12-11 17:22:49 -03:00
jarome
fd8c57bff0 fix: implemented workaround for broken or missing tray icon menu on linux 2024-12-11 13:24:54 -03:00
Chubby Granny Chaser
36cb1e1103 ci: testing upload build script 2024-12-10 00:54:58 +00:00
Chubby Granny Chaser
77e0be8234 ci: testing upload build script 2024-12-10 00:54:35 +00:00
Chubby Granny Chaser
4b93b91373 ci: testing upload build script 2024-12-10 00:20:35 +00:00
Chubby Granny Chaser
639c7ef1e6 ci: testing upload build script 2024-12-10 00:03:14 +00:00
Chubby Granny Chaser
95ae59c7a3 Merge branch 'main' of github.com:hydralauncher/hydra 2024-12-09 23:38:37 +00:00
Chubby Granny Chaser
9e73a44426 ci: testing upload build script 2024-12-09 23:14:21 +00:00
Chubby Granny Chaser
2c93312df0 ci: testing upload build script 2024-12-09 23:12:10 +00:00
Chubby Granny Chaser
09cf207ecc ci: testing upload build script 2024-12-09 23:04:37 +00:00
Chubby Granny Chaser
1d13b7bede ci: testing upload build script 2024-12-09 23:01:54 +00:00
Chubby Granny Chaser
5b104ecb42 ci: testing upload build script 2024-12-09 22:59:40 +00:00
Chubby Granny Chaser
235045dec4 ci: testing upload build script 2024-12-09 22:56:49 +00:00
Chubby Granny Chaser
fa273a13f2 ci: testing upload build script 2024-12-09 22:54:58 +00:00
Zamitto
d8b59cae05 feat: differ staging cookie
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
2024-12-09 19:29:31 -03:00
Zamitto
45f2727415 chore: bump version 2024-12-09 17:58:46 -03:00
Zamitto
7e44b3dedb Merge pull request #1282 from hydralauncher/fix/intercepting-cookies
Fix/intercepting cookies
2024-12-09 17:57:30 -03:00
Zamitto
0dea700479 feat: adjustments on clear button 2024-12-09 17:26:20 -03:00
Zamitto
56247eaf7b Merge branch 'main' into fix/intercepting-cookies 2024-12-09 16:52:47 -03:00
Zamitto
590a15e534 Merge pull request #1254 from JarEXE/feature/clearpaths
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
feat: allow clearing game executable path and wine prefix
2024-12-09 16:51:18 -03:00
Zamitto
fb1cc9b82c Merge branch 'main' into feature/clearpaths 2024-12-09 16:29:19 -03:00
Zamitto
7595f19af3 feat: remove console log 2024-12-08 22:50:39 -03:00
Zamitto
e978d84f5f feat: intercepting cookies 2024-12-08 22:21:20 -03:00
Zamitto
0157d546e4 chore: bump version
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
2024-12-08 10:57:39 -03:00
Chubby Granny Chaser
4f5dc51a68 Merge pull request #1281 from hydralauncher/fix/fixing-local-images
fix: fixing local images
2024-12-08 13:17:25 +00:00
Chubby Granny Chaser
938650dbde Merge branch 'main' into fix/fixing-local-images 2024-12-08 13:15:52 +00:00
Chubby Granny Chaser
bae9e57fcd fix: fixing local images 2024-12-08 13:12:38 +00:00
Zamitto
6a673f0c6b Merge pull request #1280 from hydralauncher/fix/headers-and-logs
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
Fix/headers and logs
2024-12-08 01:26:55 -03:00
Zamitto
a962d839a8 fix: chatwoot and featurebase headers 2024-12-08 01:04:17 -03:00
Zamitto
173fb41e63 feat: refactor error logs 2024-12-08 00:59:53 -03:00
Zamitto
26cbeee5af Merge pull request #1277 from GearCzech/main
Updated czech translation [translation]
2024-12-08 00:42:33 -03:00
Zamitto
f6b5263814 Merge branch 'main' into main 2024-12-08 00:29:40 -03:00
Zamitto
3b7ddd0170 Merge pull request #1279 from bankov4eto/main
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
PR: [translation]
2024-12-07 10:36:18 -03:00
bankov4eto
600cbfe861 Update translation.json
Updated translation and corrections
2024-12-07 10:57:02 +02:00
bankov4eto
994f4568a4 Update translation.json
Updated translations and corrections
2024-12-07 10:50:06 +02:00
Gear
1de973ebd0 Fixed by prettier now 2024-12-05 22:36:12 +01:00
Gear
4f6d3d7057 fixed the last line 2024-12-05 22:32:31 +01:00
Gear
124e38c782 Updated czech translation 2024-12-05 22:13:28 +01:00
Zamitto
c9eed85a00 Merge pull request #1275 from hydralauncher/fix/set-userDetails-after-login
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
fix: set window.userDetails after login
2024-12-04 21:11:13 -03:00
Zamitto
988c01f506 fix: set window.userDetails after login 2024-12-04 12:11:14 -03:00
Zamitto
5450443022 Merge pull request #1274 from hydralauncher/chore/remove-intercom-dependency
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
chore: remove intercom dependency
2024-12-04 09:04:35 -03:00
Zamitto
590a1b354d chore: remove intercom dependency 2024-12-04 01:57:47 -03:00
Zamitto
2dcb629c2d Merge pull request #1269 from Lianela/main
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
feature: updated spanish translation
2024-12-02 23:59:48 -03:00
Lianela
96feaf8d42 Update translation.json 2024-12-02 17:43:00 -06:00
Lianela
4cb3258e17 feat: updated spanish translation
added missing strings
2024-12-02 17:38:13 -06:00
Chubby Granny Chaser
9b9b3f73d0 fix: fixing data: links on CSP
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
2024-12-02 20:37:43 +00:00
Chubby Granny Chaser
de36965017 fix: prevent loading external resources twice 2024-12-02 19:37:32 +00:00
Chubby Granny Chaser
e9fddd2456 Merge branch 'main' of github.com:hydralauncher/hydra 2024-12-02 19:13:41 +00:00
Chubby Granny Chaser
8b4791f1f4 chore: bump version 2024-12-02 19:12:39 +00:00
Zamitto
281208a8aa Merge branch 'main' into fix/linux-game-tracking 2024-12-02 16:08:38 -03:00
Chubby Granny Chaser
5f9397f6db Merge branch 'main' into feature/clearpaths 2024-12-02 18:47:19 +00:00
Chubby Granny Chaser
870e45991b Merge pull request #1268 from hydralauncher/fix/migrating-hltb
Fix/migrating hltb
2024-12-02 18:47:08 +00:00
Chubby Granny Chaser
38e94c92d7 fix: cache-busting external resources 2024-12-02 18:44:03 +00:00
Chubby Granny Chaser
93fbf7657d fix: returning hydra api call directly 2024-12-02 18:15:45 +00:00
Chubby Granny Chaser
0fc6d69851 fix: migrating hltb to api 2024-12-02 17:58:13 +00:00
Chubby Granny Chaser
7f600a0cbf feat: adding csp update 2024-12-02 17:10:13 +00:00
Chubby Granny Chaser
d7e06d6622 feat: adding aria2c 2024-11-28 19:16:05 +00:00
Chubby Granny Chaser
c6d4b658a1 feat: adding aria2c 2024-11-28 19:13:39 +00:00
Chubby Granny Chaser
a847f9370c feat: adding aria2c 2024-11-28 19:13:15 +00:00
Chubby Granny Chaser
fe8f962fb0 feat: adding aria2c 2024-11-28 19:12:47 +00:00
Chubby Granny Chaser
4060f7a1a6 feat: adding aria2c 2024-11-28 19:09:13 +00:00
Zamitto
5bc424796a Merge pull request #1219 from hydralauncher/feat/intercom-user-id
Some checks failed
Release / build (ubuntu-latest) (push) Has been cancelled
Release / build (windows-latest) (push) Has been cancelled
feat: add intercom user id
2024-11-28 11:27:57 -03:00
Zamitto
7f33b63bed Merge branch 'main' into feat/intercom-user-id 2024-11-28 09:55:15 -03:00
Chubby Granny Chaser
2d8b63c803 Merge branch 'feature/seed-completed-downloads' of github.com:hydralauncher/hydra into feature/seed-completed-downloads 2024-11-28 10:34:15 +00:00
Chubby Granny Chaser
6259cf4104 Merge branch 'main' of github.com:hydralauncher/hydra into feature/seed-completed-downloads 2024-11-28 10:13:37 +00:00
Chubby Granny Chaser
f35c34fa63 fix: fixing bottom panel scss 2024-11-28 10:13:23 +00:00
Zamitto
57e0fb493f Merge pull request #1261 from hydralauncher/fix/correct-subscription-date-validation
Some checks are pending
Release / build (ubuntu-latest) (push) Waiting to run
Release / build (windows-latest) (push) Waiting to run
fix: subscription date validation
2024-11-27 13:37:32 -03:00
Zamitto
730ea4f2b9 fix: subscription date validation 2024-11-27 13:27:13 -03:00
Hachi-R
f2cc20cb7c refactor: removed dropdown title because its ugly 2024-11-15 23:54:45 -03:00
JackEnx
46c3b33548 refactor: remove process watcher duplicated code 2024-11-13 11:54:01 -03:00
JackEnx
7785d42021 fix: linux game tracking and closed button 2024-11-12 15:39:18 -03:00
Eight
130c23603f Merge branch 'main' into feature/seed-completed-downloads 2024-11-12 04:34:15 -03:00
Hachi-R
330341392d lint 2024-11-12 04:32:34 -03:00
Hachi-R
9d1c04d07a refactor: export with component definition 2024-11-12 04:32:08 -03:00
Hachi-R
94ef1679a9 feat: add menu with download options on download page 2024-11-12 04:12:22 -03:00
Hachi-R
ca953de464 lint 2024-11-12 04:10:43 -03:00
Hachi-R
2c1c3e3c98 feat: add dropdown menu component 2024-11-12 04:10:19 -03:00
Hachi-R
40ec773425 lint 2024-11-11 16:39:58 -03:00
Hachi-R
a7b8018ed9 "feat: pause seeding if game folder is deleted" 2024-11-11 16:24:04 -03:00
Zamitto
8cfe5b4d34 fix: add friend's pass to format name 2024-11-11 10:35:33 -03:00
Zamitto
a2e41b81a3 Merge branch 'main' into feat/intercom-user-id 2024-11-10 23:38:07 -03:00
Zamitto
6e6469d90f fix: format ignore case 2024-11-10 20:55:23 -03:00
Hachi-R
1416cd46a3 feat: seed downloads from previous versions 2024-11-09 16:03:43 -03:00
Chubby Granny Chaser
610b6e528c Merge branch 'main' into feature/seed-completed-downloads 2024-11-09 18:03:28 +00:00
Hachi-R
f66bdd706b feat: pause seeding before deleting game 2024-11-09 14:29:45 -03:00
Hachi-R
518d919da5 feat: add locale strings 2024-11-09 13:00:22 -03:00
Hachi-R
9619578fcf lint 2024-11-09 12:47:16 -03:00
Hachi-R
56687948bf feat: display upload speed during seeding 2024-11-09 12:45:48 -03:00
Hachi-R
8ec52bf193 temp 2024-11-09 12:08:58 -03:00
Zamitto
2828640ed7 feat: add intercom user id 2024-11-09 02:54:23 -03:00
Hachi-R
c314c397a5 feat: add option to disable seeding after download completes 2024-11-09 01:29:06 -03:00
Hachi-R
5078946191 refactor: change logic to seed new downloads 2024-11-09 01:16:03 -03:00
Hachi-R
7c039ead10 feat: add seeding management logic 2024-11-08 23:36:43 -03:00
Hachi-R
94b65c0357 lint 2024-11-08 21:30:51 -03:00
Hachi-R
b32952f076 feat: add ablity to pause and resume the seeding process 2024-11-08 21:29:40 -03:00
Hachi-R
c556a00e4a feat: get seed status 2024-11-08 18:28:58 -03:00
Hachi-R
9c9c0e6c09 feat: seed after doenload 2024-11-08 18:24:06 -03:00
Hachi-R
21ca26dcfe feat: update schema with seeding columns 2024-11-08 17:30:18 -03:00
Chubby Granny Chaser
a292164a55 feat: adding demo theme composer 2024-11-08 17:05:38 +00:00
bumyy
4b59a007f4 feat: migration to scss 2024-11-08 13:31:40 -03:00
bumyy
c9e99d3852 feat: migrated to scss 2024-11-07 20:23:03 -03:00
361 changed files with 13220 additions and 7366 deletions

View File

@@ -1,4 +1,2 @@
MAIN_VITE_API_URL=API_URL
MAIN_VITE_AUTH_URL=AUTH_URL
MAIN_VITE_STEAMGRIDDB_API_KEY=YOUR_API_KEY
RENDERER_VITE_INTERCOM_APP_ID=YOUR_APP_ID

View File

@@ -3,3 +3,4 @@ dist
out
.gitignore
migration.stub
hydra-python-rpc/

View File

@@ -26,4 +26,9 @@ module.exports = {
},
],
},
settings: {
react: {
version: "detect",
},
},
};

View File

@@ -2,9 +2,6 @@ name: Build
on: pull_request
env:
AWS_REGION: us-east-1
jobs:
build:
strategy:
@@ -22,16 +19,6 @@ jobs:
with:
node-version: 20.18.0
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
- name: Push build to R2
run: aws s3 sync ./docs s3://${{ vars.BUILDS_BUCKET_NAME }}
- name: Install dependencies
run: yarn
@@ -44,7 +31,7 @@ jobs:
run: pip install -r requirements.txt
- name: Build with cx_Freeze
run: python torrent-client/setup.py build
run: python python_rpc/setup.py build
- name: Build Linux
if: matrix.os == 'ubuntu-latest'
@@ -56,9 +43,12 @@ jobs:
MAIN_VITE_API_URL: ${{ vars.MAIN_VITE_STAGING_API_URL }}
MAIN_VITE_AUTH_URL: ${{ vars.MAIN_VITE_STAGING_AUTH_URL }}
MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_STAGING_CHECKOUT_URL }}
MAIN_VITE_ANALYTICS_API_URL: ${{ vars.MAIN_VITE_ANALYTICS_API_URL }}
RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }}
RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
RENDERER_VITE_SENTRY_DSN: ${{ vars.SENTRY_DSN }}
- name: Build Windows
if: matrix.os == 'windows-latest'
@@ -67,9 +57,25 @@ jobs:
MAIN_VITE_API_URL: ${{ vars.MAIN_VITE_STAGING_API_URL }}
MAIN_VITE_AUTH_URL: ${{ vars.MAIN_VITE_STAGING_AUTH_URL }}
MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_STAGING_CHECKOUT_URL }}
MAIN_VITE_ANALYTICS_API_URL: ${{ vars.MAIN_VITE_ANALYTICS_API_URL }}
RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }}
RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
RENDERER_VITE_SENTRY_DSN: ${{ vars.SENTRY_DSN }}
- name: Test Upload build
env:
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }}
S3_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }}
S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }}
S3_BUILDS_BUCKET_NAME: ${{ secrets.S3_BUILDS_BUCKET_NAME }}
BUILDS_URL: ${{ secrets.BUILDS_URL }}
BUILD_WEBHOOK_URL: ${{ secrets.BUILD_WEBHOOK_URL }}
GITHUB_ACTOR: ${{ github.actor }}
run: node scripts/upload-build.cjs
- name: Create artifact
uses: actions/upload-artifact@v4

View File

@@ -33,7 +33,7 @@ jobs:
run: pip install -r requirements.txt
- name: Build with cx_Freeze
run: python torrent-client/setup.py build
run: python python_rpc/setup.py build
- name: Build Linux
if: matrix.os == 'ubuntu-latest'
@@ -47,7 +47,12 @@ jobs:
MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_CHECKOUT_URL }}
MAIN_VITE_ANALYTICS_API_URL: ${{ vars.MAIN_VITE_ANALYTICS_API_URL }}
RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }}
RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
RENDERER_VITE_SENTRY_DSN: ${{ vars.SENTRY_DSN }}
- name: Build Windows
if: matrix.os == 'windows-latest'
run: yarn build:win
@@ -57,7 +62,12 @@ jobs:
MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_CHECKOUT_URL }}
MAIN_VITE_ANALYTICS_API_URL: ${{ vars.MAIN_VITE_ANALYTICS_API_URL }}
RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }}
RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
RENDERER_VITE_SENTRY_DSN: ${{ vars.SENTRY_DSN }}
- name: Create artifact
uses: actions/upload-artifact@v4
with:

10
.gitignore vendored
View File

@@ -1,7 +1,5 @@
.vscode/
node_modules/
hydra-download-manager/
fastlist.exe
__pycache__
dist
out
@@ -9,4 +7,10 @@ out
*.log*
.env
.vite
ludusavi/
ludusavi/
hydra-python-rpc/
aria2/
.python-version
# Sentry Config File
.env.sentry-build-plugin

View File

@@ -2,7 +2,7 @@
<div align="center">
[<img src="./resources/icon.png" width="144"/>](https://hydralauncher.site)
[<img src="./resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
<h1 align="center">Hydra Launcher</h1>
@@ -125,6 +125,10 @@ cd hydra
yarn
```
### Install OpenSSL 1.1
[OpenSSL 1.1](https://slproweb.com/download/Win64OpenSSL-1_1_1w.exe) is required by libtorrent in Windows environments.
### Install Python 3.9
Ensure you have Python 3.9 installed on your machine. You can download and install it from [python.org](https://www.python.org/downloads/release/python-3913/).

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -1,7 +1,5 @@
!macro customUnInstall
${ifNot} ${isUpdated}
RMDir /r "$APPDATA\${APP_PACKAGE_NAME}"
RMDir /r "$APPDATA\hydra"
RMDir /r "$LOCALAPPDATA\hydralauncher-updater"
${endIf}
!macroend

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 604 KiB

View File

@@ -2,7 +2,7 @@
<div align="center">
[<img src="./resources/icon.png" width="144"/>](https://hydralauncher.site)
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
<h1 align="center">Hydra Launcher</h1>
@@ -14,7 +14,7 @@
[![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)
[![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)
@@ -27,7 +27,7 @@
[![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md)
[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md)
![Hydra Catalogue](./screenshot.png)
![Hydra Catalogue](screenshot.png)
</div>

View File

@@ -2,7 +2,7 @@
<div align="center">
[<img src="./resources/icon.png" width="144"/>](https://hydralauncher.site)
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
<h1 align="center">Hydra Launcher</h1>
@@ -14,7 +14,7 @@
[![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)
[![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)
@@ -27,7 +27,7 @@
[![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md)
[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md)
![Hydra Katalog](./screenshot.png)
![Hydra Katalog](screenshot.png)
</div>

View File

@@ -2,7 +2,7 @@
<div align="center">
[<img src="./resources/icon.png" width="144"/>](https://hydralauncher.site)
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
<h1 align="center">Hydra Launcher</h1>
@@ -14,7 +14,7 @@
[![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)
[![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)
@@ -26,7 +26,7 @@
[![da](https://img.shields.io/badge/lang-da-red)](README.da.md)
[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md)
![Hydra Catalogue](./screenshot.png)
![Hydra Catalogue](screenshot.png)
</div>

View File

@@ -2,7 +2,7 @@
<div align="center">
[<img src="./resources/icon.png" width="144"/>](https://hydralauncher.site)
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
<h1 align="center">Hydra Launcher</h1>
@@ -13,7 +13,7 @@
[![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)
[![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)
@@ -27,7 +27,7 @@
[![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md)
[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md)
![Hydra Katalog](./screenshot.png)
![Hydra Katalog](screenshot.png)
</div>

View File

@@ -2,7 +2,7 @@
<div align="center">
[<img src="./resources/icon.png" width="144"/>](https://hydralauncher.site)
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
<h1 align="center">Hydra Launcher</h1>
@@ -14,7 +14,7 @@
[![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)
[![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)
@@ -27,7 +27,7 @@
[![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md)
[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md)
![Hydra Catalogue](./screenshot.png)
![Hydra Catalogue](screenshot.png)
</div>

View File

@@ -1,6 +1,6 @@
<div align="center">
[<img src="../resources/icon.png" width="144"/>](https://hydralauncher.site)
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
<h1 align="center">Hydra Launcher</h1>
@@ -11,21 +11,21 @@
[![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)
[![es](https://img.shields.io/badge/lang-es-red)](./README.es.md)
[![fr](https://img.shields.io/badge/lang-fr-blue)](./README.fr.md)
[![de](https://img.shields.io/badge/lang-de-black)](./README.de.md)
[![ita](https://img.shields.io/badge/lang-it-red)](./README.it.md)
[![cs](https://img.shields.io/badge/lang-cs-purple)](./README.cs.md)
[![da](https://img.shields.io/badge/lang-da-red)](./README.da.md)
[![nb](https://img.shields.io/badge/lang-nb-blue)](./README.nb.md)
[![ee](https://img.shields.io/badge/lang-et-blue.svg)](./README.et.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)
[![de](https://img.shields.io/badge/lang-de-black)](README.de.md)
[![ita](https://img.shields.io/badge/lang-it-red)](README.it.md)
[![cs](https://img.shields.io/badge/lang-cs-purple)](README.cs.md)
[![da](https://img.shields.io/badge/lang-da-red)](README.da.md)
[![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md)
[![ee](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md)
![Hydra Kataloog](./screenshot.png)
![Hydra Kataloog](screenshot.png)
</div>

View File

@@ -2,7 +2,7 @@
<div align="center">
[<img src="./resources/icon.png" width="144"/>](https://hydralauncher.site)
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
<h1 align="center">Hydra Launcher</h1>
@@ -14,7 +14,7 @@
[![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)
[![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)
@@ -27,7 +27,7 @@
[![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md)
[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md)
![Catalogue Hydra](./screenshot.png)
![Catalogue Hydra](screenshot.png)
</div>

View File

@@ -2,7 +2,7 @@
<div align="center">
[<img src="./resources/icon.png" width="144"/>](https://hydralauncher.site)
[<img src="./resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
<h1 align="center">Hydra Launcher</h1>

View File

@@ -2,7 +2,7 @@
<div align="center">
[<img src="./resources/icon.png" width="144"/>](https://hydralauncher.site)
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
<h1 align="center">Hydra Launcher</h1>
@@ -14,7 +14,7 @@
[![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)
[![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)
@@ -26,7 +26,7 @@
[![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md)
[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md)
![Hydra Catalogue](./screenshot.png)
![Hydra Catalogue](screenshot.png)
</div>

View File

@@ -2,7 +2,7 @@
<div align="center">
[<img src="./resources/icon.png" width="144"/>](https://hydralauncher.site)
[<img src="./resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
<h1 align="center">Hydra Launcher</h1>

View File

@@ -2,7 +2,7 @@
<div align="center">
[<img src="./resources/icon.png" width="144"/>](https://hydralauncher.site)
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
<h1 align="center">Hydra Launcher</h1>
@@ -14,7 +14,7 @@
[![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)
[![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)

View File

@@ -2,7 +2,7 @@
<div align="center">
[<img src="./resources/icon.png" width="144"/>](https://hydralauncher.site)
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
<h1 align="center">Hydra Launcher</h1>
@@ -14,7 +14,7 @@
[![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)
[![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)

View File

@@ -2,7 +2,7 @@
<div align="center">
[<img src="./resources/icon.png" width="144"/>](https://hydralauncher.site)
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
<h1 align="center">Hydra Launcher</h1>
@@ -14,7 +14,7 @@
[![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)
[![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)
@@ -27,7 +27,7 @@
[![nb](https://img.shields.io/badge/lang-nb-blue)](README.nb.md)
[![et](https://img.shields.io/badge/lang-et-blue.svg)](README.et.md)
![Hydra Catalogue](./screenshot.png)
![Hydra Catalogue](screenshot.png)
</div>

View File

@@ -3,8 +3,9 @@ productName: Hydra
directories:
buildResources: build
extraResources:
- aria2
- ludusavi
- hydra-download-manager
- hydra-python-rpc
- seeds
- from: node_modules/create-desktop-shortcuts/src/windows.vbs
- from: resources/achievement.wav

View File

@@ -8,6 +8,7 @@ import {
import react from "@vitejs/plugin-react";
import { vanillaExtractPlugin } from "@vanilla-extract/vite-plugin";
import svgr from "vite-plugin-svgr";
import { sentryVitePlugin } from "@sentry/vite-plugin";
export default defineConfig(({ mode }) => {
loadEnv(mode);
@@ -44,7 +45,16 @@ export default defineConfig(({ mode }) => {
"@shared": resolve("src/shared"),
},
},
plugins: [svgr(), react(), vanillaExtractPlugin()],
plugins: [
svgr(),
react(),
vanillaExtractPlugin(),
sentryVitePlugin({
authToken: process.env.SENTRY_AUTH_TOKEN,
org: "hydra-launcher",
project: "hydra-renderer",
}),
],
},
};
});

View File

@@ -1,6 +1,6 @@
{
"name": "hydralauncher",
"version": "3.0.5",
"version": "3.1.5",
"description": "Hydra",
"main": "./out/main/index.js",
"author": "Los Broxas",
@@ -23,7 +23,7 @@
"start": "electron-vite preview",
"dev": "electron-vite dev",
"build": "npm run typecheck && electron-vite build",
"postinstall": "electron-builder install-app-deps && node ./postinstall.cjs",
"postinstall": "electron-builder install-app-deps && node ./scripts/postinstall.cjs",
"build:unpack": "npm run build && electron-builder --dir",
"build:win": "electron-vite build && electron-builder --win",
"build:mac": "electron-vite build && electron-builder --mac",
@@ -34,28 +34,30 @@
"dependencies": {
"@electron-toolkit/preload": "^3.0.0",
"@electron-toolkit/utils": "^3.0.0",
"@fontsource/noto-sans": "^5.0.22",
"@hookform/resolvers": "^3.9.0",
"@intercom/messenger-js-sdk": "^0.0.14",
"@fontsource/noto-sans": "^5.1.0",
"@hookform/resolvers": "^3.9.1",
"@monaco-editor/react": "^4.6.0",
"@primer/octicons-react": "^19.9.0",
"@radix-ui/react-dropdown-menu": "^2.1.2",
"@reduxjs/toolkit": "^2.2.3",
"@sentry/react": "^8.47.0",
"@sentry/vite-plugin": "^2.22.7",
"@vanilla-extract/css": "^1.14.2",
"@vanilla-extract/dynamic": "^2.1.1",
"@vanilla-extract/dynamic": "^2.1.2",
"@vanilla-extract/recipes": "^0.5.2",
"auto-launch": "^5.0.6",
"axios": "^1.7.7",
"better-sqlite3": "^11.3.0",
"check-disk-space": "^3.4.0",
"axios": "^1.7.9",
"better-sqlite3": "^11.7.0",
"classnames": "^2.5.1",
"color": "^4.2.3",
"color.js": "^1.2.0",
"create-desktop-shortcuts": "^1.11.0",
"date-fns": "^3.6.0",
"dexie": "^4.0.9",
"electron-log": "^5.2.0",
"dexie": "^4.0.10",
"diskusage": "^1.2.0",
"electron-log": "^5.2.4",
"electron-updater": "^6.3.9",
"file-type": "^19.6.0",
"flexsearch": "^0.7.43",
"i18next": "^23.11.2",
"i18next-browser-languagedetector": "^7.2.1",
"jsdom": "^24.0.0",
@@ -64,6 +66,7 @@
"lodash-es": "^4.17.21",
"parse-torrent": "^11.0.17",
"piscina": "^4.7.0",
"rc-virtual-list": "^3.16.1",
"react-hook-form": "^7.53.0",
"react-i18next": "^14.1.0",
"react-loading-skeleton": "^3.4.0",
@@ -73,14 +76,15 @@
"sudo-prompt": "^9.2.1",
"tar": "^7.4.3",
"typeorm": "^0.3.20",
"user-agents": "^1.1.193",
"yaml": "^2.4.1",
"yup": "^1.4.0",
"zod": "^3.23.8"
"user-agents": "^1.1.387",
"yaml": "^2.6.1",
"yup": "^1.5.0",
"zod": "^3.24.1"
},
"devDependencies": {
"@commitlint/cli": "^19.5.0",
"@commitlint/config-conventional": "^19.5.0",
"@aws-sdk/client-s3": "^3.705.0",
"@commitlint/cli": "^19.6.0",
"@commitlint/config-conventional": "^19.6.0",
"@electron-toolkit/eslint-config-prettier": "^2.0.0",
"@electron-toolkit/eslint-config-ts": "^2.0.0",
"@electron-toolkit/tsconfig": "^1.0.1",
@@ -88,8 +92,8 @@
"@types/auto-launch": "^5.0.5",
"@types/color": "^3.0.6",
"@types/folder-hash": "^4.0.4",
"@types/jsdom": "^21.1.6",
"@types/jsonwebtoken": "^9.0.6",
"@types/jsdom": "^21.1.7",
"@types/jsonwebtoken": "^9.0.7",
"@types/lodash-es": "^4.17.12",
"@types/node": "^20.12.7",
"@types/parse-torrent": "^5.8.7",
@@ -99,15 +103,15 @@
"@types/user-agents": "^1.0.4",
"@vanilla-extract/vite-plugin": "^4.0.7",
"@vitejs/plugin-react": "^4.2.1",
"electron": "^30.3.0",
"electron": "^31.7.6",
"electron-builder": "^25.1.8",
"electron-vite": "^2.0.0",
"eslint": "^8.56.0",
"eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.2",
"eslint-plugin-react-hooks": "^4.6.0",
"husky": "^9.0.11",
"prettier": "^3.2.4",
"husky": "^9.1.7",
"prettier": "^3.4.2",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"sass-embedded": "^1.80.6",

View File

@@ -1,49 +0,0 @@
const { default: axios } = require("axios");
const util = require("node:util");
const fs = require("node:fs");
const path = require("node:path");
const exec = util.promisify(require("node:child_process").exec);
const fileName = {
win32: "ludusavi-v0.25.0-win64.zip",
linux: "ludusavi-v0.25.0-linux.zip",
darwin: "ludusavi-v0.25.0-mac.zip",
};
const downloadLudusavi = async () => {
if (fs.existsSync("ludusavi")) {
console.log("Ludusavi already exists, skipping download...");
return;
}
const file = fileName[process.platform];
const downloadUrl = `https://github.com/mtkennerly/ludusavi/releases/download/v0.25.0/${file}`;
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...`);
const pwd = process.cwd();
const targetPath = path.join(pwd, "ludusavi");
await exec(`npx extract-zip ${file} ${targetPath}`);
if (process.platform !== "win32") {
fs.chmodSync(path.join(targetPath, "ludusavi"), 0o755);
}
console.log("Extracted. Renaming folder...");
console.log(`Extracted ${file}, removing compressed downloaded file...`);
fs.rmSync(file);
});
};
downloadLudusavi();

View File

@@ -0,0 +1,47 @@
import aria2p
class HttpDownloader:
def __init__(self):
self.download = None
self.aria2 = aria2p.API(
aria2p.Client(
host="http://localhost",
port=6800,
secret=""
)
)
def start_download(self, url: str, save_path: str, header: str):
if self.download:
self.aria2.resume([self.download])
else:
downloads = self.aria2.add(url, options={"header": header, "dir": save_path})
self.download = downloads[0]
def pause_download(self):
if self.download:
self.aria2.pause([self.download])
def cancel_download(self):
if self.download:
self.aria2.remove([self.download])
self.download = None
def get_download_status(self):
if self.download == None:
return None
download = self.aria2.get_download(self.download.gid)
response = {
'folderName': download.name,
'fileSize': download.total_length,
'progress': download.completed_length / download.total_length if download.total_length else 0,
'downloadSpeed': download.download_speed,
'numPeers': 0,
'numSeeds': 0,
'status': download.status,
'bytesDownloaded': download.completed_length,
}
return response

183
python_rpc/main.py Normal file
View File

@@ -0,0 +1,183 @@
from flask import Flask, request, jsonify
import sys, json, urllib.parse, psutil
from torrent_downloader import TorrentDownloader
from http_downloader import HttpDownloader
from profile_image_processor import ProfileImageProcessor
import libtorrent as lt
app = Flask(__name__)
# Retrieve command line arguments
torrent_port = sys.argv[1]
http_port = sys.argv[2]
rpc_password = sys.argv[3]
start_download_payload = sys.argv[4]
start_seeding_payload = sys.argv[5]
downloads = {}
# This can be streamed down from Node
downloading_game_id = -1
torrent_session = lt.session({'listen_interfaces': '0.0.0.0:{port}'.format(port=torrent_port)})
if start_download_payload:
initial_download = json.loads(urllib.parse.unquote(start_download_payload))
downloading_game_id = initial_download['game_id']
if initial_download['url'].startswith('magnet'):
torrent_downloader = TorrentDownloader(torrent_session)
downloads[initial_download['game_id']] = torrent_downloader
try:
torrent_downloader.start_download(initial_download['url'], initial_download['save_path'], "")
except Exception as e:
print("Error starting torrent download", e)
else:
http_downloader = HttpDownloader()
downloads[initial_download['game_id']] = http_downloader
try:
http_downloader.start_download(initial_download['url'], initial_download['save_path'], initial_download.get('header'))
except Exception as e:
print("Error starting http download", e)
if start_seeding_payload:
initial_seeding = json.loads(urllib.parse.unquote(start_seeding_payload))
for seed in initial_seeding:
torrent_downloader = TorrentDownloader(torrent_session, lt.torrent_flags.upload_mode)
downloads[seed['game_id']] = torrent_downloader
try:
torrent_downloader.start_download(seed['url'], seed['save_path'], "")
except Exception as e:
print("Error starting seeding", e)
def validate_rpc_password():
"""Middleware to validate RPC password."""
header_password = request.headers.get('x-hydra-rpc-password')
if header_password != rpc_password:
return jsonify({"error": "Unauthorized"}), 401
@app.route("/status", methods=["GET"])
def status():
auth_error = validate_rpc_password()
if auth_error:
return auth_error
downloader = downloads.get(downloading_game_id)
if downloader:
status = downloads.get(downloading_game_id).get_download_status()
return jsonify(status), 200
else:
return jsonify(None)
@app.route("/seed-status", methods=["GET"])
def seed_status():
auth_error = validate_rpc_password()
if auth_error:
return auth_error
seed_status = []
for game_id, downloader in downloads.items():
if not downloader:
continue
response = downloader.get_download_status()
if response is None:
continue
if response.get('status') == 5:
seed_status.append({
'gameId': game_id,
**response,
})
return jsonify(seed_status), 200
@app.route("/healthcheck", methods=["GET"])
def healthcheck():
return "", 200
@app.route("/process-list", methods=["GET"])
def process_list():
auth_error = validate_rpc_password()
if auth_error:
return auth_error
process_list = [proc.info for proc in psutil.process_iter(['exe', 'pid', 'name'])]
return jsonify(process_list), 200
@app.route("/profile-image", methods=["POST"])
def profile_image():
auth_error = validate_rpc_password()
if auth_error:
return auth_error
data = request.get_json()
image_path = data.get('image_path')
try:
processed_image_path, mime_type = ProfileImageProcessor.process_image(image_path)
return jsonify({'imagePath': processed_image_path, 'mimeType': mime_type}), 200
except Exception as e:
return jsonify({"error": str(e)}), 400
@app.route("/action", methods=["POST"])
def action():
global torrent_session
global downloading_game_id
auth_error = validate_rpc_password()
if auth_error:
return auth_error
data = request.get_json()
action = data.get('action')
game_id = data.get('game_id')
if action == 'start':
url = data.get('url')
existing_downloader = downloads.get(game_id)
if url.startswith('magnet'):
if existing_downloader and isinstance(existing_downloader, TorrentDownloader):
existing_downloader.start_download(url, data['save_path'], "")
else:
torrent_downloader = TorrentDownloader(torrent_session)
downloads[game_id] = torrent_downloader
torrent_downloader.start_download(url, data['save_path'], "")
else:
if existing_downloader and isinstance(existing_downloader, HttpDownloader):
existing_downloader.start_download(url, data['save_path'], data.get('header'))
else:
http_downloader = HttpDownloader()
downloads[game_id] = http_downloader
http_downloader.start_download(url, data['save_path'], data.get('header'))
downloading_game_id = game_id
elif action == 'pause':
downloader = downloads.get(game_id)
if downloader:
downloader.pause_download()
downloading_game_id = -1
elif action == 'cancel':
downloader = downloads.get(game_id)
if downloader:
downloader.cancel_download()
elif action == 'resume_seeding':
torrent_downloader = TorrentDownloader(torrent_session, lt.torrent_flags.upload_mode)
downloads[game_id] = torrent_downloader
torrent_downloader.start_download(data['url'], data['save_path'], "")
elif action == 'pause_seeding':
downloader = downloads.get(game_id)
if downloader:
downloader.cancel_download()
else:
return jsonify({"error": "Invalid action"}), 400
return "", 200
if __name__ == "__main__":
app.run(host="0.0.0.0", port=int(http_port))

View File

@@ -15,8 +15,8 @@ class ProfileImageProcessor:
mime_type = image.get_format_mimetype()
return image_path, mime_type
else:
newUUID = str(uuid.uuid4())
new_image_path = os.path.join(tempfile.gettempdir(), newUUID) + ".webp"
new_uuid = str(uuid.uuid4())
new_image_path = os.path.join(tempfile.gettempdir(), new_uuid) + ".webp"
image.save(new_image_path)
new_image = Image.open(new_image_path)

View File

@@ -3,18 +3,18 @@ from cx_Freeze import setup, Executable
# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {
"packages": ["libtorrent"],
"build_exe": "hydra-download-manager",
"build_exe": "hydra-python-rpc",
"include_msvcr": True
}
setup(
name="hydra-download-manager",
name="hydra-python-rpc",
version="0.1",
description="Hydra",
options={"build_exe": build_exe_options},
executables=[Executable(
"torrent-client/main.py",
target_name="hydra-download-manager",
"python_rpc/main.py",
target_name="hydra-python-rpc",
icon="build/icon.ico"
)]
)

View File

@@ -1,10 +1,10 @@
import libtorrent as lt
class TorrentDownloader:
def __init__(self, port: str):
self.torrent_handles = {}
self.downloading_game_id = -1
self.session = lt.session({'listen_interfaces': '0.0.0.0:{port}'.format(port=port)})
def __init__(self, torrent_session, flags = lt.torrent_flags.auto_managed):
self.torrent_handle = None
self.session = torrent_session
self.flags = flags
self.trackers = [
"udp://tracker.opentrackr.org:1337/announce",
"http://tracker.opentrackr.org:1337/announce",
@@ -102,64 +102,48 @@ class TorrentDownloader:
"http://bvarf.tracker.sh:2086/announce",
]
def start_download(self, game_id: int, magnet: str, save_path: str):
params = {'url': magnet, 'save_path': save_path, 'trackers': self.trackers}
torrent_handle = self.session.add_torrent(params)
self.torrent_handles[game_id] = torrent_handle
torrent_handle.set_flags(lt.torrent_flags.auto_managed)
torrent_handle.resume()
def start_download(self, magnet: str, save_path: str, header: str):
params = {'url': magnet, 'save_path': save_path, 'trackers': self.trackers, 'flags': self.flags}
self.torrent_handle = self.session.add_torrent(params)
self.torrent_handle.resume()
self.downloading_game_id = game_id
def pause_download(self):
if self.torrent_handle:
self.torrent_handle.pause()
self.torrent_handle.unset_flags(lt.torrent_flags.auto_managed)
def pause_download(self, game_id: int):
torrent_handle = self.torrent_handles.get(game_id)
if torrent_handle:
torrent_handle.pause()
torrent_handle.unset_flags(lt.torrent_flags.auto_managed)
self.downloading_game_id = -1
def cancel_download(self, game_id: int):
torrent_handle = self.torrent_handles.get(game_id)
if torrent_handle:
torrent_handle.pause()
self.session.remove_torrent(torrent_handle)
self.torrent_handles[game_id] = None
self.downloading_game_id = -1
def cancel_download(self):
if self.torrent_handle:
self.torrent_handle.pause()
self.session.remove_torrent(self.torrent_handle)
self.torrent_handle = None
def abort_session(self):
for game_id in self.torrent_handles:
torrent_handle = self.torrent_handles[game_id]
torrent_handle.pause()
self.session.remove_torrent(torrent_handle)
self.torrent_handle = self.torrent_handles[game_id]
self.torrent_handle.pause()
self.session.remove_torrent(self.torrent_handle)
self.session.abort()
self.torrent_handles = {}
self.downloading_game_id = -1
self.torrent_handle = None
def get_download_status(self):
if self.downloading_game_id == -1:
if self.torrent_handle is None:
return None
torrent_handle = self.torrent_handles.get(self.downloading_game_id)
status = torrent_handle.status()
info = torrent_handle.get_torrent_info()
status = self.torrent_handle.status()
info = self.torrent_handle.get_torrent_info()
response = {
'folderName': info.name() if info else "",
'fileSize': info.total_size() if info else 0,
'gameId': self.downloading_game_id,
'progress': status.progress,
'downloadSpeed': status.download_rate,
'uploadSpeed': status.upload_rate,
'numPeers': status.num_peers,
'numSeeds': status.num_seeds,
'status': status.state,
'bytesDownloaded': status.progress * info.total_size() if info else status.all_time_download,
}
if status.progress == 1:
torrent_handle.pause()
self.session.remove_torrent(torrent_handle)
self.downloading_game_id = -1
return response

View File

@@ -4,3 +4,5 @@ cx_Logging; sys_platform == 'win32'
pywin32; sys_platform == 'win32'
psutil
Pillow
flask
aria2p

Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 18 KiB

122
scripts/postinstall.cjs Normal file
View File

@@ -0,0 +1,122 @@
const { default: axios } = require("axios");
const util = require("node:util");
const fs = require("node:fs");
const path = require("node:path");
const { spawnSync } = require("node:child_process");
const exec = util.promisify(require("node:child_process").exec);
const fileName = {
win32: "ludusavi-v0.25.0-win64.zip",
linux: "ludusavi-v0.25.0-linux.zip",
darwin: "ludusavi-v0.25.0-mac.zip",
};
const downloadLudusavi = async () => {
if (fs.existsSync("ludusavi")) {
console.log("Ludusavi already exists, skipping download...");
return;
}
const file = fileName[process.platform];
const downloadUrl = `https://github.com/mtkennerly/ludusavi/releases/download/v0.25.0/${file}`;
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...`);
const pwd = process.cwd();
const targetPath = path.join(pwd, "ludusavi");
await exec(`npx extract-zip ${file} ${targetPath}`);
if (process.platform !== "win32") {
fs.chmodSync(path.join(targetPath, "ludusavi"), 0o755);
}
console.log("Extracted. Renaming folder...");
console.log(`Extracted ${file}, removing compressed downloaded file...`);
fs.rmSync(file);
});
};
const downloadAria2WindowsAndLinux = async () => {
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.mkdirSync("aria2");
fs.copyFileSync(
path.join(file.replace(".zip", ""), "aria2c.exe"),
"aria2/aria2c.exe"
);
fs.rmSync(file.replace(".zip", ""), { recursive: true });
} 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);
});
};
const copyAria2Macos = async () => {
console.log("Checking if aria2 is installed...");
const isAria2Installed = spawnSync("which", ["aria2c"]).status;
if (isAria2Installed != 0) {
console.log("Please install aria2");
console.log("brew install aria2");
return;
}
console.log("Copying aria2 binary...");
fs.mkdirSync("aria2");
await exec(`cp $(which aria2c) aria2/aria2c`);
};
const copyAria2 = () => {
if (fs.existsSync("aria2")) {
console.log("Aria2 already exists, skipping download...");
return;
}
if (process.platform == "darwin") {
copyAria2Macos();
} else {
downloadAria2WindowsAndLinux();
}
};
copyAria2();
downloadLudusavi();

66
scripts/upload-build.cjs Normal file
View File

@@ -0,0 +1,66 @@
const fs = require("node:fs");
const { S3Client, PutObjectCommand } = require("@aws-sdk/client-s3");
const path = require("node:path");
const packageJson = require("../package.json");
if (!process.env.BUILD_WEBHOOK_URL) {
console.log("No BUILD_WEBHOOK_URL provided, skipping upload");
process.exit(0);
}
const s3 = new S3Client({
region: "auto",
endpoint: process.env.S3_ENDPOINT,
forcePathStyle: true,
credentials: {
accessKeyId: process.env.S3_ACCESS_KEY_ID,
secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
},
});
const dist = path.resolve(__dirname, "..", "dist");
const extensionsToUpload = [".deb", ".exe", ".pacman"];
fs.readdir(dist, async (err, files) => {
if (err) throw err;
const uploads = await Promise.all(
files
.filter((file) => extensionsToUpload.includes(path.extname(file)))
.map(async (file) => {
console.log(`⌛️ Uploading ${file}...`);
const fileName = `${new Date().getTime()}-${file}`;
const command = new PutObjectCommand({
Bucket: process.env.S3_BUILDS_BUCKET_NAME,
Key: fileName,
Body: fs.createReadStream(path.resolve(dist, file)),
// 3 days
Expires: new Date(Date.now() + 1000 * 60 * 60 * 24 * 3),
});
await s3.send(command);
return {
url: `${process.env.BUILDS_URL}/${fileName}`,
name: fileName,
};
})
);
if (uploads.length > 0) {
await fetch(process.env.BUILD_WEBHOOK_URL, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
uploads,
branchName: process.env.BRANCH_NAME,
version: packageJson.version,
githubActor: process.env.GITHUB_ACTOR,
}),
});
}
});

File diff suppressed because one or more lines are too long

View File

@@ -1,146 +1,417 @@
{
"language_name": "اَلْعَرَبِيَّةُ",
"app": {
"successfully_signed_in": "تم تسجيل الدخول بنجاح"
},
"home": {
"featured": ميّز",
"surprise_me": "فاجئني",
"no_results": م يتم العثور على نتائج"
"featured": ُتَمَيِّز",
"surprise_me": َاجِئْنِي",
"no_results": َمْ يُعْثَرْ عَلَى نَتائِج",
"start_typing": "اِبْدَأْ بِالْكِتَابَةِ لِلْبَحْثِ...",
"hot": "اَلْأَكْثَرُ شُيُوعًا الْآن",
"weekly": "📅 أَفْضَلُ أَلْعَابِ الْأُسْبُوعِ",
"achievements": "🏆 أَلْعَابٌ لِلتَّغَلُّبِ عَلَيْهَا"
},
"sidebar": {
"catalogue": "قائمة الألعاب",
"downloads": "التحميلات",
"settings": "إعدادات",
"my_library": كتبتي",
"downloading_metadata": "{{title}} (جارٍ تنزيل البيانات الوصفية...)",
"paused": "{{title}} (متوقف)",
"downloading": "{{title}} ({{percentage}} - جارٍ التنزيل...)",
"filter": "بحث في المكتبة",
"home": "الرئيسية"
"catalogue": "الْفِهْرِسُ",
"downloads": "التَّنْزِيلَاتُ",
"settings": "الإعْدَادَاتُ",
"my_library": َكْتَبَتِي",
"downloading_metadata": "{{title}} (جَارٍ تَنْزِيلُ الْبَيَانَاتِ الْوَصْفِيَّةِ...)",
"paused": "{{title}} (مُوْقَفٌ)",
"downloading": "{{title}} ({{percentage}} - جَارٍ التَّنْزِيلُ...)",
"filter": "تَصْفِيَةُ الْمَكْتَبَةِ",
"home": "الرَّئِيسِيَّةُ",
"queued": "{{title}} (فِي الْانْتِظَارِ)",
"game_has_no_executable": "اللُّعْبَةُ لَيْسَ لَدَيْهَا مِلَفٌّ تَنْفِيذِيٌّ مُحَدَّدٌ",
"sign_in": "تَسْجِيلُ الدُّخُولِ",
"friends": "الْأَصْدِقَاءُ",
"need_help": "هَلْ تَحْتَاجُ إِلَى مُسَاعَدَةٍ؟"
},
"header": {
"search": "ابحث عن الألعاب",
"home": "الرئيسية",
"catalogue": "قائمة الألعاب",
"downloads": "التحميلات",
"search_results": "نتائج البحث",
"settings": "إعدادات"
"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}}"
"no_downloads_in_progress": َا تَوْجَدُ تَنْزِيلَاتٌ جَارِيَةٌ",
"downloading_metadata": َارٍ تَنْزِيلُ الْبَيَانَاتِ الْوَصْفِيَّةِ لِـ {{title}}...",
"downloading": َارٍ تَنْزِيلُ {{title}}... ({{percentage}} مَكْتُومٌ) - الِاكْتِمَالُ {{eta}} - {{speed}}",
"calculating_eta": "جَارٍ تَنْزِيلُ {{title}}... ({{percentage}} مَكْتُومٌ) - جَارٍ حِسَابُ الْوَقْتِ الْمُتَبَقِّي...",
"checking_files": "جَارٍ التَّحَقُّقُ مِنْ مَلَفَّاتِ {{title}}... ({{percentage}} مَكْتُومٌ)"
},
"catalogue": {
"next_page": "الصفحة التالية",
"previous_page": "الصفحة السابقة"
"search": "تَصْفِيَةٌ...",
"developers": "الْمُطَوِّرُونَ",
"genres": "الْأَنْوَاعُ",
"tags": "الْعَلَامَاتُ",
"publishers": "النَّاشِرُونَ",
"download_sources": "مَصَادِرُ التَّنْزِيلِ",
"result_count": "{{resultCount}} نَتائِجُ",
"filter_count": "{{filterCount}} مَتَوَفِّرٌ",
"clear_filters": "مَسْحُ {{filterCount}} الْمُخْتَارَةِ"
},
"game_details": {
"open_download_options": "افتح خيارات التنزيل",
"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}}",
"downloading_metadata": "جاري تنزيل البيانات الوصفية...",
"filter": "تصفية حزم إعادة التجميع",
"requirements": "متطلبات النظام",
"minimum": "الحد الأدنى",
"recommended": "موصى به",
"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": "لتغيير المجلد الافتراضي، انتقل إلى الإعدادات",
"download_now": "تنزيل الآن",
"no_shop_details": "لم يتم استرداد تفاصيل المتجر.",
"download_options": "خيارات التنزيل",
"download_path": "مسار التنزيل",
"previous_screenshot": "لقطة الشاشة السابقة",
"next_screenshot": "لقطة الشاشة التالية",
"screenshot": قطة شاشة {{number}}",
"open_screenshot": "افتح لقطة الشاشة {{number}}"
"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": "إِنْشَاءُ طَرِيقٍ مُخْتَصَرٍ عَلَى سَطْحِ الْمَكْتَبِ",
"clear": "مَسْحٌ",
"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": "خَطَأٌ فِي إِنْشَاءِ الطَّرِيقِ الْمُخْتَصَرِ",
"nsfw_content_title": "هَذِهِ اللُّعْبَةُ تَحْتَوِي عَلَى مُحْتَوًى غَيْرِ لَائِقٍ",
"nsfw_content_description": "{{title}} تَحْتَوِي عَلَى مُحْتَوًى قَدْ لَا يَكُونُ مُنَاسِبًا لِجَمِيعِ الْأَعْمَارِ. هَلْ أَنْتَ مُتَأَكِّدٌ مِنْ أَنَّكَ تُرِيدُ الْمُتَابَعَةَ؟",
"allow_nsfw_content": "الْمُتَابَعَةُ",
"refuse_nsfw_content": "الرُّجُوعُ",
"stats": "الإحْصَائِيَّاتُ",
"download_count": "التَّنْزِيلَاتُ",
"player_count": "اللَّاعِبُونَ النَّشِطُونَ",
"download_error": "هَذَا خِيَارُ التَّنْزِيلِ غَيْرُ مَتَوَفِّرٍ",
"download": "تَنْزِيلٌ",
"executable_path_in_use": "الْمِلَفُّ التَّنْفِيذِيُّ مُسْتَخْدَمٌ بِوَاسِطَةِ \"{{game}}\"",
"warning": "تَنْبِيهٌ:",
"hydra_needs_to_remain_open": "لِهَذَا التَّنْزِيلِ، يَجِبُ أَنْ يَبْقَى Hydra مَفْتُوحًا حَتَّى يَتِمَّ الِاكْتِمَالُ. إِذَا أُغْلِقَ Hydra قَبْلَ الِاكْتِمَالِ، سَتَفْقِدُ تَقَدُّمَكَ.",
"achievements": "الإِنْجَازَاتُ",
"achievements_count": "الإِنْجَازَاتُ {{unlockedCount}}/{{achievementsCount}}",
"cloud_save": "حِفْظٌ سَحَابِيٌّ",
"cloud_save_description": "احْفَظْ تَقَدُّمَكَ فِي السَّحَابَةِ وَاسْتَمِرَّ فِي اللَّعِبِ عَلَى أَيِّ جِهَازٍ",
"backups": "الْنُسَخُ الِاحْتِيَاطِيَّةُ",
"install_backup": "تَثْبِيتٌ",
"delete_backup": "حَذْفٌ",
"create_backup": "نُسْخَةٌ احْتِيَاطِيَّةٌ جَدِيدَةٌ",
"last_backup_date": "آخِرُ نُسْخَةٍ احْتِيَاطِيَّةٍ فِي {{date}}",
"no_backup_preview": "لَمْ يُعْثَرْ عَلَى أَيِّ أَلْعَابٍ مَحْفُوظَةٍ لِهَذَا الْعُنْوَانِ",
"restoring_backup": "جَارٍ اسْتِعَادَةُ النُّسْخَةِ الِاحْتِيَاطِيَّةِ ({{progress}} مَكْتُومٌ)...",
"uploading_backup": "جَارٍ رَفْعُ النُّسْخَةِ الِاحْتِيَاطِيَّةِ...",
"no_backups": "لَمْ تَقُمْ بِإِنْشَاءِ أَيِّ نُسَخٍ احْتِيَاطِيَّةٍ لِهَذِهِ اللُّعْبَةِ بَعْدُ",
"backup_uploaded": "تَمَّ رَفْعُ النُّسْخَةِ الِاحْتِيَاطِيَّةِ",
"backup_deleted": "تَمَّ حَذْفُ النُّسْخَةِ الِاحْتِيَاطِيَّةِ",
"backup_restored": "تَمَّ اسْتِعَادَةُ النُّسْخَةِ الِاحْتِيَاطِيَّةِ",
"see_all_achievements": "عَرْضُ جَمِيعِ الإِنْجَازَاتِ",
"sign_in_to_see_achievements": "سَجِّلِ الدُّخُولَ لِعَرْضِ الإِنْجَازَاتِ",
"mapping_method_automatic": "آلِيٌّ",
"mapping_method_manual": "يَدَوِيٌّ",
"mapping_method_label": "طَرِيقَةُ التَّحْدِيدِ",
"files_automatically_mapped": "تَمَّ تَحْدِيدُ الْمَلَفَّاتِ تِلْقَائِيًّا",
"no_backups_created": "لَمْ تُنْشَأْ أَيُّ نُسَخٍ احْتِيَاطِيَّةٍ لِهَذِهِ اللُّعْبَةِ",
"manage_files": "إِدَارَةُ الْمَلَفَّاتِ",
"loading_save_preview": "جَارٍ الْبَحْثُ عَنْ أَلْعَابٍ مَحْفُوظَةٍ...",
"wine_prefix": "بَادِئَةُ Wine",
"wine_prefix_description": "بَادِئَةُ Wine الْمُسْتَخْدَمَةُ لِتَشْغِيلِ هَذِهِ اللُّعْبَةِ",
"launch_options": "خِيَارَاتُ الْإِطْلَاقِ",
"launch_options_description": "يُمْكِنُ لِلْمُسْتَخْدِمِينَ الْمُتَقَدِّمِينَ إِدْخَالُ تَعْدِيلَاتٍ عَلَى خِيَارَاتِ الْإِطْلَاقِ",
"launch_options_placeholder": "لَمْ يُحَدَّدْ أَيُّ مُعَامِلٍ",
"no_download_option_info": "لَا تَوْجَدُ مَعْلُومَاتٌ مَتَوَفِّرَةٌ",
"backup_deletion_failed": "فَشَلَ فِي حَذْفِ النُّسْخَةِ الِاحْتِيَاطِيَّةِ",
"max_number_of_artifacts_reached": "تَمَّ بَلُوغُ الْعَدَدِ الْأَقْصَى لِلنُّسَخِ الِاحْتِيَاطِيَّةِ لِهَذِهِ اللُّعْبَةِ",
"achievements_not_sync": "تَعَرَّفْ عَلَى كَيْفِيَّةِ مَزْجِ إِنْجَازَاتِكَ",
"manage_files_description": "إِدَارَةُ الْمَلَفَّاتِ الَّتِي سَيَتِمُّ نَسْخُهَا احْتِيَاطِيًّا وَاسْتِعَادَتُهَا",
"select_folder": "تَحْدِيدُ الْمَجَلَّدِ",
"backup_from": "نُسْخَةٌ احْتِيَاطِيَّةٌ مِنْ {{date}}",
"custom_backup_location_set": "تَمَّ تَحْدِيدُ مَوْقِعِ النُّسْخَةِ الِاحْتِيَاطِيَّةِ الْمُخَصَّصِ",
"no_directory_selected": "لَمْ يُحَدَّدْ أَيُّ دَلِيلٍ"
},
"activation": {
"title": فعيل هايدرا",
"installation_id": عرف التثبيت:",
"enter_activation_code": دخل رمز التفعيل الخاص بك",
"message": ذا كنت لا تعرف أين تسأل عن هذا ، فلا يجب أن يكون لديك هذا.",
"activate": فعيل",
"loading": "جار التحميل…"
"title": َفْعِيلُ Hydra",
"installation_id": ُعَرِّفُ التَّثْبِيتِ:",
"enter_activation_code": َدْخِلْ رَمْزَ التَّفْعِيلِ",
"message": ِذَا كُنْتَ لَا تَعْرِفُ أَيْنَ تَطْلُبُ هَذَا، فَلا يَجِبُ أَنْ تَكُونَ لَدَيْكَ.",
"activate": َفْعِيلٌ",
"loading": َارٍ التَّحْمِيلُ..."
},
"downloads": {
"resume": "استئناف",
"pause": "إيقاف مؤقت",
"eta": "الوقت المتبقي {{eta}}",
"paused": توقفة مؤقتًا",
"verifying": "جار التحقق…",
"completed": "اكتمل",
"cancel": "إلغاء",
"filter": "تصفية الألعاب التي تم تنزيلها",
"remove": "إزالة",
"downloading_metadata": "جار تنزيل البيانات الوصفية…",
"deleting": "جار حذف المثبت…",
"delete": "إزالة المثبت",
"delete_modal_title": "هل أنت متأكد؟",
"delete_modal_description": "سيؤدي هذا إلى إزالة جميع ملفات التثبيت من جهاز الكمبيوتر الخاص بك",
"install": "تثبيت"
"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 بَعْدُ، لَكِنَّهُ لَيْسَ مُتَأَخِّرًا لِلْبَدْءِ.",
"checking_files": "جَارٍ التَّحَقُّقُ مِنَ الْمَلَفَّاتِ...",
"seeding": "الْبَذْرُ",
"stop_seeding": "إِيقَافُ الْبَذْرِ",
"resume_seeding": "اسْتِئْنَافُ الْبَذْرِ",
"options": "إِدَارَةٌ"
},
"settings": {
"downloads_path": سار التنزيلات",
"change": حديث",
"notifications": "الإشعارات",
"enable_download_notifications": ند اكتمال التنزيل",
"enable_repack_list_notifications": ند إضافة حزمة جديدة",
"real_debrid_api_token_label": مز واجهة برمجة التطبيقات (API) لـReal-Debrid ",
"quit_app_instead_hiding": "إنهاء هايدرا بدلاً من التصغير الى شريط الحالة",
"launch_with_system": شغيل هايدرا عند بدء تشغيل النظام",
"general": "عام",
"behavior": "السلوك",
"enable_real_debrid": "تفعيل Real-Debrid ",
"real_debrid_api_token_hint": "يمكنك الحصول على مفتاح API الخاص بك هنا",
"save_changes": "حفظ التغييرات"
"downloads_path": َسَارُ التَّنْزِيلَاتِ",
"change": َحْدِيثٌ",
"notifications": "الإِشْعَارَاتُ",
"enable_download_notifications": ِنْدَ اكْتِمَالِ التَّنْزِيلِ",
"enable_repack_list_notifications": ِنْدَ إِضَافَةِ إِصْدَارٍ مُعَادٍ تَغْلِيفِهِ جَدِيدٍ",
"real_debrid_api_token_label": َمْزُ واجهة برمجة التطبيقات Real-Debrid",
"quit_app_instead_hiding": "لا تُخْفِ Hydra عِنْدَ الإِغْلَاقِ",
"launch_with_system": َشْغِيلُ Hydra عِنْدَ بَدْءِ النِّظَامِ",
"general": َامٌ",
"behavior": "سُلُوكٌ",
"download_sources": "مَصَادِرُ التَّنْزِيلِ",
"language": "اللُّغَةُ",
"real_debrid_api_token": "رَمْزُ واجهة برمجة التطبيقات",
"enable_real_debrid": "تَمْكِينُ Real-Debrid",
"real_debrid_description": "Real-Debrid هُوَ مُنَزِّلٌ غَيْرُ مَقْيُودٍ يَتِيحُ لَكَ تَنْزِيلَ الْمَلَفَّاتِ بِسُرْعَةٍ، مَحْدُودٌ فَقَطْ بِسُرْعَةِ الْإِنْتَرْنِتِ لَدَيْكَ.",
"real_debrid_invalid_token": "رَمْزُ واجهة برمجة التطبيقات غَيْرُ صَالِحٍ",
"real_debrid_api_token_hint": "يُمْكِنُكَ الْحُصُولُ عَلَى رَمْزِ واجهة برمجة التطبيقات <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_source_url": "عُنْوَانُ مَصْدَرِ التَّنْزِيلِ",
"add_download_source_description": "أَدْخِلْ عُنْوَانَ URL لِمِلَفٍّ .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 صَالِحًا",
"found_download_option_zero": "لَمْ يُعْثَرْ عَلَى خِيَارِ تَنْزِيلٍ",
"found_download_option_one": "عُثِرَ عَلَى {{countFormatted}} خِيَارِ تَنْزِيلٍ",
"found_download_option_other": "عُثِرَ عَلَى {{countFormatted}} خِيَارَاتِ تَنْزِيلٍ",
"import": "اسْتِيرَادٌ",
"public": "عَامٌ",
"private": "خَاصٌ",
"friends_only": "الْأَصْدِقَاءُ فَقَطْ",
"privacy": "الْخُصُوصِيَّةُ",
"profile_visibility": "رُؤْيَةُ الْمَلَفِّ الشَّخْصِيِّ",
"profile_visibility_description": "اخْتَرْ مَنْ يُمْكِنُهُ رُؤْيَةُ مَلَفِّكَ الشَّخْصِيِّ وَمَكْتَبَتِكَ",
"required_field": "هَذَا الْحَقْلُ مَطْلُوبٌ",
"source_already_exists": "تَمَّتْ إِضَافَةُ هَذَا الْمَصْدَرِ مِنْ قَبْلُ",
"must_be_valid_url": "يَجِبُ أَنْ يَكُونَ الْمَصْدَرُ عُنْوَانَ URL صَالِحًا",
"blocked_users": "الْمُسْتَخْدِمُونَ الْمَحْظُورُونَ",
"user_unblocked": "تَمَّ إِزَالَةُ حَظْرِ الْمُسْتَخْدِمِ",
"enable_achievement_notifications": "عِنْدَ فَتْحِ إِنْجَازٍ",
"launch_minimized": "تَشْغِيلُ Hydra مُصَغَّرًا",
"disable_nsfw_alert": "تَعْطِيلُ تَنْبِيهِ الْمُحْتَوَى غَيْرِ اللَّائِقِ",
"seed_after_download_complete": "الْبَذْرُ بَعْدَ اكْتِمَالِ التَّنْزِيلِ",
"show_hidden_achievement_description": "إِظْهَارُ وَصْفِ الإِنْجَازَاتِ الْمَخْفِيَّةِ قَبْلَ فَتْحِهَا"
},
"notifications": {
"download_complete": "تم التحميل",
"game_ready_to_install": "{{title}} جاهزة للتثبيت",
"repack_list_updated": "قائمة التجميعات المحدثة",
"repack_count_one": "{{count}} حزمة مضافة",
"repack_count_other": "{{count}} حزم مُضافة"
"download_complete": "اكْتِمَالُ التَّنْزِيلِ",
"game_ready_to_install": "{{title}} جَاهِزٌ لِلتَّثْبِيتِ",
"repack_list_updated": "تَمَّ تَحْدِيثُ قَائِمَةِ الإِصْدَارَاتِ الْمُعَادَةِ تَغْلِيفُهَا",
"repack_count_one": "{{count}} إِصْدَارٌ مُعَادٌ تَغْلِيفُهُ أُضِيفَ",
"repack_count_other": "{{count}} إِصْدَارَاتٌ مُعَادَةٌ تَغْلِيفُهَا أُضِيفَتْ",
"new_update_available": "الْإِصْدَارُ {{version}} مَتَوَفِّرٌ",
"restart_to_install_update": "أَعِدْ تَشْغِيلَ Hydra لِتَثْبِيتِ التَّحْدِيثِ",
"notification_achievement_unlocked_title": "تَمَّ فَتْحُ إِنْجَازٍ لِـ {{game}}",
"notification_achievement_unlocked_body": "{{achievement}} وَ{{count}} أُخْرَى تَمَّ فَتْحُهَا"
},
"system_tray": {
"open": تح هايدرا",
"quit": "خروج"
"open": َتْحُ Hydra",
"quit": "الْخُرُوجُ"
},
"game_card": {
"no_downloads": "لا توجد تنزيلات متاحة"
"no_downloads": َا تَوْجَدُ تَنْزِيلَاتٌ مَتَوَفِّرَةٌ"
},
"binary_not_found_modal": {
"title": "البرامج غير مثبتة",
"description": م يتم العثور على ملفات Wine أو Lutris التنفيذية على نظامك",
"instructions": حقق من الطريقة الصحيحة لتثبيت أي منها على توزيعة Linux الخاصة بك حتى تعمل اللعبة بشكل طبيعي"
"title": "الْبَرَامِجُ غَيْرُ مُثَبَّتَةٍ",
"description": َمْ يُعْثَرْ عَلَى مَلَفَّاتٍ تَنْفِيذِيَّةٍ لِـ Wine أَوْ Lutris عَلَى نِظَامِكَ",
"instructions": َحَقَّقْ مِنَ الطَّرِيقَةِ الصَّحِيحَةِ لِتَثْبِيتِ أَيٍّ مِنْهُمَا عَلَى تَوْزِيعَةِ Linux لَدَيْكَ لِتَعْمَلَ اللُّعْبَةُ بِشَكْلٍ طَبِيعِيٍّ"
},
"modal": {
"close": ر إغلاق"
"close": ِرُّ الإِغْلَاقِ"
},
"forms": {
"toggle_password_visibility": "تَبْدِيلُ رُؤْيَةِ كَلِمَةِ الْمَرُورِ"
},
"user_profile": {
"amount_hours": "{{amount}} سَاعَاتٌ",
"amount_minutes": "{{amount}} دَقَائِقُ",
"last_time_played": "آخِرُ مَرَّةٍ لُعِبَتْ {{period}}",
"activity": "النَّشَاطُ الْأَخِيرُ",
"library": "الْمَكْتَبَةُ",
"total_play_time": "إِجْمَالِيُّ وَقْتِ اللَّعِبِ",
"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": "مَكْتَبَتُكَ مُرْتَبِطَةٌ بِحِسَابِكَ الْحَالِيِّ. عِنْدَ تَسْجِيلِ الْخُرُوجِ، لَنْ تَكُونَ مَكْتَبَتُكَ مَرْئِيَّةً بَعْدَ الْآنِ، وَلَنْ يَتِمَّ حِفْظُ أَيِّ تَقَدُّمٍ. هَلْ تُرِيدُ الْمُتَابَعَةَ مَعَ تَسْجِيلِ الْخُرُوجِ؟",
"add_friends": "إِضَافَةُ الْأَصْدِقَاءِ",
"add": "إِضَافَةٌ",
"friend_code": "رَمْزُ الصَّدِيقِ",
"see_profile": "رُؤْيَةُ الْمَلَفِّ الشَّخْصِيِّ",
"sending": "جَارٍ الْإِرْسَالُ",
"friend_request_sent": "تَمَّ إِرْسَالُ طَلَبِ الصَّدَاقَةِ",
"friends": "الْأَصْدِقَاءُ",
"friends_list": "قَائِمَةُ الْأَصْدِقَاءِ",
"user_not_found": "الْمُسْتَخْدِمُ غَيْرُ مَوْجُودٍ",
"block_user": "حَظْرُ الْمُسْتَخْدِمِ",
"add_friend": "إِضَافَةُ صَدِيقٍ",
"request_sent": "تَمَّ إِرْسَالُ الطَّلَبِ",
"request_received": "تَمَّ اسْتِقْبَالُ الطَّلَبِ",
"accept_request": "قَبُولُ الطَّلَبِ",
"ignore_request": "تَجَاهُلُ الطَّلَبِ",
"cancel_request": "إِلْغَاءُ الطَّلَبِ",
"undo_friendship": "إِلْغَاءُ الصَّدَاقَةِ",
"request_accepted": "تَمَّ قَبُولُ الطَّلَبِ",
"user_blocked_successfully": "تَمَّ حَظْرُ الْمُسْتَخْدِمِ بِنَجَاحٍ",
"user_block_modal_text": "سَيُؤَدِّي هَذَا إِلَى حَظْرِ {{displayName}}",
"blocked_users": "الْمُسْتَخْدِمُونَ الْمَحْظُورُونَ",
"unblock": "إِزَالَةُ الْحَظْرِ",
"no_friends_added": "لَيْسَ لَدَيْكَ أَصْدِقَاءٌ مُضَافُونَ",
"pending": "قَيْدُ الْانْتِظَارِ",
"no_pending_invites": "لَيْسَ لَدَيْكَ دَعَوَاتٌ قَيْدُ الْانْتِظَارِ",
"no_blocked_users": "لَيْسَ لَدَيْكَ مُسْتَخْدِمُونَ مَحْظُورُونَ",
"friend_code_copied": "تَمَّ نَسْخُ رَمْزِ الصَّدِيقِ",
"undo_friendship_modal_text": "سَيُؤَدِّي هَذَا إِلَى إِلْغَاءِ صَدَاقَتِكَ مَعَ {{displayName}}",
"privacy_hint": "لِتَعْدِيلِ مَنْ يُمْكِنُهُ رُؤْيَةُ هَذَا، اذْهَبْ إِلَى <0>الإعْدَادَاتِ</0>",
"locked_profile": "هَذَا الْمَلَفُّ الشَّخْصِيُّ خَاصٌّ",
"image_process_failure": "فَشَلَ أَثْنَاءَ مُعَالَجَةِ الصُّورَةِ",
"required_field": "هَذَا الْحَقْلُ مَطْلُوبٌ",
"displayname_min_length": "يَجِبُ أَنْ يَكُونَ اسْمُ الْعَرْضِ عَلَى الْأَقَلِّ 3 أَحْرُفٍ",
"displayname_max_length": "يَجِبُ أَنْ يَكُونَ اسْمُ الْعَرْضِ عَلَى الْأَكْثَرِ 50 حَرْفًا",
"report_profile": "تَقْرِيرٌ عَنْ هَذَا الْمَلَفِّ الشَّخْصِيِّ",
"report_reason": "لِمَاذَا تُقَدِّمُ تَقْرِيرًا عَنْ هَذَا الْمَلَفِّ الشَّخْصِيِّ؟",
"report_description": "مَعْلُومَاتٌ إِضَافِيَّةٌ",
"report_description_placeholder": "مَعْلُومَاتٌ إِضَافِيَّةٌ",
"report": "تَقْرِيرٌ",
"report_reason_hate": "خِطَابُ الْكُرْهِ",
"report_reason_sexual_content": "مُحْتَوًى جِنْسِيٌّ",
"report_reason_violence": "عُنْفٌ",
"report_reason_spam": "رَاسِلَةٌ عَشْوَائِيَّةٌ",
"report_reason_other": "آخَرُ",
"profile_reported": "تَمَّ تَقْرِيرُ الْمَلَفِّ الشَّخْصِيِّ",
"your_friend_code": "رَمْزُ صَدِيقِكَ:",
"upload_banner": "رَفْعُ لَافِتَةٍ",
"uploading_banner": "جَارٍ رَفْعُ اللَّافِتَةِ...",
"background_image_updated": "تَمَّ تَحْدِيثُ صُورَةِ الْخَلْفِيَّةِ",
"stats": "الإحْصَائِيَّاتُ",
"achievements": "الإِنْجَازَاتُ",
"games": "الْأَلْعَابُ",
"top_percentile": "الْأَفْضَلُ {{percentile}}%",
"ranking_updated_weekly": "التَّرْتِيبُ يُحَدَّثُ أُسْبُوعِيًّا",
"playing": "جَارِي اللَّعِبُ {{game}}",
"achievements_unlocked": "الإِنْجَازَاتُ الْمَفْتُوحَةُ",
"earned_points": "النَّقَاطُ الْمَكْسُوبَةُ",
"show_achievements_on_profile": "عَرْضُ إِنْجَازَاتِكَ عَلَى مَلَفِّكَ الشَّخْصِيِّ",
"show_points_on_profile": "عَرْضُ النَّقَاطِ الْمَكْسُوبَةِ عَلَى مَلَفِّكَ الشَّخْصِيِّ"
},
"achievement": {
"achievement_unlocked": "إِنْجَازٌ مَفْتُوحٌ",
"user_achievements": "إِنْجَازَاتُ {{displayName}}",
"your_achievements": "إِنْجَازَاتُكَ",
"unlocked_at": "تَمَّ الْفَتْحُ فِي: {{date}}",
"subscription_needed": "يَحْتَاجُ اشْتِرَاكُ Hydra Cloud لِرُؤْيَةِ هَذَا الْمُحْتَوَى",
"new_achievements_unlocked": "تَمَّ فَتْحُ {{achievementCount}} إِنْجَازَاتٍ جَدِيدَةٍ مِنْ {{gameCount}} أَلْعَابٍ",
"achievement_progress": "{{unlockedCount}}/{{totalCount}} إِنْجَازَاتٍ",
"achievements_unlocked_for_game": "تَمَّ فَتْحُ {{achievementCount}} إِنْجَازَاتٍ جَدِيدَةٍ لِـ {{gameTitle}}",
"hidden_achievement_tooltip": "هَذَا إِنْجَازٌ مَخْفِيٌّ",
"achievement_earn_points": "اكْسِبْ {{points}} نَقَاطًا بِهَذَا الإِنْجَازِ",
"earned_points": "النَّقَاطُ الْمَكْسُوبَةُ:",
"available_points": "النَّقَاطُ الْمُتَوَفِّرَةُ:",
"how_to_earn_achievements_points": "كَيْفَ تَكْسِبُ نَقَاطَ الإِنْجَازَاتِ؟"
},
"hydra_cloud": {
"subscription_tour_title": "اشْتِرَاكُ Hydra Cloud",
"subscribe_now": "اشْتَرِكِ الْآنَ",
"cloud_saving": "حِفْظٌ سَحَابِيٌّ",
"cloud_achievements": "حِفْظُ إِنْجَازَاتِكَ فِي السَّحَابَةِ",
"animated_profile_picture": "صُورُ الْمَلَفِّ الشَّخْصِيِّ الْمُتَحَرِّكَةِ",
"premium_support": "الدَّعْمُ الْمُتَقَدِّمُ",
"show_and_compare_achievements": "عَرْضٌ وَمُقَارَنَةُ إِنْجَازَاتِكَ مَعَ مُسْتَخْدِمِينَ آخَرِينَ",
"animated_profile_banner": "لَافِتَةُ الْمَلَفِّ الشَّخْصِيِّ الْمُتَحَرِّكَةِ",
"hydra_cloud": "Hydra Cloud",
"hydra_cloud_feature_found": "لَقَدْ اكْتَشَفْتَ مِيزَةً مِنْ Hydra Cloud!",
"learn_more": "تَعَلَّمْ أَكْثَرَ"
}
}

View File

@@ -29,7 +29,7 @@
"need_help": "Имате нужда от помощ??"
},
"header": {
"search": "Търси игри",
"search": "Търсене",
"home": "Начало",
"catalogue": "Каталог",
"downloads": "Изтегляния",
@@ -46,10 +46,20 @@
"checking_files": "Проверка на {{title}} файловете… ({{percentage}} готово)"
},
"catalogue": {
"next_page": "Следваща страница",
"previous_page": "Предишна страница"
"search": "Филтър…",
"developers": "Разработчици",
"genres": "Жанрове",
"tags": "Тагове",
"publishers": "Издатели",
"download_sources": "Източници за изтегляне",
"result_count": "{{resultCount}} резултати",
"filter_count": "{{filterCount}} налични",
"clear_filters": "Изчисти {{filterCount}} избрани"
},
"game_details": {
"launch_options": "Опции за стартиране",
"launch_options_description": "Напредналите потребители могат да въведат модификации на своите опции за стартиране (экспериментальный)",
"launch_options_placeholder": "Няма зададен параметър",
"open_download_options": "Варианти за изтегляне",
"download_options_zero": "Няма варианти за изтегляне",
"download_options_one": "{{count}} варианти за изтегляне",
@@ -65,7 +75,7 @@
"calculating_eta": "Калкулиране на оставащо време…",
"downloading_metadata": "Изтегляне на метадата…",
"filter": "Филтрирай repacks",
"requirements": "Състемни изисквания",
"requirements": "Системни изисквания",
"minimum": "Минимални",
"recommended": "Препоръчителни",
"paused": "Паузирано",
@@ -79,8 +89,8 @@
"add_to_library": "Добави в библиотеката",
"remove_from_library": "Премахни от библиотеката",
"no_downloads": "Няма налични изтегляния",
"play_time": "Играно {{amount}}",
"last_time_played": "Последно играно {{period}}",
"play_time": "Игрално време {{amount}}",
"last_time_played": "Последно пускане {{period}}",
"not_played_yet": "Не сте играли {{title}} все още",
"next_suggestion": "Следващо предложение",
"play": "Пускане",
@@ -110,7 +120,7 @@
"remove_from_library_description": "Това ще премахне {{game}} от Библиотеката",
"options": "Опции",
"executable_section_title": "Стартиращ файл",
"executable_section_description": "Пътят на файла, който ще се изпълни, когато се щракне върху \"Играй\"",
"executable_section_description": "Пътят на файла, който ще се изпълни, когато се щракне върху \"Пускане\"",
"downloads_secion_title": "Свалени",
"downloads_section_description": "Вижте актуализации или други версии на тази игра",
"danger_zone_section_title": "Опасна зона",
@@ -162,7 +172,7 @@
"no_download_option_info": "Няма налични данни",
"backup_deletion_failed": "Неуспешно изтриване на резервно копие",
"max_number_of_artifacts_reached": "Достигнат максимален брой резервни копия за тази игра",
"achievements_not_sync": "Постиженията ви не са синхронизирани",
"achievements_not_sync": "Постиженията не са синхронизирани",
"manage_files_description": "Управлявайте кои файлове ще бъдат архивирани и възстановени",
"select_folder": "Избери папка",
"backup_from": "Резервно копие от {{date}}",
@@ -177,6 +187,10 @@
"loading": "Зареждане…"
},
"downloads": {
"seeding": "Сийдване",
"stop_seeding": "Спри сийдването",
"resume_seeding": "Продължи сийдването",
"options": "Управление",
"resume": "Продължи",
"pause": "Пауза",
"eta": "Conclusion {{eta}}",
@@ -198,10 +212,12 @@
"downloads_completed": "Приключени",
"queued": "В опашка",
"no_downloads_title": "Толкова е празно",
"no_downloads_description": "Все още не сте изтеглили нищо с Hydra, но никога не е късно да започнете..",
"no_downloads_description": "Все още не сте изтеглили нищо с Hydra, но никога не е късно да започнете...",
"checking_files": "Проверка на файлове…"
},
"settings": {
"seed_after_download_complete": "Сийд след завършване на изтеглянето",
"show_hidden_achievement_description": "Показвай описанието на скритите постижения преди отключването им",
"downloads_path": "Инсталационен път",
"change": "Актуализиране",
"notifications": "Известия",
@@ -210,7 +226,7 @@
"real_debrid_api_token_label": "Real-Debrid API токен",
"quit_app_instead_hiding": "Не скривайте Hydra при затваряне",
"launch_with_system": "Стартиране на Hydra при стартиране на системата",
"general": "Общ",
"general": "Общи",
"behavior": "Поведение",
"download_sources": "Източници за изтегляне",
"language": "Език",
@@ -288,12 +304,22 @@
"toggle_password_visibility": "Превключване на видимостта на паролата"
},
"user_profile": {
"stats": "Статистики",
"achievements": "Постижения",
"games": "Игри",
"top_percentile": "Топ {{percentile}}%",
"ranking_updated_weekly": "Класацията се актуализира седмично",
"playing": "Играе {{game}}",
"achievements_unlocked": "Отключени постижения",
"earned_points": "Спечелени точки",
"show_achievements_on_profile": "Показвай своите постижения в профила",
"show_points_on_profile": "Показвай спечелените точки в профила",
"amount_hours": "{{amount}} часове",
"amount_minutes": "{{amount}} минути",
"last_time_played": "Последно играно {{period}}",
"activity": "Скорошна активност",
"library": "Библиотека",
"total_play_time": "Общо време за игра: {{amount}}",
"total_play_time": "Общо време за игра",
"no_recent_activity_title": "Хмм… няма нищо тук",
"no_recent_activity_description": "Не сте играли игри напоследък. Време е да промените това.!",
"display_name": "Показване на името",
@@ -331,7 +357,7 @@
"blocked_users": "Блокирани потребители",
"unblock": "Отблокирай",
"no_friends_added": "Не сте добавили приятели",
"pending": "Чакащо",
"pending": "Чакащи",
"no_pending_invites": "Нямате чакащи покани",
"no_blocked_users": "Нямате блокирани потребители",
"friend_code_copied": "Приятелския код е копиран",
@@ -359,16 +385,24 @@
"background_image_updated": "Обновено фоново изображение"
},
"achievement": {
"hidden_achievement_tooltip": "Това е скрито постижение",
"achievement_earn_points": "Спечели {{points}} точки с това постижение",
"earned_points": "Спечелени точки:",
"available_points": "Налични точки:",
"how_to_earn_achievements_points": "Как да спечелиш точки за постижения?",
"achievement_unlocked": "Постижението е отключено",
"user_achievements": "Постиженията на {{displayName}} ",
"your_achievements": "Вашите Постижения",
"unlocked_at": "Отключено на:",
"unlocked_at": "Отключено на: {{date}}",
"subscription_needed": "Необходим е абонамент за Hydra Cloud, за да видите това съдържание",
"new_achievements_unlocked": "Отключени {{achievementCount}} нови постижения от {{gameCount}} игра",
"achievement_progress": "{{unlockedCount}}/{{totalCount}} постижения",
"achievements_unlocked_for_game": "Отключени {{achievementCount}} нови постижения за {{gameTitle}}"
},
"tour": {
"hydra_cloud": {
"hydra_cloud": "Hydra Cloud",
"hydra_cloud_feature_found": "Открихте функция на Hydra Cloud!",
"learn_more": "Научете повече",
"subscription_tour_title": "Hydra Cloud Абонамент",
"subscribe_now": "Абонирай се сега",
"cloud_saving": "Запазване в облака",

View File

@@ -224,7 +224,7 @@
"last_time_played": "Última partida {{period}}",
"activity": "Activitat recent",
"library": "Biblioteca",
"total_play_time": "Temps total de joc:{{amount}}",
"total_play_time": "Temps total de joc",
"no_recent_activity_title": "Hmmm… encara no res",
"no_recent_activity_description": "No has jugat a cap joc recentment. És el moment de canviar-ho!",
"display_name": "Nom de visualització",

View File

@@ -6,7 +6,11 @@
"home": {
"featured": "Doporučené",
"surprise_me": "Překvap mě",
"no_results": "Výsledek nenalezen"
"no_results": "Výsledek nenalezen",
"start_typing": "Začni psát pro vyhledávání...",
"hot": "Teď populární",
"weekly": "📅 Nejlepší hry týdne",
"achievements": "🏆 Hry k překonání"
},
"sidebar": {
"catalogue": "Katalog",
@@ -20,7 +24,9 @@
"home": "Domov",
"queued": "{{title}} (V řadě)",
"game_has_no_executable": "Hra nemá zvolen žádný spustitelný soubor",
"sign_in": "Přihlásit se"
"sign_in": "Přihlásit se",
"friends": "Přátelé",
"need_help": "Potřebujete pomoc?"
},
"header": {
"search": "Vyhledat hry",
@@ -113,7 +119,54 @@
"download_paused": "Stahování pozastaveno",
"last_downloaded_option": "Poslední stažená možnost",
"create_shortcut_success": "Zástupce vytvořen úspěšně",
"create_shortcut_error": "Chyba při pokusu vytvořit zástupce"
"create_shortcut_error": "Chyba při pokusu vytvořit zástupce",
"nsfw_content_title": "Tahle hra obsahuje nevhodný obsah",
"nsfw_content_description": "{{title}} obsahuje obsah, který by nemusel být vhodný pro všechny věkové skupiny. Jste si jisti, že chcete pokračovat?",
"allow_nsfw_content": "Pokračovat",
"refuse_nsfw_content": "Jít zpět",
"stats": "Statistiky",
"download_count": "Stažení",
"player_count": "Aktivní hráči",
"download_error": "Tahle možnost stažení není dostupná",
"download": "Stáhnout",
"executable_path_in_use": "Spustitelný soubor již používá \"{{game}}\"",
"warning": "Varování",
"hydra_needs_to_remain_open": "Pro tohle stažení, musí Hydra zůstat otevřená až do konce stahování. Pokud Hydru zavřete dříve, postup stahování bude ztracen.",
"achievements": "Achievementy",
"achievements_count": "Achievementy {{unlockedCount}}/{{achievementsCount}}",
"cloud_save": "Uložení v cloudu",
"cloud_save_description": "Uložte si svůj postup v cloud a pokračujte v hraní na jakémkoliv zářízení",
"backups": "Zálohy",
"install_backup": "Nainstalovat",
"delete_backup": "Smazat",
"create_backup": "Vytvořit zálohu",
"last_backup_date": "Poslední záloha vytvořena {{date}}",
"no_backup_preview": "Žádné zálohy nebyly nalezeny pro tuhle hru",
"restoring_backup": "Obnovuji zálohu ({{progress}} hotovo)...",
"uploading_backup": "Nahrávání zálohy...",
"no_backups": "Nemáte zatím vytvořeny žádné zálohy pro tuto hru",
"backup_uploaded": "Záloha nahrána",
"backup_deleted": "Záloha odstraněna",
"backup_restored": "Záloha obnovena",
"see_all_achievements": "Zobrazit všechny achievementy",
"sign_in_to_see_achievements": "Musíte se přihlásit pro zobrazení achievementů",
"mapping_method_automatic": "Automaticky",
"mapping_method_manual": "Manuálně",
"mapping_method_label": "Metoda mapování",
"files_automatically_mapped": "Soubory automaticky zmapovány",
"no_backups_created": "Žádné zálohy nebyly vytvořeny pro tuto hru",
"manage_files": "Spravovat soubory",
"loading_save_preview": "Hledání uložených her...",
"wine_prefix": "Wine Prefix",
"wine_prefix_description": "Wine Prefix použit pro spuštění této hry",
"no_download_option_info": "Žádné informace nejsou dostupny",
"backup_deletion_failed": "Nepovedlo se odstranit zálohu",
"max_number_of_artifacts_reached": "Dosáhli jste maximálního počtu záloh pro tuto hru",
"achievements_not_sync": "Vaše achievementy nejsou synchronizovány",
"manage_files_description": "Spravovat, které soubory budou zálohovány a obnoveny",
"select_folder": "Vybrat složku",
"backup_from": "Zálohy z {{date}}",
"custom_backup_location_set": "Vlastní umístění záloh nastaveno"
},
"activation": {
"title": "Aktivovat hydru",
@@ -189,7 +242,21 @@
"found_download_option_zero": "Nenalezena žádná možnost stahování",
"found_download_option_one": "Nalezena {{countFormatted}} možnost stahování",
"found_download_option_other": "Nalezeny {{countFormatted}} možnosti stahování",
"import": "Importovat"
"import": "Importovat",
"public": "Veřejné",
"private": "Soukromé",
"friends_only": "Pouze přátelé",
"privacy": "Soukromí",
"profile_visibility": "Viditelnost profilu",
"profile_visibility_description": "Vyberte si, kdo může vidět váš profil a knihovnu",
"required_field": "Toto pole je povinné",
"source_already_exists": "Tento zdroj byl již přidán",
"must_be_valid_url": "Zdroj musí být platký odkaz URL",
"blocked_users": "Zablokovaní uživatelé",
"user_unblocked": "Uživatel byl odblokován",
"enable_achievement_notifications": "Když je odemknut achievement",
"launch_minimized": "Spustit v minimalizovaném režimu",
"disable_nsfw_alert": "Deaktivovat upozornění na nevhodný obsah"
},
"notifications": {
"download_complete": "Stahování dokončeno",
@@ -198,7 +265,9 @@
"repack_count_one": "{{count}} repack přidán",
"repack_count_other": "{{count}} repacky přidány",
"new_update_available": "Version {{version}} je dostupná",
"restart_to_install_update": "Restartuj Hydru pro aktualizaci"
"restart_to_install_update": "Restartuj Hydru pro aktualizaci",
"notification_achievement_unlocked_title": "Achievement pro {{game}} byl odemknut",
"notification_achievement_unlocked_body": "{{achievement}} a dalších {{count}} byly odemknuty"
},
"system_tray": {
"open": "Otevřít Hydru",
@@ -224,7 +293,7 @@
"last_time_played": "Naposledy hráno {{period}}",
"activity": "Nedávná aktivita",
"library": "Knihovna",
"total_play_time": "Celkový odehraný čas: {{amount}}",
"total_play_time": "Celkový odehraný čas",
"no_recent_activity_title": "Hmmm… nic tu není",
"no_recent_activity_description": "V poslední době si nehrál žádnout hru, můžeš to ale napravit!",
"display_name": "Zobrazované jméno",
@@ -266,6 +335,47 @@
"no_pending_invites": "Nemáte žádné příchozí žádosti",
"no_blocked_users": "Nemáte nikoho zablokovaného",
"friend_code_copied": "Kód přítele zkopírován",
"undo_friendship_modal_text": "Tímto zrušíte své přátelství s {{displayName}}"
"undo_friendship_modal_text": "Tímto zrušíte své přátelství s {{displayName}}",
"privacy_hint": "Pro změnu toho, kdo tohle může vidět, jděte do <0>Nastavení</0>",
"locked_profile": "Tento profil je soukromý",
"image_process_failure": "Nastala chyba při zpracování obrázku",
"required_field": "Toto pole je povinné",
"displayname_min_length": "Uživatelské jméno musí být minimálně 3 znaky dlouhé",
"displayname_max_length": "Uživatelské jméno musí být maximálně 50 znaků dlouhé",
"report_profile": "Nahlásit profil",
"report_reason": "Proč nahlašujete tento profil?",
"report_description": "Přídavné informace",
"report_description_placeholder": "Přídavné informace",
"report": "Nahlásit",
"report_reason_hate": "Nenávistné projevy",
"report_reason_sexual_content": "Sexuální obsah",
"report_reason_violence": "Násilí",
"report_reason_spam": "Spam",
"report_reason_other": "Ostatní",
"profile_reported": "Profil nahlášen",
"your_friend_code": "Tvůj kód přítele:",
"upload_banner": "Nahrát banner profilu",
"uploading_banner": "Nahrávání banneru",
"background_image_updated": "Obrázek pozadí byl změněn"
},
"achievement": {
"achievement_unlocked": "Achievement odemčen",
"user_achievements": "Achievementy uživatele {{displayName}}",
"your_achievements": "Vaše achievementy",
"unlocked_at": "Odemčeno: {{date}}",
"subscription_needed": "Je vyžadováno předplatné Hydra Cloud pro zobrazení tohoto obsahu",
"new_achievements_unlocked": "Odemčeno {{achievementCount}} nových achievementů z {{gameCount}} her",
"achievement_progress": "{{unlockedCount}}/{{totalCount}} achievementů",
"achievements_unlocked_for_game": "Odemčeno {{achievementCount}} nových achievementů pro {{gameTitle}}"
},
"hydra_cloud": {
"subscription_tour_title": "Předplatné Hydra Cloud",
"subscribe_now": "Připojit se",
"cloud_saving": "Ukládání v cloudu",
"cloud_achievements": "Ukládejte vaše achievementy do cloudu",
"animated_profile_picture": "Animované profilové obrázky",
"premium_support": "Prémiová podpora",
"show_and_compare_achievements": "Zobraz a porovnej achievementy s ostatními uživateli",
"animated_profile_banner": "Animovaný banner na profilu"
}
}

View File

@@ -251,7 +251,7 @@
"last_time_played": "Sidst spillet {{period}}",
"activity": "Seneste aktivitet",
"library": "Bibliotek",
"total_play_time": "Samlet spiltid: {{amount}}",
"total_play_time": "Samlet spiltid",
"no_recent_activity_title": "Hmmm… ikke noget her",
"no_recent_activity_description": "Du har ikke spillet nogen spil for nyligt. Dét er det på tide at lave om på!",
"display_name": "Brugernavn",

View File

@@ -224,7 +224,7 @@
"last_time_played": "Zuletzt gespielt {{period}}",
"activity": "Letzte Aktivität",
"library": "Bibliothek",
"total_play_time": "Gesamtspielzeit: {{amount}}",
"total_play_time": "Gesamtspielzeit",
"no_recent_activity_title": "Hmmm… hier ist nichts",
"no_recent_activity_description": "Du hast in letzter Zeit keine Spiele gespielt. Es wird Zeit das zu ändern!",
"display_name": "Anzeigename",

View File

@@ -46,8 +46,15 @@
"checking_files": "Checking {{title}} files… ({{percentage}} complete)"
},
"catalogue": {
"next_page": "Next page",
"previous_page": "Previous page"
"search": "Filter…",
"developers": "Developers",
"genres": "Genres",
"tags": "Tags",
"publishers": "Publishers",
"download_sources": "Download sources",
"result_count": "{{resultCount}} results",
"filter_count": "{{filterCount}} available",
"clear_filters": "Clear {{filterCount}} selected"
},
"game_details": {
"open_download_options": "Open download options",
@@ -160,14 +167,24 @@
"loading_save_preview": "Searching for save games…",
"wine_prefix": "Wine Prefix",
"wine_prefix_description": "The Wine prefix used to run this game",
"launch_options": "Launch Options",
"launch_options_description": "Advanced users may choose to enter modifications to their launch options (experimental feature)",
"launch_options_placeholder": "No parameter specified",
"no_download_option_info": "No information available",
"backup_deletion_failed": "Failed to delete backup",
"max_number_of_artifacts_reached": "Maximum number of backups reached for this game",
"achievements_not_sync": "Your achievements are not synchronized",
"achievements_not_sync": "See how to synchronize your achievements",
"manage_files_description": "Manage which files will be backed up and restored",
"select_folder": "Select folder",
"backup_from": "Backup from {{date}}",
"custom_backup_location_set": "Custom backup location set"
"custom_backup_location_set": "Custom backup location set",
"no_directory_selected": "No directory selected",
"no_write_permission": "Cannot download into this directory. Click here to learn more.",
"reset_achievements": "Reset achievements",
"reset_achievements_description": "This will reset all achievements for {{game}}",
"reset_achievements_title": "Are you sure?",
"reset_achievements_success": "Achievements successfully reset",
"reset_achievements_error": "Failed to reset achievements"
},
"activation": {
"title": "Activate Hydra",
@@ -200,7 +217,11 @@
"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…"
"checking_files": "Checking files…",
"seeding": "Seeding",
"stop_seeding": "Stop seeding",
"resume_seeding": "Resume seeding",
"options": "Manage"
},
"settings": {
"downloads_path": "Downloads path",
@@ -257,7 +278,25 @@
"user_unblocked": "User has been unblocked",
"enable_achievement_notifications": "When an achievement is unlocked",
"launch_minimized": "Launch Hydra minimized",
"disable_nsfw_alert": "Disable NSFW alert"
"disable_nsfw_alert": "Disable NSFW alert",
"seed_after_download_complete": "Seed after download complete",
"show_hidden_achievement_description": "Show hidden achievements description before unlocking them",
"account": "Account",
"no_users_blocked": "You have no blocked users",
"subscription_active_until": "Your Hydra Cloud is active until {{date}}",
"manage_subscription": "Manage subscription",
"update_email": "Update email",
"update_password": "Update password",
"current_email": "Current email:",
"no_email_account": "You have not set an email yet",
"account_data_updated_successfully": "Account data updated successfully",
"renew_subscription": "Renew Hydra Cloud",
"subscription_expired_at": "Your subscription expired at {{date}}",
"no_subscription": "Enjoy Hydra in the best possible way",
"become_subscriber": "Be Hydra Cloud",
"subscription_renew_cancelled": "Automatic renewal is disabled",
"subscription_renews_on": "Your subscription renews on {{date}}",
"bill_sent_until": "Your next bill will be sent until this day"
},
"notifications": {
"download_complete": "Download complete",
@@ -294,7 +333,7 @@
"last_time_played": "Last played {{period}}",
"activity": "Recent Activity",
"library": "Library",
"total_play_time": "Total playtime: {{amount}}",
"total_play_time": "Total playtime",
"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",
@@ -357,19 +396,34 @@
"your_friend_code": "Your friend code:",
"upload_banner": "Upload banner",
"uploading_banner": "Uploading banner…",
"background_image_updated": "Background image updated"
"background_image_updated": "Background image updated",
"stats": "Stats",
"achievements": "achievements",
"games": "Games",
"top_percentile": "Top {{percentile}}%",
"ranking_updated_weekly": "Ranking is updated weekly",
"playing": "Playing {{game}}",
"achievements_unlocked": "Achievements Unlocked",
"earned_points": "Earned points",
"show_achievements_on_profile": "Show your achievements on your profile",
"show_points_on_profile": "Show your earned points on your profile"
},
"achievement": {
"achievement_unlocked": "Achievement unlocked",
"user_achievements": "{{displayName}}'s Achievements",
"your_achievements": "Your Achievements",
"unlocked_at": "Unlocked at:",
"unlocked_at": "Unlocked at: {{date}}",
"subscription_needed": "A Hydra Cloud subscription is required to see this content",
"new_achievements_unlocked": "Unlocked {{achievementCount}} new achievements from {{gameCount}} games",
"achievement_progress": "{{unlockedCount}}/{{totalCount}} achievements",
"achievements_unlocked_for_game": "Unlocked {{achievementCount}} new achievements for {{gameTitle}}"
"achievements_unlocked_for_game": "Unlocked {{achievementCount}} new achievements for {{gameTitle}}",
"hidden_achievement_tooltip": "This is a hidden achievement",
"achievement_earn_points": "Earn {{points}} points with this achievement",
"earned_points": "Earned points:",
"available_points": "Available points:",
"how_to_earn_achievements_points": "How to earn achievements points?"
},
"tour": {
"hydra_cloud": {
"subscription_tour_title": "Hydra Cloud Subscription",
"subscribe_now": "Subscribe now",
"cloud_saving": "Cloud saving",
@@ -377,6 +431,9 @@
"animated_profile_picture": "Animated profile pictures",
"premium_support": "Premium Support",
"show_and_compare_achievements": "Show and compare your achievements to other users",
"animated_profile_banner": "Animated profile banner"
"animated_profile_banner": "Animated profile banner",
"hydra_cloud": "Hydra Cloud",
"hydra_cloud_feature_found": "You've just discovered a Hydra Cloud feature!",
"learn_more": "Learn More"
}
}

View File

@@ -46,8 +46,15 @@
"checking_files": "Verificando archivos de {{title}}… ({{percentage}} completado)"
},
"catalogue": {
"next_page": "Siguiente página",
"previous_page": "Pagina anterior"
"search": "Filtrar…",
"developers": "Desarrolladores",
"genres": "Géneros",
"tags": "Marcadores",
"publishers": "Editores",
"download_sources": "Fuentes de descarga",
"result_count": "{{resultCount}} resultados",
"filter_count": "{{filterCount}} disponibles",
"clear_filters": "Limpiar {{filterCount}} seleccionados"
},
"game_details": {
"open_download_options": "Ver opciones de descargas",
@@ -79,7 +86,7 @@
"add_to_library": "Agregar a la biblioteca",
"remove_from_library": "Eliminar de la biblioteca",
"no_downloads": "No hay descargas disponibles",
"play_time": "Jugado por {{amount}}",
"play_time": "Has jugado {{amount}}",
"last_time_played": "Jugado por última vez: {{period}}",
"not_played_yet": "Aún no has jugado a {{title}}",
"next_suggestion": "Siguiente sugerencia",
@@ -100,7 +107,7 @@
"open_screenshot": "Abrir captura {{number}}",
"download_settings": "Ajustes de descarga",
"downloader": "Método de descarga",
"select_executable": "Seleccionar ejecutable",
"select_executable": "Seleccionar",
"no_executable_selected": "No se seleccionó un ejecutable",
"open_folder": "Abrir carpeta",
"open_download_location": "Ver archivos descargados",
@@ -166,7 +173,9 @@
"manage_files_description": "Gestiona los archivos que serán respaldados y restaurados",
"select_folder": "Seleccionar carpeta",
"backup_from": "Copia de seguridad de {{date}}",
"custom_backup_location_set": "Se configuró la carpeta de copia de seguridad"
"custom_backup_location_set": "Se configuró la carpeta de copia de seguridad",
"clear": "Limpiar",
"no_directory_selected": "No se seleccionó un directorio"
},
"activation": {
"title": "Activar Hydra",
@@ -199,7 +208,11 @@
"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…"
"checking_files": "Verificando archivos…",
"seeding": "Seeding",
"stop_seeding": "Detener seeding",
"resume_seeding": "Continuar seeding",
"options": "Gestionar"
},
"settings": {
"downloads_path": "Ruta de descarga",
@@ -254,7 +267,11 @@
"must_be_valid_url": "La fuente debe ser una URL válida.",
"blocked_users": "Usuarios bloqueados",
"user_unblocked": "El usuario ha sido desbloqueado",
"enable_achievement_notifications": "Cuando un logro se desbloquea"
"enable_achievement_notifications": "Cuando un logro se desbloquea",
"launch_minimized": "Iniciar Hydra minimizado",
"disable_nsfw_alert": "Desactivar alerta NSFW",
"seed_after_download_complete": "Realizar seeding después de que se completa la descarga",
"show_hidden_achievement_description": "Ocultar descripción de logros ocultos antes de desbloquearlos"
},
"notifications": {
"download_complete": "Descarga completada",
@@ -291,7 +308,7 @@
"last_time_played": "Última vez jugado: {{period}}",
"activity": "Actividad reciente",
"library": "Biblioteca",
"total_play_time": "Total de tiempo jugado: {{amount}}",
"total_play_time": "Has jugado",
"no_recent_activity_title": "Que raro, no hay nada por acá...",
"no_recent_activity_description": "No has jugado ningún juego recientemente, ¡vamos a cambiar eso ahora!",
"display_name": "Nombre en pantalla",
@@ -304,7 +321,7 @@
"cancel": "Cancelar",
"successfully_signed_out": "Sesión cerrada exitosamente",
"sign_out": "Cerrar sesión",
"playing_for": "Jugando por {{amount}}",
"playing_for": "Llevas jugando {{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?",
"add_friends": "Añadir amigos",
"add": "Añadir",
@@ -354,17 +371,34 @@
"your_friend_code": "Tu código de amigo:",
"upload_banner": "Subir un banner",
"uploading_banner": "Subiendo banner…",
"background_image_updated": "Imagen de fondo actualizada"
"background_image_updated": "Imagen de fondo actualizada",
"playing": "Jugando {{game}}",
"achievements": "logros",
"achievements_unlocked": "Logros desbloqueados",
"earned_points": "Puntos Obtenidos",
"show_achievements_on_profile": "Mostrar tus logros en tu perfil",
"show_points_on_profile": "Mostrar tus puntos obtenidos en tu perfil",
"games": "Juegos",
"ranking_updated_weekly": "El Ranking se actualiza semanalmente",
"stats": "Estadísticas",
"top_percentile": "Top {{percentile}}%"
},
"achievement": {
"achievement_unlocked": "Logro desbloqueado",
"user_achievements": "Logros de {{displayName}}",
"your_achievements": "Tus Logros",
"unlocked_at": "Desbloqueado el:",
"subscription_needed": "Se necesita una suscripción a Hydra Cloud se necesita para ver este contenido",
"new_achievements_unlocked": "Desbloqueados {{achievementCount}} nuevos logros de {{gameCount}} juegos"
"unlocked_at": "Desbloqueado el: {{date}}",
"subscription_needed": "Se necesita una suscripción a Hydra Cloud necesita para ver este contenido",
"new_achievements_unlocked": "Desbloqueados {{achievementCount}} nuevos logros de {{gameCount}} juegos",
"achievement_progress": "{{unlockedCount}}/{{totalCount}} logros",
"achievements_unlocked_for_game": "Se han desbloqueado {{achievementCount}} nuevos logros de {{gameTitle}}",
"hidden_achievement_tooltip": "Este es un logro oculto",
"achievement_earn_points": "Obtén {{points}} puntos con este logro",
"earned_points": "Puntos obtenidos:",
"available_points": "Puntos disponibles:",
"how_to_earn_achievements_points": "¿Cómo obtener puntos de logros?"
},
"tour": {
"hydra_cloud": {
"subscription_tour_title": "Suscripción Hydra Cloud",
"subscribe_now": "Suscribirse ahora",
"cloud_saving": "Guardado en la nube",
@@ -372,6 +406,9 @@
"animated_profile_picture": "Fotos de perfil animadas",
"premium_support": "Soporte Premium",
"show_and_compare_achievements": "Muestra y compara tus logros con otros usuarios",
"animated_profile_banner": "Fondo de perfil animado"
"animated_profile_banner": "Fondo de perfil animado",
"hydra_cloud": "Hydra Cloud",
"hydra_cloud_feature_found": "¡Has descubierto una característica de Hydra Cloud!",
"learn_more": "Aprender más"
}
}

View File

@@ -290,7 +290,7 @@
"last_time_played": "Viimati mängitud {{period}}",
"activity": "Hiljutine aktiivsus",
"library": "Kogu",
"total_play_time": "Kogu mängitud aeg: {{amount}}",
"total_play_time": "Kogu mängitud aeg",
"no_recent_activity_title": "Hmmm… siin pole midagi",
"no_recent_activity_description": "Sa pole hiljuti ühtegi mängu mänginud. On aeg seda muuta!",
"display_name": "Kuvatav nimi",
@@ -359,11 +359,11 @@
"achievement_unlocked": "Saavutus avatud",
"user_achievements": "{{displayName}} saavutused",
"your_achievements": "Sinu saavutused",
"unlocked_at": "Avatud:",
"unlocked_at": "Avatud: {{date}}",
"subscription_needed": "Selle sisu nägemiseks on vaja Hydra Cloud tellimust",
"new_achievements_unlocked": "Avatud {{achievementCount}} uut saavutust {{gameCount}} mängust"
},
"tour": {
"hydra_cloud": {
"subscription_tour_title": "Hydra Cloud Tellimus",
"subscribe_now": "Telli kohe",
"cloud_saving": "Pilvesalvestus",

View File

@@ -224,7 +224,7 @@
"last_time_played": "Terakhir dimainkan {{period}}",
"activity": "Aktivitas terbaru",
"library": "Perpustakaan",
"total_play_time": "Total waktu bermain: {{amount}}",
"total_play_time": "Total waktu bermain",
"no_recent_activity_title": "Hmm… kosong di sini",
"no_recent_activity_description": "Kamu belum main game baru-baru ini. Yuk, mulai main!",
"display_name": "Nama tampilan",

View File

@@ -220,7 +220,7 @@
"last_time_played": "Соңғы ойын {{period}}",
"activity": "Соңғы әрекет",
"library": "Кітапхана",
"total_play_time": "Барлығы ойнаған: {{amount}}",
"total_play_time": "Барлығы ойнаған",
"no_recent_activity_title": "Хммм... Мұнда ештеңе жоқ",
"no_recent_activity_description": "Сіз ұзақ уақыт бойы ештеңе ойнаған жоқсыз. Мұны өзгерту керек!",
"display_name": "Көрсету аты",

View File

@@ -251,7 +251,7 @@
"last_time_played": "Sist spilt {{period}}",
"activity": "Seneste aktivitet",
"library": "Bibliotek",
"total_play_time": "Samlet spilltid: {{amount}}",
"total_play_time": "Samlet spilltid",
"no_recent_activity_title": "Hmmm… ikke noe her",
"no_recent_activity_description": "Du har ikke spilt noen spill for på det seneste. Det er det på tide at endre på!",
"display_name": "Brukernavn",

View File

@@ -7,7 +7,7 @@
"featured": "Destaques",
"hot": "Populares",
"weekly": "📅 Mais baixados da semana",
"achievements": "🏆 Pra platinar",
"achievements": "🏆 Para platinar",
"surprise_me": "Surpreenda-me",
"no_results": "Nenhum resultado encontrado",
"start_typing": "Comece a digitar para pesquisar…"
@@ -155,14 +155,24 @@
"loading_save_preview": "Buscando por arquivos de salvamento…",
"wine_prefix": "Prefixo Wine",
"wine_prefix_description": "O prefixo Wine que foi utilizado para instalar o jogo",
"launch_options": "Opções de Inicialização",
"launch_options_description": "Usuários avançados podem adicionar opções de inicialização no jogo (experimental)",
"launch_options_placeholder": "Nenhum parâmetro informado",
"no_download_option_info": "Sem informações disponíveis",
"backup_deletion_failed": "Falha ao apagar backup",
"max_number_of_artifacts_reached": "Número máximo de backups atingido para este jogo",
"achievements_not_sync": "Suas conquistas não estão sincronizadas",
"achievements_not_sync": "Veja como exibir suas conquistas no perfil",
"backup_from": "Backup de {{date}}",
"custom_backup_location_set": "Localização customizada selecionada",
"select_folder": "Selecione a pasta",
"manage_files_description": "Gerencie quais arquivos serão feitos backup"
"manage_files_description": "Gerencie quais arquivos serão feitos backup",
"clear": "Limpar",
"no_directory_selected": "Nenhum diretório selecionado",
"reset_achievements": "Resetar conquistas",
"reset_achievements_description": "Isso irá resetar todas as conquistas de {{game}}",
"reset_achievements_title": "Tem certeza?",
"reset_achievements_success": "Conquistas resetadas com sucesso",
"reset_achievements_error": "Falha ao resetar conquistas"
},
"activation": {
"title": "Ativação",
@@ -195,7 +205,11 @@
"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…"
"checking_files": "Verificando arquivos…",
"seeding": "Semeando",
"stop_seeding": "Parar de semear",
"resume_seeding": "Semear",
"options": "Gerenciar"
},
"settings": {
"downloads_path": "Diretório dos downloads",
@@ -252,7 +266,25 @@
"user_unblocked": "Usuário desbloqueado",
"enable_achievement_notifications": "Quando uma conquista é desbloqueada",
"launch_minimized": "Iniciar o Hydra minimizado",
"disable_nsfw_alert": "Desativar alerta de conteúdo inapropriado"
"disable_nsfw_alert": "Desativar alerta de conteúdo inapropriado",
"seed_after_download_complete": "Semear após a conclusão do download",
"show_hidden_achievement_description": "Mostrar descrição de conquistas ocultas antes de debloqueá-las",
"account": "Conta",
"no_users_blocked": "Você não bloqueou nenhum usuário",
"subscription_active_until": "Sua assinatura Hydra Cloud ficará ativa até {{date}}",
"manage_subscription": "Gerenciar assinatura",
"update_email": "Atualizar email",
"update_password": "Atualizar senha",
"current_email": "Email atual:",
"no_email_account": "Você ainda não adicionou um email a sua conta",
"account_data_updated_successfully": "Dados da conta atualizados com sucesso",
"renew_subscription": "Renovar Hydra Cloud",
"subscription_expired_at": "Sua assinatura expirou em {{date}}",
"no_subscription": "Aproveite o Hydra da melhor forma possível",
"become_subscriber": "Seja Hydra Cloud",
"subscription_renew_cancelled": "A renovação automática está desativada",
"subscription_renews_on": "Sua assinatura renova dia {{date}}",
"bill_sent_until": "Sua próxima cobrança será enviada até esse dia"
},
"notifications": {
"download_complete": "Download concluído",
@@ -276,8 +308,15 @@
"instructions": "Verifique a forma correta de instalar algum deles no seu distro Linux, garantindo assim a execução normal do jogo"
},
"catalogue": {
"next_page": "Próxima página",
"previous_page": "Página anterior"
"search": "Filtrar…",
"developers": "Desenvolvedores",
"genres": "Gêneros",
"tags": "Marcadores",
"publishers": "Distribuidoras",
"download_sources": "Fontes de download",
"result_count": "{{resultCount}} resultados",
"filter_count": "{{filterCount}} disponíveis",
"clear_filters": "Limpar {{filterCount}} selecionados"
},
"modal": {
"close": "Botão de fechar"
@@ -291,7 +330,7 @@
"last_time_played": "Última sessão {{period}}",
"activity": "Atividades recentes",
"library": "Biblioteca",
"total_play_time": "Tempo total de jogo: {{amount}}",
"total_play_time": "Tempo total de jogo",
"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",
@@ -354,26 +393,43 @@
"your_friend_code": "Seu código de amigo:",
"upload_banner": "Carregar banner",
"uploading_banner": "Carregando banner…",
"background_image_updated": "Imagem de fundo salva"
"background_image_updated": "Imagem de fundo salva",
"stats": "Estatísticas",
"achievements": "conquistas",
"games": "Jogos",
"ranking_updated_weekly": "O ranking é atualizado semanalmente",
"playing": "Jogando {{game}}",
"achievements_unlocked": "Conquistas desbloqueadas",
"earned_points": "Pontos ganhos",
"show_achievements_on_profile": "Exiba suas conquistas no perfil",
"show_points_on_profile": "Exiba seus pontos ganhos no perfil"
},
"achievement": {
"achievement_unlocked": "Conquista desbloqueada",
"your_achievements": "Suas Conquistas",
"user_achievements": "Conquistas de {{displayName}}",
"unlocked_at": "Desbloqueado em:",
"unlocked_at": "Desbloqueada em: {{date}}",
"subscription_needed": "Você precisa de uma assinatura Hydra Cloud para visualizar este conteúdo",
"new_achievements_unlocked": "{{achievementCount}} novas conquistas de {{gameCount}} jogos",
"achievement_progress": "{{unlockedCount}}/{{totalCount}} conquistas",
"achievements_unlocked_for_game": "Desbloqueadas {{achievementCount}} novas conquistas em {{gameTitle}}"
"achievements_unlocked_for_game": "Desbloqueadas {{achievementCount}} novas conquistas em {{gameTitle}}",
"hidden_achievement_tooltip": "Esta é uma conquista oculta",
"achievement_earn_points": "Ganhe {{points}} pontos com essa conquista",
"earned_points": "Pontos ganhos:",
"available_points": "Pontos disponíveis:",
"how_to_earn_achievements_points": "Como desbloquear pontos nas conquistas?"
},
"tour": {
"hydra_cloud": {
"subscription_tour_title": "Assinatura Hydra Cloud",
"hydra_cloud": "Hydra Cloud",
"subscribe_now": "Inscreva-se agora",
"cloud_achievements": "Salvamento de conquistas em nuvem",
"animated_profile_picture": "Fotos de perfil animadas",
"premium_support": "Suporte Premium",
"show_and_compare_achievements": "Exiba e compare suas conquistas com outros usuários",
"animated_profile_banner": "Banner animado no perfil",
"cloud_saving": "Saves de jogos em nuvem"
"cloud_saving": "Saves de jogos em nuvem",
"hydra_cloud_feature_found": "Você descobriu uma funcionalidade Hydra Cloud!",
"learn_more": "Saiba mais"
}
}

View File

@@ -287,7 +287,7 @@
"last_time_played": "Última sessão {{period}}",
"activity": "Atividade recente",
"library": "Biblioteca",
"total_play_time": "Tempo total de jogo: {{amount}}",
"total_play_time": "Tempo total de jogo",
"no_recent_activity_title": "Hmmm… não há nada por aqui",
"no_recent_activity_description": "Parece que não jogaste nada recentemente. Que tal começar agora?",
"display_name": "Nome de apresentação",
@@ -356,11 +356,11 @@
"achievement_unlocked": "Conquista desbloqueada",
"your_achievements": "As tuas Conquistas",
"user_achievements": "Conquistas de {{displayName}}",
"unlocked_at": "Desbloqueada em:",
"unlocked_at": "Desbloqueada em: {{date}}",
"subscription_needed": "Precisas de uma subscrição Hydra Cloud para visualizar este conteúdo",
"new_achievements_unlocked": "{{achievementCount}} novas conquistas de {{gameCount}} jogos"
},
"tour": {
"hydra_cloud": {
"subscription_tour_title": "Subscrição Hydra Cloud",
"subscribe_now": "Subscreve agora",
"cloud_achievements": "Gravação de conquistas na nuvem",

View File

@@ -4,12 +4,13 @@
"successfully_signed_in": "Успешный вход"
},
"home": {
"featured": "Рекомендованное",
"featured": "Рекомендации",
"surprise_me": "Удиви меня",
"no_results": "Ничего не найдено",
"hot": "Сейчас в топе",
"start_typing": "Начинаю вводить текст для поиска...",
"weekly": "📅 Лучшие игры недели"
"weekly": "📅 Лучшие игры недели",
"achievements": "🏆 Игры, в которых нужно победить"
},
"sidebar": {
"catalogue": "Каталог",
@@ -19,7 +20,7 @@
"downloading_metadata": "{{title}} (Загрузка метаданных…)",
"paused": "{{title}} (Приостановлено)",
"downloading": "{{title}} ({{percentage}} - Загрузка…)",
"filter": "Фильтр библиотеки",
"filter": "Поиск",
"home": "Главная",
"queued": "{{title}} (В очереди)",
"game_has_no_executable": "Файл запуска игры не выбран",
@@ -45,14 +46,21 @@
"checking_files": "Проверка файлов {{title}}… ({{percentage}} завершено)"
},
"catalogue": {
"next_page": "Следующая страница",
"previous_page": "Предыдущая страница"
"search": "Фильтр…",
"developers": "Разработчики",
"genres": "Жанры",
"tags": "Маркеры",
"publishers": "Издательства",
"download_sources": "Источники загрузки",
"result_count": "{{resultCount}} результатов",
"filter_count": "{{filterCount}} доступных",
"clear_filters": "Очистить {{filterCount}} выбранных"
},
"game_details": {
"open_download_options": "Открыть варианты загрузки",
"download_options_zero": "Нет вариантов загрузки",
"download_options_one": "{{count}} вариант загрузки",
"download_options_other": "{{count}} вариантов загрузки",
"open_download_options": "Открыть источники",
"download_options_zero": "Нет источников",
"download_options_one": "{{count}} источник",
"download_options_other": "{{count}} источников",
"updated_at": "Обновлено {{updated_at}}",
"install": "Установить",
"resume": "Возобновить",
@@ -63,7 +71,7 @@
"eta": "Окончание {{eta}}",
"calculating_eta": "Подсчёт оставшегося времени…",
"downloading_metadata": "Загрузка метаданных…",
"filter": "Фильтр репаков",
"filter": "Поиск репаков",
"requirements": "Системные требования",
"minimum": "Минимальные",
"recommended": "Рекомендуемые",
@@ -77,7 +85,7 @@
"accuracy": "точность {{accuracy}}%",
"add_to_library": "Добавить в библиотеку",
"remove_from_library": "Удалить из библиотеки",
"no_downloads": "Нет доступных загрузок",
"no_downloads": "Нет доступных источников",
"play_time": "Сыграно {{amount}}",
"last_time_played": "Последний запуск {{period}}",
"not_played_yet": "Вы ещё не играли в {{title}}",
@@ -91,7 +99,7 @@
"select_folder_hint": "Чтобы изменить папку загрузок по умолчанию, откройте <0>Настройки</0>",
"download_now": "Загрузить сейчас",
"no_shop_details": "Не удалось получить описание",
"download_options": "Вариантов загрузки",
"download_options": "Источники",
"download_path": "Путь для загрузок",
"previous_screenshot": "Предыдущий скриншот",
"next_screenshot": "Следующий скриншот",
@@ -104,6 +112,7 @@
"open_folder": "Открыть папку",
"open_download_location": "Просмотреть папку загрузок",
"create_shortcut": "Создать ярлык на рабочем столе",
"clear": "Очистить",
"remove_files": "Удалить файлы",
"remove_from_library_title": "Вы уверены?",
"remove_from_library_description": "{{game}} будет удалена из вашей библиотеки.",
@@ -113,22 +122,67 @@
"downloads_secion_title": "Загрузки",
"downloads_section_description": "Проверить наличие обновлений или других версий игры",
"danger_zone_section_title": "Опасная зона",
"danger_zone_section_description": "Удалить эту игру из вашей библиотеки или файлы скачанные Hydra",
"danger_zone_section_description": "Вы можете удалить эту игру из вашей библиотеки или файлы скачанные из Hydra",
"download_in_progress": "Идёт загрузка",
"download_paused": "Загрузка приостановлена",
"last_downloaded_option": "Последний вариант загрузки",
"create_shortcut_success": "Ярлык создан",
"create_shortcut_error": "Не удалось создать ярлык",
"allow_nsfw_content": "Продолжать",
"allow_nsfw_content": "Продолжить",
"download": "Скачать",
"download_count": "Загрузки",
"download_error": "Этот вариант загрузки недоступен",
"executable_path_in_use": "Исполняемый файл уже используется \"{{game}}\"",
"nsfw_content_description": "{{title}} содержит контент, который может не подходить для всех возрастов. \nВы уверены, что хотите продолжить?",
"nsfw_content_title": "Эта игра содержит неприемлемый контент",
"refuse_nsfw_content": "Назад",
"stats": "Статистика",
"player_count": "Активные игроки",
"refuse_nsfw_content": "Возвращаться",
"stats": "Статистика"
"warning": "Внимание:",
"hydra_needs_to_remain_open": "Для этой загрузки Hydra должна оставаться открытой до завершения. Если Hydra закроется до завершения, вы потеряете прогресс.",
"achievements": "Достижения",
"achievements_count": "Достижения {{unlockedCount}}/{{achievementsCount}}",
"cloud_save": "Облачное сохранение",
"cloud_save_description": "Сохраняйте ваш прогресс в облаке и продолжайте играть на любом устройстве",
"backups": "Резервные копии",
"install_backup": "Установить",
"delete_backup": "Удалить",
"create_backup": "Создать новую резервную копию",
"last_backup_date": "Последняя резервная копия от {{date}}",
"no_backup_preview": "Сохранения для этого заголовка не найдены",
"restoring_backup": "Восстановление резервной копии ({{progress}} завершено)…",
"uploading_backup": "Загрузка резервной копии…",
"no_backups": "Вы еще не создали резервных копий для этой игры",
"backup_uploaded": "Резервная копия загружена",
"backup_deleted": "Резервная копия удалена",
"backup_restored": "Резервная копия восстановлена",
"see_all_achievements": "Просмотреть все достижения",
"sign_in_to_see_achievements": "Войдите, чтобы увидеть достижения",
"mapping_method_automatic": "Автоматическая",
"mapping_method_manual": "Ручная",
"mapping_method_label": "Метод сопоставления",
"files_automatically_mapped": "Файлы автоматически сопоставлены",
"no_backups_created": "Для этой игры не создано резервных копий",
"manage_files": "Управление файлами",
"loading_save_preview": "Поиск сохранений…",
"wine_prefix": "Префикс Wine",
"wine_prefix_description": "Префикс Wine, используемый для запуска этой игры",
"launch_options": "Параметры запуска",
"launch_options_description": "Опытные пользователи могут внести изменения в параметры запуска",
"launch_options_placeholder": "Параметр не указан ",
"no_download_option_info": "Информация недоступна",
"backup_deletion_failed": "Не удалось удалить резервную копию",
"max_number_of_artifacts_reached": "Достигнуто максимальное количество резервных копий для этой игры",
"achievements_not_sync": "Ваши достижения не синхронизированы",
"manage_files_description": "Управляйте файлами, которые будут сохраняться и восстанавливаться",
"select_folder": "Выбрать папку",
"backup_from": "Резервная копия от {{date}}",
"custom_backup_location_set": "Установлено настраиваемое местоположение резервной копии",
"no_directory_selected": "Не выбран каталог",
"no_write_permission": "Невозможно загрузить в эту директорию. Нажмите здесь, чтобы узнать больше.",
"reset_achievements_title": "Вы уверены?",
"reset_achievements_success": "Достижения успешно сброшены",
"reset_achievements_error": "Не удалось сбросить достижения"
},
"activation": {
"title": "Активировать Hydra",
@@ -147,7 +201,7 @@
"completed": "Завершено",
"removed": "Не скачано",
"cancel": "Отмена",
"filter": "Фильтр загруженных игр",
"filter": "Поиск загруженных игр",
"remove": "Удалить",
"downloading_metadata": "Загрузка метаданных…",
"deleting": "Удаление установщика…",
@@ -161,17 +215,24 @@
"queued": "В очереди",
"no_downloads_title": "Здесь так пусто...",
"no_downloads_description": "Вы ещё ничего не скачали через Hydra, но никогда не поздно начать.",
"checking_files": "Проверка файлов…"
"checking_files": "Проверка файлов…",
"seeding": "Раздача",
"stop_seeding": "Остановить раздачу",
"resume_seeding": "Продолжить раздачу",
"options": "Управлять"
},
"settings": {
"downloads_path": "Путь загрузок",
"change": "Изменить",
"notifications": "Уведомления",
"enable_download_notifications": "По завершении загрузки",
"enable_achievement_notifications": "Когда достижение разблокировано",
"enable_repack_list_notifications": "При добавлении нового репака",
"real_debrid_api_token_label": "Real-Debrid API-токен",
"quit_app_instead_hiding": "Закрывать приложение вместо сворачивания в трей",
"launch_with_system": "Запускать Hydra вместе с системой",
"launch_minimized": "Запустить Hydra в свернутом виде",
"disable_nsfw_alert": "Отключить предупреждение о непристойном контенте",
"general": "Основные",
"behavior": "Поведение",
"download_sources": "Источники загрузки",
@@ -196,7 +257,7 @@
"add_download_source_description": "Вставьте ссылку на .json-файл",
"download_source_up_to_date": "Обновлён",
"download_source_errored": "Ошибка",
"sync_download_sources": "Синхронизировать источники",
"sync_download_sources": "Обновить источники",
"removed_download_source": "Источник загрузок удален",
"added_download_source": "Источник загрузок добавлен",
"download_sources_synced": "Все источники загрузок синхронизированы",
@@ -206,16 +267,34 @@
"found_download_option_other": "Найдено {{countFormatted}} вариантов загрузки",
"import": "Импортировать",
"blocked_users": "Заблокированные пользователи",
"friends_only": "Только друзья",
"friends_only": "Только для друзей",
"must_be_valid_url": "Источник должен быть действительным URL-адресом.",
"privacy": "Конфиденциальность",
"private": "Частный",
"profile_visibility": "Видимость профиля",
"profile_visibility_description": "Выберите, кто может видеть ваш профиль и библиотеку",
"public": "Общественный",
"public": "Публичный",
"required_field": "Это поле обязательно к заполнению",
"source_already_exists": "Этот источник уже добавлен",
"user_unblocked": "Пользователь разблокирован"
"user_unblocked": "Пользователь разблокирован",
"seed_after_download_complete": "Раздавать после завершения загрузки",
"show_hidden_achievement_description": "Показывать описание скрытых достижений перед их получением",
"account": "Аккаунт",
"no_users_blocked": "У вас нет заблокированных пользователей",
"subscription_active_until": "Ваша подписка на Hydra Cloud активна до {{date}}",
"manage_subscription": "Управлять подпиской",
"update_email": "Обновить электронную почту",
"update_password": "Обновить пароль",
"current_email": "Текущий email:",
"no_email_account": "Вы еще не установили электронную почту",
"account_data_updated_successfully": "Данные учетной записи успешно обновлены",
"renew_subscription": "Обновить подписку Hydra Cloud",
"subscription_expired_at": "Срок действия вашей подписки истек в {{date}}",
"no_subscription": "Наслаждайтесь Hydra по максимуму",
"become_subscriber": "Станьте обладателем Hydra Cloud",
"subscription_renew_cancelled": "Автоматическое продление отключено",
"subscription_renews_on": "Ваша подписка продлевается на {{date}}",
"bill_sent_until": "Ваш следующий счет будет отправлен до этого дня"
},
"notifications": {
"download_complete": "Загрузка завершена",
@@ -223,15 +302,17 @@
"repack_list_updated": "Список репаков обновлен",
"repack_count_one": "{{count}} репак добавлен",
"repack_count_other": "{{count}} репаков добавлено",
"new_update_available": "Доступна версия {{version}}",
"restart_to_install_update": "Перезапустите Hydra для установки обновления"
"new_update_available": "Доступна новая версия {{version}}",
"restart_to_install_update": "Перезапустите Hydra для установки обновления",
"notification_achievement_unlocked_title": "Достижение разблокировано для {{game}}",
"notification_achievement_unlocked_body": "были разблокированы {{achievement}} и другие {{count}}"
},
"system_tray": {
"open": "Открыть Hydra",
"quit": "Выйти"
},
"game_card": {
"no_downloads": "Нет доступных загрузок"
"no_downloads": "Нет доступных источников"
},
"binary_not_found_modal": {
"title": "Программы не установлены",
@@ -250,7 +331,7 @@
"last_time_played": "Последняя игра {{period}}",
"activity": "Недавняя активность",
"library": "Библиотека",
"total_play_time": "Всего сыграно: {{amount}}",
"total_play_time": "Всего сыграно",
"no_recent_activity_title": "Хммм... Тут ничего нет",
"no_recent_activity_description": "Вы давно ни во что не играли. Пора это изменить!",
"display_name": "Отображаемое имя",
@@ -309,6 +390,46 @@
"report_reason_spam": "Спам",
"report_reason_violence": "Насилие",
"required_field": "Это поле обязательно к заполнению",
"undo_friendship_modal_text": "Это отменит вашу дружбу с {{displayName}}."
"undo_friendship_modal_text": "Это отменит вашу дружбу с {{displayName}}.",
"your_friend_code": "Код вашего друга:",
"upload_banner": "Загрузить баннер",
"uploading_banner": "Загрузка баннера...",
"background_image_updated": "Фоновое изображение обновлено",
"stats": "Статистика",
"games": "Игры",
"top_percentile": "Топ {{percentile}}%",
"ranking_updated_weekly": "Рейтинг обновляется еженедельно",
"playing": "Играет в {{game}}",
"achievements_unlocked": "Достижения разблокированы",
"show_achievements_on_profile": "Покажите свои достижения в профиле",
"show_points_on_profile": "Показывать заработанные очки в своем профиле"
},
"achievement": {
"achievement_unlocked": "Достижение разблокировано",
"user_achievements": "Достижения {{displayName}}",
"your_achievements": "Ваши достижения",
"unlocked_at": "Разблокировано: {{date}}",
"subscription_needed": "Для просмотра этого содержимого необходима подписка на Hydra Cloud",
"new_achievements_unlocked": "Разблокировано {{achievementCount}} новых достижений из {{gameCount}} игр",
"achievement_progress": "{{unlockedCount}}/{{totalCount}} достижений",
"achievements_unlocked_for_game": "Разблокировано {{achievementCount}} новых достижений для {{gameTitle}}",
"hidden_achievement_tooltip": "Это скрытое достижение",
"achievement_earn_points": "Заработайте {{points}} очков с этим достижением",
"earned_points": "Заработано очков:",
"available_points": "Доступные очки:",
"how_to_earn_achievements_points": "Как заработать очки достижений?"
},
"hydra_cloud": {
"subscription_tour_title": "Подписка Hydra Cloud",
"subscribe_now": "Подпишитесь прямо сейчас",
"cloud_saving": "Сохранение в облаке",
"cloud_achievements": "Сохраняйте свои достижения в облаке",
"animated_profile_picture": "Анимированные фотографии профиля",
"premium_support": "Премиальная поддержка",
"show_and_compare_achievements": "Показывайте и сравнивайте свои достижения с достижениями других пользователей",
"animated_profile_banner": "Анимированный баннер профиля",
"hydra_cloud": "Hydra Cloud",
"hydra_cloud_feature_found": "Вы только что открыли для себя функцию Hydra Cloud!",
"learn_more": "Подробнее"
}
}

View File

@@ -1,131 +1,423 @@
{
"language_name": "Türkçe",
"app": {
"successfully_signed_in": "Başarıyla giriş yapıldı"
},
"home": {
"featured": "Öne çıkan",
"surprise_me": "Şaşırt beni",
"no_results": "Sonuç bulunamadı"
"featured": "Öne Çıkanlar",
"surprise_me": "Beni Şaşırt",
"no_results": "Sonuç bulunamadı",
"start_typing": "Aramak için yazmaya başlayın...",
"hot": "Şu anda popüler",
"weekly": "📅 Haftanın en iyi oyunları",
"achievements": "🏆 Tamamlanacak oyunlar"
},
"sidebar": {
"catalogue": "Katalog",
"downloads": "İndirmeler",
"downloads": "İndirilenler",
"settings": "Ayarlar",
"my_library": "Kütüphane",
"downloading_metadata": "{{title}} (Metadata indiriliyor…)",
"paused": "{{title}} (Duraklatıldı)",
"my_library": "Kütüphanem",
"downloading_metadata": "{{title}} (Meta verileri indiriliyor…)",
"paused": "{{title}} (Durduruldu)",
"downloading": "{{title}} ({{percentage}} - İndiriliyor…)",
"filter": "Kütüphaneyi filtrele",
"home": "Ana menü"
"home": "Ana Sayfa",
"queued": "{{title}} (Sırada)",
"game_has_no_executable": "Oyun için bir çalıştırılabilir dosya seçilmedi",
"sign_in": "Giriş yap",
"friends": "Arkadaşlar",
"need_help": "Yardıma mı ihtiyacınız var?"
},
"header": {
"search": "Ara",
"home": "Ana menü",
"search": "Oyunları ara",
"home": "Ana Sayfa",
"catalogue": "Katalog",
"downloads": "İndirmeler",
"downloads": "İndirilenler",
"search_results": "Arama sonuçları",
"settings": "Ayarlar"
"settings": "Ayarlar",
"version_available_install": "Sürüm {{version}} mevcut. Yüklemek ve yeniden başlatmak için buraya tıklayın.",
"version_available_download": "Sürüm {{version}} mevcut. İndirmek için buraya tıklayın."
},
"bottom_panel": {
"no_downloads_in_progress": "İndirilen bir şey yok",
"downloading_metadata": "{{title}} metadatası indiriliyor…",
"downloading": "{{title}} indiriliyor… ({{percentage}} tamamlandı) - Bitiş {{eta}} - {{speed}}"
"no_downloads_in_progress": "Devam eden indirme yok",
"downloading_metadata": "{{title}} meta verileri indiriliyor…",
"downloading": "{{title}} indiriliyor… ({{percentage}} tamamlandı) - Tamamlama: {{eta}} - Hız: {{speed}}",
"calculating_eta": "{{title}} indiriliyor… ({{percentage}} tamamlandı) - Kalan süre hesaplanıyor…",
"checking_files": "{{title}} dosyaları kontrol ediliyor… ({{percentage}} tamamlandı)"
},
"catalogue": {
"next_page": "Sonraki sayfa",
"previous_page": "Önceki sayfa"
"search": "Filtrele…",
"developers": "Geliştiriciler",
"genres": "Türler",
"tags": "Etiketler",
"publishers": "Yayıncılar",
"download_sources": "İndirme kaynakları",
"result_count": "{{resultCount}} sonuç",
"filter_count": "{{filterCount}} mevcut",
"clear_filters": "{{filterCount}} seçili filtreyi temizle"
},
"game_details": {
"open_download_options": "İndirme seçeneklerini aç",
"download_options_zero": "İndirme seçeneği yok",
"download_options_one": "{{count}} indirme seçeneği",
"download_options_other": "{{count}} indirme seçeneği",
"updated_at": "{{updated_at}} güncellendi",
"install": "İndir",
"updated_at": "{{updated_at}} tarihinde güncellendi",
"install": "Yükle",
"resume": "Devam et",
"pause": "Duraklat",
"pause": "Durdur",
"cancel": "İptal et",
"remove": "Sil",
"space_left_on_disk": "Diskte {{space}} yer kaldı",
"eta": "Bitiş {{eta}}",
"downloading_metadata": "Metadata indiriliyor…",
"filter": "Repackleri filtrele",
"remove": "Kaldır",
"space_left_on_disk": "Diskte {{space}} boş alan kaldı",
"eta": "{{eta}} tahmini bitiş",
"calculating_eta": "Kalan süre hesaplanıyor…",
"downloading_metadata": "Meta veriler indiriliyor…",
"filter": "Paketleri filtrele",
"requirements": "Sistem gereksinimleri",
"minimum": "Minimum",
"recommended": "Önerilen",
"release_date": "{{date}} tarihinde çıktı",
"publisher": "{{publisher}} tarihinde yayınlandı",
"hours": "saatler",
"minutes": "dakikalar",
"paused": "Durduruldu",
"release_date": "{{date}} tarihinde yayımlandı",
"publisher": "{{publisher}} tarafından yayımlandı",
"hours": "saat",
"minutes": "dakika",
"amount_hours": "{{amount}} saat",
"amount_minutes": "{{amount}} dakika",
"accuracy": "%{{accuracy}} doğruluk",
"accuracy": "{{accuracy}}% doğruluk",
"add_to_library": "Kütüphaneye ekle",
"remove_from_library": "Kütüphaneden kaldır",
"no_downloads": "İndirme yok",
"play_time": "{{amount}} oynandı",
"last_time_played": "Son oynanan {{period}}",
"not_played_yet": "Bu {{title}} h oynanmadı",
"next_suggestion": "Sıradaki öneri",
"no_downloads": "İndirilebilir içerik yok",
"play_time": "{{amount}} süre oynandı",
"last_time_played": "Son oynama {{period}} önce",
"not_played_yet": "{{title}} henüz oynanmadı",
"next_suggestion": "Sonraki öneri",
"play": "Oyna",
"deleting": "Installer siliniyor…",
"deleting": "Yükleyici siliniyor…",
"close": "Kapat",
"playing_now": imdi oynanıyor",
"playing_now": u anda oynanıyor",
"change": "Değiştir",
"repacks_modal_description": "İndirmek istediğiiniz repacki seçin",
"select_folder_hint": "Varsayılan klasörü değiştirmek için ulaşmanız gereken ayar",
"download_now": "Şimdi"
"repacks_modal_description": "İndirmek istediğiniz paketi seçin",
"select_folder_hint": "Varsayılan klasörü değiştirmek için <0>Ayarlar</0> bölümüne gidin",
"download_now": "Şimdi indir",
"no_shop_details": "Mağaza bilgileri alınamadı.",
"download_options": "İndirme seçenekleri",
"download_path": "İndirme yolu",
"previous_screenshot": "Önceki ekran görüntüsü",
"next_screenshot": "Sonraki ekran görüntüsü",
"screenshot": "{{number}} ekran görüntüsü",
"open_screenshot": "{{number}} ekran görüntüsünü aç",
"download_settings": "İndirme ayarları",
"downloader": "İndirici",
"select_executable": "Seç",
"no_executable_selected": "Hiçbir çalıştırılabilir dosya seçilmedi",
"open_folder": "Klasörü aç",
"open_download_location": "İndirilen dosyaları gör",
"create_shortcut": "Masaüstü kısayolu oluştur",
"clear": "Temizle",
"remove_files": "Dosyaları kaldır",
"remove_from_library_title": "Emin misiniz?",
"remove_from_library_description": "Bu işlem {{game}} oyununu kütüphanenizden kaldıracaktır",
"options": "Seçenekler",
"executable_section_title": "Çalıştırılabilir dosya",
"executable_section_description": "\"Oyna\" tıklandığında çalıştırılacak dosyanın yolu",
"downloads_secion_title": "İndirmeler",
"downloads_section_description": "Bu oyun için güncellemeleri veya diğer sürümleri kontrol edin",
"danger_zone_section_title": "Tehlike bölgesi",
"danger_zone_section_description": "Bu oyunu kütüphanenizden veya Hydra tarafından indirilen dosyaları kaldırın",
"download_in_progress": "İndirme devam ediyor",
"download_paused": "İndirme durduruldu",
"last_downloaded_option": "Son indirilen seçenek",
"create_shortcut_success": "Kısayol başarıyla oluşturuldu",
"create_shortcut_error": "Kısayol oluşturulurken hata oluştu",
"nsfw_content_title": "Bu oyun uygunsuz içerik içeriyor",
"nsfw_content_description": "{{title}} her yaş için uygun olmayabilecek içeriklere sahiptir. Devam etmek istediğinizden emin misiniz?",
"allow_nsfw_content": "Devam et",
"refuse_nsfw_content": "Geri dön",
"stats": "İstatistikler",
"download_count": "İndirme sayısı",
"player_count": "Aktif oyuncular",
"download_error": "Bu indirme seçeneği mevcut değil",
"download": "İndir",
"executable_path_in_use": "\"{{game}}\" tarafından kullanılan çalıştırılabilir dosya",
"warning": "Uyarı:",
"hydra_needs_to_remain_open": "Bu indirmenin tamamlanması için Hydra açık kalmalıdır. Eğer Hydra kapanırsa, ilerleme kaydedilmez.",
"achievements": "Başarılar",
"achievements_count": "Başarılar {{unlockedCount}}/{{achievementsCount}}",
"cloud_save": "Bulut kaydı",
"cloud_save_description": "İlerlemenizi buluta kaydedin ve herhangi bir cihazda oynamaya devam edin",
"backups": "Yedekler",
"install_backup": "Yükle",
"delete_backup": "Sil",
"create_backup": "Yeni yedek oluştur",
"last_backup_date": "{{date}} tarihindeki son yedek",
"no_backup_preview": "Bu oyun için kayıtlı oyun bulunamadı",
"restoring_backup": "Yedek geri yükleniyor ({{progress}} tamamlandı)…",
"uploading_backup": "Yedek yükleniyor…",
"no_backups": "Bu oyun için henüz bir yedek oluşturmadınız",
"backup_uploaded": "Yedek yüklendi",
"backup_deleted": "Yedek silindi",
"backup_restored": "Yedek geri yüklendi",
"see_all_achievements": "Tüm başarıları gör",
"sign_in_to_see_achievements": "Başarıları görmek için giriş yapın",
"mapping_method_automatic": "Otomatik",
"mapping_method_manual": "Manuel",
"mapping_method_label": "Eşleme yöntemi",
"files_automatically_mapped": "Dosyalar otomatik olarak eşlendi",
"no_backups_created": "Bu oyun için yedek oluşturulmadı",
"manage_files": "Dosyaları yönet",
"loading_save_preview": "Kayıtlı oyunlar aranıyor…",
"wine_prefix": "Wine Prefix",
"wine_prefix_description": "Bu oyunu çalıştırmak için kullanılan Wine Prefix",
"launch_options": "Başlatma Seçenekleri",
"launch_options_description": "İleri düzey kullanıcılar, başlatma seçeneklerine değişiklikler girebilir (deneysel özellik)",
"launch_options_placeholder": "Belirtilen bir parametre yok",
"no_download_option_info": "Bilgi mevcut değil",
"backup_deletion_failed": "Yedek silinemedi",
"max_number_of_artifacts_reached": "Bu oyun için maksimum yedek sayısına ulaşıldı",
"achievements_not_sync": "Başarılarınızı senkronize etmeyi öğrenin",
"manage_files_description": "Hangi dosyaların yedeklenip geri yükleneceğini yönetin",
"select_folder": "Klasör seç",
"backup_from": "{{date}} tarihinden yedek",
"custom_backup_location_set": "Özel yedekleme konumu ayarlandı",
"no_directory_selected": "Bir dizin seçilmedi",
"no_write_permission": "Bu dizine indirme yapılamaz. Daha fazla bilgi için buraya tıklayın.",
"reset_achievements": "Başarıları sıfırla",
"reset_achievements_description": "Bu işlem {{game}} için tüm başarıları sıfırlar",
"reset_achievements_title": "Emin misiniz?",
"reset_achievements_success": "Başarılar başarıyla sıfırlandı",
"reset_achievements_error": "Başarılar sıfırlanamadı"
},
"activation": {
"title": "Hydra'yı aktif et",
"installation_id": "Kurulum ID'si:",
"enter_activation_code": "Aktifleştirme kodunuzu girin",
"message": "Bunu nerede soracağınızı bilmiyorsanız, buna sahip olmamanız gerekiyor.",
"activate": "Aktif et",
"title": "Hydra'yı Aktive Et",
"installation_id": "Kurulum Kimliği:",
"enter_activation_code": "Aktivasyon kodunuzu girin",
"message": "Bunu nereden soracağınızı bilmiyorsanız, bu sizin için olmamalı.",
"activate": "Aktive Et",
"loading": "Yükleniyor…"
},
"downloads": {
"resume": "Devam et",
"resume": "Devam Et",
"pause": "Duraklat",
"eta": "Bitiş {{eta}}",
"eta": "Tamamlama {{eta}}",
"paused": "Duraklatıldı",
"verifying": "Doğrulanıyor…",
"completed": "Tamamlandı",
"cancel": ptal et",
"filter": "Yüklü oyunları filtrele",
"removed": ndirilmedi",
"cancel": "İptal Et",
"filter": "İndirilen oyunları filtrele",
"remove": "Kaldır",
"downloading_metadata": "Metadata indiriliyor…",
"deleting": "Installer siliniyor…",
"delete": "Installer'ı sil",
"deleting": "Yükleyici siliniyor…",
"delete": "Yükleyiciyi kaldır",
"delete_modal_title": "Emin misiniz?",
"delete_modal_description": "Bu bilgisayarınızdan tüm kurulum dosyalarını silecek",
"install": "Kur"
"delete_modal_description": "Bu işlem, tüm kurulum dosyalarını bilgisayarınızdan kaldıracaktır",
"install": "Kur",
"download_in_progress": "Devam ediyor",
"queued_downloads": "Sıradaki indirmeler",
"downloads_completed": "Tamamlananlar",
"queued": "Sırada",
"no_downloads_title": "Bomboş",
"no_downloads_description": "Henüz Hydra ile hiçbir şey indirmediniz, ancak başlamak için asla geç değil.",
"checking_files": "Dosyalar kontrol ediliyor…",
"seeding": "Paylaşılıyor",
"stop_seeding": "Paylaşımı durdur",
"resume_seeding": "Paylaşımı sürdür",
"options": "Yönet"
},
"settings": {
"downloads_path": "İndirme yolu",
"change": "Güncelle",
"notifications": "Bildirimler",
"enable_download_notifications": "Bir indirme bittiğinde",
"enable_repack_list_notifications": "Yeni bir repack eklendiğinde"
"enable_download_notifications": "Bir indirme tamamlandığında",
"enable_repack_list_notifications": "Yeni bir repack eklendiğinde",
"real_debrid_api_token_label": "Real-Debrid API anahtarı",
"quit_app_instead_hiding": "Hydra'yı kapatırken gizlemeyin",
"launch_with_system": "Hydra'yı sistem başlatıldığında çalıştır",
"general": "Genel",
"behavior": "Davranış",
"download_sources": "İndirme kaynakları",
"language": "Dil",
"real_debrid_api_token": "API Anahtarı",
"enable_real_debrid": "Real-Debrid'i Etkinleştir",
"real_debrid_description": "Real-Debrid, yalnızca internet hızınızla sınırlı olarak hızlı dosya indirmenizi sağlayan sınırsız bir indirici.",
"real_debrid_invalid_token": "Geçersiz API anahtarı",
"real_debrid_api_token_hint": "API anahtarınızı <0>buradan</0> alabilirsiniz",
"real_debrid_free_account_error": "\"{{username}}\" hesabı ücretsiz bir hesaptır. Lütfen Real-Debrid abonesi olun",
"real_debrid_linked_message": "\"{{username}}\" hesabı bağlandı",
"save_changes": "Değişiklikleri Kaydet",
"changes_saved": "Değişiklikler başarıyla kaydedildi",
"download_sources_description": "Hydra, indirme bağlantılarını bu kaynaklardan alacak. Kaynak URL, indirme bağlantılarını içeren bir .json dosyasına doğrudan bir bağlantı olmalıdır.",
"validate_download_source": "Doğrula",
"remove_download_source": "Kaldır",
"add_download_source": "Kaynak ekle",
"download_count_zero": "İndirme seçeneği yok",
"download_count_one": "{{countFormatted}} indirme seçeneği",
"download_count_other": "{{countFormatted}} indirme seçeneği",
"download_source_url": "İndirme kaynağı URL'si",
"add_download_source_description": ".json dosyasının URL'sini girin",
"download_source_up_to_date": "Güncel",
"download_source_errored": "Hatalı",
"sync_download_sources": "Kaynakları senkronize et",
"removed_download_source": "İndirme kaynağı kaldırıldı",
"added_download_source": "İndirme kaynağı eklendi",
"download_sources_synced": "Tüm indirme kaynakları senkronize edildi",
"insert_valid_json_url": "Geçerli bir JSON URL'si girin",
"found_download_option_zero": "Hiçbir indirme seçeneği bulunamadı",
"found_download_option_one": "{{countFormatted}} indirme seçeneği bulundu",
"found_download_option_other": "{{countFormatted}} indirme seçeneği bulundu",
"import": "İçe aktar",
"public": "Herkese açık",
"private": "Gizli",
"friends_only": "Sadece arkadaşlar",
"privacy": "Gizlilik",
"profile_visibility": "Profil görünürlüğü",
"profile_visibility_description": "Profilinizi ve kütüphanenizi kimlerin görebileceğini seçin",
"required_field": "Bu alan gereklidir",
"source_already_exists": "Bu kaynak zaten eklenmiş",
"must_be_valid_url": "Kaynak geçerli bir URL olmalıdır",
"blocked_users": "Engellenen kullanıcılar",
"user_unblocked": "Kullanıcının engeli kaldırıldı",
"enable_achievement_notifications": "Bir başarı kilidi açıldığında",
"launch_minimized": "Hydra'yı küçültülmüş başlat",
"disable_nsfw_alert": "NSFW uyarısını devre dışı bırak",
"seed_after_download_complete": "İndirme tamamlandıktan sonra paylaş",
"show_hidden_achievement_description": "Gizli başarııklamalarını kilitlenmeden önce göster"
},
"notifications": {
"download_complete": "İndirme tamamlandı",
"game_ready_to_install": "{{title}} kuruluma hazır",
"game_ready_to_install": "{{title}} kurulmaya hazır",
"repack_list_updated": "Repack listesi güncellendi",
"repack_count_one": "{{count}} yeni repack eklendi",
"repack_count_other": "{{count}} yeni repack eklendi"
"repack_count_one": "{{count}} repack eklendi",
"repack_count_other": "{{count}} repack eklendi",
"new_update_available": "Sürüm {{version}} mevcut",
"restart_to_install_update": "Güncellemeyi yüklemek için Hydra'yı yeniden başlatın",
"notification_achievement_unlocked_title": "{{game}} için başarı kilidi açıldı",
"notification_achievement_unlocked_body": "{{achievement}} ve diğer {{count}} başarılar açıldı"
},
"system_tray": {
"open": "Hydra'yı aç",
"open": "Hydra'yı Aç",
"quit": ık"
},
"game_card": {
"no_downloads": "İndirme mevcut değil"
"no_downloads": "İndirilebilir içerik bulunmuyor"
},
"binary_not_found_modal": {
"title": "Programlar yüklü değil",
"description": "Sisteminizde Wine veya Lutris çalıştırılabiliri bulunamadı",
"instructions": "Oyunları düzgün şekilde çalıştırmak için Linux distronuza bunlardan birini nasıl yükleyebileceğinize bakın"
"title": "Programlar Yüklü Değil",
"description": "Wine veya Lutris çalıştırılabilir dosyaları sisteminizde bulunamadı",
"instructions": "Oyunun normal çalışabilmesi için bunlardan herhangi birini Linux dağıtımınıza uygun şekilde nasıl kuracağınızı kontrol edin"
},
"modal": {
"close": "Kapat tuşu"
"close": "Kapat düğmesi"
},
"forms": {
"toggle_password_visibility": "Şifre görünürlüğünü değiştir"
},
"user_profile": {
"amount_hours": "{{amount}} saat",
"amount_minutes": "{{amount}} dakika",
"last_time_played": "Son oynanma {{period}}",
"activity": "Son Etkinlik",
"library": "Kütüphane",
"total_play_time": "Toplam oynama süresi",
"no_recent_activity_title": "Hmmm… burada bir şey yok",
"no_recent_activity_description": "Son zamanlarda hiç oyun oynamamışsınız. Bunu değiştirmenin zamanı geldi!",
"display_name": "Görünen isim",
"saving": "Kaydediliyor",
"save": "Kaydet",
"edit_profile": "Profili Düzenle",
"saved_successfully": "Başarıyla kaydedildi",
"try_again": "Lütfen tekrar deneyin",
"sign_out_modal_title": "Emin misiniz?",
"cancel": "İptal",
"successfully_signed_out": "Başarıyla çıkış yapıldı",
"sign_out": ıkış yap",
"playing_for": "{{amount}} oynanıyor",
"sign_out_modal_text": "Kütüphaneniz mevcut hesabınıza bağlı. Çıkış yaptığınızda kütüphaneniz görünür olmayacak ve herhangi bir ilerleme kaydedilmeyecek. Çıkışa devam etmek istiyor musunuz?",
"add_friends": "Arkadaş Ekle",
"add": "Ekle",
"friend_code": "Arkadaş kodu",
"see_profile": "Profili gör",
"sending": "Gönderiliyor",
"friend_request_sent": "Arkadaşlık isteği gönderildi",
"friends": "Arkadaşlar",
"friends_list": "Arkadaş listesi",
"user_not_found": "Kullanıcı bulunamadı",
"block_user": "Kullanıcıyı engelle",
"add_friend": "Arkadaş ekle",
"request_sent": "İstek gönderildi",
"request_received": "İstek alındı",
"accept_request": "İsteği kabul et",
"ignore_request": "İsteği yok say",
"cancel_request": "İsteği iptal et",
"undo_friendship": "Arkadaşlığı sonlandır",
"request_accepted": "İstek kabul edildi",
"user_blocked_successfully": "Kullanıcı başarıyla engellendi",
"user_block_modal_text": "Bu işlem {{displayName}} adlı kullanıcıyı engelleyecek",
"blocked_users": "Engellenen kullanıcılar",
"unblock": "Engeli kaldır",
"no_friends_added": "Hiç arkadaş eklemediniz",
"pending": "Bekliyor",
"no_pending_invites": "Bekleyen davetiniz yok",
"no_blocked_users": "Engellenmiş kullanıcı yok",
"friend_code_copied": "Arkadaş kodu kopyalandı",
"undo_friendship_modal_text": "Bu işlem {{displayName}} ile arkadaşlığınızı sonlandıracak",
"privacy_hint": "Bunu kimin görebileceğini ayarlamak için <0>Ayarlar</0> bölümüne gidin",
"locked_profile": "Bu profil gizli",
"image_process_failure": "Görüntü işleme başarısız oldu",
"required_field": "Bu alan gerekli",
"displayname_min_length": "Görünen isim en az 3 karakter uzunluğunda olmalıdır",
"displayname_max_length": "Görünen isim en fazla 50 karakter uzunluğunda olabilir",
"report_profile": "Bu profili bildir",
"report_reason": "Bu profili neden bildiriyorsunuz?",
"report_description": "Ek bilgi",
"report_description_placeholder": "Ek bilgi",
"report": "Bildir",
"report_reason_hate": "Nefret söylemi",
"report_reason_sexual_content": "Cinsel içerik",
"report_reason_violence": "Şiddet",
"report_reason_spam": "Spam",
"report_reason_other": "Diğer",
"profile_reported": "Profil bildirildi",
"your_friend_code": "Arkadaş kodunuz:",
"upload_banner": "Afiş yükle",
"uploading_banner": "Afiş yükleniyor…",
"background_image_updated": "Arka plan görüntüsü güncellendi",
"stats": "İstatistikler",
"achievements": "Başarılar",
"games": "Oyunlar",
"top_percentile": "En üst {{percentile}}%",
"ranking_updated_weekly": "Sıralama haftalık olarak güncellenir",
"playing": "{{game}} oynanıyor",
"achievements_unlocked": "Başarılar açıldı",
"earned_points": "Kazanılan puanlar",
"show_achievements_on_profile": "Başarılarınızı profilinizde gösterin",
"show_points_on_profile": "Kazandığınız puanları profilinizde gösterin"
},
"achievement": {
"achievement_unlocked": "Başarııldı",
"user_achievements": "{{displayName}}'in Başarıları",
"your_achievements": "Başarılarınız",
"unlocked_at": "Açılma zamanı: {{date}}",
"subscription_needed": "Bu içeriği görmek için bir Hydra Cloud aboneliği gereklidir",
"new_achievements_unlocked": "{{gameCount}} oyundan {{achievementCount}} yeni başarııldı",
"achievement_progress": "{{unlockedCount}}/{{totalCount}} başarı",
"achievements_unlocked_for_game": "{{gameTitle}} oyunu için {{achievementCount}} yeni başarııldı",
"hidden_achievement_tooltip": "Bu gizli bir başarıdır",
"achievement_earn_points": "Bu başarı ile {{points}} puan kazanın",
"earned_points": "Kazanılan puanlar:",
"available_points": "Mevcut puanlar:",
"how_to_earn_achievements_points": "Başarı puanları nasıl kazanılır?"
},
"hydra_cloud": {
"subscription_tour_title": "Hydra Cloud Aboneliği",
"subscribe_now": "Şimdi abone olun",
"cloud_saving": "Bulut kaydetme",
"cloud_achievements": "Başarılarınızı buluta kaydedin",
"animated_profile_picture": "Animasyonlu profil resimleri",
"premium_support": "Premium Destek",
"show_and_compare_achievements": "Başarılarınızı diğer kullanıcılarla karşılaştırın ve gösterin",
"animated_profile_banner": "Animasyonlu profil afişi",
"hydra_cloud": "Hydra Cloud",
"hydra_cloud_feature_found": "Bir Hydra Cloud özelliği keşfettiniz!",
"learn_more": "Daha Fazla Bilgi Edinin"
}
}

View File

@@ -231,7 +231,7 @@
"sign_out_modal_text": "Ваша бібліотека пов'язана з поточним обліковим записом. При виході з системи ваша бібліотека буде недоступною, і прогрес не буде збережено. Продовжити вихід?",
"sign_out_modal_title": "Ви впевнені?",
"successfully_signed_out": "Успішний вихід з акаунту",
"total_play_time": "Всього зіграно: {{amount}}",
"total_play_time": "Всього зіграно",
"try_again": "Будь ласка, попробуйте ще раз"
}
}

View File

@@ -290,7 +290,7 @@
"last_time_played": "上次游玩时间 {{period}}",
"activity": "近期活动",
"library": "库",
"total_play_time": "总游戏时长: {{amount}}",
"total_play_time": "总游戏时长",
"no_recent_activity_title": "Emmm… 这里暂时啥都没有",
"no_recent_activity_description": "你最近没玩过任何游戏。是时候做出改变了!",
"display_name": "昵称",
@@ -359,11 +359,11 @@
"achievement_unlocked": "成就已解锁",
"user_achievements": "{{displayName}}的成就",
"your_achievements": "你的成就",
"unlocked_at": "解锁于:",
"unlocked_at": "解锁于: {{date}}",
"subscription_needed": "需要订阅 Hydra Cloud 才能看到此内容",
"new_achievements_unlocked": "从 {{gameCount}} 游戏中解锁 {{achievementCount}} 新成就"
},
"tour": {
"hydra_cloud": {
"subscription_tour_title": "Hydra 云订阅",
"subscribe_now": "现在订购",
"cloud_saving": "云存档",

View File

@@ -1,10 +1,8 @@
import { DataSource } from "typeorm";
import {
DownloadQueue,
DownloadSource,
Game,
GameShopCache,
Repack,
UserPreferences,
UserAuth,
GameAchievement,
@@ -17,12 +15,10 @@ export const dataSource = new DataSource({
type: "better-sqlite3",
entities: [
Game,
Repack,
UserAuth,
UserPreferences,
UserSubscription,
GameShopCache,
DownloadSource,
DownloadQueue,
GameAchievement,
],

View File

@@ -1,41 +0,0 @@
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

@@ -5,9 +5,7 @@ import {
CreateDateColumn,
UpdateDateColumn,
OneToOne,
JoinColumn,
} from "typeorm";
import { Repack } from "./repack.entity";
import type { GameShop, GameStatus } from "@types";
import { Downloader } from "@shared";
@@ -39,6 +37,9 @@ export class Game {
@Column("text", { nullable: true })
executablePath: string | null;
@Column("text", { nullable: true })
launchOptions: string | null;
@Column("text", { nullable: true })
winePrefixPath: string | null;
@@ -72,19 +73,15 @@ export class Game {
@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;
@Column("boolean", { default: false })
shouldSeed: boolean;
@CreateDateColumn()
createdAt: Date;

View File

@@ -1,10 +1,8 @@
export * from "./game.entity";
export * from "./repack.entity";
export * from "./user-auth.entity";
export * from "./user-preferences.entity";
export * from "./user-subscription.entity";
export * from "./game-shop-cache.entity";
export * from "./game.entity";
export * from "./game-achievements.entity";
export * from "./download-source.entity";
export * from "./download-queue.entity";

View File

@@ -1,45 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
ManyToOne,
} from "typeorm";
import { DownloadSource } from "./download-source.entity";
@Entity("repack")
export class Repack {
@PrimaryGeneratedColumn()
id: number;
@Column("text", { unique: true })
title: string;
/**
* @deprecated Use uris instead
*/
@Column("text", { unique: true })
magnet: string;
@Column("text")
repacker: string;
@Column("text")
fileSize: string;
@Column("datetime")
uploadDate: Date | string;
@ManyToOne(() => DownloadSource, { nullable: true, onDelete: "CASCADE" })
downloadSource: DownloadSource;
@Column("text", { default: "[]" })
uris: string;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}

View File

@@ -41,6 +41,12 @@ export class UserPreferences {
@Column("boolean", { default: false })
disableNsfwAlert: boolean;
@Column("boolean", { default: true })
seedAfterDownloadComplete: boolean;
@Column("boolean", { default: false })
showHiddenAchievementsDescription: boolean;
@CreateDateColumn()
createdAt: Date;

View File

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

View File

@@ -9,6 +9,8 @@ const getSessionHash = async (_event: Electron.IpcMainInvokeEvent) => {
if (!auth) return null;
const payload = jwt.decode(auth.accessToken) as jwt.JwtPayload;
if (!payload) return null;
return payload.sessionId;
};

View File

@@ -1,7 +1,24 @@
import i18next from "i18next";
import { registerEvent } from "../register-event";
import { WindowManager } from "@main/services";
import { HydraApi, WindowManager } from "@main/services";
import { AuthPage } from "@shared";
const openAuthWindow = async (_event: Electron.IpcMainInvokeEvent) =>
WindowManager.openAuthWindow();
const openAuthWindow = async (
_event: Electron.IpcMainInvokeEvent,
page: AuthPage
) => {
const searchParams = new URLSearchParams({
lng: i18next.language,
});
if ([AuthPage.UpdateEmail, AuthPage.UpdatePassword].includes(page)) {
const { accessToken } = await HydraApi.refreshToken().catch(() => {
return { accessToken: "" };
});
searchParams.set("token", accessToken);
}
WindowManager.openAuthWindow(page, searchParams);
};
registerEvent("openAuthWindow", openAuthWindow);

View File

@@ -1,12 +1,8 @@
import { registerEvent } from "../register-event";
import {
DownloadManager,
HydraApi,
PythonInstance,
gamesPlaytime,
} from "@main/services";
import { DownloadManager, HydraApi, gamesPlaytime } from "@main/services";
import { dataSource } from "@main/data-source";
import { DownloadQueue, Game, UserAuth, UserSubscription } from "@main/entity";
import { PythonRPC } from "@main/services/python-rpc";
const signOut = async (_event: Electron.IpcMainInvokeEvent) => {
const databaseOperations = dataSource
@@ -32,7 +28,7 @@ const signOut = async (_event: Electron.IpcMainInvokeEvent) => {
DownloadManager.cancelDownload();
/* Disconnects libtorrent */
PythonInstance.killTorrent();
PythonRPC.kill();
HydraApi.handleSignOut();

View File

@@ -1,9 +1,6 @@
import type { GameShop } from "@types";
import { registerEvent } from "../register-event";
import { HydraApi } from "@main/services";
import { CatalogueCategory, steamUrlBuilder } from "@shared";
import { steamGamesWorker } from "@main/workers";
import { CatalogueCategory } from "@shared";
const getCatalogue = async (
_event: Electron.IpcMainInvokeEvent,
@@ -14,26 +11,11 @@ const getCatalogue = async (
skip: "0",
});
const response = await HydraApi.get<{ objectId: string; shop: GameShop }[]>(
return HydraApi.get(
`/catalogue/${category}?${params.toString()}`,
{},
{ needsAuth: false }
);
return Promise.all(
response.map(async (game) => {
const steamGame = await steamGamesWorker.run(Number(game.objectId), {
name: "getById",
});
return {
title: steamGame.name,
shop: game.shop,
cover: steamUrlBuilder.library(game.objectId),
objectId: game.objectId,
};
})
);
};
registerEvent("getCatalogue", getCatalogue);

View File

@@ -0,0 +1,10 @@
import { HydraApi } from "@main/services";
import { registerEvent } from "../register-event";
const getDevelopers = async (_event: Electron.IpcMainInvokeEvent) => {
return HydraApi.get<string[]>(`/catalogue/developers`, null, {
needsAuth: false,
});
};
registerEvent("getDevelopers", getDevelopers);

View File

@@ -1,29 +0,0 @@
import type { CatalogueEntry } from "@types";
import { registerEvent } from "../register-event";
import { HydraApi } from "@main/services";
import { steamUrlBuilder } from "@shared";
const getGames = async (
_event: Electron.IpcMainInvokeEvent,
take = 12,
skip = 0
): Promise<CatalogueEntry[]> => {
const searchParams = new URLSearchParams({
take: take.toString(),
skip: skip.toString(),
});
const games = await HydraApi.get<CatalogueEntry[]>(
`/games/catalogue?${searchParams.toString()}`,
undefined,
{ needsAuth: false }
);
return games.map((game) => ({
...game,
cover: steamUrlBuilder.library(game.objectId),
}));
};
registerEvent("getGames", getGames);

View File

@@ -1,23 +1,21 @@
import type { HowLongToBeatCategory } from "@types";
import { getHowLongToBeatGame, searchHowLongToBeat } from "@main/services";
import type { GameShop, HowLongToBeatCategory } from "@types";
import { registerEvent } from "../register-event";
import { formatName } from "@shared";
import { HydraApi } from "@main/services";
const getHowLongToBeat = async (
_event: Electron.IpcMainInvokeEvent,
title: string
objectId: string,
shop: GameShop
): Promise<HowLongToBeatCategory[] | null> => {
const response = await searchHowLongToBeat(title);
const game = response.data.find((game) => {
return formatName(game.game_name) === formatName(title);
const params = new URLSearchParams({
objectId,
shop,
});
if (!game) return null;
const howLongToBeat = await getHowLongToBeatGame(String(game.game_id));
return howLongToBeat;
return HydraApi.get(`/games/how-long-to-beat?${params.toString()}`, null, {
needsAuth: false,
});
};
registerEvent("getHowLongToBeat", getHowLongToBeat);

View File

@@ -0,0 +1,10 @@
import { HydraApi } from "@main/services";
import { registerEvent } from "../register-event";
const getPublishers = async (_event: Electron.IpcMainInvokeEvent) => {
return HydraApi.get<string[]>(`/catalogue/publishers`, null, {
needsAuth: false,
});
};
registerEvent("getPublishers", getPublishers);

View File

@@ -1,23 +1,18 @@
import type { CatalogueSearchPayload } from "@types";
import { registerEvent } from "../register-event";
import { convertSteamGameToCatalogueEntry } from "../helpers/search-games";
import type { CatalogueEntry } from "@types";
import { HydraApi } from "@main/services";
const searchGamesEvent = async (
const searchGames = async (
_event: Electron.IpcMainInvokeEvent,
query: string
): Promise<CatalogueEntry[]> => {
const games = await HydraApi.get<
{ objectId: string; title: string; shop: string }[]
>("/games/search", { title: query, take: 12, skip: 0 }, { needsAuth: false });
return games.map((game) => {
return convertSteamGameToCatalogueEntry({
id: Number(game.objectId),
name: game.title,
clientIcon: null,
});
});
payload: CatalogueSearchPayload,
take: number,
skip: number
) => {
return HydraApi.post(
"/catalogue/search",
{ ...payload, take, skip },
{ needsAuth: false }
);
};
registerEvent("searchGames", searchGamesEvent);
registerEvent("searchGames", searchGames);

View File

@@ -1,6 +1,7 @@
import { HydraApi } from "@main/services";
import { registerEvent } from "../register-event";
import type { GameArtifact, GameShop } from "@types";
import { SubscriptionRequiredError, UserNotLoggedInError } from "@shared";
const getGameArtifacts = async (
_event: Electron.IpcMainInvokeEvent,
@@ -13,8 +14,20 @@ const getGameArtifacts = async (
});
return HydraApi.get<GameArtifact[]>(
`/profile/games/artifacts?${params.toString()}`
);
`/profile/games/artifacts?${params.toString()}`,
{},
{ needsSubscription: true }
).catch((err) => {
if (err instanceof SubscriptionRequiredError) {
return [];
}
if (err instanceof UserNotLoggedInError) {
return [];
}
throw err;
});
};
registerEvent("getGameArtifacts", getGameArtifacts);

View File

@@ -89,7 +89,7 @@ const uploadSaveGame = async (
"Content-Type": "application/tar",
},
onUploadProgress: (progressEvent) => {
console.log(progressEvent);
logger.log(progressEvent);
},
});

View File

@@ -1,9 +0,0 @@
import { registerEvent } from "../register-event";
import { knexClient } from "@main/knex-client";
const deleteDownloadSource = async (
_event: Electron.IpcMainInvokeEvent,
id: number
) => knexClient("download_source").where({ id }).delete();
registerEvent("deleteDownloadSource", deleteDownloadSource);

View File

@@ -1,7 +0,0 @@
import { registerEvent } from "../register-event";
import { knexClient } from "@main/knex-client";
const getDownloadSources = async (_event: Electron.IpcMainInvokeEvent) =>
knexClient.select("*").from("download_source");
registerEvent("getDownloadSources", getDownloadSources);

View File

@@ -0,0 +1,17 @@
import { HydraApi } from "@main/services";
import { registerEvent } from "../register-event";
const putDownloadSource = async (
_event: Electron.IpcMainInvokeEvent,
objectIds: string[]
) => {
return HydraApi.put<{ fingerprint: string }>(
"/download-sources",
{
objectIds,
},
{ needsAuth: false }
);
};
registerEvent("putDownloadSource", putDownloadSource);

View File

@@ -0,0 +1,15 @@
import fs from "node:fs";
import { registerEvent } from "../register-event";
const checkFolderWritePermission = async (
_event: Electron.IpcMainInvokeEvent,
path: string
) =>
new Promise((resolve) => {
fs.access(path, fs.constants.W_OK, (err) => {
resolve(!err);
});
});
registerEvent("checkFolderWritePermission", checkFolderWritePermission);

View File

@@ -1,10 +1,10 @@
import checkDiskSpace from "check-disk-space";
import disk from "diskusage";
import { registerEvent } from "../register-event";
const getDiskFreeSpace = async (
_event: Electron.IpcMainInvokeEvent,
path: string
) => checkDiskSpace(path);
) => disk.check(path);
registerEvent("getDiskFreeSpace", getDiskFreeSpace);

View File

@@ -1,31 +0,0 @@
import type { GameShop, CatalogueEntry, SteamGame } from "@types";
import { steamGamesWorker } from "@main/workers";
import { steamUrlBuilder } from "@shared";
export interface SearchGamesArgs {
query?: string;
take?: number;
skip?: number;
}
export const convertSteamGameToCatalogueEntry = (
game: SteamGame
): CatalogueEntry => ({
objectId: String(game.id),
title: game.name,
shop: "steam" as GameShop,
cover: steamUrlBuilder.library(String(game.id)),
});
export const getSteamGameById = async (
objectId: string
): Promise<CatalogueEntry | null> => {
const steamGame = await steamGamesWorker.run(Number(objectId), {
name: "getById",
});
if (!steamGame) return null;
return convertSteamGameToCatalogueEntry(steamGame);
};

View File

@@ -1,15 +1,17 @@
import { appVersion, defaultDownloadsPath } from "@main/constants";
import { appVersion, defaultDownloadsPath, isStaging } from "@main/constants";
import { ipcMain } from "electron";
import "./catalogue/get-catalogue";
import "./catalogue/get-game-shop-details";
import "./catalogue/get-games";
import "./catalogue/get-how-long-to-beat";
import "./catalogue/get-random-game";
import "./catalogue/search-games";
import "./catalogue/get-game-stats";
import "./catalogue/get-trending-games";
import "./catalogue/get-publishers";
import "./catalogue/get-developers";
import "./hardware/get-disk-free-space";
import "./hardware/check-folder-write-permission";
import "./library/add-game-to-library";
import "./library/create-game-shortcut";
import "./library/close-game";
@@ -21,27 +23,33 @@ import "./library/open-game-executable-path";
import "./library/open-game-installer";
import "./library/open-game-installer-path";
import "./library/update-executable-path";
import "./library/update-launch-options";
import "./library/verify-executable-path";
import "./library/remove-game";
import "./library/remove-game-from-library";
import "./library/select-game-wine-prefix";
import "./library/reset-game-achievements";
import "./misc/open-checkout";
import "./misc/open-external";
import "./misc/show-open-dialog";
import "./misc/get-features";
import "./misc/show-item-in-folder";
import "./torrenting/cancel-game-download";
import "./torrenting/pause-game-download";
import "./torrenting/resume-game-download";
import "./torrenting/start-game-download";
import "./torrenting/pause-game-seed";
import "./torrenting/resume-game-seed";
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/delete-download-source";
import "./download-sources/get-download-sources";
import "./download-sources/put-download-source";
import "./auth/sign-out";
import "./auth/open-auth-window";
import "./aparence/open-editor-window";
import "./auth/get-session-hash";
import "./user/get-user";
import "./user/get-blocked-users";
@@ -68,9 +76,9 @@ import "./cloud-save/delete-game-artifact";
import "./cloud-save/select-game-backup-path";
import "./notifications/publish-new-repacks-notification";
import { isPortableVersion } from "@main/helpers";
import "./misc/show-item-in-folder";
ipcMain.handle("ping", () => "pong");
ipcMain.handle("getVersion", () => appVersion);
ipcMain.handle("isStaging", () => isStaging);
ipcMain.handle("isPortableVersion", () => isPortableVersion());
ipcMain.handle("getDefaultDownloadsPath", () => defaultDownloadsPath);

View File

@@ -1,8 +1,10 @@
import { gameRepository } from "@main/repository";
import { registerEvent } from "../register-event";
import { PythonInstance, logger } from "@main/services";
import { logger } from "@main/services";
import sudo from "sudo-prompt";
import { app } from "electron";
import { PythonRPC } from "@main/services/python-rpc";
import { ProcessPayload } from "@main/services/download/types";
const getKillCommand = (pid: number) => {
if (process.platform == "win32") {
@@ -16,7 +18,10 @@ const closeGame = async (
_event: Electron.IpcMainInvokeEvent,
gameId: number
) => {
const processes = await PythonInstance.getProcessList();
const processes =
(await PythonRPC.rpc.get<ProcessPayload[] | null>("/process-list")).data ||
[];
const game = await gameRepository.findOne({
where: { id: gameId, isDeleted: false },
});
@@ -24,7 +29,11 @@ const closeGame = async (
if (!game) return;
const gameProcess = processes.find((runningProcess) => {
return runningProcess.exe === game.executablePath;
if (process.platform === "linux") {
return runningProcess.name === game.executablePath?.split("/").at(-1);
} else {
return runningProcess.exe === game.executablePath;
}
});
if (gameProcess) {

View File

@@ -7,11 +7,16 @@ import { parseExecutablePath } from "../helpers/parse-executable-path";
const openGame = async (
_event: Electron.IpcMainInvokeEvent,
gameId: number,
executablePath: string
executablePath: string,
launchOptions: string | null
) => {
// TODO: revisit this for launchOptions
const parsedPath = parseExecutablePath(executablePath);
await gameRepository.update({ id: gameId }, { executablePath: parsedPath });
await gameRepository.update(
{ id: gameId },
{ executablePath: parsedPath, launchOptions }
);
shell.openPath(parsedPath);
};

View File

@@ -0,0 +1,56 @@
import { gameAchievementRepository, gameRepository } from "@main/repository";
import { registerEvent } from "../register-event";
import { findAchievementFiles } from "@main/services/achievements/find-achivement-files";
import fs from "fs";
import { achievementsLogger, HydraApi, WindowManager } from "@main/services";
import { getUnlockedAchievements } from "../user/get-unlocked-achievements";
const resetGameAchievements = async (
_event: Electron.IpcMainInvokeEvent,
gameId: number
) => {
try {
const game = await gameRepository.findOne({ where: { id: gameId } });
if (!game) return;
const achievementFiles = findAchievementFiles(game);
if (achievementFiles.length) {
for (const achievementFile of achievementFiles) {
achievementsLogger.log(`deleting ${achievementFile.filePath}`);
await fs.promises.rm(achievementFile.filePath);
}
}
await gameAchievementRepository.update(
{ objectId: game.objectID },
{
unlockedAchievements: null,
}
);
await HydraApi.delete(`/profile/games/achievements/${game.remoteId}`).then(
() =>
achievementsLogger.log(
`Deleted achievements from ${game.remoteId} - ${game.objectID} - ${game.title}`
)
);
const gameAchievements = await getUnlockedAchievements(
game.objectID,
game.shop,
true
);
WindowManager.mainWindow?.webContents.send(
`on-update-achievements-${game.objectID}-${game.shop}`,
gameAchievements
);
} catch (error) {
achievementsLogger.error(error);
throw error;
}
};
registerEvent("resetGameAchievements", resetGameAchievements);

View File

@@ -5,9 +5,9 @@ import { registerEvent } from "../register-event";
const selectGameWinePrefix = async (
_event: Electron.IpcMainInvokeEvent,
id: number,
winePrefixPath: string
winePrefixPath: string | null
) => {
return gameRepository.update({ id }, { winePrefixPath });
return gameRepository.update({ id }, { winePrefixPath: winePrefixPath });
};
registerEvent("selectGameWinePrefix", selectGameWinePrefix);

View File

@@ -6,14 +6,18 @@ import { parseExecutablePath } from "../helpers/parse-executable-path";
const updateExecutablePath = async (
_event: Electron.IpcMainInvokeEvent,
id: number,
executablePath: string
executablePath: string | null
) => {
const parsedPath = executablePath
? parseExecutablePath(executablePath)
: null;
return gameRepository.update(
{
id,
},
{
executablePath: parseExecutablePath(executablePath),
executablePath: parsedPath,
}
);
};

View File

@@ -0,0 +1,19 @@
import { gameRepository } from "@main/repository";
import { registerEvent } from "../register-event";
const updateLaunchOptions = async (
_event: Electron.IpcMainInvokeEvent,
id: number,
launchOptions: string | null
) => {
return gameRepository.update(
{
id,
},
{
launchOptions: launchOptions?.trim() != "" ? launchOptions : null,
}
);
};
registerEvent("updateLaunchOptions", updateLaunchOptions);

View File

@@ -0,0 +1,8 @@
import { registerEvent } from "../register-event";
import { HydraApi } from "@main/services";
const getFeatures = async (_event: Electron.IpcMainInvokeEvent) => {
return HydraApi.get<string[]>("/features", null, { needsAuth: false });
};
registerEvent("getFeatures", getFeatures);

View File

@@ -1,16 +1,10 @@
import { shell } from "electron";
import { registerEvent } from "../register-event";
import {
userAuthRepository,
userPreferencesRepository,
} from "@main/repository";
import { userAuthRepository } from "@main/repository";
import { HydraApi } from "@main/services";
const openCheckout = async (_event: Electron.IpcMainInvokeEvent) => {
const [userAuth, userPreferences] = await Promise.all([
userAuthRepository.findOne({ where: { id: 1 } }),
userPreferencesRepository.findOne({ where: { id: 1 } }),
]);
const userAuth = await userAuthRepository.findOne({ where: { id: 1 } });
if (!userAuth) {
return;
@@ -22,7 +16,6 @@ const openCheckout = async (_event: Electron.IpcMainInvokeEvent) => {
const params = new URLSearchParams({
token: paymentToken,
lng: userPreferences?.language || "en",
});
shell.openExternal(

View File

@@ -1,11 +1,16 @@
import { registerEvent } from "../register-event";
import { PythonInstance } from "@main/services";
import { PythonRPC } from "@main/services/python-rpc";
const processProfileImage = async (
_event: Electron.IpcMainInvokeEvent,
path: string
) => {
return PythonInstance.processProfileImage(path);
return PythonRPC.rpc
.post<{
imagePath: string;
mimeType: string;
}>("/profile-image", { image_path: path })
.then((response) => response.data);
};
registerEvent("processProfileImage", processProfileImage);

View File

@@ -0,0 +1,17 @@
import { registerEvent } from "../register-event";
import { DownloadManager } from "@main/services";
import { gameRepository } from "@main/repository";
const pauseGameSeed = async (
_event: Electron.IpcMainInvokeEvent,
gameId: number
) => {
await gameRepository.update(gameId, {
status: "complete",
shouldSeed: false,
});
await DownloadManager.pauseSeeding(gameId);
};
registerEvent("pauseGameSeed", pauseGameSeed);

View File

@@ -0,0 +1,29 @@
import { registerEvent } from "../register-event";
import { gameRepository } from "../../repository";
import { DownloadManager } from "@main/services";
import { Downloader } from "@shared";
const resumeGameSeed = async (
_event: Electron.IpcMainInvokeEvent,
gameId: number
) => {
const game = await gameRepository.findOne({
where: {
id: gameId,
isDeleted: false,
downloader: Downloader.Torrent,
progress: 1,
},
});
if (!game) return;
await gameRepository.update(gameId, {
status: "seeding",
shouldSeed: true,
});
await DownloadManager.resumeSeeding(game);
};
registerEvent("resumeGameSeed", resumeGameSeed);

View File

@@ -1,7 +1,6 @@
import { registerEvent } from "../register-event";
import parseTorrent from "parse-torrent";
import type { StartGameDownloadPayload } from "@types";
import { DownloadManager, HydraApi, logger } from "@main/services";
import { DownloadManager, HydraApi } from "@main/services";
import { Not } from "typeorm";
import { steamGamesWorker } from "@main/workers";
@@ -9,7 +8,6 @@ import { createGame } from "@main/services/library-sync";
import { steamUrlBuilder } from "@shared";
import { dataSource } from "@main/data-source";
import { DownloadQueue, Game } from "@main/entity";
import { HydraAnalytics } from "@main/services/hydra-analytics";
const startGameDownload = async (
_event: Electron.IpcMainInvokeEvent,
@@ -78,35 +76,23 @@ const startGameDownload = async (
},
});
createGame(updatedGame!).catch(() => {});
HydraApi.post(
"/games/download",
{
objectId: updatedGame!.objectID,
shop: updatedGame!.shop,
},
{ needsAuth: false }
).catch((err) => {
logger.error("Failed to create game download", err);
});
if (uri.startsWith("magnet:")) {
try {
const { infoHash } = await parseTorrent(payload.uri);
if (infoHash) {
HydraAnalytics.postDownload(infoHash).catch(() => {});
}
} catch (err) {
logger.error("Failed to parse torrent", err);
}
}
await DownloadManager.cancelDownload(updatedGame!.id);
await DownloadManager.startDownload(updatedGame!);
await downloadQueueRepository.delete({ game: { id: updatedGame!.id } });
await downloadQueueRepository.insert({ game: { id: updatedGame!.id } });
await Promise.all([
createGame(updatedGame!).catch(() => {}),
HydraApi.post(
"/games/download",
{
objectId: updatedGame!.objectID,
shop: updatedGame!.shop,
},
{ needsAuth: false }
).catch(() => {}),
]);
});
};

View File

@@ -1,4 +1,4 @@
import { RealDebridClient } from "@main/services/real-debrid";
import { RealDebridClient } from "@main/services/download/real-debrid";
import { registerEvent } from "../register-event";
const authenticateRealDebrid = async (

View File

@@ -13,6 +13,9 @@ const getComparedUnlockedAchievements = async (
where: { id: 1 },
});
const showHiddenAchievementsDescription =
userPreferences?.showHiddenAchievementsDescription || false;
return HydraApi.get<ComparedAchievements>(
`/users/${userId}/games/achievements/compare`,
{
@@ -21,15 +24,35 @@ const getComparedUnlockedAchievements = async (
language: userPreferences?.language || "en",
}
).then((achievements) => {
const sortedAchievements = achievements.achievements.sort((a, b) => {
if (a.targetStat.unlocked && !b.targetStat.unlocked) return -1;
if (!a.targetStat.unlocked && b.targetStat.unlocked) return 1;
if (a.targetStat.unlocked && b.targetStat.unlocked) {
return b.targetStat.unlockTime! - a.targetStat.unlockTime!;
}
const sortedAchievements = achievements.achievements
.sort((a, b) => {
if (a.targetStat.unlocked && !b.targetStat.unlocked) return -1;
if (!a.targetStat.unlocked && b.targetStat.unlocked) return 1;
if (a.targetStat.unlocked && b.targetStat.unlocked) {
return b.targetStat.unlockTime! - a.targetStat.unlockTime!;
}
return Number(a.hidden) - Number(b.hidden);
});
return Number(a.hidden) - Number(b.hidden);
})
.map((achievement) => {
if (!achievement.hidden) return achievement;
if (!achievement.ownerStat) {
return {
...achievement,
description: "",
};
}
if (!showHiddenAchievementsDescription && achievement.hidden) {
return {
...achievement,
description: "",
};
}
return achievement;
});
return {
...achievements,

View File

@@ -1,6 +1,9 @@
import type { GameShop, UnlockedAchievement, UserAchievement } from "@types";
import { registerEvent } from "../register-event";
import { gameAchievementRepository } from "@main/repository";
import {
gameAchievementRepository,
userPreferencesRepository,
} from "@main/repository";
import { getGameAchievementData } from "@main/services/achievements/get-game-achievement-data";
export const getUnlockedAchievements = async (
@@ -12,10 +15,17 @@ export const getUnlockedAchievements = async (
where: { objectId, shop },
});
const userPreferences = await userPreferencesRepository.findOne({
where: { id: 1 },
});
const showHiddenAchievementsDescription =
userPreferences?.showHiddenAchievementsDescription || false;
const achievementsData = await getGameAchievementData(
objectId,
shop,
useCachedData
useCachedData ? cachedAchievements : null
);
const unlockedAchievements = JSON.parse(
@@ -50,6 +60,10 @@ export const getUnlockedAchievements = async (
unlocked: false,
unlockTime: null,
icongray: icongray,
description:
!achievementData.hidden || showHiddenAchievementsDescription
? achievementData.description
: undefined,
} as UserAchievement;
})
.sort((a, b) => {

View File

@@ -11,7 +11,7 @@ const getSteamGame = async (objectId: string) => {
});
return {
title: steamGame.name,
title: steamGame.name as string,
iconUrl: steamUrlBuilder.icon(objectId, steamGame.clientIcon),
};
} catch (err) {
@@ -67,8 +67,25 @@ const getUser = async (
}
}
const friends = await Promise.all(
profile.friends.map(async (friend) => {
if (!friend.currentGame) return friend;
const currentGame = await getSteamGame(friend.currentGame.objectId);
return {
...friend,
currentGame: {
...friend.currentGame,
...currentGame,
},
};
})
);
return {
...profile,
friends,
libraryGames,
recentGames,
};

View File

@@ -5,12 +5,14 @@ import path from "node:path";
import url from "node:url";
import fs from "node:fs";
import { electronApp, optimizer } from "@electron-toolkit/utils";
import { logger, PythonInstance, WindowManager } from "@main/services";
import { logger, WindowManager } from "@main/services";
import { dataSource } from "@main/data-source";
import resources from "@locales";
import { userPreferencesRepository } from "@main/repository";
import { knexClient, migrationConfig } from "./knex-client";
import { databaseDirectory } from "./constants";
import { PythonRPC } from "./services/python-rpc";
import { Aria2 } from "./services/aria2";
const { autoUpdater } = updater;
@@ -146,7 +148,8 @@ app.on("window-all-closed", () => {
app.on("before-quit", () => {
/* Disconnects libtorrent */
PythonInstance.kill();
PythonRPC.kill();
Aria2.kill();
});
app.on("activate", () => {

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