From c6ef2ea0b49eca2a04c2019bca774033451bac07 Mon Sep 17 00:00:00 2001 From: kramo <93832451+kra-mo@users.noreply.github.com> Date: Sat, 8 Jul 2023 12:14:37 +0200 Subject: [PATCH 01/22] uuuuuuuuuuuuuughhhhhhhhhhhhhhhhhhhhhhh --- src/importer/sources/heroic_source.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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}" From dad3dcafb7a9233c3abaec5809cef2a6236614fa Mon Sep 17 00:00:00 2001 From: kramo <93832451+kra-mo@users.noreply.github.com> Date: Sat, 8 Jul 2023 12:18:01 +0200 Subject: [PATCH 02/22] v2.0.2 --- data/hu.kramo.Cartridges.metainfo.xml.in | 5 ++--- meson.build | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/data/hu.kramo.Cartridges.metainfo.xml.in b/data/hu.kramo.Cartridges.metainfo.xml.in index 9225a99..7b3c8bc 100644 --- a/data/hu.kramo.Cartridges.metainfo.xml.in +++ b/data/hu.kramo.Cartridges.metainfo.xml.in @@ -44,11 +44,10 @@ - +
    -
  • Fixes the ability to import multiple times at once
  • -
  • Fixes an issue with non-Flatpak Steam on Linux
  • +
  • Fixes an issue with internal data storage
diff --git a/meson.build b/meson.build index 7ff4c00..27bab23 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('cartridges', - version: '2.0.1', + version: '2.0.2', meson_version: '>= 0.59.0', default_options: [ 'warning_level=2', 'werror=false', ], ) From 1c8448c1e1c0347d70b2887bb65ffefe7a4e6515 Mon Sep 17 00:00:00 2001 From: kramo <93832451+kra-mo@users.noreply.github.com> Date: Sat, 8 Jul 2023 12:36:05 +0200 Subject: [PATCH 03/22] Update docs --- docs/game_id.json.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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. From 3c019796c26876569b0de8ffd21828693c77cbc8 Mon Sep 17 00:00:00 2001 From: GeoffreyCoulaud Date: Sat, 8 Jul 2023 13:54:43 +0200 Subject: [PATCH 04/22] Initial code --- src/main.py | 2 + src/utils/migrate_files_v1_to_v2.py | 88 +++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 src/utils/migrate_files_v1_to_v2.py diff --git a/src/main.py b/src/main.py index e7c7553..bc8f0e6 100644 --- a/src/main.py +++ b/src/main.py @@ -49,6 +49,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 @@ -281,5 +282,6 @@ def main(_version): """App entry point""" setup_logging() log_system_info() + migrate_files_v1_to_v2() 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..87c09a1 --- /dev/null +++ b/src/utils/migrate_files_v1_to_v2.py @@ -0,0 +1,88 @@ +# window.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 logging +from pathlib import Path +from shutil import copyfile +import os + +from src import shared + + +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. + """ + + old_data_dir: Path = ( + Path(os.getenv("XDG_DATA_HOME")) + if "XDG_DATA_HOME" in os.environ + else Path.home() / ".local" / "share" + ) + + # Skip if there is no old dir + # Skip if old == new + # Skip if already migrated + migrated_file = old_data_dir / ".migrated" + if ( + not old_data_dir.is_dir() + or str(old_data_dir) == str(shared.data_dir) + or migrated_file.is_file() + ): + return + + logging.info("Migrating data dir %s", str(old_data_dir)) + + # Migrate games if they don't exist in the current data dir. + # If a game is migrated, its covers should be too. + old_games_dir = old_data_dir / "games" + old_covers_dir = old_data_dir / "covers" + current_games_dir = shared.data_dir / "games" + current_covers_dir = shared.data_dir / "covers" + for game_file in old_games_dir.iterdir(): + # Ignore non game files + if not game_file.is_file() or game_file.suffix != ".json": + continue + + # Do nothing if already in games dir + destination_game_file = current_games_dir / game_file.name + if destination_game_file.exists(): + continue + + # Else, migrate the game + copyfile(game_file, destination_game_file) + logging.info("Copied %s -> %s", str(game_file), str(destination_game_file)) + + # Migrate covers + for suffix in (".tiff", ".gif"): + cover_file = old_covers_dir / game_file.with_suffix(suffix).name + if not cover_file.is_file(): + continue + destination_cover_file = current_covers_dir / cover_file.name + copyfile(cover_file, destination_cover_file) + logging.info( + "Copied %s -> %s", str(cover_file), str(destination_cover_file) + ) + + # Signal that this dir is migrated + migrated_file.touch() + logging.info("Migration done") From 867e4d3cce7182bb0b05a28c665ad13ca07e8c5a Mon Sep 17 00:00:00 2001 From: GeoffreyCoulaud Date: Sat, 8 Jul 2023 14:35:43 +0200 Subject: [PATCH 05/22] Fixes to initial code --- src/utils/migrate_files_v1_to_v2.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/utils/migrate_files_v1_to_v2.py b/src/utils/migrate_files_v1_to_v2.py index 87c09a1..bebb4a0 100644 --- a/src/utils/migrate_files_v1_to_v2.py +++ b/src/utils/migrate_files_v1_to_v2.py @@ -38,11 +38,12 @@ def migrate_files_v1_to_v2(): if "XDG_DATA_HOME" in os.environ else Path.home() / ".local" / "share" ) + old_cartridges_data_dir = old_data_dir / "cartridges" # Skip if there is no old dir - # Skip if old == new + # Skip if old == current # Skip if already migrated - migrated_file = old_data_dir / ".migrated" + migrated_file = old_cartridges_data_dir / ".migrated" if ( not old_data_dir.is_dir() or str(old_data_dir) == str(shared.data_dir) @@ -52,19 +53,21 @@ def migrate_files_v1_to_v2(): 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) + # Migrate games if they don't exist in the current data dir. # If a game is migrated, its covers should be too. - old_games_dir = old_data_dir / "games" - old_covers_dir = old_data_dir / "covers" - current_games_dir = shared.data_dir / "games" - current_covers_dir = shared.data_dir / "covers" + old_games_dir = old_cartridges_data_dir / "games" + old_covers_dir = old_cartridges_data_dir / "covers" for game_file in old_games_dir.iterdir(): # Ignore non game files if not game_file.is_file() or game_file.suffix != ".json": continue # Do nothing if already in games dir - destination_game_file = current_games_dir / game_file.name + destination_game_file = shared.games_dir / game_file.name if destination_game_file.exists(): continue @@ -77,7 +80,7 @@ def migrate_files_v1_to_v2(): cover_file = old_covers_dir / game_file.with_suffix(suffix).name if not cover_file.is_file(): continue - destination_cover_file = current_covers_dir / cover_file.name + destination_cover_file = shared.covers_dir / cover_file.name copyfile(cover_file, destination_cover_file) logging.info( "Copied %s -> %s", str(cover_file), str(destination_cover_file) From 618a98ee894fc7154d5038f555b0205be2a17d65 Mon Sep 17 00:00:00 2001 From: GeoffreyCoulaud Date: Sat, 8 Jul 2023 15:09:30 +0200 Subject: [PATCH 06/22] Handle manually added games separately --- src/utils/migrate_files_v1_to_v2.py | 53 +++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/src/utils/migrate_files_v1_to_v2.py b/src/utils/migrate_files_v1_to_v2.py index bebb4a0..9c5dbae 100644 --- a/src/utils/migrate_files_v1_to_v2.py +++ b/src/utils/migrate_files_v1_to_v2.py @@ -17,10 +17,11 @@ # # SPDX-License-Identifier: GPL-3.0-or-later +import json import logging +import os from pathlib import Path from shutil import copyfile -import os from src import shared @@ -57,27 +58,59 @@ def migrate_files_v1_to_v2(): if not shared.data_dir.is_dir(): shared.data_dir.mkdir(parents=True) - # Migrate games if they don't exist in the current data dir. - # If a game is migrated, its covers should be too. old_games_dir = old_cartridges_data_dir / "games" old_covers_dir = old_cartridges_data_dir / "covers" - for game_file in old_games_dir.iterdir(): - # Ignore non game files - if not game_file.is_file() or game_file.suffix != ".json": + + old_games = set(old_games_dir.glob("*.json")) + old_imported_games = set( + filter(lambda path: path.name.startswith("imported_"), old_games) + ) + old_other_games = old_games - old_imported_games + + # Discover current imported games + imported_game_number = 0 + imported_execs = set() + for game in shared.games_dir.glob("imported_*.json"): + try: + game_data = json.load(game.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 in old_imported_games: + try: + game_data = json.load(game.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_file = shared.games_dir / f"{game_id}.json" + json.dump(game_data, destination_game_file.open("w")) + + # Migrate all other games + for game in old_other_games: # Do nothing if already in games dir - destination_game_file = shared.games_dir / game_file.name + destination_game_file = shared.games_dir / game.name if destination_game_file.exists(): continue # Else, migrate the game - copyfile(game_file, destination_game_file) - logging.info("Copied %s -> %s", str(game_file), str(destination_game_file)) + copyfile(game, destination_game_file) + logging.info("Copied %s -> %s", str(game), str(destination_game_file)) # Migrate covers for suffix in (".tiff", ".gif"): - cover_file = old_covers_dir / game_file.with_suffix(suffix).name + cover_file = old_covers_dir / game.with_suffix(suffix).name if not cover_file.is_file(): continue destination_cover_file = shared.covers_dir / cover_file.name From 3f5f8b71e88d83279798e389c36fce94599ae1cf Mon Sep 17 00:00:00 2001 From: GeoffreyCoulaud Date: Sat, 8 Jul 2023 15:25:59 +0200 Subject: [PATCH 07/22] Manually imported - Migrate covers, log message --- src/utils/migrate_files_v1_to_v2.py | 66 ++++++++++++++++------------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/src/utils/migrate_files_v1_to_v2.py b/src/utils/migrate_files_v1_to_v2.py index 9c5dbae..3d2a7b4 100644 --- a/src/utils/migrate_files_v1_to_v2.py +++ b/src/utils/migrate_files_v1_to_v2.py @@ -25,6 +25,29 @@ from shutil import copyfile from src import shared +old_data_dir: Path = ( + Path(os.getenv("XDG_DATA_HOME")) + if "XDG_DATA_HOME" in os.environ + else Path.home() / ".local" / "share" +) +old_cartridges_data_dir = old_data_dir / "cartridges" +migrated_file = 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_file: Path): + """Migrate a game covers from a source game file (json) to current dir""" + + # Migrate covers + for suffix in (".tiff", ".gif"): + cover_file = old_covers_dir / game_file.with_suffix(suffix).name + if not cover_file.is_file(): + continue + destination_cover_file = shared.covers_dir / cover_file.name + copyfile(cover_file, destination_cover_file) + logging.info("Copied %s -> %s", str(cover_file), str(destination_cover_file)) + def migrate_files_v1_to_v2(): """ @@ -34,17 +57,9 @@ def migrate_files_v1_to_v2(): where the windows directories for data, config and cache changed. """ - old_data_dir: Path = ( - Path(os.getenv("XDG_DATA_HOME")) - if "XDG_DATA_HOME" in os.environ - else Path.home() / ".local" / "share" - ) - old_cartridges_data_dir = old_data_dir / "cartridges" - # Skip if there is no old dir # Skip if old == current # Skip if already migrated - migrated_file = old_cartridges_data_dir / ".migrated" if ( not old_data_dir.is_dir() or str(old_data_dir) == str(shared.data_dir) @@ -58,9 +73,6 @@ def migrate_files_v1_to_v2(): if not shared.data_dir.is_dir(): shared.data_dir.mkdir(parents=True) - old_games_dir = old_cartridges_data_dir / "games" - old_covers_dir = old_cartridges_data_dir / "covers" - old_games = set(old_games_dir.glob("*.json")) old_imported_games = set( filter(lambda path: path.name.startswith("imported_"), old_games) @@ -70,9 +82,9 @@ def migrate_files_v1_to_v2(): # Discover current imported games imported_game_number = 0 imported_execs = set() - for game in shared.games_dir.glob("imported_*.json"): + for game_file in shared.games_dir.glob("imported_*.json"): try: - game_data = json.load(game.open("r")) + game_data = json.load(game_file.open("r")) except (OSError, json.JSONDecodeError): continue number = int(game_data["game_id"].replace("imported_", "")) @@ -80,9 +92,9 @@ def migrate_files_v1_to_v2(): imported_execs.add(game_data["executable"]) # Migrate imported game files - for game in old_imported_games: + for game_file in old_imported_games: try: - game_data = json.load(game.open("r")) + game_data = json.load(game_file.open("r")) except (OSError, json.JSONDecodeError): continue @@ -96,28 +108,22 @@ def migrate_files_v1_to_v2(): game_data["game_id"] = game_id destination_game_file = shared.games_dir / f"{game_id}.json" json.dump(game_data, destination_game_file.open("w")) + logging.info( + "Copied (updated id) %s -> %s", str(game_file), str(destination_game_file) + ) + migrate_game_covers(game_file) # Migrate all other games - for game in old_other_games: + for game_file in old_other_games: # Do nothing if already in games dir - destination_game_file = shared.games_dir / game.name + destination_game_file = shared.games_dir / game_file.name if destination_game_file.exists(): continue # Else, migrate the game - copyfile(game, destination_game_file) - logging.info("Copied %s -> %s", str(game), str(destination_game_file)) - - # Migrate covers - for suffix in (".tiff", ".gif"): - cover_file = old_covers_dir / game.with_suffix(suffix).name - if not cover_file.is_file(): - continue - destination_cover_file = shared.covers_dir / cover_file.name - copyfile(cover_file, destination_cover_file) - logging.info( - "Copied %s -> %s", str(cover_file), str(destination_cover_file) - ) + copyfile(game_file, destination_game_file) + logging.info("Copied %s -> %s", str(game_file), str(destination_game_file)) + migrate_game_covers(game_file) # Signal that this dir is migrated migrated_file.touch() From 34863901fd733cc5ba6ef7d199b1ef0bf6a8f879 Mon Sep 17 00:00:00 2001 From: GeoffreyCoulaud Date: Sat, 8 Jul 2023 15:38:38 +0200 Subject: [PATCH 08/22] 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 --- src/utils/migrate_files_v1_to_v2.py | 74 ++++++++++++++--------------- 1 file changed, 36 insertions(+), 38 deletions(-) diff --git a/src/utils/migrate_files_v1_to_v2.py b/src/utils/migrate_files_v1_to_v2.py index 3d2a7b4..ae68741 100644 --- a/src/utils/migrate_files_v1_to_v2.py +++ b/src/utils/migrate_files_v1_to_v2.py @@ -1,4 +1,4 @@ -# window.py +# migrate_files_v1_to_v2.py # # Copyright 2023 Geoffrey Coulaud # @@ -19,34 +19,26 @@ import json import logging -import os from pathlib import Path -from shutil import copyfile from src import shared -old_data_dir: Path = ( - Path(os.getenv("XDG_DATA_HOME")) - if "XDG_DATA_HOME" in os.environ - else Path.home() / ".local" / "share" -) +old_data_dir = Path.home() / ".local" / "share" old_cartridges_data_dir = old_data_dir / "cartridges" -migrated_file = old_cartridges_data_dir / ".migrated" +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_file: Path): - """Migrate a game covers from a source game file (json) to current dir""" - - # Migrate 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_file = old_covers_dir / game_file.with_suffix(suffix).name - if not cover_file.is_file(): + cover_path = old_covers_dir / game_path.with_suffix(suffix).name + if not cover_path.is_file(): continue - destination_cover_file = shared.covers_dir / cover_file.name - copyfile(cover_file, destination_cover_file) - logging.info("Copied %s -> %s", str(cover_file), str(destination_cover_file)) + 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(): @@ -63,7 +55,7 @@ def migrate_files_v1_to_v2(): if ( not old_data_dir.is_dir() or str(old_data_dir) == str(shared.data_dir) - or migrated_file.is_file() + or migrated_file_path.is_file() ): return @@ -73,18 +65,18 @@ def migrate_files_v1_to_v2(): if not shared.data_dir.is_dir(): shared.data_dir.mkdir(parents=True) - old_games = set(old_games_dir.glob("*.json")) - old_imported_games = set( - filter(lambda path: path.name.startswith("imported_"), old_games) + 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_games = old_games - old_imported_games + old_other_game_paths = old_game_paths - old_imported_game_paths # Discover current imported games imported_game_number = 0 imported_execs = set() - for game_file in shared.games_dir.glob("imported_*.json"): + for game_path in shared.games_dir.glob("imported_*.json"): try: - game_data = json.load(game_file.open("r")) + game_data = json.load(game_path.open("r")) except (OSError, json.JSONDecodeError): continue number = int(game_data["game_id"].replace("imported_", "")) @@ -92,9 +84,9 @@ def migrate_files_v1_to_v2(): imported_execs.add(game_data["executable"]) # Migrate imported game files - for game_file in old_imported_games: + for game_path in old_imported_game_paths: try: - game_data = json.load(game_file.open("r")) + game_data = json.load(game_path.open("r")) except (OSError, json.JSONDecodeError): continue @@ -106,25 +98,31 @@ def migrate_files_v1_to_v2(): imported_game_number += 1 game_id = f"imported_{imported_game_number}" game_data["game_id"] = game_id - destination_game_file = shared.games_dir / f"{game_id}.json" - json.dump(game_data, destination_game_file.open("w")) + destination_game_path = shared.games_dir / f"{game_id}.json" logging.info( - "Copied (updated id) %s -> %s", str(game_file), str(destination_game_file) + "Moving (updated id) %s -> %s", str(game_path), str(destination_game_path) ) - migrate_game_covers(game_file) + 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_file in old_other_games: + for game_path in old_other_game_paths: # Do nothing if already in games dir - destination_game_file = shared.games_dir / game_file.name - if destination_game_file.exists(): + destination_game_path = shared.games_dir / game_path.name + if destination_game_path.exists(): continue # Else, migrate the game - copyfile(game_file, destination_game_file) - logging.info("Copied %s -> %s", str(game_file), str(destination_game_file)) - migrate_game_covers(game_file) + 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.touch() + migrated_file_path.touch() logging.info("Migration done") From 6a06f7329d570c3b1dfcc0759e874b58d59e1412 Mon Sep 17 00:00:00 2001 From: kramo <93832451+kra-mo@users.noreply.github.com> Date: Sat, 8 Jul 2023 16:00:57 +0200 Subject: [PATCH 09/22] Disallow Legendary on Windows to fix Heroic --- src/importer/sources/legendary_source.py | 2 +- src/main.py | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) 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 bc8f0e6..949029d 100644 --- a/src/main.py +++ b/src/main.py @@ -19,6 +19,7 @@ import json import lzma +import os import sys import gi @@ -65,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) @@ -280,8 +287,5 @@ class CartridgesApplication(Adw.Application): def main(_version): """App entry point""" - setup_logging() - log_system_info() - migrate_files_v1_to_v2() app = CartridgesApplication() return app.run(sys.argv) From a0c46bbc74fb3eb31179fae8cc5670a46d688da6 Mon Sep 17 00:00:00 2001 From: kramo <93832451+kra-mo@users.noreply.github.com> Date: Sat, 8 Jul 2023 16:01:32 +0200 Subject: [PATCH 10/22] v2.0.3 --- data/hu.kramo.Cartridges.metainfo.xml.in | 4 ++-- meson.build | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/hu.kramo.Cartridges.metainfo.xml.in b/data/hu.kramo.Cartridges.metainfo.xml.in index 7b3c8bc..fe9034c 100644 --- a/data/hu.kramo.Cartridges.metainfo.xml.in +++ b/data/hu.kramo.Cartridges.metainfo.xml.in @@ -44,10 +44,10 @@ - +
    -
  • Fixes an issue with internal data storage
  • +
  • Fixes an issue with Windows data storage
diff --git a/meson.build b/meson.build index 27bab23..d41d12a 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('cartridges', - version: '2.0.2', + version: '2.0.3', meson_version: '>= 0.59.0', default_options: [ 'warning_level=2', 'werror=false', ], ) From b4bfe38765746c04d8f2467bf26ef7e85d1da78f Mon Sep 17 00:00:00 2001 From: kramo <93832451+kra-mo@users.noreply.github.com> Date: Sun, 9 Jul 2023 09:59:03 +0200 Subject: [PATCH 11/22] Backport new game fix - closes #143 --- src/details_window.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/details_window.py b/src/details_window.py index addebf3..33553fa 100644 --- a/src/details_window.py +++ b/src/details_window.py @@ -158,11 +158,12 @@ class DetailsWindow(Adw.Window): source_id = "imported" numbers = [0] game_id: str - for game_id in shared.source_games[source_id]: + 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( From c3bd7ee73653db3ce9942dd48a756171ae66a9e9 Mon Sep 17 00:00:00 2001 From: kramo <93832451+kra-mo@users.noreply.github.com> Date: Sun, 9 Jul 2023 10:00:10 +0200 Subject: [PATCH 12/22] v2.0.4 --- data/hu.kramo.Cartridges.metainfo.xml.in | 4 ++-- meson.build | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/hu.kramo.Cartridges.metainfo.xml.in b/data/hu.kramo.Cartridges.metainfo.xml.in index fe9034c..4a12228 100644 --- a/data/hu.kramo.Cartridges.metainfo.xml.in +++ b/data/hu.kramo.Cartridges.metainfo.xml.in @@ -44,10 +44,10 @@ - +
    -
  • Fixes an issue with Windows data storage
  • +
  • Fixes an issue with adding new games manually
diff --git a/meson.build b/meson.build index d41d12a..e8c4d37 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('cartridges', - version: '2.0.3', + version: '2.0.4', meson_version: '>= 0.59.0', default_options: [ 'warning_level=2', 'werror=false', ], ) From cd986c3f5e7da4fcfbb44c367037f863542d2654 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sun, 9 Jul 2023 09:59:13 +0200 Subject: [PATCH 13/22] Translated using Weblate (Arabic) Currently translated at 100.0% (121 of 121 strings) Co-authored-by: Ali Aljishi Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/ar/ Translation: Cartridges/Cartridges --- po/ar.po | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) 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" From d7d6270bbc6eefa05dde36fe3418d2bbed6f9533 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sun, 9 Jul 2023 09:59:13 +0200 Subject: [PATCH 14/22] Translated using Weblate (Spanish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (121 of 121 strings) Co-authored-by: Hosted Weblate Co-authored-by: Óscar Fernández Díaz Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/es/ Translation: Cartridges/Cartridges --- po/es.po | 43 ++++++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 23 deletions(-) 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" From ac71bc6ecb1805932be6c304e882c99f42f8b616 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sun, 9 Jul 2023 09:59:13 +0200 Subject: [PATCH 15/22] Translated using Weblate (Russian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (121 of 121 strings) Co-authored-by: Hosted Weblate Co-authored-by: Сергей Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/ru/ Translation: Cartridges/Cartridges --- po/ru.po | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) 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" From 6bf246a8e6a8c2c489cb2b6a6a684fbbf9f34cc7 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sun, 9 Jul 2023 09:59:13 +0200 Subject: [PATCH 16/22] Translated using Weblate (Dutch) Currently translated at 100.0% (121 of 121 strings) Co-authored-by: Hosted Weblate Co-authored-by: Philip Goto Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/nl/ Translation: Cartridges/Cartridges --- po/nl.po | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) 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" From bc25afa494718247165c5d3f336c6b4359509937 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sun, 9 Jul 2023 09:59:13 +0200 Subject: [PATCH 17/22] Translated using Weblate (Ukrainian) Currently translated at 100.0% (121 of 121 strings) Co-authored-by: Dan Co-authored-by: Hosted Weblate Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/uk/ Translation: Cartridges/Cartridges --- po/uk.po | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) 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" From 633e2a6c5d6fee9f348ad860b42e6477747e3a73 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sun, 9 Jul 2023 09:59:14 +0200 Subject: [PATCH 18/22] Translated using Weblate (Italian) Currently translated at 100.0% (121 of 121 strings) Co-authored-by: Alessandro Iepure Co-authored-by: Hosted Weblate Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/it/ Translation: Cartridges/Cartridges --- po/it.po | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) 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" From 220d00141fc9db18214f57095ce710ccd0c42d23 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sun, 9 Jul 2023 09:59:14 +0200 Subject: [PATCH 19/22] Translated using Weblate (Tamil) Currently translated at 100.0% (121 of 121 strings) Co-authored-by: K.B.Dharun Krishna Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/ta/ Translation: Cartridges/Cartridges --- po/ta.po | 62 ++++++++++++++++++++++---------------------------------- 1 file changed, 24 insertions(+), 38 deletions(-) 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" From 19432a1fe7c8bef1e503b519bb839788cfbe95ab Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sun, 9 Jul 2023 09:59:14 +0200 Subject: [PATCH 20/22] Translated using Weblate (Swedish) Currently translated at 100.0% (121 of 121 strings) Co-authored-by: Hosted Weblate Co-authored-by: Luna Jernberg Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/sv/ Translation: Cartridges/Cartridges --- po/sv.po | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) 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" From 99ef85daf3ec6d7ae560dd8015fd1719846614fa Mon Sep 17 00:00:00 2001 From: kramo <93832451+kra-mo@users.noreply.github.com> Date: Sun, 9 Jul 2023 10:01:35 +0200 Subject: [PATCH 21/22] Update release description --- data/hu.kramo.Cartridges.metainfo.xml.in | 1 + 1 file changed, 1 insertion(+) diff --git a/data/hu.kramo.Cartridges.metainfo.xml.in b/data/hu.kramo.Cartridges.metainfo.xml.in index 4a12228..20e075f 100644 --- a/data/hu.kramo.Cartridges.metainfo.xml.in +++ b/data/hu.kramo.Cartridges.metainfo.xml.in @@ -48,6 +48,7 @@
  • Fixes an issue with adding new games manually
  • +
  • Translations since 2.0
From 5be70bba5265d62c1069d13eafa73db2e5035058 Mon Sep 17 00:00:00 2001 From: kramo <93832451+kra-mo@users.noreply.github.com> Date: Sun, 9 Jul 2023 14:26:44 +0200 Subject: [PATCH 22/22] Add extra sources to desktop entry --- data/hu.kramo.Cartridges.desktop.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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