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