diff --git a/data/hu.kramo.Cartridges.desktop.in b/data/hu.kramo.Cartridges.desktop.in index 643d02f..7341def 100644 --- a/data/hu.kramo.Cartridges.desktop.in +++ b/data/hu.kramo.Cartridges.desktop.in @@ -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 diff --git a/data/hu.kramo.Cartridges.metainfo.xml.in b/data/hu.kramo.Cartridges.metainfo.xml.in index ec619a3..f908ea3 100644 --- a/data/hu.kramo.Cartridges.metainfo.xml.in +++ b/data/hu.kramo.Cartridges.metainfo.xml.in @@ -44,11 +44,11 @@ - +
    -
  • Fixes the ability to import multiple times at once
  • -
  • Fixes an issue with non-Flatpak Steam on Linux
  • +
  • Fixes an issue with adding new games manually
  • +
  • Translations since 2.0
diff --git a/docs/game_id.json.md b/docs/game_id.json.md index c7e879b..a886bf0 100644 --- a/docs/game_id.json.md +++ b/docs/game_id.json.md @@ -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. diff --git a/meson.build b/meson.build index 7ff4c00..e8c4d37 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('cartridges', - version: '2.0.1', + version: '2.0.4', meson_version: '>= 0.59.0', default_options: [ 'warning_level=2', 'werror=false', ], ) diff --git a/po/ar.po b/po/ar.po index 3673eac..73185ab 100644 --- a/po/ar.po +++ b/po/ar.po @@ -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 \n" "Language-Team: Arabic \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" diff --git a/po/es.po b/po/es.po index ef2a89e..462e8e0 100644 --- a/po/es.po +++ b/po/es.po @@ -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 \n" +"PO-Revision-Date: 2023-07-08 14:52+0000\n" +"Last-Translator: Óscar Fernández Díaz \n" "Language-Team: Spanish \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" diff --git a/po/it.po b/po/it.po index 8368a72..09e83ae 100644 --- a/po/it.po +++ b/po/it.po @@ -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 \n" +"PO-Revision-Date: 2023-07-08 14:52+0000\n" +"Last-Translator: Alessandro Iepure \n" "Language-Team: Italian \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" diff --git a/po/nl.po b/po/nl.po index 1a57d79..b85ed43 100644 --- a/po/nl.po +++ b/po/nl.po @@ -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 \n" "Language-Team: Dutch \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" diff --git a/po/ru.po b/po/ru.po index 4ea2748..21dde88 100644 --- a/po/ru.po +++ b/po/ru.po @@ -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: Сергей \n" "Language-Team: Russian \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" diff --git a/po/sv.po b/po/sv.po index 3fb3b99..d6f1122 100644 --- a/po/sv.po +++ b/po/sv.po @@ -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 \n" "Language-Team: Swedish \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" diff --git a/po/ta.po b/po/ta.po index d062757..f609724 100644 --- a/po/ta.po +++ b/po/ta.po @@ -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\" \n" "Language-Team: Tamil \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" diff --git a/po/uk.po b/po/uk.po index 87d8aa5..2ac3ec9 100644 --- a/po/uk.po +++ b/po/uk.po @@ -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 \n" "Language-Team: Ukrainian \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" diff --git a/src/importer/sources/heroic_source.py b/src/importer/sources/heroic_source.py index aba4310..716c222 100644 --- a/src/importer/sources/heroic_source.py +++ b/src/importer/sources/heroic_source.py @@ -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), @@ -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}" diff --git a/src/importer/sources/legendary_source.py b/src/importer/sources/legendary_source.py index 2c215ca..5b8a2a3 100644 --- a/src/importer/sources/legendary_source.py +++ b/src/importer/sources/legendary_source.py @@ -92,7 +92,7 @@ class LegendarySourceIterator(SourceIterator): class LegendarySource(Source): name = "Legendary" executable_format = "legendary launch {app_name}" - available_on = {"linux", "win32"} + available_on = {"linux"} iterator_class = LegendarySourceIterator config_location: Location = Location( diff --git a/src/main.py b/src/main.py index feb4b13..c6c9136 100644 --- a/src/main.py +++ b/src/main.py @@ -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 @@ -65,6 +67,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) @@ -292,7 +300,5 @@ class CartridgesApplication(Adw.Application): def main(_version): """App entry point""" - setup_logging() - log_system_info() app = CartridgesApplication() return app.run(sys.argv) diff --git a/src/utils/migrate_files_v1_to_v2.py b/src/utils/migrate_files_v1_to_v2.py new file mode 100644 index 0000000..ae68741 --- /dev/null +++ b/src/utils/migrate_files_v1_to_v2.py @@ -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 . +# +# 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 the current data dir if needed + if not shared.data_dir.is_dir(): + shared.data_dir.mkdir(parents=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")