Compare commits

..

40 Commits

Author SHA1 Message Date
kramo
c347d9b0f4 v2.0.6 2023-07-21 09:45:18 +02:00
kramo
9cd4d7048c Don't blacklist Steam mods - #151 2023-07-21 09:39:32 +02:00
kramo
3d17b5a920 Properly capitalize Pylint 2023-07-20 19:15:19 +02:00
kramo
2c67dd23ab Update contributing guidelines 2023-07-20 19:11:24 +02:00
kramo
45d1ddaa7d Add Matrix space to Readme 2023-07-20 11:56:55 +02:00
kramo
be6338cdd4 v2.0.5 2023-07-17 09:59:47 +02:00
kramo
bb7fded0e5 Fix Windows migration 2023-07-17 09:57:09 +02:00
kramo
7d91b84a87 Merge pull request #144 from weblate/weblate-cartridges-cartridges
Translations update from Hosted Weblate
2023-07-17 09:56:09 +02:00
Hosted Weblate
3002cef448 Translated using Weblate (Polish)
Currently translated at 100.0% (121 of 121 strings)

Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/pl/
Translation: Cartridges/Cartridges
2023-07-16 00:51:44 +02:00
Hosted Weblate
89f6dcad19 Translated using Weblate (Portuguese (Brazil))
Currently translated at 91.7% (111 of 121 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Vítor Fernandes Almado <vfalmado@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/pt_BR/
Translation: Cartridges/Cartridges
2023-07-16 00:51:44 +02:00
Hosted Weblate
5c62b7ba02 Translated using Weblate (Turkish)
Currently translated at 100.0% (121 of 121 strings)

Co-authored-by: Sabri Ünal <libreajans@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/tr/
Translation: Cartridges/Cartridges
2023-07-16 00:51:44 +02:00
kramo
a1c5a4bdd8 Mark source names as translatable 2023-07-13 14:51:55 +02:00
kramo
6114f65204 Lowercase itch source name 2023-07-13 14:46:31 +02:00
kramo
5be70bba52 Add extra sources to desktop entry 2023-07-09 14:26:44 +02:00
kramo
99ef85daf3 Update release description 2023-07-09 10:01:45 +02:00
kramo
719cedba67 Merge pull request #142 from weblate/weblate-cartridges-cartridges
Translations update from Hosted Weblate
2023-07-09 10:00:49 +02:00
Hosted Weblate
19432a1fe7 Translated using Weblate (Swedish)
Currently translated at 100.0% (121 of 121 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Luna Jernberg <droidbittin@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/sv/
Translation: Cartridges/Cartridges
2023-07-09 10:00:26 +02:00
Hosted Weblate
220d00141f Translated using Weblate (Tamil)
Currently translated at 100.0% (121 of 121 strings)

Co-authored-by: K.B.Dharun Krishna <kbdharunkrishna@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/ta/
Translation: Cartridges/Cartridges
2023-07-09 10:00:26 +02:00
Hosted Weblate
633e2a6c5d Translated using Weblate (Italian)
Currently translated at 100.0% (121 of 121 strings)

Co-authored-by: Alessandro Iepure <alessandro.iepure@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/it/
Translation: Cartridges/Cartridges
2023-07-09 10:00:26 +02:00
Hosted Weblate
bc25afa494 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (121 of 121 strings)

Co-authored-by: Dan <jonweblin2205@protonmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/uk/
Translation: Cartridges/Cartridges
2023-07-09 10:00:26 +02:00
Hosted Weblate
6bf246a8e6 Translated using Weblate (Dutch)
Currently translated at 100.0% (121 of 121 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Philip Goto <philip.goto@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/nl/
Translation: Cartridges/Cartridges
2023-07-09 10:00:26 +02:00
Hosted Weblate
ac71bc6ecb Translated using Weblate (Russian)
Currently translated at 100.0% (121 of 121 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Сергей <asvmail.as@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/ru/
Translation: Cartridges/Cartridges
2023-07-09 10:00:26 +02:00
Hosted Weblate
d7d6270bbc Translated using Weblate (Spanish)
Currently translated at 100.0% (121 of 121 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Óscar Fernández Díaz <oscfdezdz@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/es/
Translation: Cartridges/Cartridges
2023-07-09 10:00:26 +02:00
Hosted Weblate
cd986c3f5e Translated using Weblate (Arabic)
Currently translated at 100.0% (121 of 121 strings)

Co-authored-by: Ali Aljishi <ahj696@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/ar/
Translation: Cartridges/Cartridges
2023-07-09 10:00:26 +02:00
kramo
c3bd7ee736 v2.0.4 2023-07-09 10:00:10 +02:00
kramo
b4bfe38765 Backport new game fix - closes #143 2023-07-09 09:59:03 +02:00
kramo
a0c46bbc74 v2.0.3 2023-07-08 16:01:32 +02:00
kramo
6a06f7329d Disallow Legendary on Windows to fix Heroic 2023-07-08 16:00:57 +02:00
kramo
16db07511a Merge pull request #141 from kra-mo/fix-windows-data-location
Migrate old windows data location to the current one
2023-07-08 15:52:54 +02:00
GeoffreyCoulaud
34863901fd Various tweaks
- Removed unnecessary comments
- Renamed path variables from file to path
- Don't check for XDG_DATA_HOME
- Move files instead of copying them
- Format json dump
2023-07-08 15:38:38 +02:00
GeoffreyCoulaud
3f5f8b71e8 Manually imported - Migrate covers, log message 2023-07-08 15:25:59 +02:00
GeoffreyCoulaud
618a98ee89 Handle manually added games separately 2023-07-08 15:09:30 +02:00
GeoffreyCoulaud
867e4d3cce Fixes to initial code 2023-07-08 14:35:43 +02:00
GeoffreyCoulaud
3c019796c2 Initial code 2023-07-08 13:54:43 +02:00
kramo
1c8448c1e1 Update docs 2023-07-08 12:36:05 +02:00
kramo
dad3dcafb7 v2.0.2 2023-07-08 12:18:01 +02:00
kramo
c6ef2ea0b4 uuuuuuuuuuuuuughhhhhhhhhhhhhhhhhhhhhhh 2023-07-08 12:14:37 +02:00
kramo
e4d9f8ba45 Merge pull request #140 from kra-mo/store-improvements
Store improvements
2023-07-07 18:30:55 +02:00
GeoffreyCoulaud
87a4319360 Store improvements
- Store games by source
- Added convenience dunder methods (contains, iter, len, getitem)
- Added store.get
- Changed `enable_in_pipeline` for `toggle_in_pipeline`
2023-07-07 18:06:07 +02:00
kramo
dc232e1e43 Fix cache dir, add debug_info_filename to about 2023-07-06 10:25:00 +02:00
32 changed files with 382 additions and 260 deletions

View File

@@ -1,7 +1,14 @@
# Contributing
## Code
Fork the repository, make your changes, then create a pull request.
Be sure to follow the [code style](#code-style) of the project.
### Adding a feature
[Create an issue](https://github.com/kra-mo/cartridges/issues/new) or join the [Discord](https://discord.gg/4KSFh3AmQR)/[Matrix](https://matrix.to/#/#cartridges:matrix.org) to discuss it with the maintainers. We will provide additional guidance.
### Fixing a bug
Fork the repository, make your changes, then create a pull request. Be sure to mention the GitHub issue you're fixing if one was already open.
## Translations
### Weblate
@@ -17,7 +24,7 @@ The project can be translated on [Weblate](https://hosted.weblate.org/engage/car
# Building
## GNOME Builder
1. Install [GNOME Builder](https://flathub.org/apps/details/org.gnome.Builder).
1. Install [GNOME Builder](https://flathub.org/apps/org.gnome.Builder).
2. Click "Clone Repository" with `https://github.com/kra-mo/cartridges.git` as the URL.
3. Click on the build button (hammer) at the top.
@@ -33,3 +40,23 @@ cd cartridges
meson setup build
ninja -C build install
```
# Code style
All code is auto-formatted with [Black](https://github.com/psf/black) and linted with [Pylint](https://github.com/pylint-dev/pylint). Imports are sorted by [isort](https://github.com/pycqa/isort).
VSCode extensions are available for all of these and you can set them up with the following `settings.json` configuration:
```json
"python.formatting.provider": "none",
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true
},
},
"isort.args":["--profile", "black"],
```
For other code editors, you can install them via `pip` and invoke them via the command line.

View File

@@ -1,30 +1,30 @@
[circle-url]: https://circle.gnome.org
[circle-image]: https://circle.gnome.org/assets/button/badge.svg
[weblate-url]: https://hosted.weblate.org/engage/cartridges/
[weblate-image]: https://hosted.weblate.org/widgets/cartridges/-/cartridges/svg-badge.svg
[discord-url]: https://discord.gg/4KSFh3AmQR
[discord-image]: https://img.shields.io/discord/1088155799299313754?color=%235865F2&label=discord&logo=discord&logoColor=%23FFFFFF&style=for-the-badge
[matrix-url]: https://matrix.to/#/#cartridges:matrix.org
[matrix-image]: https://img.shields.io/matrix/cartridges:matrix.org?label=Matrix&logo=matrix&color=%230dbd8b&style=for-the-badge
[flathub-url]: https://flathub.org/apps/hu.kramo.Cartridges
[flathub-image]: https://img.shields.io/flathub/v/hu.kramo.Cartridges?logo=flathub&style=for-the-badge
[installs-image]: https://img.shields.io/flathub/downloads/hu.kramo.Cartridges?style=for-the-badge
<div align="center">
<img src="data/icons/hicolor/scalable/apps/hu.kramo.Cartridges.svg" width="128" height="128">
# Cartridges
A GTK4 + Libadwaita game launcher
# Cartridges
[![GNOME Circle][circle-image]][circle-url]
[![Flathub][flathub-image]][flathub-url]
[![Build status][github-actions-image]][github-actions-url]
[![Translation Status][weblate-image]][weblate-url]
[![Code style][code-style-image]][code-style-url]
[![Discord][discord-image]][discord-url]
A GTK4 + Libadwaita game launcher
[circle-url]: https://circle.gnome.org
[circle-image]: https://circle.gnome.org/assets/button/badge.svg
[github-actions-url]: https://github.com/kra-mo/cartridges
[github-actions-image]: https://github.com/kra-mo/cartridges/actions/workflows/ci.yml/badge.svg
[code-style-url]: https://github.com/psf/black
[code-style-image]: https://img.shields.io/badge/code%20style-black-000000?style=flat
[weblate-url]: https://hosted.weblate.org/engage/cartridges/
[weblate-image]: https://hosted.weblate.org/widgets/cartridges/-/cartridges/svg-badge.svg
[discord-url]: https://discord.gg/4KSFh3AmQR
[discord-image]: https://img.shields.io/discord/1088155799299313754?color=%235865F2&label=discord&logo=discord&logoColor=%23FFFFFF
[flathub-url]: https://flathub.org/apps/hu.kramo.Cartridges
[flathub-image]: https://img.shields.io/flathub/v/hu.kramo.Cartridges
[![GNOME Circle][circle-image]][circle-url]
[![Translation Status][weblate-image]][weblate-url]
[![Flathub][flathub-image]][flathub-url]
[![Discord][discord-image]][discord-url]
[![Matrix][matrix-image]][matrix-url]
[![Installs][installs-image]][flathub-url]
<img src="data/screenshots/1.png">
</div>
@@ -50,7 +50,7 @@ Cartridges is a simple game launcher written in Python using GTK4 and Libadwaita
- Searching for games on various databases
- Animated covers
For updates and questions, join our [Discord server][discord-url]!
For updates and questions, join our [Discord server][discord-url] (bridged to [Matrix](https://matrix.to/#/#cartridges:matrix.org))!
# Installation

View File

@@ -7,5 +7,5 @@ Icon=@APP_ID@
Terminal=false
Type=Application
Categories=GNOME;GTK;Game;
Keywords=gaming;launcher;steam;lutris;heroic;bottles;itch;
Keywords=gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;
StartupNotify=true

View File

@@ -44,11 +44,10 @@
</screenshots>
<content_rating type="oars-1.1" />
<releases>
<release version="2.0.1" date="2023-07-06">
<release version="2.0.6" date="2023-07-21">
<description translatable="no">
<ul>
<li>Fixes the ability to import multiple times at once</li>
<li>Fixes an issue with non-Flatpak Steam on Linux</li>
<li>Fixes an issue with Steam mods not importing properly</li>
</ul>
</description>
</release>

View File

@@ -49,9 +49,9 @@ Stored as a string.
### source
A unique ID for the source of the game in lowercase, without spaces.
A unique ID for the source of the game in lowercase, without spaces or underscores.
If a source provides multiple internal sources, these should be separately labeled, but share a common prefix. eg. `heoic_gog`, `heroic_epic`.
If a source provides multiple internal sources, these should be separately labeled, but share a common prefix. eg. `heoic_gog`, `heroic_epic`. This is the only place you should use an underscore.
Stored as a string.

View File

@@ -1,5 +1,5 @@
project('cartridges',
version: '2.0.1',
version: '2.0.6',
meson_version: '>= 0.59.0',
default_options: [ 'warning_level=2', 'werror=false', ],
)

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-05 14:36+0200\n"
"PO-Revision-Date: 2023-07-04 17:29+0000\n"
"PO-Revision-Date: 2023-07-09 07:59+0000\n"
"Last-Translator: Ali Aljishi <ahj696@hotmail.com>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/cartridges/"
"cartridges/ar/>\n"
@@ -529,17 +529,13 @@ msgstr "حدِّد مجلَّد ذاكرة {} المؤقتة."
#. The variable is the name of the source
#: src/preferences.py:355
#, fuzzy
#| msgid "Select the {} installation directory."
msgid "Select the {} configuration directory."
msgstr "حدِّد مجلَّد تثبيت {}."
msgstr "حدِّد مجلَّد ضبط {}."
#. The variable is the name of the source
#: src/preferences.py:358
#, fuzzy
#| msgid "Select the {} cache directory."
msgid "Select the {} data directory."
msgstr "حدِّد مجلَّد ذاكرة {} المؤقتة."
msgstr "حدِّد مجلَّد بيانات {}."
#: src/preferences.py:364
msgid "Set Location"

View File

@@ -9,8 +9,9 @@ msgstr ""
"Project-Id-Version: cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-05 14:36+0200\n"
"PO-Revision-Date: 2023-07-04 17:29+0000\n"
"Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
"PO-Revision-Date: 2023-07-08 14:52+0000\n"
"Last-Translator: Óscar Fernández Díaz <oscfdezdz@users.noreply.hosted.weblate"
".org>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/cartridges/"
"cartridges/es/>\n"
"Language: es\n"
@@ -46,9 +47,9 @@ msgid ""
"necessary. You can sort and hide games or download cover art from "
"SteamGridDB."
msgstr ""
"Cartridges es un lanzador simple para todos tus juegos. Admite la "
"importación de tus juegos de Steam, Lutris, Heroic y más sin necesidad de "
"una cuenta. Puedes ordenar y ocultar juegos, o descargar carátulas de "
"Cartuchos es un sencillo lanzador de juegos para todos sus juegos. Tiene "
"soporte para importar juegos de Steam, Lutris, Heroic y más sin necesidad de "
"iniciar sesión. Puede ordenar y ocultar juegos o descargar portadas de "
"SteamGridDB."
#: data/hu.kramo.Cartridges.metainfo.xml.in:30
@@ -74,11 +75,11 @@ msgstr "Cancelar"
#: data/gtk/details-window.blp:57
msgid "New Cover"
msgstr "Nueva caratula"
msgstr "Portada nueva"
#: data/gtk/details-window.blp:75
msgid "Delete Cover"
msgstr "Borrar la caratula"
msgstr "Borrar portada"
#: data/gtk/details-window.blp:101 data/gtk/details-window.blp:106
#: data/gtk/game.blp:80
@@ -124,7 +125,7 @@ msgstr "Eliminar"
#: data/gtk/game.blp:126 src/window.py:173
msgid "Unhide"
msgstr "Mostrar"
msgstr "Desocultar"
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
msgid "General"
@@ -177,7 +178,7 @@ msgstr "Eliminar juego"
#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:268
msgid "Behavior"
msgstr "Conducta"
msgstr "Comportamiento"
#: data/gtk/preferences.blp:16
msgid "Exit After Launching Games"
@@ -206,11 +207,11 @@ msgstr "Guarda las partidas sin pérdidas a costa del almacenamiento"
#: data/gtk/preferences.blp:50
msgid "Danger Zone"
msgstr "Zona peligrosa"
msgstr "Zona de peligro"
#: data/gtk/preferences.blp:53
msgid "Remove All Games"
msgstr "Quitar todos los juegos"
msgstr "Eliminar todos los juegos"
#: data/gtk/preferences.blp:85 data/gtk/window.blp:27 data/gtk/window.blp:442
msgid "Import"
@@ -229,7 +230,7 @@ msgstr "Steam"
#: data/gtk/preferences.blp:206 data/gtk/preferences.blp:220
#: data/gtk/preferences.blp:234
msgid "Install Location"
msgstr "Lugar de la instalación"
msgstr "Ruta de instalación"
#: data/gtk/preferences.blp:106
msgid "Lutris"
@@ -237,7 +238,7 @@ msgstr "Lutris"
#: data/gtk/preferences.blp:119
msgid "Cache Location"
msgstr "Localización de la caché"
msgstr "Ruta de la caché"
#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
@@ -245,7 +246,7 @@ msgstr "Importar juegos de Steam"
#: data/gtk/preferences.blp:137
msgid "Import Flatpak Games"
msgstr "Importar los juegos Flatpak"
msgstr "Importar juegos Flatpak"
#: data/gtk/preferences.blp:147
msgid "Heroic"
@@ -289,15 +290,15 @@ msgstr "SteamGridDB"
#: data/gtk/preferences.blp:260
msgid "Authentication"
msgstr "Autentificación"
msgstr "Autenticación"
#: data/gtk/preferences.blp:263
msgid "API Key"
msgstr "Código API"
msgstr "Clave API"
#: data/gtk/preferences.blp:271
msgid "Use SteamGridDB"
msgstr "Utiliza SteamGridDB"
msgstr "Usar SteamGridDB"
#: data/gtk/preferences.blp:272
msgid "Download images when adding or importing games"
@@ -532,17 +533,13 @@ msgstr "Seleccione el directorio de la caché {}."
#. The variable is the name of the source
#: src/preferences.py:355
#, fuzzy
#| msgid "Select the {} installation directory."
msgid "Select the {} configuration directory."
msgstr "Selecciona el directorio de la instalación {}."
msgstr "Seleccione el directorio de configuración {}."
#. The variable is the name of the source
#: src/preferences.py:358
#, fuzzy
#| msgid "Select the {} cache directory."
msgid "Select the {} data directory."
msgstr "Seleccione el directorio de la caché {}."
msgstr "Seleccione el directorio de datos {}."
#: src/preferences.py:364
msgid "Set Location"

View File

@@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-05 14:36+0200\n"
"PO-Revision-Date: 2023-07-01 15:10+0000\n"
"Last-Translator: albanobattistella <albano_battistella@hotmail.com>\n"
"PO-Revision-Date: 2023-07-08 14:52+0000\n"
"Last-Translator: Alessandro Iepure <alessandro.iepure@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/cartridges/"
"cartridges/it/>\n"
"Language: it\n"
@@ -87,7 +87,7 @@ msgstr "Titolo"
#: data/gtk/details-window.blp:102
msgid "The title of the game"
msgstr "Titolo del gioco"
msgstr "Il titolo del gioco"
#: data/gtk/details-window.blp:112 data/gtk/details-window.blp:117
msgid "Developer"
@@ -273,7 +273,7 @@ msgstr "itch"
#: data/gtk/preferences.blp:216
msgid "Legendary"
msgstr "Leggendari"
msgstr "Leggendario"
#: data/gtk/preferences.blp:230
msgid "Flatpak"
@@ -281,7 +281,7 @@ msgstr "Flatpak"
#: data/gtk/preferences.blp:243
msgid "Import Game Launchers"
msgstr "Importa lanciatori di giochi"
msgstr "Importa launcher di giochi"
#: data/gtk/preferences.blp:256
msgid "SteamGridDB"
@@ -528,21 +528,17 @@ msgstr "Directory non valida"
#. The variable is the name of the source
#: src/preferences.py:352
msgid "Select the {} cache directory."
msgstr "Seleziona la directory della cache {}."
msgstr "Seleziona la directory della cache per {}."
#. The variable is the name of the source
#: src/preferences.py:355
#, fuzzy
#| msgid "Select the {} installation directory."
msgid "Select the {} configuration directory."
msgstr "Selezionare la directory di installazione {}."
msgstr "Selezionare la directory di configurazione per {}."
#. The variable is the name of the source
#: src/preferences.py:358
#, fuzzy
#| msgid "Select the {} cache directory."
msgid "Select the {} data directory."
msgstr "Seleziona la directory della cache {}."
msgstr "Seleziona la directory dati per {}."
#: src/preferences.py:364
msgid "Set Location"
@@ -554,7 +550,7 @@ msgstr "Chiudi"
#: src/store/managers/sgdb_manager.py:47
msgid "Couldn't Authenticate SteamGridDB"
msgstr "Impossibile eseguire l'autenticazione su SteamGridDB"
msgstr "Impossibile autenticare SteamGridDB"
#: src/store/managers/sgdb_manager.py:48
msgid "Verify your API key in preferences"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-05 14:36+0200\n"
"PO-Revision-Date: 2023-07-04 17:29+0000\n"
"PO-Revision-Date: 2023-07-08 14:52+0000\n"
"Last-Translator: Philip Goto <philip.goto@gmail.com>\n"
"Language-Team: Dutch <https://hosted.weblate.org/projects/cartridges/"
"cartridges/nl/>\n"
@@ -134,7 +134,7 @@ msgstr "Algemeen"
#: data/gtk/help-overlay.blp:14
msgid "Quit"
msgstr "Sluiten"
msgstr "Afsluiten"
#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:217 data/gtk/window.blp:257
#: data/gtk/window.blp:323
@@ -319,7 +319,7 @@ msgstr "Geen games gevonden"
#: data/gtk/window.blp:7 data/gtk/window.blp:15
msgid "Try a different search."
msgstr "Probeer een andere zoekopdracht"
msgstr "Probeer een andere zoekopdracht."
#: data/gtk/window.blp:21
msgid "No Games"
@@ -327,7 +327,7 @@ msgstr "Geen games"
#: data/gtk/window.blp:22
msgid "Use the + button to add games."
msgstr "Gebruik de plusknop om games toe te voegen"
msgstr "Gebruik de plusknop om games toe te voegen."
#: data/gtk/window.blp:40
msgid "No Hidden Games"
@@ -335,7 +335,7 @@ msgstr "Geen verborgen games"
#: data/gtk/window.blp:41
msgid "Games you hide will appear here."
msgstr "Games die u verbergt zullen hier verschijnen"
msgstr "Games die u verbergt zullen hier verschijnen."
#: data/gtk/window.blp:64 data/gtk/window.blp:304
msgid "Back"
@@ -478,11 +478,11 @@ msgstr "Kon game niet toevoegen"
#: src/details_window.py:147 src/details_window.py:181
msgid "Game title cannot be empty."
msgstr "Game-titel mag niet leeg zijn"
msgstr "Game-titel mag niet leeg zijn."
#: src/details_window.py:153 src/details_window.py:189
msgid "Executable cannot be empty."
msgstr "Programmabestand mag niet leeg zijn"
msgstr "Programmabestand mag niet leeg zijn."
#: src/details_window.py:180 src/details_window.py:188
msgid "Couldn't Apply Preferences"
@@ -523,7 +523,7 @@ msgstr "Installatie niet gevonden"
#: src/preferences.py:286
msgid "Select a valid directory."
msgstr "Selecteer een geldige map"
msgstr "Selecteer een geldige map."
#: src/preferences.py:348
msgid "Invalid Directory"
@@ -532,21 +532,17 @@ msgstr "Ongeldige map"
#. The variable is the name of the source
#: src/preferences.py:352
msgid "Select the {} cache directory."
msgstr "Selecteer de cache-map van {}"
msgstr "Selecteer de cache-map van {}."
#. The variable is the name of the source
#: src/preferences.py:355
#, fuzzy
#| msgid "Select the {} installation directory."
msgid "Select the {} configuration directory."
msgstr "Selecteer de installatiemap van {}"
msgstr "Selecteer de configuratiemap van {}."
#. The variable is the name of the source
#: src/preferences.py:358
#, fuzzy
#| msgid "Select the {} cache directory."
msgid "Select the {} data directory."
msgstr "Selecteer de cache-map van {}"
msgstr "Selecteer de gegevensmap van {}."
#: src/preferences.py:364
msgid "Set Location"

View File

@@ -3,13 +3,14 @@
# This file is distributed under the same license as the Cartridges package.
# Artur Wróblewski <krypalkora1984@gmail.com>, 2023.
# Kshyso <Kshysio@protonmail.com>, 2023.
# Eryk Michalak <gnu.ewm@protonmail.com>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-05 14:36+0200\n"
"PO-Revision-Date: 2023-06-10 16:48+0000\n"
"Last-Translator: Kshyso <Kshysio@protonmail.com>\n"
"PO-Revision-Date: 2023-07-14 15:51+0000\n"
"Last-Translator: Eryk Michalak <gnu.ewm@protonmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/cartridges/"
"cartridges/pl/>\n"
"Language: pl\n"
@@ -18,7 +19,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.18-dev\n"
"X-Generator: Weblate 5.0-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
@@ -37,7 +38,7 @@ msgstr "Uruchom wszystkie swoje gry"
#: data/hu.kramo.Cartridges.desktop.in:11
msgid "gaming;launcher;steam;lutris;heroic;bottles;itch;"
msgstr ""
msgstr "gry;gaming;launcher;steam;lutris;heroic;bottles;itch;"
#: data/hu.kramo.Cartridges.metainfo.xml.in:9
msgid ""
@@ -107,7 +108,7 @@ msgstr ""
#: data/gtk/details-window.blp:130
msgid "More Info"
msgstr ""
msgstr "Więcej informacji"
#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
msgid "Edit"
@@ -227,30 +228,24 @@ msgstr "Steam"
#: data/gtk/preferences.blp:151 data/gtk/preferences.blp:192
#: data/gtk/preferences.blp:206 data/gtk/preferences.blp:220
#: data/gtk/preferences.blp:234
#, fuzzy
#| msgid "itch Install Location"
msgid "Install Location"
msgstr "Położenie instalacji itch"
msgstr "Lokalizacja instalacji"
#: data/gtk/preferences.blp:106
msgid "Lutris"
msgstr "Lutris"
#: data/gtk/preferences.blp:119
#, fuzzy
#| msgid "Lutris Cache Location"
msgid "Cache Location"
msgstr "Lokalizacja Lutris Cache"
msgstr "Lokalizacja pamięci podręcznej"
#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr "Importuj gry Steam"
#: data/gtk/preferences.blp:137
#, fuzzy
#| msgid "Import Steam Games"
msgid "Import Flatpak Games"
msgstr "Importuj gry Steam"
msgstr "Importuj gry Flatpak"
#: data/gtk/preferences.blp:147
msgid "Heroic"
@@ -278,17 +273,15 @@ msgstr "itch"
#: data/gtk/preferences.blp:216
msgid "Legendary"
msgstr ""
msgstr "Legendarne"
#: data/gtk/preferences.blp:230
msgid "Flatpak"
msgstr ""
msgstr "Flatpak"
#: data/gtk/preferences.blp:243
#, fuzzy
#| msgid "Game Launcher"
msgid "Import Game Launchers"
msgstr "Launcher Gier"
msgstr "Importuj programy uruchamiające gry"
#: data/gtk/preferences.blp:256
msgid "SteamGridDB"
@@ -521,41 +514,31 @@ msgstr ""
"{} tutaj{}."
#: src/preferences.py:284
#, fuzzy
#| msgid "Installation Not Found"
msgid "Installation Not Found"
msgstr "Nie znaleziono instalacji"
#: src/preferences.py:286
#, fuzzy
#| msgid "Select the {} data directory."
msgid "Select a valid directory."
msgstr "Wybierz {} katalog danych."
msgstr "Wybierz prawidłowy katalog."
#: src/preferences.py:348
msgid "Invalid Directory"
msgstr ""
msgstr "Nieprawidłowy katalog"
#. The variable is the name of the source
#: src/preferences.py:352
#, fuzzy
#| msgid "Select the {} data directory."
msgid "Select the {} cache directory."
msgstr "Wybierz {} katalog danych."
msgstr "Wybierz katalog pamięci podręcznej {}."
#. The variable is the name of the source
#: src/preferences.py:355
#, fuzzy
#| msgid "Select the {} configuration directory."
msgid "Select the {} configuration directory."
msgstr "Wybierz {} katalog konfiguracyjny."
msgstr "Wybierz katalog konfiguracyjny {}."
#. The variable is the name of the source
#: src/preferences.py:358
#, fuzzy
#| msgid "Select the {} data directory."
msgid "Select the {} data directory."
msgstr "Wybierz {} katalog danych."
msgstr "Wybierz katalog z danymi {}."
#: src/preferences.py:364
msgid "Set Location"
@@ -566,14 +549,12 @@ msgid "Dismiss"
msgstr "Odrzucić"
#: src/store/managers/sgdb_manager.py:47
#, fuzzy
#| msgid "Couldn't Connect to SteamGridDB"
msgid "Couldn't Authenticate SteamGridDB"
msgstr "Nie można połączyć się z SteamGridDB"
msgstr "Nie można uwierzytelnić SteamGridDB"
#: src/store/managers/sgdb_manager.py:48
msgid "Verify your API key in preferences"
msgstr ""
msgstr "Zweryfikuj swój klucz API w preferencjach"
#, fuzzy
#~| msgid "Cache Not Found"

View File

@@ -3,13 +3,14 @@
# This file is distributed under the same license as the Cartridges package.
# Henrique Machado <henriquecamposrj@gmail.com>, 2023.
# Vinícius Gama Santos <vinny.stalck@protonmail.com>, 2023.
# Vítor Fernandes Almado <vfalmado@gmail.com>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-05 14:36+0200\n"
"PO-Revision-Date: 2023-06-02 15:40+0000\n"
"Last-Translator: Vinícius Gama Santos <vinny.stalck@protonmail.com>\n"
"PO-Revision-Date: 2023-07-11 15:52+0000\n"
"Last-Translator: Vítor Fernandes Almado <vfalmado@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"cartridges/cartridges/pt_BR/>\n"
"Language: pt_BR\n"
@@ -17,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.18-dev\n"
"X-Generator: Weblate 5.0-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
@@ -277,11 +278,11 @@ msgstr "itch"
#: data/gtk/preferences.blp:216
msgid "Legendary"
msgstr ""
msgstr "Lendário"
#: data/gtk/preferences.blp:230
msgid "Flatpak"
msgstr ""
msgstr "Flatpak"
#: data/gtk/preferences.blp:243
#, fuzzy
@@ -533,7 +534,7 @@ msgstr "Selecione o diretório de dados do(a) {}."
#: src/preferences.py:348
msgid "Invalid Directory"
msgstr ""
msgstr "Diretório inválido"
#. The variable is the name of the source
#: src/preferences.py:352
@@ -572,7 +573,7 @@ msgstr "Não foi possível conectar-se ao SteamGridDB"
#: src/store/managers/sgdb_manager.py:48
msgid "Verify your API key in preferences"
msgstr ""
msgstr "Verifique sua chave API nas preferências"
#, fuzzy
#~| msgid "Cache Not Found"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-05 14:36+0200\n"
"PO-Revision-Date: 2023-07-01 15:10+0000\n"
"PO-Revision-Date: 2023-07-08 14:52+0000\n"
"Last-Translator: Сергей <asvmail.as@gmail.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/cartridges/"
"cartridges/ru/>\n"
@@ -16,8 +16,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.0-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
@@ -531,17 +531,13 @@ msgstr "Выберите каталог кэша {}."
#. The variable is the name of the source
#: src/preferences.py:355
#, fuzzy
#| msgid "Select the {} installation directory."
msgid "Select the {} configuration directory."
msgstr "Выберите каталог установки {}."
msgstr "Выберите каталог конфигурации {}."
#. The variable is the name of the source
#: src/preferences.py:358
#, fuzzy
#| msgid "Select the {} cache directory."
msgid "Select the {} data directory."
msgstr "Выберите каталог кэша {}."
msgstr "Выберите каталог данных {}."
#: src/preferences.py:364
msgid "Set Location"

View File

@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-05 14:36+0200\n"
"PO-Revision-Date: 2023-07-01 22:51+0000\n"
"PO-Revision-Date: 2023-07-08 14:52+0000\n"
"Last-Translator: Luna Jernberg <droidbittin@gmail.com>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/cartridges/"
"cartridges/sv/>\n"
@@ -531,17 +531,13 @@ msgstr "Välj {} cachekatalog."
#. The variable is the name of the source
#: src/preferences.py:355
#, fuzzy
#| msgid "Select the {} installation directory."
msgid "Select the {} configuration directory."
msgstr "Välj {} installationskatalog."
msgstr "Välj {} konfigurationskatalog."
#. The variable is the name of the source
#: src/preferences.py:358
#, fuzzy
#| msgid "Select the {} cache directory."
msgid "Select the {} data directory."
msgstr "Välj {} cachekatalog."
msgstr "Välj {} datakatalog."
#: src/preferences.py:364
msgid "Set Location"

View File

@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-05 14:36+0200\n"
"PO-Revision-Date: 2023-06-28 20:19+0000\n"
"PO-Revision-Date: 2023-07-09 07:59+0000\n"
"Last-Translator: \"K.B.Dharun Krishna\" <kbdharunkrishna@gmail.com>\n"
"Language-Team: Tamil <https://hosted.weblate.org/projects/cartridges/"
"cartridges/ta/>\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.18.1\n"
"X-Generator: Weblate 5.0-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
@@ -46,10 +46,10 @@ msgid ""
"necessary. You can sort and hide games or download cover art from "
"SteamGridDB."
msgstr ""
"உங்கள் எல்லா விளையாட்டுகளுக்கும் கேட்ரிட்ஜ்கள் ஒரு எளிய விளையாட்டு துவக்கி ஆகும். ஸ்டீம் "
"(Steam), லுட்ரிஸ் (Lutris), வீரம் (Heroic) மற்றும் பலவற்றிலிருந்து விளையாட்டுகளை "
"இறக்குமதி செய்வதற்கான ஆதரவை இது கொண்டுள்ளது. நீங்கள் விளையாட்டுகளை வரிசைப்படுத்தலாம் "
"மற்றும் மறைக்கலாம் அல்லது ஸ்டீம்கிரிட் டிபி (SteamGridDB) இலிருந்து அட்டைப்பட கலையைப் "
"உங்கள் எல்லா விளையாட்டுகளுக்கும் கேட்ரிட்ஜ்கள் ஒரு எளிய விளையாட்டு துவக்கி "
"ஆகும். Steam, Lutris, Heroic மற்றும் பலவற்றிலிருந்து விளையாட்டுகளை இறக்குமதி "
"செய்வதற்கான ஆதரவை இது கொண்டுள்ளது. நீங்கள் விளையாட்டுகளை வரிசைப்படுத்தலாம் "
"மற்றும் மறைக்கலாம் அல்லது SteamGridDB இலிருந்து அட்டைப்பட கலையைப் "
"பதிவிறக்கலாம்."
#: data/hu.kramo.Cartridges.metainfo.xml.in:30
@@ -222,7 +222,7 @@ msgstr "மூலங்கள்"
#: data/gtk/preferences.blp:92
msgid "Steam"
msgstr "Steam (ஸ்டீம்)"
msgstr "Steam"
#: data/gtk/preferences.blp:96 data/gtk/preferences.blp:110
#: data/gtk/preferences.blp:151 data/gtk/preferences.blp:192
@@ -233,7 +233,7 @@ msgstr "நிறுவல் இடம்"
#: data/gtk/preferences.blp:106
msgid "Lutris"
msgstr "லூட்ரிஸ்"
msgstr "Lutris"
#: data/gtk/preferences.blp:119
msgid "Cache Location"
@@ -241,17 +241,15 @@ msgstr "தற்காலிக சேமிப்பு இடம்"
#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr "ஸ்டீம் (Steam) விளையாட்டுகளை இறக்குமதி செய்யவும்"
msgstr "Steam விளையாட்டுகளை இறக்குமதி செய்யவும்"
#: data/gtk/preferences.blp:137
#, fuzzy
#| msgid "Import Steam Games"
msgid "Import Flatpak Games"
msgstr "ஸ்டீம் (Steam) விளையாட்டுகளை இறக்குமதி செய்யவும்"
msgstr "Flatpak கேம்களை இறக்குமதி செய்யவும்"
#: data/gtk/preferences.blp:147
msgid "Heroic"
msgstr "Heroic (ஹீரோயிக்)"
msgstr "Heroic"
#: data/gtk/preferences.blp:160
msgid "Import Epic Games"
@@ -267,29 +265,27 @@ msgstr "பக்க ஏற்றப்பட்ட விளையாட்ட
#: data/gtk/preferences.blp:188
msgid "Bottles"
msgstr "Bottles (பாட்டில்கள்)"
msgstr "பாட்டில்கள்"
#: data/gtk/preferences.blp:202
msgid "itch"
msgstr "அரிப்பு (itch)"
msgstr "itch"
#: data/gtk/preferences.blp:216
msgid "Legendary"
msgstr "பழம்பெரும்"
msgstr "Legendary"
#: data/gtk/preferences.blp:230
msgid "Flatpak"
msgstr ""
msgstr "Flatpak"
#: data/gtk/preferences.blp:243
#, fuzzy
#| msgid "Game Launcher"
msgid "Import Game Launchers"
msgstr "விளையாட்டு துவக்கி"
msgstr "விளையாட்டு துவக்கிகளை இறக்குமதி செய்"
#: data/gtk/preferences.blp:256
msgid "SteamGridDB"
msgstr "ஸ்டீம்கிரிட் டிபி (SteamGridDB)"
msgstr "SteamGridDB"
#: data/gtk/preferences.blp:260
msgid "Authentication"
@@ -301,7 +297,7 @@ msgstr "API விசை"
#: data/gtk/preferences.blp:271
msgid "Use SteamGridDB"
msgstr "ஸ்டீம்கிரிட் டிபி (SteamGridDB) ஐப் பயன்படுத்தவும்"
msgstr "SteamGridDB ஐப் பயன்படுத்தவும்"
#: data/gtk/preferences.blp:272
msgid "Download images when adding or importing games"
@@ -515,43 +511,33 @@ msgstr "அனைத்து விளையாட்டுகளும் அ
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"ஸ்டீம்கிரிட் டிபி (SteamGridDB) ஐப் பயன்படுத்த API விசை தேவை. நீங்கள் ஒன்றை {}இங்கே{} "
"SteamGridDB ஐப் பயன்படுத்த API விசை தேவை. நீங்கள் ஒன்றை {}இங்கே{} "
"உருவாக்கலாம்."
#: src/preferences.py:284
#, fuzzy
#| msgid "Installation Not Found"
msgid "Installation Not Found"
msgstr "நிறுவல் கிடைக்கவில்லை"
#: src/preferences.py:286
#, fuzzy
#| msgid "Select the {} data directory."
msgid "Select a valid directory."
msgstr "{} தரவு கோப்பகத்தைத் தேர்ந்தெடுக்கவும்."
msgstr "சரியான கோப்பகத்தைத் தேர்ந்தெடுக்கவும்."
#: src/preferences.py:348
msgid "Invalid Directory"
msgstr ""
msgstr "தவறான கோப்பகம்"
#. The variable is the name of the source
#: src/preferences.py:352
#, fuzzy
#| msgid "Select the {} data directory."
msgid "Select the {} cache directory."
msgstr "{} தரவு கோப்பகத்தைத் தேர்ந்தெடுக்கவும்."
msgstr "{} கேச் கோப்பகத்தைத் தேர்ந்தெடுக்கவும்."
#. The variable is the name of the source
#: src/preferences.py:355
#, fuzzy
#| msgid "Select the {} configuration directory."
msgid "Select the {} configuration directory."
msgstr "{} உள்ளமைவு கோப்பகத்தைத் தேர்ந்தெடுக்கவும்."
msgstr "{} கட்டமைப்பு கோப்பகத்தைத் தேர்ந்தெடுக்கவும்."
#. The variable is the name of the source
#: src/preferences.py:358
#, fuzzy
#| msgid "Select the {} data directory."
msgid "Select the {} data directory."
msgstr "{} தரவு கோப்பகத்தைத் தேர்ந்தெடுக்கவும்."
@@ -565,7 +551,7 @@ msgstr "நிராகரி"
#: src/store/managers/sgdb_manager.py:47
msgid "Couldn't Authenticate SteamGridDB"
msgstr "ஸ்டீம்கிரிட் டிபி (SteamGridDB) ஐ அங்கீகரிக்க முடியவில்லை"
msgstr "SteamGridDB ஐ அங்கீகரிக்க முடியவில்லை"
#: src/store/managers/sgdb_manager.py:48
msgid "Verify your API key in preferences"

View File

@@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-05 14:36+0200\n"
"PO-Revision-Date: 2023-05-26 18:10+0000\n"
"PO-Revision-Date: 2023-07-15 22:51+0000\n"
"Last-Translator: Sabri Ünal <libreajans@gmail.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/cartridges/"
"cartridges/tr/>\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.18-dev\n"
"X-Generator: Weblate 5.0-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
@@ -227,30 +227,24 @@ msgstr "Steam"
#: data/gtk/preferences.blp:151 data/gtk/preferences.blp:192
#: data/gtk/preferences.blp:206 data/gtk/preferences.blp:220
#: data/gtk/preferences.blp:234
#, fuzzy
#| msgid "itch Install Location"
msgid "Install Location"
msgstr "itch Kurulu Konumu"
msgstr "Kurulu Konumu"
#: data/gtk/preferences.blp:106
msgid "Lutris"
msgstr "Lutris"
#: data/gtk/preferences.blp:119
#, fuzzy
#| msgid "Lutris Cache Location"
msgid "Cache Location"
msgstr "Lutris Önbellek Konumu"
msgstr "Önbellek Konumu"
#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr "Steam Oyunlarını İçe Aktar"
#: data/gtk/preferences.blp:137
#, fuzzy
#| msgid "Import Steam Games"
msgid "Import Flatpak Games"
msgstr "Steam Oyunlarını İçe Aktar"
msgstr "Flatpak Oyunlarını İçe Aktarın"
#: data/gtk/preferences.blp:147
msgid "Heroic"
@@ -278,17 +272,15 @@ msgstr "itch"
#: data/gtk/preferences.blp:216
msgid "Legendary"
msgstr ""
msgstr "Efsanevi"
#: data/gtk/preferences.blp:230
msgid "Flatpak"
msgstr ""
msgstr "Flatpak"
#: data/gtk/preferences.blp:243
#, fuzzy
#| msgid "Game Launcher"
msgid "Import Game Launchers"
msgstr "Oyun Başlatıcı"
msgstr "Oyun Başlatıcıları İçe Aktar"
#: data/gtk/preferences.blp:256
msgid "SteamGridDB"
@@ -521,39 +513,29 @@ msgstr ""
"oluşturabilirsiniz."
#: src/preferences.py:284
#, fuzzy
#| msgid "Installation Not Found"
msgid "Installation Not Found"
msgstr "Kurulum Bulunamadı"
#: src/preferences.py:286
#, fuzzy
#| msgid "Select the {} data directory."
msgid "Select a valid directory."
msgstr "{} veri dizinini seç."
msgstr "Geçerli bir dizin seçin."
#: src/preferences.py:348
msgid "Invalid Directory"
msgstr ""
msgstr "Geçersiz Dizin"
#. The variable is the name of the source
#: src/preferences.py:352
#, fuzzy
#| msgid "Select the {} data directory."
msgid "Select the {} cache directory."
msgstr "{} veri dizinini seç."
msgstr "{} önbellek dizinini seç."
#. The variable is the name of the source
#: src/preferences.py:355
#, fuzzy
#| msgid "Select the {} configuration directory."
msgid "Select the {} configuration directory."
msgstr "{} yapılandırma dizinini seç."
#. The variable is the name of the source
#: src/preferences.py:358
#, fuzzy
#| msgid "Select the {} data directory."
msgid "Select the {} data directory."
msgstr "{} veri dizinini seç."
@@ -566,14 +548,12 @@ msgid "Dismiss"
msgstr "Vazgeç"
#: src/store/managers/sgdb_manager.py:47
#, fuzzy
#| msgid "Couldn't Connect to SteamGridDB"
msgid "Couldn't Authenticate SteamGridDB"
msgstr "SteamGridDBʼye bağlanılamadı"
msgstr "SteamGridDB Kimlik Doğrulaması Yapılamadı"
#: src/store/managers/sgdb_manager.py:48
msgid "Verify your API key in preferences"
msgstr ""
msgstr "Tercihlerde API anahtarınızı doğrulayın"
#, fuzzy
#~| msgid "Cache Not Found"

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-05 14:36+0200\n"
"PO-Revision-Date: 2023-07-01 22:51+0000\n"
"PO-Revision-Date: 2023-07-08 14:52+0000\n"
"Last-Translator: Dan <jonweblin2205@protonmail.com>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/cartridges/"
"cartridges/uk/>\n"
@@ -18,8 +18,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.0-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
@@ -534,17 +534,13 @@ msgstr "Виберіть каталог кешу {}."
#. The variable is the name of the source
#: src/preferences.py:355
#, fuzzy
#| msgid "Select the {} installation directory."
msgid "Select the {} configuration directory."
msgstr "Виберіть каталог встановлення {}."
msgstr "Виберіть каталог конфігурації {}."
#. The variable is the name of the source
#: src/preferences.py:358
#, fuzzy
#| msgid "Select the {} cache directory."
msgid "Select the {} data directory."
msgstr "Виберіть каталог кешу {}."
msgstr "Виберіть каталог даних {}."
#: src/preferences.py:364
msgid "Set Location"

View File

@@ -155,20 +155,22 @@ class DetailsWindow(Adw.Window):
return
# Increment the number after the game id (eg. imported_1, imported_2)
source_id = "imported"
numbers = [0]
game_id: str
for game_id in shared.store.games:
for game_id in shared.store.source_games.get(source_id, set()):
prefix = "imported_"
if not game_id.startswith(prefix):
continue
numbers.append(int(game_id.replace(prefix, "", 1)))
game_number = max(numbers) + 1
self.game = Game(
{
"game_id": f"imported_{game_number}",
"hidden": False,
"source": "imported",
"source": source_id,
"added": int(time()),
}
)

View File

@@ -83,7 +83,7 @@ class BottlesSourceIterator(SourceIterator):
class BottlesSource(URLExecutableSource):
"""Generic Bottles source"""
name = "Bottles"
name = _("Bottles")
iterator_class = BottlesSourceIterator
url_format = 'bottles:run/"{bottle_name}"/"{game_name}"'
available_on = {"linux"}

View File

@@ -114,7 +114,7 @@ class FlatpakSourceIterator(SourceIterator):
class FlatpakSource(Source):
"""Generic Flatpak source"""
name = "Flatpak"
name = _("Flatpak")
iterator_class = FlatpakSourceIterator
executable_format = "flatpak run {flatpak_id}"
available_on = {"linux"}

View File

@@ -81,7 +81,7 @@ class HeroicSourceIterator(SourceIterator):
runner = entry["runner"]
service = self.sub_sources[runner]["service"]
values = {
"source": self.source.id,
"source": f"{self.source.id}_{service}",
"added": added_time,
"name": entry["title"],
"developer": entry.get("developer", None),
@@ -138,7 +138,7 @@ class HeroicSourceIterator(SourceIterator):
class HeroicSource(URLExecutableSource):
"""Generic Heroic Games Launcher source"""
name = "Heroic"
name = _("Heroic")
iterator_class = HeroicSourceIterator
url_format = "heroic://launch/{app_name}"
available_on = {"linux", "win32"}
@@ -159,4 +159,4 @@ class HeroicSource(URLExecutableSource):
@property
def game_id_format(self) -> str:
"""The string format used to construct game IDs"""
return self.name.lower() + "_{service}_{game_id}"
return self.id + "_{service}_{game_id}"

View File

@@ -79,7 +79,7 @@ class ItchSourceIterator(SourceIterator):
class ItchSource(URLExecutableSource):
name = "Itch"
name = _("itch")
iterator_class = ItchSourceIterator
url_format = "itch://caves/{cave_id}/launch"
available_on = {"linux", "win32"}

View File

@@ -90,9 +90,9 @@ class LegendarySourceIterator(SourceIterator):
class LegendarySource(Source):
name = "Legendary"
name = _("Legendary")
executable_format = "legendary launch {app_name}"
available_on = {"linux", "win32"}
available_on = {"linux"}
iterator_class = LegendarySourceIterator
config_location: Location = Location(

View File

@@ -90,7 +90,7 @@ class LutrisSourceIterator(SourceIterator):
class LutrisSource(URLExecutableSource):
"""Generic Lutris source"""
name = "Lutris"
name = _("Lutris")
iterator_class = LutrisSourceIterator
url_format = "lutris:rungameid/{game_id}"
available_on = {"linux"}

View File

@@ -110,7 +110,7 @@ class SteamSourceIterator(SourceIterator):
class SteamSource(URLExecutableSource):
name = "Steam"
name = _("Steam")
available_on = {"linux", "win32"}
iterator_class = SteamSourceIterator
url_format = "steam://rungameid/{game_id}"

View File

@@ -19,6 +19,7 @@
import json
import lzma
import os
import sys
import gi
@@ -49,6 +50,7 @@ from src.store.managers.online_cover_manager import OnlineCoverManager
from src.store.managers.sgdb_manager import SGDBManager
from src.store.managers.steam_api_manager import SteamAPIManager
from src.store.store import Store
from src.utils.migrate_files_v1_to_v2 import migrate_files_v1_to_v2
from src.window import CartridgesWindow
@@ -64,6 +66,12 @@ class CartridgesApplication(Adw.Application):
def do_activate(self): # pylint: disable=arguments-differ
"""Called on app creation"""
setup_logging()
log_system_info()
if os.name == "nt":
migrate_files_v1_to_v2()
# Set fallback icon-name
Gtk.Window.set_default_icon_name(shared.APP_ID)
@@ -93,7 +101,7 @@ class CartridgesApplication(Adw.Application):
shared.store.add_manager(SteamAPIManager())
shared.store.add_manager(OnlineCoverManager())
shared.store.add_manager(SGDBManager())
shared.store.enable_manager_in_pipelines(FileManager)
shared.store.toggle_manager_in_pipelines(FileManager, True)
# Create actions
self.create_actions(
@@ -179,6 +187,7 @@ class CartridgesApplication(Adw.Application):
# Translators: Replace this with your name for it to show up in the about window
translator_credits=_("translator_credits"),
debug_info=debug_str,
debug_info_filename="cartridges.log",
)
about.present()
@@ -278,7 +287,5 @@ class CartridgesApplication(Adw.Application):
def main(_version):
"""App entry point"""
setup_logging()
log_system_info()
app = CartridgesApplication()
return app.run(sys.argv)

View File

@@ -214,10 +214,9 @@ class PreferencesWindow(Adw.PreferencesWindow):
self.toast.dismiss()
def remove_all_games(self, *_args):
for game in shared.store.games.values():
for game in shared.store:
if not game.removed:
self.removed_games.add(game)
game.removed = True
game.save()
game.update()

View File

@@ -34,7 +34,7 @@ state_schema = Gio.Settings.new(APP_ID + ".State")
home = Path.home()
data_dir = Path(GLib.get_user_data_dir())
config_dir = Path(GLib.get_user_config_dir())
cache_dir = Path(GLib.get_user_config_dir())
cache_dir = Path(GLib.get_user_cache_dir())
flatpak_dir = home / ".var" / "app"
games_dir = data_dir / "cartridges" / "games"

View File

@@ -18,6 +18,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later
import logging
from typing import MutableMapping, Generator, Any
from src import shared
from src.game import Game
@@ -31,24 +32,59 @@ class Store:
managers: dict[type[Manager], Manager]
pipeline_managers: set[Manager]
pipelines: dict[str, Pipeline]
games: dict[str, Game]
source_games: MutableMapping[str, MutableMapping[str, Game]]
def __init__(self) -> None:
self.managers = {}
self.pipeline_managers = set()
self.pipelines = {}
self.games = {}
self.source_games = {}
def __contains__(self, obj: object) -> bool:
"""Check if the game is present in the store with the `in` keyword"""
if not isinstance(obj, Game):
return False
if not (source_mapping := self.source_games.get(obj.source)):
return False
return obj.game_id in source_mapping
def __iter__(self) -> Generator[Game, None, None]:
"""Iterate through the games in the store with `for ... in`"""
for _source_id, games_mapping in self.source_games.items():
for _game_id, game in games_mapping.items():
yield game
def __len__(self) -> int:
"""Get the number of games in the store with the `len` builtin"""
return sum(len(source_mapping) for source_mapping in self.source_games)
def __getitem__(self, game_id: str) -> Game:
"""Get a game by its id with `store["game_id_goes_here"]`"""
for game in iter(self):
if game.game_id == game_id:
return game
raise KeyError("Game not found in store")
def get(self, game_id: str, default: Any = None) -> Game | Any:
"""Get a game by its ID, with a fallback if not found"""
try:
game = self[game_id]
return game
except KeyError:
return default
def add_manager(self, manager: Manager, in_pipeline=True):
"""Add a manager to the store"""
manager_type = type(manager)
self.managers[manager_type] = manager
if in_pipeline:
self.enable_manager_in_pipelines(manager_type)
self.toggle_manager_in_pipelines(manager_type, in_pipeline)
def enable_manager_in_pipelines(self, manager_type: type[Manager]):
"""Make a manager run in new pipelines"""
self.pipeline_managers.add(self.managers[manager_type])
def toggle_manager_in_pipelines(self, manager_type: type[Manager], enable: bool):
"""Change if a manager should run in new pipelines"""
if enable:
self.pipeline_managers.add(self.managers[manager_type])
else:
self.pipeline_managers.discard(self.managers[manager_type])
def cleanup_game(self, game: Game) -> None:
"""Remove a game's files"""
@@ -74,7 +110,7 @@ class Store:
return None
# Handle game duplicates
stored_game = self.games.get(game.game_id)
stored_game = self.get(game.game_id)
if not stored_game:
# New game, do as normal
logging.debug("New store game %s (%s)", game.name, game.game_id)
@@ -96,11 +132,15 @@ class Store:
for signal in manager.signals:
game.connect(signal, manager.execute_resilient_manager_logic)
# Add the game to the store
if not game.source in self.source_games:
self.source_games[game.source] = {}
self.source_games[game.source][game.game_id] = game
# Run the pipeline for the game
if not run_pipeline:
return None
pipeline = Pipeline(game, additional_data, self.pipeline_managers)
self.games[game.game_id] = game
self.pipelines[game.game_id] = pipeline
pipeline.advance()
return pipeline

View File

@@ -0,0 +1,128 @@
# migrate_files_v1_to_v2.py
#
# Copyright 2023 Geoffrey Coulaud
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# SPDX-License-Identifier: GPL-3.0-or-later
import json
import logging
from pathlib import Path
from src import shared
old_data_dir = Path.home() / ".local" / "share"
old_cartridges_data_dir = old_data_dir / "cartridges"
migrated_file_path = old_cartridges_data_dir / ".migrated"
old_games_dir = old_cartridges_data_dir / "games"
old_covers_dir = old_cartridges_data_dir / "covers"
def migrate_game_covers(game_path: Path):
"""Migrate a game covers from a source game path to the current dir"""
for suffix in (".tiff", ".gif"):
cover_path = old_covers_dir / game_path.with_suffix(suffix).name
if not cover_path.is_file():
continue
destination_cover_path = shared.covers_dir / cover_path.name
logging.info("Moving %s -> %s", str(cover_path), str(destination_cover_path))
cover_path.rename(destination_cover_path)
def migrate_files_v1_to_v2():
"""
Migrate user data from the v1.X locations to the latest location.
Fix for commit 4a204442b5d8ba2e918f8c2605d72e483bf35efd
where the windows directories for data, config and cache changed.
"""
# Skip if there is no old dir
# Skip if old == current
# Skip if already migrated
if (
not old_data_dir.is_dir()
or str(old_data_dir) == str(shared.data_dir)
or migrated_file_path.is_file()
):
return
logging.info("Migrating data dir %s", str(old_data_dir))
# Create new directories
shared.games_dir.mkdir(parents=True, exist_ok=True)
shared.covers_dir.mkdir(parents=True, exist_ok=True)
old_game_paths = set(old_games_dir.glob("*.json"))
old_imported_game_paths = set(
filter(lambda path: path.name.startswith("imported_"), old_game_paths)
)
old_other_game_paths = old_game_paths - old_imported_game_paths
# Discover current imported games
imported_game_number = 0
imported_execs = set()
for game_path in shared.games_dir.glob("imported_*.json"):
try:
game_data = json.load(game_path.open("r"))
except (OSError, json.JSONDecodeError):
continue
number = int(game_data["game_id"].replace("imported_", ""))
imported_game_number = max(number, imported_game_number)
imported_execs.add(game_data["executable"])
# Migrate imported game files
for game_path in old_imported_game_paths:
try:
game_data = json.load(game_path.open("r"))
except (OSError, json.JSONDecodeError):
continue
# Don't migrate if there's a game with the same exec
if game_data["executable"] in imported_execs:
continue
# Migrate with updated index
imported_game_number += 1
game_id = f"imported_{imported_game_number}"
game_data["game_id"] = game_id
destination_game_path = shared.games_dir / f"{game_id}.json"
logging.info(
"Moving (updated id) %s -> %s", str(game_path), str(destination_game_path)
)
json.dump(
game_data,
destination_game_path.open("w"),
indent=4,
sort_keys=True,
)
game_path.unlink()
migrate_game_covers(game_path)
# Migrate all other games
for game_path in old_other_game_paths:
# Do nothing if already in games dir
destination_game_path = shared.games_dir / game_path.name
if destination_game_path.exists():
continue
# Else, migrate the game
logging.info("Moving %s -> %s", str(game_path), str(destination_game_path))
game_path.rename(destination_game_path)
migrate_game_covers(game_path)
# Signal that this dir is migrated
migrated_file_path.touch()
logging.info("Migration done")

View File

@@ -142,8 +142,7 @@ class SteamAPIHelper:
raise SteamGameNotFoundError()
# Handle appid is not a game
game_types = ("game", "demo")
if data["data"]["type"] not in game_types:
if data["data"]["type"] not in {"game", "demo", "mod"}:
logging.debug("Appid %s is not a game", appid)
raise SteamNotAGameError()

View File

@@ -117,7 +117,7 @@ class CartridgesWindow(Adw.ApplicationWindow):
def set_library_child(self):
child, hidden_child = self.notice_empty, self.hidden_notice_empty
for game in shared.store.games.values():
for game in shared.store:
if game.removed or game.blacklisted:
continue
if game.hidden: