diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..9a3d195
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+github: [kra-mo, GeoffreyCoulaud]
diff --git a/README.md b/README.md
index a22ba2a..d415db7 100644
--- a/README.md
+++ b/README.md
@@ -45,14 +45,25 @@ Cartridges is a simple game launcher written in Python using GTK4 and Libadwaita
- Legendary
- RetroArch
- Flatpak
-- Hiding games
+ - Desktop Entries
+- Filtering games by source
- Searching and sorting by title, date added and last played
+- Hiding games
- Automatically downloading cover art from [SteamGridDB](https://www.steamgriddb.com/)
- Searching for games on various databases
- Animated covers
For updates and questions, join our [Discord server][discord-url] (bridged to [Matrix](https://matrix.to/#/#cartridges:matrix.org))!
+## Donations
+We accept donations through GitHub Sponsors to our main contributors:
+
+[Sponsor kramo](https://github.com/sponsors/kra-mo)
+
+[Sponsor Geoffrey Coulaud](https://github.com/sponsors/geoffreycoulaud)
+
+Thank you for your generosity! 💜
+
# Installation
## Linux
diff --git a/data/cartridges.gresource.xml.in b/data/cartridges.gresource.xml.in
index 472f6fb..4704591 100644
--- a/data/cartridges.gresource.xml.in
+++ b/data/cartridges.gresource.xml.in
@@ -1,6 +1,7 @@
+ @APP_ID@.metainfo.xml
gtk/window.ui
gtk/help-overlay.ui
gtk/game.ui
@@ -11,4 +12,14 @@
library_placeholder.svg
library_placeholder_small.svg
+
+ icons/sources/bottles-source-symbolic.svg
+ icons/sources/flatpak-source-symbolic.svg
+ icons/sources/heroic-source-symbolic.svg
+ icons/sources/itch-source-symbolic.svg
+ icons/sources/legendary-source-symbolic.svg
+ icons/sources/lutris-source-symbolic.svg
+ icons/sources/retroarch-source-symbolic.svg
+ icons/sources/steam-source-symbolic.svg
+
diff --git a/data/gtk/details-window.blp b/data/gtk/details-window.blp
index 6efa0f0..2bef55d 100644
--- a/data/gtk/details-window.blp
+++ b/data/gtk/details-window.blp
@@ -2,159 +2,151 @@ using Gtk 4.0;
using Adw 1;
template $DetailsWindow : Adw.Window {
- default-width: 480; // Same as Nautilus' properties window
- default-height: -1;
- modal: true;
+ default-width: 480; // Same as Nautilus' properties window
+ default-height: -1;
+ modal: true;
- ShortcutController {
- Shortcut {
- trigger: "Escape";
- action: "action(window.close)";
- }
- }
-
- Box {
- orientation: vertical;
-
- Adw.HeaderBar HeaderBar {
- show-start-title-buttons: false;
- show-end-title-buttons: false;
-
- [start]
- Button cancel_button {
- label: _("Cancel");
- action-name: "window.close";
- }
-
- [end]
- Button apply_button {
- styles [
- "suggested-action",
- ]
- }
+ ShortcutController {
+ Shortcut {
+ trigger: "Escape";
+ action: "action(window.close)";
+ }
}
- Adw.PreferencesPage {
- vexpand: true;
+ Adw.ToolbarView {
- Adw.PreferencesGroup cover_group {
- Adw.Clamp cover_clamp {
- maximum-size: 200;
+ [top]
+ Adw.HeaderBar HeaderBar {
+ show-start-title-buttons: false;
+ show-end-title-buttons: false;
- Overlay {
- [overlay]
- Spinner spinner {
- margin-start: 72;
- margin-end: 72;
+ [start]
+ Button cancel_button {
+ label: _("Cancel");
+ action-name: "window.close";
}
- Overlay cover_overlay {
- halign: center;
- valign: center;
-
- [overlay]
- Button cover_button_edit {
- icon-name: "document-edit-symbolic";
- tooltip-text: _("New Cover");
- halign: end;
- valign: end;
- margin-bottom: 6;
- margin-end: 6;
-
+ [end]
+ Button apply_button {
styles [
- "circular",
- "osd",
+ "suggested-action"
]
- }
+ }
+ }
- [overlay]
- Revealer cover_button_delete_revealer {
- transition-type: crossfade;
- margin-end: 40;
+ Adw.PreferencesPage {
+ Adw.PreferencesGroup cover_group {
+ Adw.Clamp cover_clamp {
+ maximum-size: 200;
+ Overlay {
+ [overlay]
+ Spinner spinner {
+ margin-start: 72;
+ margin-end: 72;
+ }
- Button cover_button_delete {
- icon-name: "user-trash-symbolic";
- tooltip-text: _("Delete Cover");
- halign: end;
- valign: end;
- margin-bottom: 6;
- margin-end: 6;
+ Overlay cover_overlay {
+ halign: center;
+ valign: center;
- styles [
- "circular",
- "osd",
- ]
+ [overlay]
+ Button cover_button_edit {
+ icon-name: "document-edit-symbolic";
+ tooltip-text: _("New Cover");
+ halign: end;
+ valign: end;
+ margin-bottom: 6;
+ margin-end: 6;
+
+ styles [
+ "circular", "osd"
+ ]
+ }
+
+ [overlay]
+ Revealer cover_button_delete_revealer {
+ transition-type: crossfade;
+ margin-end: 40;
+
+ Button cover_button_delete {
+ icon-name: "user-trash-symbolic";
+ tooltip-text: _("Delete Cover");
+ halign: end;
+ valign: end;
+ margin-bottom: 6;
+ margin-end: 6;
+
+ styles [
+ "circular", "osd"
+ ]
+ }
+ }
+
+ Picture cover {
+ width-request: 200;
+ height-request: 300;
+
+ styles [
+ "card"
+ ]
+ }
+ }
+ }
}
- }
-
- Picture cover {
- width-request: 200;
- height-request: 300;
-
- styles [
- "card",
- ]
- }
- }
- }
- }
- }
-
- Adw.PreferencesGroup {
- Adw.EntryRow name {
- title: _("Title");
- }
-
- Adw.EntryRow developer {
- title: _("Developer (optional)");
- }
- }
-
- Adw.PreferencesGroup {
- Adw.EntryRow executable {
- title: _("Executable");
-
- [suffix]
- Button file_chooser_button {
- valign: center;
- icon-name: "document-open-symbolic";
- tooltip-text: _("Select File");
-
- styles [
- "flat",
- ]
- }
-
- [suffix]
- MenuButton exec_info_button {
- valign: center;
- icon-name: "help-about-symbolic";
- tooltip-text: _("More Info");
- popover:
- Popover exec_info_popover {
- focusable: true;
-
- Label exec_info_label {
- use-markup: true;
- wrap: true;
- max-width-chars: 50;
- halign: center;
- valign: center;
- margin-top: 6;
- margin-bottom: 6;
- margin-start: 6;
- margin-end: 6;
- }
}
- ;
+ Adw.PreferencesGroup {
+ Adw.EntryRow name {
+ title: _("Title");
+ }
+ Adw.EntryRow developer {
+ title: _("Developer (optional)");
+ }
+ }
+ Adw.PreferencesGroup {
+ Adw.EntryRow executable {
+ title: _("Executable");
- styles [
- "flat",
- ]
- }
+ [suffix]
+ Button file_chooser_button {
+ valign: center;
+ icon-name: "document-open-symbolic";
+ tooltip-text: _("Select File");
+
+ styles [
+ "flat",
+ ]
+ }
+
+ [suffix]
+ MenuButton exec_info_button {
+ valign: center;
+ icon-name: "help-about-symbolic";
+ tooltip-text: _("More Info");
+
+ popover: Popover exec_info_popover {
+ focusable: true;
+
+ Label exec_info_label {
+ use-markup: true;
+ wrap: true;
+ max-width-chars: 50;
+ halign: center;
+ valign: center;
+ margin-top: 6;
+ margin-bottom: 6;
+ margin-start: 6;
+ margin-end: 6;
+ }
+ };
+
+ styles [
+ "flat"
+ ]
+ }
+
+ }
+ }
}
- }
}
- }
-}
+}
\ No newline at end of file
diff --git a/data/gtk/help-overlay.blp b/data/gtk/help-overlay.blp
index 5f39ea1..b5c3428 100644
--- a/data/gtk/help-overlay.blp
+++ b/data/gtk/help-overlay.blp
@@ -10,23 +10,18 @@ ShortcutsWindow help_overlay {
ShortcutsGroup {
title: _("General");
- ShortcutsShortcut {
- title: _("Quit");
- action-name: "app.quit";
- }
-
ShortcutsShortcut {
title: _("Search");
action-name: "win.toggle_search";
}
ShortcutsShortcut {
- title: _("Show preferences");
+ title: _("Preferences");
action-name: "app.preferences";
}
ShortcutsShortcut {
- title: _("Shortcuts");
+ title: _("Keyboard Shortcuts");
action-name: "win.show-help-overlay";
}
@@ -36,7 +31,17 @@ ShortcutsWindow help_overlay {
}
ShortcutsShortcut {
- title: _("Open menu");
+ title: _("Quit");
+ action-name: "app.quit";
+ }
+
+ ShortcutsShortcut {
+ title: _("Toggle Sidebar");
+ action-name: "win.show_sidebar";
+ }
+
+ ShortcutsShortcut {
+ title: _("Main Menu");
action-name: "win.open_menu";
}
}
@@ -45,22 +50,22 @@ ShortcutsWindow help_overlay {
title: _("Games");
ShortcutsShortcut {
- title: _("Add new game");
+ title: _("Add Game");
action-name: "app.add_game";
}
ShortcutsShortcut {
- title: _("Import games");
+ title: _("Import");
action-name: "app.import";
}
ShortcutsShortcut {
- title: _("Show hidden games");
+ title: _("Show Hidden Games");
action-name: "win.show_hidden";
}
ShortcutsShortcut {
- title: _("Remove game");
+ title: _("Remove Game");
action-name: "app.remove_game_details_view";
}
}
diff --git a/data/gtk/preferences.blp b/data/gtk/preferences.blp
index bd33ce1..8ae76c9 100644
--- a/data/gtk/preferences.blp
+++ b/data/gtk/preferences.blp
@@ -2,7 +2,6 @@ using Gtk 4.0;
using Adw 1;
template $PreferencesWindow : Adw.PreferencesWindow {
- default-height: 500;
Adw.PreferencesPage general_page {
name: "general";
@@ -12,37 +11,22 @@ template $PreferencesWindow : Adw.PreferencesWindow {
Adw.PreferencesGroup behavior_group {
title: _("Behavior");
- Adw.ActionRow {
+ Adw.SwitchRow exit_after_launch_switch {
title: _("Exit After Launching Games");
- activatable-widget: exit_after_launch_switch;
-
- Switch exit_after_launch_switch {
- valign: center;
- }
}
- Adw.ActionRow {
+ Adw.SwitchRow cover_launches_game_switch {
title: _("Cover Image Launches Game");
subtitle: _("Swaps the behavior of the cover image and the play button");
- activatable-widget: cover_launches_game_switch;
-
- Switch cover_launches_game_switch {
- valign: center;
- }
}
}
Adw.PreferencesGroup images_group {
title: _("Images");
- Adw.ActionRow {
+ Adw.SwitchRow high_quality_images_switch {
title: _("High Quality Images");
subtitle: _("Save game covers losslessly at the cost of storage");
- activatable-widget: high_quality_images_switch;
-
- Switch high_quality_images_switch {
- valign: center;
- }
}
}
@@ -87,13 +71,8 @@ template $PreferencesWindow : Adw.PreferencesWindow {
Adw.PreferencesGroup import_behavior_group {
title: _("Behavior");
- Adw.ActionRow {
+ Adw.SwitchRow remove_missing_switch {
title: _("Remove Uninstalled Games");
- activatable-widget: remove_missing_switch;
-
- Switch remove_missing_switch {
- valign: center;
- }
}
}
@@ -145,22 +124,12 @@ template $PreferencesWindow : Adw.PreferencesWindow {
}
}
- Adw.ActionRow {
+ Adw.SwitchRow lutris_import_steam_switch {
title: _("Import Steam Games");
- activatable-widget: lutris_import_steam_switch;
-
- Switch lutris_import_steam_switch {
- valign: center;
- }
}
- Adw.ActionRow {
+ Adw.SwitchRow lutris_import_flatpak_switch {
title: _("Import Flatpak Games");
- activatable-widget: lutris_import_flatpak_switch;
-
- Switch lutris_import_flatpak_switch {
- valign: center;
- }
}
}
@@ -180,40 +149,20 @@ template $PreferencesWindow : Adw.PreferencesWindow {
}
}
- Adw.ActionRow {
+ Adw.SwitchRow heroic_import_epic_switch {
title: _("Import Epic Games");
- activatable-widget: heroic_import_epic_switch;
-
- Switch heroic_import_epic_switch {
- valign: center;
- }
}
- Adw.ActionRow {
+ Adw.SwitchRow heroic_import_gog_switch {
title: _("Import GOG Games");
- activatable-widget: heroic_import_gog_switch;
-
- Switch heroic_import_gog_switch {
- valign: center;
- }
}
- Adw.ActionRow {
+ Adw.SwitchRow heroic_import_amazon_switch {
title: _("Import Amazon Games");
- activatable-widget: heroic_import_amazon_switch;
-
- Switch heroic_import_amazon_switch {
- valign: center;
- }
}
- Adw.ActionRow {
+ Adw.SwitchRow heroic_import_sideload_switch {
title: _("Import Sideloaded Games");
- activatable-widget: heroic_import_sideload_switch;
-
- Switch heroic_import_sideload_switch {
- valign: center;
- }
}
}
@@ -301,43 +250,13 @@ template $PreferencesWindow : Adw.PreferencesWindow {
}
}
- Adw.ActionRow flatpak_import_launchers_row {
+ Adw.SwitchRow flatpak_import_launchers_switch {
title: _("Import Game Launchers");
- activatable-widget: flatpak_import_launchers_switch;
-
- Switch flatpak_import_launchers_switch {
- valign: center;
- }
}
}
- Adw.ExpanderRow desktop_expander_row {
+ Adw.SwitchRow desktop_switch {
title: _("Desktop Entries");
- show-enable-switch: true;
-
- Adw.ComboRow desktop_terminal_exec_row {
- title: _("Terminal");
- subtitle: _("Used only by games that require one to run");
- model: StringList {
- strings [
- _("Custom"),
- "xdg-terminal-exec",
- "GNOME Console",
- "GNOME Terminal",
- "Konsole",
- "XTerm"
- ]
- };
- [suffix]
- Revealer desktop_tereminal_custom_exec_revealer {
- transition-type: slide_right;
-
- Entry desktop_tereminal_custom_exec {
- valign: center;
- placeholder-text: _("Executable");
- }
- }
- }
}
}
}
@@ -358,30 +277,28 @@ template $PreferencesWindow : Adw.PreferencesWindow {
Adw.PreferencesGroup sgdb_behavior_group {
title: _("Behavior");
- Adw.ActionRow sgdb_switch_row {
+ Adw.SwitchRow sgdb_switch {
title: _("Use SteamGridDB");
subtitle: _("Download images when adding or importing games");
- activatable-widget: sgdb_switch;
-
- Switch sgdb_switch {
- valign: center;
- }
}
- Adw.ActionRow {
+ Adw.SwitchRow sgdb_prefer_switch {
title: _("Prefer Over Official Images");
- activatable-widget: sgdb_prefer_switch;
-
- Switch sgdb_prefer_switch {
- valign: center;
- }
}
- Adw.ActionRow {
+ Adw.SwitchRow sgdb_animated_switch {
title: _("Prefer Animated Images");
- activatable-widget: sgdb_animated_switch;
+ }
+ }
- Switch sgdb_animated_switch {
+ Adw.PreferencesGroup {
+ Adw.ActionRow {
+ title: _("Update Covers");
+ subtitle: _("Fetch covers for games already in your library");
+ sensitive: bind sgdb_switch.active;
+
+ Button sgdb_fetch_button {
+ label: _("Update");
valign: center;
}
}
diff --git a/data/gtk/window.blp b/data/gtk/window.blp
index c68e1ee..f320b6d 100644
--- a/data/gtk/window.blp
+++ b/data/gtk/window.blp
@@ -45,339 +45,424 @@ Adw.StatusPage hidden_notice_empty {
template $CartridgesWindow : Adw.ApplicationWindow {
title: _("Cartridges");
+ width-request: 281;
+ height-request: 100;
+
+ Adw.Breakpoint {
+ condition ("max-width: 564px")
+ setters {
+ overlay_split_view.collapsed: true;
+ details_view_box.orientation: vertical;
+ details_view_box.margin-top: 12;
+ details_view_box.margin-start: 12;
+ details_view_box.margin-end: 12;
+ details_view_details_box.margin-start: 0;
+ details_view_details_box.margin-end: 0;
+ details_view_title.margin-top: 30;
+ details_view_title.halign: center;
+ details_view_developer.halign: center;
+ details_view_date_box.halign: center;
+ details_view_toolbar.halign: center;
+ details_view_toolbar.orientation: vertical;
+ details_view_play_button.halign: center;
+ details_view_toolbar_buttons.margin-start: 0;
+ }
+ }
Adw.ToastOverlay toast_overlay {
- Stack stack {
- visible-child: library_view;
- transition-type: over_left;
+ Adw.NavigationView navigation_view {
+ Adw.NavigationPage library_page {
+ title: _("All Games");
- Overlay details_view {
- name: "details_view";
-
- [overlay]
- Box details_view_box {
- orientation: vertical;
-
- Adw.HeaderBar {
- [start]
- Button back_button {
- tooltip-text: _("Back");
- action-name: "win.go_back";
- icon-name: "go-previous-symbolic";
- }
-
- [title]
- Adw.WindowTitle details_view_header_bar_title {
- title: _("Game Details");
- }
-
- styles [
- "flat",
- ]
- }
-
- Adw.Bin {
- hexpand: true;
- vexpand: true;
-
- Box {
- halign: center;
- valign: center;
- margin-start: 24;
- margin-end: 24;
- margin-top: 24;
- margin-bottom: 24;
-
- Adw.Clamp {
- maximum-size: 200;
-
- Overlay {
- [overlay]
- Spinner details_view_spinner {
- margin-start: 72;
- margin-end: 72;
+ Adw.OverlaySplitView overlay_split_view {
+ [sidebar]
+ Adw.NavigationPage {
+ title: _("Cartridges");
+ Adw.ToolbarView {
+ [top]
+ Adw.HeaderBar {
+ [start]
+ Button {
+ icon-name: "sidebar-show-symbolic";
+ action-name: "win.show_sidebar";
+ tooltip-text: _("Toggle Sidebar");
}
+ }
- Picture details_view_cover {
- halign: end;
+ ScrolledWindow {
+ ListBox sidebar {
+ Box all_games_row_box {
+ margin-top: 12;
+ margin-bottom: 12;
+ margin-start: 6;
+ margin-end: 6;
+ spacing: 12;
+
+ Image {
+ icon-name: "view-grid-symbolic";
+ }
+ Label {
+ halign: start;
+ label: _("All Games");
+ }
+ Label all_games_no_label {
+ hexpand: true;
+ halign: end;
+
+ styles ["dim-label"]
+ }
+ }
+ Box added_row_box {
+ margin-top: 12;
+ margin-bottom: 12;
+ margin-start: 6;
+ spacing: 12;
+
+ Image {
+ icon-name: "list-add-symbolic";
+ }
+ Label {
+ halign: start;
+ label: _("Added");
+ margin-end: 6;
+ }
+ Label added_games_no_label {
+ hexpand: true;
+ halign: end;
+ margin-end: 6;
+
+ styles ["dim-label"]
+ }
+ }
+ ListBoxRow {
+ selectable: false;
+ activatable: false;
+ Label {
+ label: _("Imported");
+ styles ["heading"]
+ halign: start;
+ }
+ }
+ styles ["navigation-sidebar"]
+ }
+ }
+ }
+ }
+
+ Adw.ToolbarView library_view {
+
+ [top]
+ Adw.HeaderBar header_bar {
+
+ [start]
+ Revealer {
+ transition-type: slide_right;
+ reveal-child: bind overlay_split_view.show-sidebar inverted;
+ Button show_sidebar_button {
+ icon-name: "sidebar-show-symbolic";
+ action-name: "win.show_sidebar";
+ tooltip-text: _("Toggle Sidebar");
+ }
+ }
+
+ [start]
+ MenuButton {
+ tooltip-text: _("Add Game");
+ icon-name: "list-add-symbolic";
+ menu-model: add_games;
+ }
+
+ [end]
+ MenuButton primary_menu_button {
+ tooltip-text: _("Main Menu");
+ icon-name: "open-menu-symbolic";
+ menu-model: primary_menu;
+ }
+
+ [end]
+ ToggleButton search_button {
+ tooltip-text: _("Search");
+ icon-name: "system-search-symbolic";
+ action-name: "win.toggle_search";
+ }
+ }
+
+ [top]
+ SearchBar search_bar {
+ search-mode-enabled: bind search_button.active bidirectional;
+ key-capture-widget: navigation_view;
+
+ Adw.Clamp {
+ maximum-size: 500;
+ tightening-threshold: 500;
+
+ SearchEntry search_entry {
+ hexpand: true;
+ }
+ }
+ }
+
+ Overlay library_overlay {
+ ScrolledWindow scrolledwindow {
+ FlowBox library {
+ homogeneous: true;
+ halign: center;
valign: start;
- width-request: 200;
- height-request: 300;
-
- styles [
- "card",
- ]
+ column-spacing: 12;
+ row-spacing: 12;
+ margin-top: 15;
+ margin-bottom: 15;
+ margin-start: 15;
+ margin-end: 15;
+ selection-mode: none;
}
}
}
+ }
+ }
+ }
+ }
+ }
+ }
- Box {
- orientation: vertical;
- margin-start: 48;
- vexpand: true;
+Adw.NavigationPage hidden_library_page {
+ title: _("Hidden Games");
+
+ Adw.ToolbarView hidden_library_view {
+ [top]
+ Adw.HeaderBar hidden_header_bar {
+ [end]
+ MenuButton hidden_primary_menu_button {
+ tooltip-text: _("Main Menu");
+ icon-name: "open-menu-symbolic";
+ menu-model: primary_menu;
+ }
+
+ [end]
+ ToggleButton hidden_search_button {
+ tooltip-text: _("Search");
+ icon-name: "system-search-symbolic";
+ action-name: "win.toggle_search";
+ }
+ }
+
+ [top]
+ SearchBar hidden_search_bar {
+ search-mode-enabled: bind hidden_search_button.active bidirectional;
+ key-capture-widget: hidden_library_view;
+
+ Adw.Clamp {
+ maximum-size: 500;
+ tightening-threshold: 500;
+
+ SearchEntry hidden_search_entry {
+ hexpand: true;
+ }
+ }
+ }
+
+ Overlay hidden_library_overlay {
+ ScrolledWindow hidden_scrolledwindow {
+ FlowBox hidden_library {
+ homogeneous: true;
+ halign: center;
+ valign: start;
+ column-spacing: 12;
+ row-spacing: 12;
+ margin-top: 15;
+ margin-bottom: 15;
+ margin-start: 15;
+ margin-end: 15;
+ selection-mode: none;
+ }
+ }
+ }
+
+ styles [
+ "background",
+ ]
+ }
+}
+
+Adw.NavigationPage details_page {
+ title: _("Game Details");
+
+ Overlay details_view {
+ name: "details_view";
+
+ [overlay]
+ Adw.ToolbarView details_view_toolbar_view {
+
+ [top]
+ Adw.HeaderBar {
+ }
+
+ ScrolledWindow {
+ Box details_view_box {
+ halign: center;
+ valign: center;
+ margin-start: 24;
+ margin-end: 24;
+ margin-top: 24;
+ margin-bottom: 24;
+
+ Adw.Clamp {
+ maximum-size: 200;
+
+ Overlay {
+ [overlay]
+ Spinner details_view_spinner {
+ margin-start: 72;
+ margin-end: 72;
+ }
+
+ Picture details_view_cover {
+ halign: end;
+ valign: start;
+ width-request: 200;
+ height-request: 300;
+
+ styles [
+ "card",
+ ]
+ }
+ }
+ }
+
+ Box details_view_details_box {
+ orientation: vertical;
+ margin-start: 48;
+ vexpand: true;
+ valign: center;
+
+ Label details_view_title {
+ label: _("Game Title");
+ hexpand: true;
+ halign: start;
+ max-width-chars: 24;
+ wrap: true;
+ wrap-mode: word_char;
+ natural-wrap-mode: word;
+
+ styles [
+ "title-1",
+ ]
+ }
+
+ Label details_view_developer {
+ margin-top: 6;
+ hexpand: true;
+ halign: start;
+ max-width-chars: 36;
+ wrap: true;
+ wrap-mode: word_char;
+ natural-wrap-mode: word;
+
+ styles [
+ "heading",
+ ]
+ }
+
+ Box details_view_date_box {
+ orientation: horizontal;
+ margin-top: 15;
+ hexpand: true;
+ halign: start;
+
+ Label details_view_added {
+ wrap: true;
+ wrap-mode: word_char;
+ natural-wrap-mode: word;
+ justify: center;
+ }
+
+ Label details_view_last_played {
+ margin-start: 12;
+ wrap: true;
+ wrap-mode: word_char;
+ natural-wrap-mode: word;
+ justify: center;
+ }
+ }
+
+ Box details_view_toolbar {
+ hexpand: true;
+ vexpand: true;
+ valign: center;
+
+ Button details_view_play_button {
+ name: "details_view_play_button";
+ action-name: "app.launch_game";
+ label: _("Play");
+ halign: start;
+ margin-top: 24;
+
+ styles [
+ "opaque",
+ "pill",
+ ]
+ }
+
+ Box details_view_toolbar_buttons {
+ halign: start;
valign: center;
+ margin-top: 24;
+ margin-start: 9;
- Label details_view_title {
- label: _("Game Title");
- hexpand: true;
- halign: start;
- max-width-chars: 24;
- wrap: true;
- wrap-mode: word_char;
- natural-wrap-mode: word;
+ Button {
+ icon-name: "document-edit-symbolic";
+ action-name: "app.edit_game";
+ tooltip-text: _("Edit");
styles [
- "title-1",
+ "raised",
+ "circular",
]
}
- Label details_view_developer {
- margin-top: 6;
- hexpand: true;
- halign: start;
- max-width-chars: 36;
- wrap: true;
- wrap-mode: word_char;
- natural-wrap-mode: word;
+ Button details_view_hide_button {
+ action-name: "app.hide_game";
styles [
- "heading",
+ "raised",
+ "circular",
]
}
- Box {
- orientation: horizontal;
- margin-top: 15;
- hexpand: true;
- halign: start;
+ Button {
+ icon-name: "user-trash-symbolic";
+ action-name: "app.remove_game";
+ tooltip-text: _("Remove");
- Label details_view_added {
- wrap: true;
- wrap-mode: word_char;
- natural-wrap-mode: word;
- }
-
- Label details_view_last_played {
- margin-start: 12;
- wrap: true;
- wrap-mode: word_char;
- natural-wrap-mode: word;
- }
+ styles [
+ "raised",
+ "circular",
+ ]
}
- Box {
- hexpand: true;
- vexpand: true;
- valign: center;
+ MenuButton {
+ icon-name: "system-search-symbolic";
+ menu-model: search;
+ tooltip-text: _("Search");
- Button details_view_play_button {
- name: "details_view_play_button";
- action-name: "app.launch_game";
- label: _("Play");
- halign: start;
- margin-top: 24;
-
- styles [
- "opaque",
- "pill",
- ]
- }
-
- Box {
- halign: start;
- valign: center;
- margin-top: 24;
- margin-start: 9;
-
- Button {
- icon-name: "document-edit-symbolic";
- action-name: "app.edit_game";
- tooltip-text: _("Edit");
-
- styles [
- "raised",
- "circular",
- ]
- }
-
- Button details_view_hide_button {
- action-name: "app.hide_game";
-
- styles [
- "raised",
- "circular",
- ]
- }
-
- Button {
- icon-name: "user-trash-symbolic";
- action-name: "app.remove_game";
- tooltip-text: _("Remove");
-
- styles [
- "raised",
- "circular",
- ]
- }
-
- MenuButton {
- icon-name: "system-search-symbolic";
- menu-model: search;
- tooltip-text: _("Search");
-
- styles [
- "raised",
- "circular",
- ]
- }
-
- styles [
- "toolbar",
- ]
- }
+ styles [
+ "raised",
+ "circular",
+ ]
}
+
+ styles [
+ "toolbar",
+ ]
}
}
}
}
-
- Picture details_view_blurred_cover {
- keep-aspect-ratio: false;
- }
}
+ }
- Box library_view {
- orientation: vertical;
-
- Adw.HeaderBar header_bar {
- [start]
- MenuButton {
- tooltip-text: _("Add Game");
- icon-name: "list-add-symbolic";
- menu-model: add_games;
- }
-
- [end]
- MenuButton primary_menu_button {
- tooltip-text: _("Main Menu");
- icon-name: "open-menu-symbolic";
- menu-model: primary_menu;
- }
-
- [end]
- ToggleButton search_button {
- tooltip-text: _("Search");
- icon-name: "system-search-symbolic";
- action-name: "win.toggle_search";
- }
- }
-
- SearchBar search_bar {
- search-mode-enabled: bind-property search_button.active bidirectional;
- key-capture-widget: library_view;
-
- Adw.Clamp {
- maximum-size: 500;
- tightening-threshold: 500;
-
- SearchEntry search_entry {
- placeholder-text: _("Search games");
- hexpand: true;
- }
- }
- }
-
- Adw.Bin library_bin {
- ScrolledWindow scrolledwindow {
- hexpand: true;
- vexpand: true;
-
- FlowBox library {
- homogeneous: true;
- halign: center;
- valign: start;
- column-spacing: 12;
- row-spacing: 12;
- margin-top: 15;
- margin-bottom: 15;
- margin-start: 15;
- margin-end: 15;
- selection-mode: none;
- }
- }
- }
- }
-
- Box hidden_library_view {
- orientation: vertical;
-
- Adw.HeaderBar hidden_header_bar {
- [start]
- Button hidden_back_button {
- tooltip-text: _("Back");
- action-name: "win.go_back";
- icon-name: "go-previous-symbolic";
- }
-
- [title]
- Adw.WindowTitle {
- title: _("Hidden Games");
- }
-
- [end]
- MenuButton hidden_primary_menu_button {
- tooltip-text: _("Main Menu");
- icon-name: "open-menu-symbolic";
- menu-model: primary_menu;
- }
-
- [end]
- ToggleButton hidden_search_button {
- tooltip-text: _("Search");
- icon-name: "system-search-symbolic";
- action-name: "win.toggle_search";
- }
- }
-
- SearchBar hidden_search_bar {
- search-mode-enabled: bind-property hidden_search_button.active bidirectional;
- key-capture-widget: hidden_library_view;
-
- Adw.Clamp {
- maximum-size: 500;
- tightening-threshold: 500;
-
- SearchEntry hidden_search_entry {
- placeholder-text: _("Search hidden games");
- hexpand: true;
- }
- }
- }
-
- Adw.Bin hidden_library_bin {
- ScrolledWindow hidden_scrolledwindow {
- hexpand: true;
- vexpand: true;
-
- FlowBox hidden_library {
- homogeneous: true;
- halign: center;
- valign: start;
- column-spacing: 12;
- row-spacing: 12;
- margin-top: 15;
- margin-bottom: 15;
- margin-start: 15;
- margin-end: 15;
- selection-mode: none;
- }
- }
- }
-
- styles [
- "background",
- ]
- }
+ Picture details_view_blurred_cover {
+ keep-aspect-ratio: false;
}
}
}
diff --git a/data/hu.kramo.Cartridges.gschema.xml.in b/data/hu.kramo.Cartridges.gschema.xml.in
index 40d5944..8480e57 100644
--- a/data/hu.kramo.Cartridges.gschema.xml.in
+++ b/data/hu.kramo.Cartridges.gschema.xml.in
@@ -1,15 +1,6 @@
-
-
-
-
-
-
-
-
-
false
@@ -89,12 +80,6 @@
true
-
- "xdg-terminal-exec"
-
-
- ""
-
true
@@ -123,10 +108,10 @@
- 1110
+ 1170
- 820
+ 795
false
@@ -141,11 +126,11 @@
"a-z"
+
+ false
+
"[]"
-
- false
-
diff --git a/data/hu.kramo.Cartridges.metainfo.xml.in b/data/hu.kramo.Cartridges.metainfo.xml.in
index 9adfecd..e92ab1a 100644
--- a/data/hu.kramo.Cartridges.metainfo.xml.in
+++ b/data/hu.kramo.Cartridges.metainfo.xml.in
@@ -22,20 +22,20 @@
touch
- 545
+ 280
https://raw.githubusercontent.com/kra-mo/cartridges/main/data/screenshots/1.png
- Library
+ Cartridges
https://raw.githubusercontent.com/kra-mo/cartridges/main/data/screenshots/2.png
- Edit Game Details
+ Game Details
https://raw.githubusercontent.com/kra-mo/cartridges/main/data/screenshots/3.png
- Game Details
+ Edit Game Details
https://raw.githubusercontent.com/kra-mo/cartridges/main/data/screenshots/4.png
@@ -44,10 +44,31 @@
-
+
- - Fixes a small issue with import toasts
+ - Improved adaptivity for small screens
+ - Translations since 2.4
+
+
+
+
+
+
+ - Cartridges now adapts to smaller screen sizes
+ - You can now filter games by import source
+ - Ported to Libadwaita 1.4
+ - Translations since 2.3
+
+
+
+
+
+
+ - New import source: desktop entries
+ - Added the ability to pick executables via the file picker
+ - Manually added covers are now padded if they are too short
+ - Translations since 2.2
diff --git a/data/icons/sources/bottles-source-symbolic.svg b/data/icons/sources/bottles-source-symbolic.svg
new file mode 100644
index 0000000..fc654c5
--- /dev/null
+++ b/data/icons/sources/bottles-source-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/data/icons/sources/flatpak-source-symbolic.svg b/data/icons/sources/flatpak-source-symbolic.svg
new file mode 100644
index 0000000..87800a3
--- /dev/null
+++ b/data/icons/sources/flatpak-source-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/data/icons/sources/heroic-source-symbolic.svg b/data/icons/sources/heroic-source-symbolic.svg
new file mode 100644
index 0000000..63975d1
--- /dev/null
+++ b/data/icons/sources/heroic-source-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/data/icons/sources/itch-source-symbolic.svg b/data/icons/sources/itch-source-symbolic.svg
new file mode 100644
index 0000000..ff343b3
--- /dev/null
+++ b/data/icons/sources/itch-source-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/data/icons/sources/legendary-source-symbolic.svg b/data/icons/sources/legendary-source-symbolic.svg
new file mode 100644
index 0000000..3dcacfb
--- /dev/null
+++ b/data/icons/sources/legendary-source-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/data/icons/sources/lutris-source-symbolic.svg b/data/icons/sources/lutris-source-symbolic.svg
new file mode 100644
index 0000000..a9166c2
--- /dev/null
+++ b/data/icons/sources/lutris-source-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/data/icons/sources/retroarch-source-symbolic.svg b/data/icons/sources/retroarch-source-symbolic.svg
new file mode 100644
index 0000000..0bceb2a
--- /dev/null
+++ b/data/icons/sources/retroarch-source-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/data/icons/sources/steam-source-symbolic.svg b/data/icons/sources/steam-source-symbolic.svg
new file mode 100644
index 0000000..f66d4cb
--- /dev/null
+++ b/data/icons/sources/steam-source-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/data/screenshots/1.png b/data/screenshots/1.png
index ac5bd49..773dc15 100644
Binary files a/data/screenshots/1.png and b/data/screenshots/1.png differ
diff --git a/data/screenshots/2.png b/data/screenshots/2.png
index b52835b..53f87dd 100644
Binary files a/data/screenshots/2.png and b/data/screenshots/2.png differ
diff --git a/data/screenshots/3.png b/data/screenshots/3.png
index b2ca215..a73782f 100644
Binary files a/data/screenshots/3.png and b/data/screenshots/3.png differ
diff --git a/data/screenshots/4.png b/data/screenshots/4.png
index d7f24dc..1f7c57c 100644
Binary files a/data/screenshots/4.png and b/data/screenshots/4.png differ
diff --git a/flatpak/hu.kramo.Cartridges.Devel.json b/flatpak/hu.kramo.Cartridges.Devel.json
index effe704..7a74b30 100644
--- a/flatpak/hu.kramo.Cartridges.Devel.json
+++ b/flatpak/hu.kramo.Cartridges.Devel.json
@@ -1,7 +1,7 @@
{
"id" : "hu.kramo.Cartridges.Devel",
"runtime" : "org.gnome.Platform",
- "runtime-version" : "44",
+ "runtime-version" : "45",
"sdk" : "org.gnome.Sdk",
"command" : "cartridges",
"finish-args" : [
@@ -109,7 +109,7 @@
{
"type" : "git",
"url" : "https://gitlab.gnome.org/jwestman/blueprint-compiler",
- "tag" : "v0.8.1"
+ "tag" : "v0.10.0"
}
],
"cleanup" : [
diff --git a/meson.build b/meson.build
index 74e4730..0088ab3 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
project('cartridges',
- version: '2.2.1',
+ version: '2.4.1',
meson_version: '>= 0.59.0',
default_options: [ 'warning_level=2', 'werror=false', ],
)
diff --git a/po/POTFILES b/po/POTFILES
index c46d11b..290edce 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -18,4 +18,15 @@ src/utils/create_dialog.py
src/importer/importer.py
src/importer/sources/source.py
src/importer/sources/location.py
-src/store/managers/sgdb_manager.py
\ No newline at end of file
+src/importer/sources/location.py
+src/store/managers/sgdb_manager.py
+
+src/importer/sources/bottles_source.py
+src/importer/sources/desktop_source.py
+src/importer/sources/flatpak_source.py
+src/importer/sources/heroic_source.py
+src/importer/sources/itch_source.py
+src/importer/sources/legendary_source.py
+src/importer/sources/lutris_source.py
+src/importer/sources/retroarch_source.py
+src/importer/sources/steam_source.py
\ No newline at end of file
diff --git a/po/ar.po b/po/ar.po
index b84c890..5239fa2 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
-"PO-Revision-Date: 2023-08-15 17:07+0000\n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
+"PO-Revision-Date: 2023-09-23 06:00+0000\n"
"Last-Translator: Ali Aljishi \n"
"Language-Team: Arabic \n"
@@ -18,11 +18,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
-"X-Generator: Weblate 5.0-dev\n"
+"X-Generator: Weblate 5.1-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
-#: src/main.py:169
+#: data/gtk/window.blp:80
msgid "Cartridges"
msgstr "خراطيش"
@@ -60,14 +60,14 @@ msgstr "المكتبة"
msgid "Edit Game Details"
msgstr "حرِّر تفاصيل اللعبة"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:71
-#: src/details_window.py:67
+#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
+#: src/details_window.py:71
msgid "Game Details"
msgstr "تفاصيل اللعبة"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:418
-#: src/details_window.py:241 src/importer/importer.py:292
-#: src/importer/importer.py:342
+#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
+#: src/details_window.py:271 src/importer/importer.py:308
+#: src/importer/importer.py:359
msgid "Preferences"
msgstr "التفضيلات"
@@ -75,48 +75,52 @@ msgstr "التفضيلات"
msgid "Cancel"
msgstr "ألغِ"
-#: data/gtk/details-window.blp:57
+#: data/gtk/details-window.blp:55
msgid "New Cover"
msgstr "غلاف جديد"
-#: data/gtk/details-window.blp:75
+#: data/gtk/details-window.blp:73
msgid "Delete Cover"
msgstr "احذف الغلاف"
-#: data/gtk/details-window.blp:102 data/gtk/game.blp:80
+#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
msgid "Title"
msgstr "العنوان"
-#: data/gtk/details-window.blp:105
+#: data/gtk/details-window.blp:103
msgid "Developer (optional)"
msgstr "المطوِّر (اختياري)"
-#: data/gtk/details-window.blp:110
+#: data/gtk/details-window.blp:108
msgid "Executable"
msgstr "ملفُّ التنفيذ"
-#: data/gtk/details-window.blp:116
+#: data/gtk/details-window.blp:114
+msgid "Select File"
+msgstr "اختر ملفًّا"
+
+#: data/gtk/details-window.blp:125
msgid "More Info"
msgstr "معلومات أكثر"
-#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
+#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
msgid "Edit"
msgstr "حرِّر"
-#: data/gtk/game.blp:107 src/window.py:171
+#: data/gtk/game.blp:107 src/window.py:348
msgid "Hide"
msgstr "أخفِ"
-#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:56
-#: data/gtk/window.blp:209
+#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
+#: data/gtk/window.blp:433
msgid "Remove"
msgstr "أزل"
-#: data/gtk/game.blp:126 src/window.py:173
+#: data/gtk/game.blp:126 src/window.py:350
msgid "Unhide"
msgstr "اكشف"
-#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
+#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
msgid "General"
msgstr "عام"
@@ -124,8 +128,8 @@ msgstr "عام"
msgid "Quit"
msgstr "أنهِ"
-#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:217 data/gtk/window.blp:257
-#: data/gtk/window.blp:324
+#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
+#: data/gtk/window.blp:444
msgid "Search"
msgstr "ابحث"
@@ -137,8 +141,8 @@ msgstr "أظهر التفضيلات"
msgid "Shortcuts"
msgstr "الاختصارات"
-#: data/gtk/help-overlay.blp:34 src/game.py:103 src/preferences.py:120
-#: src/importer/importer.py:366
+#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
+#: src/importer/importer.py:383
msgid "Undo"
msgstr "تراجع"
@@ -166,153 +170,155 @@ msgstr "أظهر الألعاب المخفية"
msgid "Remove game"
msgstr "أزل اللعبة"
-#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:89
-#: data/gtk/preferences.blp:304
+#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
+#: data/gtk/preferences.blp:288
msgid "Behavior"
msgstr "السلوك"
-#: data/gtk/preferences.blp:16
+#: data/gtk/preferences.blp:15
msgid "Exit After Launching Games"
msgstr "اخرج بعد بدء الألعاب"
-#: data/gtk/preferences.blp:25
+#: data/gtk/preferences.blp:19
msgid "Cover Image Launches Game"
msgstr "تبدأ صورة الغلاف اللعبة"
-#: data/gtk/preferences.blp:26
+#: data/gtk/preferences.blp:20
msgid "Swaps the behavior of the cover image and the play button"
msgstr "يبدِّل سلوك صورة الغلاف وزرِّ «العب»"
-#: data/gtk/preferences.blp:36 src/details_window.py:81
+#: data/gtk/preferences.blp:25 src/details_window.py:85
msgid "Images"
msgstr "الصور"
-#: data/gtk/preferences.blp:39
+#: data/gtk/preferences.blp:28
msgid "High Quality Images"
msgstr "صور ذات دقَّة عالية"
-#: data/gtk/preferences.blp:40
+#: data/gtk/preferences.blp:29
msgid "Save game covers losslessly at the cost of storage"
msgstr "احفظ غُلُف الألعاب دون فقد على حساب مساحة التخزين"
-#: data/gtk/preferences.blp:50
+#: data/gtk/preferences.blp:34
msgid "Danger Zone"
msgstr "منطقة خطر"
-#: data/gtk/preferences.blp:53
+#: data/gtk/preferences.blp:37
msgid "Remove All Games"
msgstr "أزل كلَّ الألعاب"
-#: data/gtk/preferences.blp:85 data/gtk/window.blp:27 data/gtk/window.blp:444
+#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
msgid "Import"
msgstr "استورد"
-#: data/gtk/preferences.blp:92
-#, fuzzy
-#| msgid "Remove All Games"
+#: data/gtk/preferences.blp:75
msgid "Remove Uninstalled Games"
-msgstr "أزل كلَّ الألعاب"
+msgstr "أزل الألعاب المحذوفة"
-#: data/gtk/preferences.blp:102
+#: data/gtk/preferences.blp:80
msgid "Sources"
msgstr "المصادر"
-#: data/gtk/preferences.blp:105
+#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
msgid "Steam"
msgstr "ستيم"
-#: data/gtk/preferences.blp:109 data/gtk/preferences.blp:123
-#: data/gtk/preferences.blp:164 data/gtk/preferences.blp:214
-#: data/gtk/preferences.blp:228 data/gtk/preferences.blp:242
-#: data/gtk/preferences.blp:256 data/gtk/preferences.blp:270
+#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
+#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
+#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
msgid "Install Location"
msgstr "موضع التثبيت"
-#: data/gtk/preferences.blp:119
+#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
msgid "Lutris"
msgstr "لوترس"
-#: data/gtk/preferences.blp:132
+#: data/gtk/preferences.blp:116
msgid "Cache Location"
msgstr "موضع الذاكرة المؤقتة"
-#: data/gtk/preferences.blp:141
+#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr "استورد ألعابًا من ستيم"
-#: data/gtk/preferences.blp:150
+#: data/gtk/preferences.blp:132
msgid "Import Flatpak Games"
msgstr "استورد ألعاب فلاتباك"
-#: data/gtk/preferences.blp:160
+#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
msgid "Heroic"
msgstr "هِرُوِك"
-#: data/gtk/preferences.blp:173
+#: data/gtk/preferences.blp:153
msgid "Import Epic Games"
msgstr "استورد ألعاب أَبِك"
-#: data/gtk/preferences.blp:182
+#: data/gtk/preferences.blp:157
msgid "Import GOG Games"
msgstr "استورد ألعاب جيأوجي"
-#: data/gtk/preferences.blp:191
+#: data/gtk/preferences.blp:161
msgid "Import Amazon Games"
msgstr "استورد ألعابًا من أمازون"
-#: data/gtk/preferences.blp:200
+#: data/gtk/preferences.blp:165
msgid "Import Sideloaded Games"
msgstr "استورد ألعابًا مثبَّتةً بغير متجر"
-#: data/gtk/preferences.blp:210
+#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
msgid "Bottles"
msgstr "قوارير"
-#: data/gtk/preferences.blp:224
+#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
msgid "itch"
msgstr "إتش"
-#: data/gtk/preferences.blp:238
+#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
msgid "Legendary"
msgstr "لجندري"
-#: data/gtk/preferences.blp:252
+#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
msgid "RetroArch"
msgstr "رتروآرتش"
-#: data/gtk/preferences.blp:266
+#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
msgid "Flatpak"
msgstr "فلاتباك"
-#: data/gtk/preferences.blp:279
+#: data/gtk/preferences.blp:254
msgid "Import Game Launchers"
msgstr "استورد مشغِّلات ألعاب"
-#: data/gtk/preferences.blp:292
+#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
+msgid "Desktop Entries"
+msgstr "مدخلات سطح المكتب"
+
+#: data/gtk/preferences.blp:276
msgid "SteamGridDB"
msgstr "SteamGridDB"
-#: data/gtk/preferences.blp:296
+#: data/gtk/preferences.blp:280
msgid "Authentication"
msgstr "الاستيثاق"
-#: data/gtk/preferences.blp:299
+#: data/gtk/preferences.blp:283
msgid "API Key"
msgstr "مفتاح واجهة البرمجة"
-#: data/gtk/preferences.blp:307
+#: data/gtk/preferences.blp:291
msgid "Use SteamGridDB"
msgstr "استخدم SteamGridDB"
-#: data/gtk/preferences.blp:308
+#: data/gtk/preferences.blp:292
msgid "Download images when adding or importing games"
msgstr "نزِّل الصور حينما تنزِّل أو تستورد الألعاب"
-#: data/gtk/preferences.blp:317
+#: data/gtk/preferences.blp:296
msgid "Prefer Over Official Images"
msgstr "فضِّلها على الصور الرسمية"
-#: data/gtk/preferences.blp:326
+#: data/gtk/preferences.blp:300
msgid "Prefer Animated Images"
msgstr "فضِّل الصور المتحرِّكة"
@@ -340,126 +346,134 @@ msgstr "لا توجد ألعاب مخفية"
msgid "Games you hide will appear here."
msgstr "هنا يظهر ما أخفيت من ألعاب."
-#: data/gtk/window.blp:64 data/gtk/window.blp:305
-msgid "Back"
-msgstr "عد"
+#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
+msgid "All Games"
+msgstr "كلُّ الألعاب"
-#: data/gtk/window.blp:121
-msgid "Game Title"
-msgstr "عنوان اللعبة"
+#: data/gtk/window.blp:88 data/gtk/window.blp:162
+msgid "Toggle Sidebar"
+msgstr "أظهر شريط الجانب"
-#: data/gtk/window.blp:176
-msgid "Play"
-msgstr "العب"
+#: data/gtk/window.blp:125 src/main.py:168
+msgid "Added"
+msgstr "أُضيفَت"
-#: data/gtk/window.blp:243 data/gtk/window.blp:437
+#: data/gtk/window.blp:140
+msgid "Imported"
+msgstr "اُستوردَت"
+
+#: data/gtk/window.blp:168 data/gtk/window.blp:532
msgid "Add Game"
msgstr "أضف لعبةً"
-#: data/gtk/window.blp:250 data/gtk/window.blp:317
+#: data/gtk/window.blp:175 data/gtk/window.blp:234
msgid "Main Menu"
msgstr "القائمة الرئيسة"
-#: data/gtk/window.blp:272
-msgid "Search games"
-msgstr "ابحث عن ألعاب"
-
-#: data/gtk/window.blp:312
+#: data/gtk/window.blp:227
msgid "Hidden Games"
msgstr "الألعاب المخفية"
-#: data/gtk/window.blp:339
-msgid "Search hidden games"
-msgstr "ابحث في الألعاب المخفية"
+#: data/gtk/window.blp:337
+msgid "Game Title"
+msgstr "عنوان اللعبة"
-#: data/gtk/window.blp:376
+#: data/gtk/window.blp:394
+msgid "Play"
+msgstr "العب"
+
+#: data/gtk/window.blp:471
msgid "Sort"
msgstr "رتِّب"
-#: data/gtk/window.blp:379
+#: data/gtk/window.blp:474
msgid "A-Z"
msgstr "أ-ي"
-#: data/gtk/window.blp:385
+#: data/gtk/window.blp:480
msgid "Z-A"
msgstr "ي-أ"
-#: data/gtk/window.blp:391
+#: data/gtk/window.blp:486
msgid "Newest"
msgstr "الأجدد"
-#: data/gtk/window.blp:397
+#: data/gtk/window.blp:492
msgid "Oldest"
msgstr "الأقدم"
-#: data/gtk/window.blp:403
+#: data/gtk/window.blp:498
msgid "Last Played"
msgstr "لُعبت آخر مرَّة"
-#: data/gtk/window.blp:410
+#: data/gtk/window.blp:505
msgid "Show Hidden"
msgstr "أظهر ما أخفي"
-#: data/gtk/window.blp:423
+#: data/gtk/window.blp:518
msgid "Keyboard Shortcuts"
msgstr "اختصارات لوحة المفاتيح"
-#: data/gtk/window.blp:428
+#: data/gtk/window.blp:523
msgid "About Cartridges"
msgstr "عن «خراطيش»"
#. Translators: Replace this with your name for it to show up in the about window
-#: src/main.py:188
+#: src/main.py:207
msgid "translator_credits"
msgstr "Ali Aljishi "
#. The variable is the date when the game was added
-#: src/window.py:194
+#: src/window.py:371
msgid "Added: {}"
msgstr "أضيفت في: {}"
-#: src/window.py:197
+#: src/window.py:374
msgid "Never"
msgstr "أبدًا"
#. The variable is the date when the game was last played
-#: src/window.py:201
+#: src/window.py:378
msgid "Last played: {}"
msgstr "لُعبت آخر مرَّة في: {}"
-#: src/details_window.py:72
+#: src/details_window.py:76
msgid "Apply"
msgstr "طبِّق"
-#: src/details_window.py:78
+#: src/details_window.py:82
msgid "Add New Game"
msgstr "أضف لعبةً جديدةً"
-#: src/details_window.py:79
+#: src/details_window.py:83
msgid "Add"
msgstr "أضف"
+#: src/details_window.py:93
+msgid "Executables"
+msgstr "ملفات التنفيذ"
+
#. Translate this string as you would translate "file"
-#: src/details_window.py:92
+#: src/details_window.py:108
msgid "file.txt"
msgstr "ملف.txt"
#. As in software
-#: src/details_window.py:94
+#: src/details_window.py:110
msgid "program"
msgstr "البرنامج"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:99 src/details_window.py:101
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
msgstr "C:\\المسار\\إلى\\{}"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:105 src/details_window.py:107
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
msgstr "/المسار/إلى/{}"
-#: src/details_window.py:112
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -481,103 +495,101 @@ msgstr ""
"\n"
"ولا تنسَ إحاطة المسار بعلامتي تنصيص مزدوجتين حالما تضمَّن مسافات!"
-#: src/details_window.py:147 src/details_window.py:153
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
msgstr "تعذَّرت إضافة اللعبة"
-#: src/details_window.py:147 src/details_window.py:183
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
msgstr "لا يجوز كون عنوان اللعبة فارغًا."
-#: src/details_window.py:153 src/details_window.py:191
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
msgstr "لا يجوز كون ملفِّ التنفيذ فارغًا."
-#: src/details_window.py:182 src/details_window.py:190
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
msgstr "تعذَّر تطبيق التفضيلات"
#. The variable is the title of the game
-#: src/game.py:139
+#: src/game.py:141
msgid "{} launched"
msgstr "بُدئت {}"
#. The variable is the title of the game
-#: src/game.py:153
+#: src/game.py:155
msgid "{} hidden"
msgstr "أٌخفيت {}"
-#: src/game.py:153
+#: src/game.py:155
msgid "{} unhidden"
msgstr "أٌظهرت {}"
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:170 src/importer/importer.py:363
+#: src/game.py:169 src/importer/importer.py:380
msgid "{} removed"
msgstr "أزيلت {}"
-#: src/preferences.py:119
+#: src/preferences.py:121
msgid "All games removed"
msgstr "أُزيلت كلُّ الألعاب"
-#: src/preferences.py:168
+#: src/preferences.py:169
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"تحتاج مفتاح واجهة برمجة حال ما أردت استخدام SteamGridDB، {}هنا تولِّده{}."
-#: src/preferences.py:294
+#: src/preferences.py:296
msgid "Installation Not Found"
msgstr "لم يُعثر على التثبيت"
-#: src/preferences.py:296
+#: src/preferences.py:297
msgid "Select a valid directory."
msgstr "حدِّد مجلَّدًا صالحًا."
-#: src/preferences.py:351
+#: src/preferences.py:333 src/importer/importer.py:306
+msgid "Warning"
+msgstr "تحذير"
+
+#: src/preferences.py:367
msgid "Invalid Directory"
msgstr "مجلَّد غير صالح"
-#: src/preferences.py:357
+#: src/preferences.py:373
msgid "Set Location"
msgstr "عيِّن الموضع"
-#: src/utils/create_dialog.py:25 src/importer/importer.py:291
+#: src/utils/create_dialog.py:33 src/importer/importer.py:307
msgid "Dismiss"
msgstr "تجاهل"
-#: src/importer/importer.py:128
+#: src/importer/importer.py:142
msgid "Importing Games…"
msgstr "تُستورد الألعاب…"
-#: src/importer/importer.py:290
-msgid "Warning"
-msgstr ""
-
-#: src/importer/importer.py:311
+#: src/importer/importer.py:327
msgid "The following errors occured during import:"
-msgstr ""
+msgstr "طرأ هذا الخطأ أثناء الاستيراد:"
-#: src/importer/importer.py:339
+#: src/importer/importer.py:356
msgid "No new games found"
msgstr "لم يُعثر على ألعاب جديدة"
-#: src/importer/importer.py:351
+#: src/importer/importer.py:368
msgid "1 game imported"
msgstr "اُستوردت لعبة واحدة"
#. The variable is the number of games
-#: src/importer/importer.py:355
+#: src/importer/importer.py:372
msgid "{} games imported"
msgstr "اُستوردت {} لعبة"
#. A single game removed
-#: src/importer/importer.py:359
-#, fuzzy
-#| msgid "{} removed"
+#: src/importer/importer.py:376
msgid "1 removed"
-msgstr "أزيلت {}"
+msgstr "أزيل ١"
#. The variable is the name of the source
#: src/importer/sources/location.py:33
@@ -602,6 +614,28 @@ msgstr "تعذَّر استيثاق SteamGridDB"
msgid "Verify your API key in preferences"
msgstr "أكِّد مفتاح واجهة البرمجة في التفضيلات"
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr "لم تختر نواة رتروآرتش"
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr "ليس للقوائم التالية نواة مبدئية:"
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr "لم نستورد الألعاب التي لم تختر لها أنويةً"
+
+#~ msgid "Back"
+#~ msgstr "عد"
+
+#~ msgid "Search games"
+#~ msgstr "ابحث عن ألعاب"
+
+#~ msgid "Search hidden games"
+#~ msgstr "ابحث في الألعاب المخفية"
+
#~ msgid "The title of the game"
#~ msgstr "عنوان اللعبة"
diff --git a/po/cartridges.pot b/po/cartridges.pot
index fe22bf5..b61ce4b 100644
--- a/po/cartridges.pot
+++ b/po/cartridges.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-21 16:18+0200\n"
+"POT-Creation-Date: 2023-09-26 13:51+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -18,8 +18,9 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: data/hu.kramo.Cartridges.desktop.in:3
-#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
-#: src/main.py:174
+#: data/hu.kramo.Cartridges.metainfo.xml.in:6
+#: data/hu.kramo.Cartridges.metainfo.xml.in:30 data/gtk/window.blp:47
+#: data/gtk/window.blp:80
msgid "Cartridges"
msgstr ""
@@ -45,22 +46,18 @@ msgid ""
"SteamGridDB."
msgstr ""
-#: data/hu.kramo.Cartridges.metainfo.xml.in:30
-msgid "Library"
-msgstr ""
-
-#: data/hu.kramo.Cartridges.metainfo.xml.in:34
-msgid "Edit Game Details"
-msgstr ""
-
-#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:71
-#: src/details_window.py:69
+#: data/hu.kramo.Cartridges.metainfo.xml.in:34 data/gtk/window.blp:288
+#: src/details_window.py:71
msgid "Game Details"
msgstr ""
-#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:430
-#: src/details_window.py:263 src/importer/importer.py:301
-#: src/importer/importer.py:352
+#: data/hu.kramo.Cartridges.metainfo.xml.in:38
+msgid "Edit Game Details"
+msgstr ""
+
+#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/help-overlay.blp:19
+#: data/gtk/window.blp:515 src/details_window.py:271
+#: src/importer/importer.py:319 src/importer/importer.py:370
msgid "Preferences"
msgstr ""
@@ -68,265 +65,262 @@ msgstr ""
msgid "Cancel"
msgstr ""
-#: data/gtk/details-window.blp:58
+#: data/gtk/details-window.blp:55
msgid "New Cover"
msgstr ""
-#: data/gtk/details-window.blp:77
+#: data/gtk/details-window.blp:73
msgid "Delete Cover"
msgstr ""
-#: data/gtk/details-window.blp:105 data/gtk/game.blp:80
+#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
msgid "Title"
msgstr ""
-#: data/gtk/details-window.blp:109
+#: data/gtk/details-window.blp:103
msgid "Developer (optional)"
msgstr ""
-#: data/gtk/details-window.blp:115 data/gtk/preferences.blp:310
+#: data/gtk/details-window.blp:108
msgid "Executable"
msgstr ""
-#: data/gtk/details-window.blp:121
+#: data/gtk/details-window.blp:114
msgid "Select File"
msgstr ""
-#: data/gtk/details-window.blp:132
+#: data/gtk/details-window.blp:125
msgid "More Info"
msgstr ""
-#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
+#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:415
msgid "Edit"
msgstr ""
-#: data/gtk/game.blp:107 src/window.py:175
+#: data/gtk/game.blp:107 src/window.py:350
msgid "Hide"
msgstr ""
-#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:56
-#: data/gtk/window.blp:215
+#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
+#: data/gtk/window.blp:435
msgid "Remove"
msgstr ""
-#: data/gtk/game.blp:126 src/window.py:177
+#: data/gtk/game.blp:126 src/window.py:352
msgid "Unhide"
msgstr ""
-#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
+#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
msgid "General"
msgstr ""
-#: data/gtk/help-overlay.blp:14
-msgid "Quit"
-msgstr ""
-
-#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:226 data/gtk/window.blp:269
-#: data/gtk/window.blp:336
+#: data/gtk/help-overlay.blp:14 data/gtk/window.blp:184 data/gtk/window.blp:243
+#: data/gtk/window.blp:446
msgid "Search"
msgstr ""
-#: data/gtk/help-overlay.blp:24
-msgid "Show preferences"
+#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:520
+msgid "Keyboard Shortcuts"
msgstr ""
-#: data/gtk/help-overlay.blp:29
-msgid "Shortcuts"
-msgstr ""
-
-#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:128
-#: src/importer/importer.py:376
+#: data/gtk/help-overlay.blp:29 src/game.py:105 src/preferences.py:125
+#: src/importer/importer.py:394
msgid "Undo"
msgstr ""
-#: data/gtk/help-overlay.blp:39
-msgid "Open menu"
+#: data/gtk/help-overlay.blp:34
+msgid "Quit"
msgstr ""
-#: data/gtk/help-overlay.blp:45
+#: data/gtk/help-overlay.blp:39 data/gtk/window.blp:88 data/gtk/window.blp:164
+msgid "Toggle Sidebar"
+msgstr ""
+
+#: data/gtk/help-overlay.blp:44 data/gtk/window.blp:177 data/gtk/window.blp:236
+msgid "Main Menu"
+msgstr ""
+
+#: data/gtk/help-overlay.blp:50
msgid "Games"
msgstr ""
-#: data/gtk/help-overlay.blp:48
-msgid "Add new game"
+#: data/gtk/help-overlay.blp:53 data/gtk/window.blp:170 data/gtk/window.blp:534
+msgid "Add Game"
msgstr ""
-#: data/gtk/help-overlay.blp:53
-msgid "Import games"
-msgstr ""
-
-#: data/gtk/help-overlay.blp:58
-msgid "Show hidden games"
-msgstr ""
-
-#: data/gtk/help-overlay.blp:63
-msgid "Remove game"
-msgstr ""
-
-#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:88
-#: data/gtk/preferences.blp:332
-msgid "Behavior"
-msgstr ""
-
-#: data/gtk/preferences.blp:16
-msgid "Exit After Launching Games"
-msgstr ""
-
-#: data/gtk/preferences.blp:25
-msgid "Cover Image Launches Game"
-msgstr ""
-
-#: data/gtk/preferences.blp:26
-msgid "Swaps the behavior of the cover image and the play button"
-msgstr ""
-
-#: data/gtk/preferences.blp:36 src/details_window.py:83
-msgid "Images"
-msgstr ""
-
-#: data/gtk/preferences.blp:39
-msgid "High Quality Images"
-msgstr ""
-
-#: data/gtk/preferences.blp:40
-msgid "Save game covers losslessly at the cost of storage"
-msgstr ""
-
-#: data/gtk/preferences.blp:50
-msgid "Danger Zone"
-msgstr ""
-
-#: data/gtk/preferences.blp:53
-msgid "Remove All Games"
-msgstr ""
-
-#: data/gtk/preferences.blp:84 data/gtk/window.blp:27 data/gtk/window.blp:456
+#: data/gtk/help-overlay.blp:58 data/gtk/preferences.blp:68
+#: data/gtk/window.blp:27 data/gtk/window.blp:541
msgid "Import"
msgstr ""
-#: data/gtk/preferences.blp:91
+#: data/gtk/help-overlay.blp:63
+msgid "Show Hidden Games"
+msgstr ""
+
+#: data/gtk/help-overlay.blp:68
+msgid "Remove Game"
+msgstr ""
+
+#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
+#: data/gtk/preferences.blp:278
+msgid "Behavior"
+msgstr ""
+
+#: data/gtk/preferences.blp:15
+msgid "Exit After Launching Games"
+msgstr ""
+
+#: data/gtk/preferences.blp:19
+msgid "Cover Image Launches Game"
+msgstr ""
+
+#: data/gtk/preferences.blp:20
+msgid "Swaps the behavior of the cover image and the play button"
+msgstr ""
+
+#: data/gtk/preferences.blp:25 src/details_window.py:85
+msgid "Images"
+msgstr ""
+
+#: data/gtk/preferences.blp:28
+msgid "High Quality Images"
+msgstr ""
+
+#: data/gtk/preferences.blp:29
+msgid "Save game covers losslessly at the cost of storage"
+msgstr ""
+
+#: data/gtk/preferences.blp:34
+msgid "Danger Zone"
+msgstr ""
+
+#: data/gtk/preferences.blp:37
+msgid "Remove All Games"
+msgstr ""
+
+#: data/gtk/preferences.blp:75
msgid "Remove Uninstalled Games"
msgstr ""
-#: data/gtk/preferences.blp:101
+#: data/gtk/preferences.blp:80
msgid "Sources"
msgstr ""
-#: data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
msgid "Steam"
msgstr ""
-#: data/gtk/preferences.blp:108 data/gtk/preferences.blp:122
-#: data/gtk/preferences.blp:163 data/gtk/preferences.blp:213
-#: data/gtk/preferences.blp:227 data/gtk/preferences.blp:241
-#: data/gtk/preferences.blp:255 data/gtk/preferences.blp:269
+#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
+#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
+#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
msgid "Install Location"
msgstr ""
-#: data/gtk/preferences.blp:118
+#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
msgid "Lutris"
msgstr ""
-#: data/gtk/preferences.blp:131
+#: data/gtk/preferences.blp:116
msgid "Cache Location"
msgstr ""
-#: data/gtk/preferences.blp:140
+#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr ""
-#: data/gtk/preferences.blp:149
+#: data/gtk/preferences.blp:132
msgid "Import Flatpak Games"
msgstr ""
-#: data/gtk/preferences.blp:159
+#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
msgid "Heroic"
msgstr ""
-#: data/gtk/preferences.blp:172
+#: data/gtk/preferences.blp:153
msgid "Import Epic Games"
msgstr ""
-#: data/gtk/preferences.blp:181
+#: data/gtk/preferences.blp:157
msgid "Import GOG Games"
msgstr ""
-#: data/gtk/preferences.blp:190
+#: data/gtk/preferences.blp:161
msgid "Import Amazon Games"
msgstr ""
-#: data/gtk/preferences.blp:199
+#: data/gtk/preferences.blp:165
msgid "Import Sideloaded Games"
msgstr ""
-#: data/gtk/preferences.blp:209
+#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
msgid "Bottles"
msgstr ""
-#: data/gtk/preferences.blp:223
+#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
msgid "itch"
msgstr ""
-#: data/gtk/preferences.blp:237
+#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
msgid "Legendary"
msgstr ""
-#: data/gtk/preferences.blp:251
+#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
msgid "RetroArch"
msgstr ""
-#: data/gtk/preferences.blp:265
+#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
msgid "Flatpak"
msgstr ""
-#: data/gtk/preferences.blp:278
+#: data/gtk/preferences.blp:254
msgid "Import Game Launchers"
msgstr ""
-#: data/gtk/preferences.blp:288
+#: data/gtk/preferences.blp:259 src/importer/sources/desktop_source.py:217
msgid "Desktop Entries"
msgstr ""
-#: data/gtk/preferences.blp:292
-msgid "Terminal"
-msgstr ""
-
-#: data/gtk/preferences.blp:293
-msgid "Used only by games that require one to run"
-msgstr ""
-
-#: data/gtk/preferences.blp:296
-msgid "Custom"
-msgstr ""
-
-#: data/gtk/preferences.blp:320
+#: data/gtk/preferences.blp:266
msgid "SteamGridDB"
msgstr ""
-#: data/gtk/preferences.blp:324
+#: data/gtk/preferences.blp:270
msgid "Authentication"
msgstr ""
-#: data/gtk/preferences.blp:327
+#: data/gtk/preferences.blp:273
msgid "API Key"
msgstr ""
-#: data/gtk/preferences.blp:335
+#: data/gtk/preferences.blp:281
msgid "Use SteamGridDB"
msgstr ""
-#: data/gtk/preferences.blp:336
+#: data/gtk/preferences.blp:282
msgid "Download images when adding or importing games"
msgstr ""
-#: data/gtk/preferences.blp:345
+#: data/gtk/preferences.blp:286
msgid "Prefer Over Official Images"
msgstr ""
-#: data/gtk/preferences.blp:354
+#: data/gtk/preferences.blp:290
msgid "Prefer Animated Images"
msgstr ""
+#: data/gtk/preferences.blp:296
+msgid "Update Covers"
+msgstr ""
+
+#: data/gtk/preferences.blp:297
+msgid "Fetch covers for games already in your library"
+msgstr ""
+
+#: data/gtk/preferences.blp:301
+msgid "Update"
+msgstr ""
+
#: data/gtk/window.blp:6 data/gtk/window.blp:14
msgid "No Games Found"
msgstr ""
@@ -351,130 +345,118 @@ msgstr ""
msgid "Games you hide will appear here."
msgstr ""
-#: data/gtk/window.blp:64 data/gtk/window.blp:317
-msgid "Back"
+#: data/gtk/window.blp:75 data/gtk/window.blp:106 src/main.py:166
+msgid "All Games"
msgstr ""
-#: data/gtk/window.blp:121
-msgid "Game Title"
+#: data/gtk/window.blp:126 src/main.py:168
+msgid "Added"
msgstr ""
-#: data/gtk/window.blp:176
-msgid "Play"
+#: data/gtk/window.blp:141
+msgid "Imported"
msgstr ""
-#: data/gtk/window.blp:255 data/gtk/window.blp:449
-msgid "Add Game"
-msgstr ""
-
-#: data/gtk/window.blp:262 data/gtk/window.blp:329
-msgid "Main Menu"
-msgstr ""
-
-#: data/gtk/window.blp:284
-msgid "Search games"
-msgstr ""
-
-#: data/gtk/window.blp:324
+#: data/gtk/window.blp:229
msgid "Hidden Games"
msgstr ""
-#: data/gtk/window.blp:351
-msgid "Search hidden games"
+#: data/gtk/window.blp:339
+msgid "Game Title"
msgstr ""
-#: data/gtk/window.blp:388
+#: data/gtk/window.blp:396
+msgid "Play"
+msgstr ""
+
+#: data/gtk/window.blp:473
msgid "Sort"
msgstr ""
-#: data/gtk/window.blp:391
+#: data/gtk/window.blp:476
msgid "A-Z"
msgstr ""
-#: data/gtk/window.blp:397
+#: data/gtk/window.blp:482
msgid "Z-A"
msgstr ""
-#: data/gtk/window.blp:403
+#: data/gtk/window.blp:488
msgid "Newest"
msgstr ""
-#: data/gtk/window.blp:409
+#: data/gtk/window.blp:494
msgid "Oldest"
msgstr ""
-#: data/gtk/window.blp:415
+#: data/gtk/window.blp:500
msgid "Last Played"
msgstr ""
-#: data/gtk/window.blp:422
+#: data/gtk/window.blp:507
msgid "Show Hidden"
msgstr ""
-#: data/gtk/window.blp:435
-msgid "Keyboard Shortcuts"
-msgstr ""
-
-#: data/gtk/window.blp:440
+#: data/gtk/window.blp:525
msgid "About Cartridges"
msgstr ""
#. Translators: Replace this with your name for it to show up in the about window
-#: src/main.py:193
+#: src/main.py:208
msgid "translator_credits"
msgstr ""
#. The variable is the date when the game was added
-#: src/window.py:198
+#: src/window.py:373
msgid "Added: {}"
msgstr ""
-#: src/window.py:201
+#: src/window.py:376
msgid "Never"
msgstr ""
#. The variable is the date when the game was last played
-#: src/window.py:205
+#: src/window.py:380
msgid "Last played: {}"
msgstr ""
-#: src/details_window.py:74
+#: src/details_window.py:76
msgid "Apply"
msgstr ""
-#: src/details_window.py:80
+#: src/details_window.py:82
msgid "Add New Game"
msgstr ""
-#: src/details_window.py:81
+#: src/details_window.py:83
msgid "Add"
msgstr ""
-#: src/details_window.py:91
+#: src/details_window.py:93
msgid "Executables"
msgstr ""
#. Translate this string as you would translate "file"
-#: src/details_window.py:106
+#: src/details_window.py:108
msgid "file.txt"
msgstr ""
#. As in software
-#: src/details_window.py:108
+#: src/details_window.py:110
msgid "program"
msgstr ""
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:113 src/details_window.py:115
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
msgstr ""
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:119 src/details_window.py:121
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
msgstr ""
-#: src/details_window.py:126
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -487,19 +469,19 @@ msgid ""
"If the path contains spaces, make sure to wrap it in double quotes!"
msgstr ""
-#: src/details_window.py:169 src/details_window.py:175
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
msgstr ""
-#: src/details_window.py:169 src/details_window.py:205
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
msgstr ""
-#: src/details_window.py:175 src/details_window.py:213
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
msgstr ""
-#: src/details_window.py:204 src/details_window.py:212
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
msgstr ""
@@ -519,66 +501,74 @@ msgstr ""
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:172 src/importer/importer.py:373
+#: src/game.py:169 src/importer/importer.py:391
msgid "{} removed"
msgstr ""
-#: src/preferences.py:127
+#: src/preferences.py:124
msgid "All games removed"
msgstr ""
-#: src/preferences.py:207
+#: src/preferences.py:172
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
+#: src/preferences.py:184
+msgid "Downloading covers…"
+msgstr ""
+
+#: src/preferences.py:203
+msgid "Covers updated"
+msgstr ""
+
#: src/preferences.py:335
msgid "Installation Not Found"
msgstr ""
-#: src/preferences.py:337
+#: src/preferences.py:336
msgid "Select a valid directory."
msgstr ""
-#: src/preferences.py:393
-msgid "Invalid Directory"
-msgstr ""
-
-#: src/preferences.py:399
-msgid "Set Location"
-msgstr ""
-
-#: src/utils/create_dialog.py:33 src/importer/importer.py:300
-msgid "Dismiss"
-msgstr ""
-
-#: src/importer/importer.py:137
-msgid "Importing Games…"
-msgstr ""
-
-#: src/importer/importer.py:299
+#: src/preferences.py:372 src/importer/importer.py:317
msgid "Warning"
msgstr ""
-#: src/importer/importer.py:320
+#: src/preferences.py:406
+msgid "Invalid Directory"
+msgstr ""
+
+#: src/preferences.py:412
+msgid "Set Location"
+msgstr ""
+
+#: src/utils/create_dialog.py:33 src/importer/importer.py:318
+msgid "Dismiss"
+msgstr ""
+
+#: src/importer/importer.py:145
+msgid "Importing Games…"
+msgstr ""
+
+#: src/importer/importer.py:338
msgid "The following errors occured during import:"
msgstr ""
-#: src/importer/importer.py:349
+#: src/importer/importer.py:367
msgid "No new games found"
msgstr ""
-#: src/importer/importer.py:361
+#: src/importer/importer.py:379
msgid "1 game imported"
msgstr ""
#. The variable is the number of games
-#: src/importer/importer.py:365
+#: src/importer/importer.py:383
msgid "{} games imported"
msgstr ""
#. A single game removed
-#: src/importer/importer.py:369
+#: src/importer/importer.py:387
msgid "1 removed"
msgstr ""
@@ -604,3 +594,16 @@ msgstr ""
#: src/store/managers/sgdb_manager.py:47
msgid "Verify your API key in preferences"
msgstr ""
+
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr ""
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr ""
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr ""
diff --git a/po/cs.po b/po/cs.po
index b802469..9a0e512 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
"PO-Revision-Date: 2023-08-05 08:07+0000\n"
"Last-Translator: foo expert \n"
"Language-Team: Czech \n"
"Language-Team: German \n"
"Language-Team: Greek \n"
@@ -16,11 +16,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.18-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
-#: src/main.py:169
+#: data/gtk/window.blp:80
msgid "Cartridges"
msgstr "Κασέτες"
@@ -34,11 +34,11 @@ msgid "Launch all your games"
msgstr "Εκκινήστε όλα σας τα παιχνίδια"
#: data/hu.kramo.Cartridges.desktop.in:11
-#, fuzzy
-#| msgid "gaming;launcher;steam;lutris;heroic;bottles;itch;"
msgid ""
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
-msgstr "gaming;εκκινητής;steam;lutris;heroic;bottles;itch;"
+msgstr ""
+"gaming;εκκινητής;steam;lutris;heroic;bottles;itch;flatpak;legendary;"
+"retroarch;"
#: data/hu.kramo.Cartridges.metainfo.xml.in:9
msgid ""
@@ -61,14 +61,14 @@ msgstr "Βιβλιοθήκη"
msgid "Edit Game Details"
msgstr "Επεξεργασία Λεπτομερειών Παιχνιδιού"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:71
-#: src/details_window.py:67
+#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
+#: src/details_window.py:71
msgid "Game Details"
msgstr "Λεπτομέρειες Παιχνιδιού"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:418
-#: src/details_window.py:241 src/importer/importer.py:292
-#: src/importer/importer.py:342
+#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
+#: src/details_window.py:271 src/importer/importer.py:308
+#: src/importer/importer.py:359
msgid "Preferences"
msgstr "Προτιμήσεις"
@@ -76,50 +76,52 @@ msgstr "Προτιμήσεις"
msgid "Cancel"
msgstr "Ακύρωση"
-#: data/gtk/details-window.blp:57
+#: data/gtk/details-window.blp:55
msgid "New Cover"
msgstr "Νέο Εξώφυλλο"
-#: data/gtk/details-window.blp:75
+#: data/gtk/details-window.blp:73
msgid "Delete Cover"
msgstr "Διαγραφή Εξώφυλλου"
-#: data/gtk/details-window.blp:102 data/gtk/game.blp:80
+#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
msgid "Title"
msgstr "Τίτλος"
-#: data/gtk/details-window.blp:105
-#, fuzzy
-#| msgid "The developer or publisher (optional)"
+#: data/gtk/details-window.blp:103
msgid "Developer (optional)"
-msgstr "Προγραμματιστής ή Εκδότης (προαιρετικό)"
+msgstr "Προγραμματιστής (προαιρετικό)"
-#: data/gtk/details-window.blp:110
+#: data/gtk/details-window.blp:108
msgid "Executable"
-msgstr "Πρόγραμμα"
+msgstr "Εκτελέσιμο αρχείο"
-#: data/gtk/details-window.blp:116
+#: data/gtk/details-window.blp:114
+msgid "Select File"
+msgstr "Επιλογή αρχείου"
+
+#: data/gtk/details-window.blp:125
msgid "More Info"
msgstr "Περισσότερες Πληροφορίες"
-#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
+#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
msgid "Edit"
msgstr "Επεξεργασία"
-#: data/gtk/game.blp:107 src/window.py:171
+#: data/gtk/game.blp:107 src/window.py:348
msgid "Hide"
msgstr "Απόκρυψη"
-#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:56
-#: data/gtk/window.blp:209
+#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
+#: data/gtk/window.blp:433
msgid "Remove"
msgstr "Αφαίρεση"
-#: data/gtk/game.blp:126 src/window.py:173
+#: data/gtk/game.blp:126 src/window.py:350
msgid "Unhide"
msgstr "Φανέρωση"
-#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
+#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
msgid "General"
msgstr "Γενικά"
@@ -127,10 +129,10 @@ msgstr "Γενικά"
msgid "Quit"
msgstr "Κλείσιμο"
-#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:217 data/gtk/window.blp:257
-#: data/gtk/window.blp:324
+#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
+#: data/gtk/window.blp:444
msgid "Search"
-msgstr "Εύρεση"
+msgstr "Αναζήτηση"
#: data/gtk/help-overlay.blp:24
msgid "Show preferences"
@@ -140,8 +142,8 @@ msgstr "Εμφάνιση προτιμήσεων"
msgid "Shortcuts"
msgstr "Συντομεύσεις"
-#: data/gtk/help-overlay.blp:34 src/game.py:103 src/preferences.py:120
-#: src/importer/importer.py:366
+#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
+#: src/importer/importer.py:383
msgid "Undo"
msgstr "Αναίρεση"
@@ -169,164 +171,156 @@ msgstr "Εμφάνιση κρυμμένων παιχνιδιών"
msgid "Remove game"
msgstr "Αφαίρεση παιχνιδιού"
-#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:89
-#: data/gtk/preferences.blp:304
+#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
+#: data/gtk/preferences.blp:288
msgid "Behavior"
msgstr "Συμπεριφορά"
-#: data/gtk/preferences.blp:16
+#: data/gtk/preferences.blp:15
msgid "Exit After Launching Games"
msgstr "Έξοδος μετά την εκκίνηση παιχνιδιών"
-#: data/gtk/preferences.blp:25
+#: data/gtk/preferences.blp:19
msgid "Cover Image Launches Game"
msgstr "Εξώφυλλο εκκινεί το παιχνίδι"
-#: data/gtk/preferences.blp:26
+#: data/gtk/preferences.blp:20
msgid "Swaps the behavior of the cover image and the play button"
msgstr "Αντικατάσταση συμπεριφοράς εξωφύλλου και του κουμπιού αναπαραγωγής"
-#: data/gtk/preferences.blp:36 src/details_window.py:81
+#: data/gtk/preferences.blp:25 src/details_window.py:85
msgid "Images"
msgstr "Εικόνες"
-#: data/gtk/preferences.blp:39
+#: data/gtk/preferences.blp:28
msgid "High Quality Images"
msgstr "Εικόνες Υψηλής Ποιότητας"
-#: data/gtk/preferences.blp:40
+#: data/gtk/preferences.blp:29
msgid "Save game covers losslessly at the cost of storage"
msgstr ""
"Αποθήκευση εξωφύλλου παιχνιδιού σε υψηλή ευκρίνεια, με κόστος τη χωρητικότητα"
-#: data/gtk/preferences.blp:50
+#: data/gtk/preferences.blp:34
msgid "Danger Zone"
msgstr "Επικίνδυνη Ζώνη"
-#: data/gtk/preferences.blp:53
+#: data/gtk/preferences.blp:37
msgid "Remove All Games"
msgstr "Αφαίρεση Όλων Των Παιχνιδιών"
-#: data/gtk/preferences.blp:85 data/gtk/window.blp:27 data/gtk/window.blp:444
+#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
msgid "Import"
msgstr "Εισαγωγή"
-#: data/gtk/preferences.blp:92
-#, fuzzy
-#| msgid "Remove All Games"
+#: data/gtk/preferences.blp:75
msgid "Remove Uninstalled Games"
-msgstr "Αφαίρεση Όλων Των Παιχνιδιών"
+msgstr "Αφαίρεση απεγκατεστημένων παιχνιδιών"
-#: data/gtk/preferences.blp:102
+#: data/gtk/preferences.blp:80
msgid "Sources"
msgstr "Πηγές"
-#: data/gtk/preferences.blp:105
+#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
msgid "Steam"
msgstr "Steam"
-#: data/gtk/preferences.blp:109 data/gtk/preferences.blp:123
-#: data/gtk/preferences.blp:164 data/gtk/preferences.blp:214
-#: data/gtk/preferences.blp:228 data/gtk/preferences.blp:242
-#: data/gtk/preferences.blp:256 data/gtk/preferences.blp:270
-#, fuzzy
-#| msgid "itch Install Location"
+#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
+#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
+#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
msgid "Install Location"
-msgstr "Τοποθεσία Εγκατάστασης itch"
+msgstr "Τοποθεσία εγκατάστασης"
-#: data/gtk/preferences.blp:119
+#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
msgid "Lutris"
msgstr "Lutris"
-#: data/gtk/preferences.blp:132
-#, fuzzy
-#| msgid "Lutris Cache Location"
+#: data/gtk/preferences.blp:116
msgid "Cache Location"
-msgstr "Τοποθεσία cache του Lutris"
+msgstr "Τοποθεσία cache"
-#: data/gtk/preferences.blp:141
+#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
-msgstr "Εισαγωγή Παιχνιδιών Steam"
+msgstr "Εισαγωγή παιχνιδιών Steam"
-#: data/gtk/preferences.blp:150
-#, fuzzy
-#| msgid "Import Steam Games"
+#: data/gtk/preferences.blp:132
msgid "Import Flatpak Games"
-msgstr "Εισαγωγή Παιχνιδιών Steam"
+msgstr "Εισαγωγή παιχνιδιών Flatpak"
-#: data/gtk/preferences.blp:160
+#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
msgid "Heroic"
msgstr "Heroic"
-#: data/gtk/preferences.blp:173
+#: data/gtk/preferences.blp:153
msgid "Import Epic Games"
-msgstr "Εισαγωγή Παιχνιδιών Epic"
+msgstr "Εισαγωγή παιχνιδιών Epic"
-#: data/gtk/preferences.blp:182
+#: data/gtk/preferences.blp:157
msgid "Import GOG Games"
-msgstr "Εισαγωγή Παιχνιδιών GOG"
+msgstr "Εισαγωγή παιχνιδιών GOG"
-#: data/gtk/preferences.blp:191
-#, fuzzy
-#| msgid "Import Steam Games"
+#: data/gtk/preferences.blp:161
msgid "Import Amazon Games"
-msgstr "Εισαγωγή Παιχνιδιών Steam"
+msgstr "Εισαγωγή παιχνιδιών Amazon"
-#: data/gtk/preferences.blp:200
+#: data/gtk/preferences.blp:165
msgid "Import Sideloaded Games"
-msgstr "Εισαγωγή Παιχνιδιών Μέσω Sideloading"
+msgstr "Εισαγωγή παιχνιδιών μέσω sideloading"
-#: data/gtk/preferences.blp:210
+#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
msgid "Bottles"
msgstr "Bottles"
-#: data/gtk/preferences.blp:224
+#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
msgid "itch"
msgstr "itch"
-#: data/gtk/preferences.blp:238
+#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
msgid "Legendary"
-msgstr ""
+msgstr "Legendary"
-#: data/gtk/preferences.blp:252
+#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
msgid "RetroArch"
-msgstr ""
+msgstr "RetroArch"
-#: data/gtk/preferences.blp:266
+#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
msgid "Flatpak"
-msgstr ""
+msgstr "Flatpak"
-#: data/gtk/preferences.blp:279
-#, fuzzy
-#| msgid "Game Launcher"
+#: data/gtk/preferences.blp:254
msgid "Import Game Launchers"
-msgstr "Πρόγραμμα Εκκίνησης Παιχνιδιών"
+msgstr "Εισαγωγή εκκινητών παιχνιδιών"
-#: data/gtk/preferences.blp:292
+#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
+msgid "Desktop Entries"
+msgstr "Εισαγωγές desktop"
+
+#: data/gtk/preferences.blp:276
msgid "SteamGridDB"
msgstr "SteamGridDB"
-#: data/gtk/preferences.blp:296
+#: data/gtk/preferences.blp:280
msgid "Authentication"
msgstr "Επιβεβαίωση"
-#: data/gtk/preferences.blp:299
+#: data/gtk/preferences.blp:283
msgid "API Key"
msgstr "Κλειδί API"
-#: data/gtk/preferences.blp:307
+#: data/gtk/preferences.blp:291
msgid "Use SteamGridDB"
msgstr "Χρήση SteamGridDB"
-#: data/gtk/preferences.blp:308
+#: data/gtk/preferences.blp:292
msgid "Download images when adding or importing games"
msgstr "Λήψη εικόνων κατά τη διάρκεια πρόσθεσης ή εισαγωγής παιχνιδιών"
-#: data/gtk/preferences.blp:317
+#: data/gtk/preferences.blp:296
msgid "Prefer Over Official Images"
msgstr "Προτίμηση Επίσημων Εικόνων"
-#: data/gtk/preferences.blp:326
+#: data/gtk/preferences.blp:300
msgid "Prefer Animated Images"
msgstr "Προτίμηση Κινούμενων Εικόνων"
@@ -354,130 +348,140 @@ msgstr "Δεν υπάρχουν κρυφά παιχνίδια"
msgid "Games you hide will appear here."
msgstr "Τα παιχνίδια που κρύβετε θα εμφανίζονται εδώ."
-#: data/gtk/window.blp:64 data/gtk/window.blp:305
-msgid "Back"
-msgstr "Πίσω"
+#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
+#, fuzzy
+#| msgid "Remove All Games"
+msgid "All Games"
+msgstr "Αφαίρεση Όλων Των Παιχνιδιών"
-#: data/gtk/window.blp:121
-msgid "Game Title"
-msgstr "Τίτλος παιχνιδιού"
+#: data/gtk/window.blp:88 data/gtk/window.blp:162
+msgid "Toggle Sidebar"
+msgstr ""
-#: data/gtk/window.blp:176
-msgid "Play"
-msgstr "Παίξτε"
+#: data/gtk/window.blp:125 src/main.py:168
+#, fuzzy
+#| msgid "Added: {}"
+msgid "Added"
+msgstr "Προστέθηκε: {}"
-#: data/gtk/window.blp:243 data/gtk/window.blp:437
+#: data/gtk/window.blp:140
+#, fuzzy
+#| msgid "Import"
+msgid "Imported"
+msgstr "Εισαγωγή"
+
+#: data/gtk/window.blp:168 data/gtk/window.blp:532
msgid "Add Game"
msgstr "Προσθήκη παιχνιδιού"
-#: data/gtk/window.blp:250 data/gtk/window.blp:317
+#: data/gtk/window.blp:175 data/gtk/window.blp:234
msgid "Main Menu"
msgstr "Κύριο μενού"
-#: data/gtk/window.blp:272
-#, fuzzy
-#| msgid "Search"
-msgid "Search games"
-msgstr "Εύρεση"
-
-#: data/gtk/window.blp:312
+#: data/gtk/window.blp:227
msgid "Hidden Games"
msgstr "Κρυμμένα παιχνίδια"
-#: data/gtk/window.blp:339
-#, fuzzy
-#| msgid "Show hidden games"
-msgid "Search hidden games"
-msgstr "Εμφάνιση κρυμμένων παιχνιδιών"
+#: data/gtk/window.blp:337
+msgid "Game Title"
+msgstr "Τίτλος παιχνιδιού"
-#: data/gtk/window.blp:376
+#: data/gtk/window.blp:394
+msgid "Play"
+msgstr "Παίξτε"
+
+#: data/gtk/window.blp:471
msgid "Sort"
msgstr "Ταξινόμηση"
-#: data/gtk/window.blp:379
+#: data/gtk/window.blp:474
msgid "A-Z"
msgstr "Α-Ζ"
-#: data/gtk/window.blp:385
+#: data/gtk/window.blp:480
msgid "Z-A"
msgstr "Ζ-Α"
-#: data/gtk/window.blp:391
+#: data/gtk/window.blp:486
msgid "Newest"
msgstr "Νεότερο"
-#: data/gtk/window.blp:397
+#: data/gtk/window.blp:492
msgid "Oldest"
msgstr "Παλαιότερο"
-#: data/gtk/window.blp:403
+#: data/gtk/window.blp:498
msgid "Last Played"
msgstr "Τελευταία αναπαραγωγή"
-#: data/gtk/window.blp:410
+#: data/gtk/window.blp:505
msgid "Show Hidden"
msgstr "Εμφάνιση Κρυφών"
-#: data/gtk/window.blp:423
+#: data/gtk/window.blp:518
msgid "Keyboard Shortcuts"
msgstr "Συντομεύσεις Πληκτρολογίου"
-#: data/gtk/window.blp:428
+#: data/gtk/window.blp:523
msgid "About Cartridges"
msgstr "Σχετικά με τις Κασέτες"
#. Translators: Replace this with your name for it to show up in the about window
-#: src/main.py:188
+#: src/main.py:207
msgid "translator_credits"
msgstr "Yiannis Ioannides"
#. The variable is the date when the game was added
-#: src/window.py:194
+#: src/window.py:371
msgid "Added: {}"
msgstr "Προστέθηκε: {}"
-#: src/window.py:197
+#: src/window.py:374
msgid "Never"
msgstr "Ποτέ"
#. The variable is the date when the game was last played
-#: src/window.py:201
+#: src/window.py:378
msgid "Last played: {}"
msgstr "Τελευταία αναπαραγωγή: {}"
-#: src/details_window.py:72
+#: src/details_window.py:76
msgid "Apply"
msgstr "Εφαρμογή"
-#: src/details_window.py:78
+#: src/details_window.py:82
msgid "Add New Game"
msgstr "Προσθήκη νέου παιχνιδιού"
-#: src/details_window.py:79
+#: src/details_window.py:83
msgid "Add"
-msgstr ""
+msgstr "Προσθήκη"
+
+#: src/details_window.py:93
+msgid "Executables"
+msgstr "Προγράμματα"
#. Translate this string as you would translate "file"
-#: src/details_window.py:92
+#: src/details_window.py:108
msgid "file.txt"
msgstr "αρχειο.txt"
#. As in software
-#: src/details_window.py:94
+#: src/details_window.py:110
msgid "program"
-msgstr "Πρόγραμμα"
+msgstr "πρόγραμμα"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:99 src/details_window.py:101
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
msgstr "C:\\προς\\φάκελο\\{}"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:105 src/details_window.py:107
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
msgstr "/προς/φάκελο/{}"
-#: src/details_window.py:112
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -501,139 +505,148 @@ msgstr ""
"Αν η διεύθυνση φακέλου περιέχει κενά, φροντίστε να την περικλείσετε σε διπλά "
"εισαγωγικά!"
-#: src/details_window.py:147 src/details_window.py:153
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
msgstr "Αδυναμία προσθήκης παιχνιδιού"
-#: src/details_window.py:147 src/details_window.py:183
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
msgstr "Ο τίτλος παιχνιδιού δεν μπορεί να είναι κενός."
-#: src/details_window.py:153 src/details_window.py:191
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
msgstr "Η εφαρμογή δεν μπορεί να είναι κενή."
-#: src/details_window.py:182 src/details_window.py:190
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
msgstr "Αδυναμία Εφαρμογής Προτιμήσεων"
#. The variable is the title of the game
-#: src/game.py:139
+#: src/game.py:141
msgid "{} launched"
msgstr "{} εκκινήθη"
#. The variable is the title of the game
-#: src/game.py:153
+#: src/game.py:155
msgid "{} hidden"
msgstr "{} αποκρύφθηκε"
-#: src/game.py:153
+#: src/game.py:155
msgid "{} unhidden"
msgstr "{} φανερώθηκε"
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:170 src/importer/importer.py:363
+#: src/game.py:169 src/importer/importer.py:380
msgid "{} removed"
msgstr "{} αφαιρέθηκε"
-#: src/preferences.py:119
+#: src/preferences.py:121
msgid "All games removed"
msgstr "Όλα τα παιχνίδια αφαιρέθηκαν"
-#: src/preferences.py:168
+#: src/preferences.py:169
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"Για τη χρήση του SteamGridDB απαιτείται ένα κλειδί API. Μπορείτε να "
"δημιουργήσετε ένα {}εδώ{}."
-#: src/preferences.py:294
-#, fuzzy
-#| msgid "Installation Not Found"
+#: src/preferences.py:296
msgid "Installation Not Found"
msgstr "Η εγκατάσταση δεν βρέθηκε"
-#: src/preferences.py:296
-#, fuzzy
-#| msgid "Select the {} data directory."
+#: src/preferences.py:297
msgid "Select a valid directory."
-msgstr "Επιλέξτε τον κατάλογο δεδομένων {}."
+msgstr "Επιλέξτε έναν έγκυρο προορισμό."
-#: src/preferences.py:351
+#: src/preferences.py:333 src/importer/importer.py:306
+msgid "Warning"
+msgstr "Προσοχή"
+
+#: src/preferences.py:367
msgid "Invalid Directory"
-msgstr ""
+msgstr "Μη έγκυρος προορισμός"
-#: src/preferences.py:357
+#: src/preferences.py:373
msgid "Set Location"
msgstr "Ορίστε Τοποθεσία"
-#: src/utils/create_dialog.py:25 src/importer/importer.py:291
+#: src/utils/create_dialog.py:33 src/importer/importer.py:307
msgid "Dismiss"
msgstr "Απόρριψη"
-#: src/importer/importer.py:128
+#: src/importer/importer.py:142
msgid "Importing Games…"
msgstr "Εισαγωγή παιχνιδιών…"
-#: src/importer/importer.py:290
-msgid "Warning"
-msgstr ""
-
-#: src/importer/importer.py:311
+#: src/importer/importer.py:327
msgid "The following errors occured during import:"
-msgstr ""
+msgstr "Τα παρακάτω σφάλματα παρουσιάστηκαν κατά την εισαγωγή:"
-#: src/importer/importer.py:339
+#: src/importer/importer.py:356
msgid "No new games found"
msgstr "Δεν βρέθηκαν νέα παιχνίδια"
-#: src/importer/importer.py:351
+#: src/importer/importer.py:368
msgid "1 game imported"
msgstr "1 παιχνίδι εισήχθη"
#. The variable is the number of games
-#: src/importer/importer.py:355
+#: src/importer/importer.py:372
msgid "{} games imported"
msgstr "{} παιχνίδια εισήχθησαν"
#. A single game removed
-#: src/importer/importer.py:359
-#, fuzzy
-#| msgid "{} removed"
+#: src/importer/importer.py:376
msgid "1 removed"
-msgstr "{} αφαιρέθηκε"
+msgstr "1 αφαιρέθηκε"
#. The variable is the name of the source
#: src/importer/sources/location.py:33
-#, fuzzy
-#| msgid "Select the {} data directory."
msgid "Select the {} cache directory."
-msgstr "Επιλέξτε τον κατάλογο δεδομένων {}."
+msgstr "Επιλέξτε τον προορισμό cache του {}."
#. The variable is the name of the source
#: src/importer/sources/location.py:35
-#, fuzzy
-#| msgid "Select the {} configuration directory."
msgid "Select the {} configuration directory."
-msgstr "Επιλέξτε τον κατάλογο διαμόρφωσης {}."
+msgstr "Επιλέξτε τον προορισμό ρυθμίσεων του {}."
#. The variable is the name of the source
#: src/importer/sources/location.py:37
-#, fuzzy
-#| msgid "Select the {} data directory."
msgid "Select the {} data directory."
-msgstr "Επιλέξτε τον κατάλογο δεδομένων {}."
+msgstr "Επιλέξτε τον προορισμό δεδομένων του {}."
#: src/store/managers/sgdb_manager.py:46
-#, fuzzy
-#| msgid "Couldn't Connect to SteamGridDB"
msgid "Couldn't Authenticate SteamGridDB"
-msgstr "Η σύνδεση στο SteamGridDB δεν μπόρεσε να πραγματοποιηθεί"
+msgstr ""
+"Η επιβεβαίωση γνησιότητας του SteamGridDB δεν μπόρεσε να πραγματοποιηθεί"
#: src/store/managers/sgdb_manager.py:47
msgid "Verify your API key in preferences"
-msgstr ""
+msgstr "Επιβεβαιώστε το κλειδί API σας στις ρυθμίσεις"
+
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr "Δεν υπάρχει επιλεγμένος πυρήνας RetroArch"
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr "Οι παρακάτω λίστες δεν έχουν προεπιλεγμένο πυρήνα:"
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr "Παιχνίδια χωρίς επιλεγμένο πυρήνα δεν εισήχθησαν"
+
+#~ msgid "Back"
+#~ msgstr "Πίσω"
+
+#~ msgid "Search games"
+#~ msgstr "Αναζήτηση παιχνιδιών"
+
+#~ msgid "Search hidden games"
+#~ msgstr "Αναζήτηση κρυμμένων παιχνιδιών"
#~ msgid "The title of the game"
#~ msgstr "Τίτλος Παιχνιδιού"
diff --git a/po/es.po b/po/es.po
index 7fd6dee..c6da09a 100644
--- a/po/es.po
+++ b/po/es.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
-"PO-Revision-Date: 2023-08-16 15:22+0000\n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
+"PO-Revision-Date: 2023-09-21 14:26+0000\n"
"Last-Translator: gallegonovato \n"
"Language-Team: Spanish \n"
@@ -18,11 +18,11 @@ 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 5.0-dev\n"
+"X-Generator: Weblate 5.1-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
-#: src/main.py:169
+#: data/gtk/window.blp:80
msgid "Cartridges"
msgstr "Cartuchos"
@@ -62,14 +62,14 @@ msgstr "Biblioteca"
msgid "Edit Game Details"
msgstr "Editar detalles del juego"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:71
-#: src/details_window.py:67
+#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
+#: src/details_window.py:71
msgid "Game Details"
msgstr "Detalles del juego"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:418
-#: src/details_window.py:241 src/importer/importer.py:292
-#: src/importer/importer.py:342
+#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
+#: src/details_window.py:271 src/importer/importer.py:308
+#: src/importer/importer.py:359
msgid "Preferences"
msgstr "Preferencias"
@@ -77,48 +77,52 @@ msgstr "Preferencias"
msgid "Cancel"
msgstr "Cancelar"
-#: data/gtk/details-window.blp:57
+#: data/gtk/details-window.blp:55
msgid "New Cover"
msgstr "Portada nueva"
-#: data/gtk/details-window.blp:75
+#: data/gtk/details-window.blp:73
msgid "Delete Cover"
msgstr "Borrar portada"
-#: data/gtk/details-window.blp:102 data/gtk/game.blp:80
+#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
msgid "Title"
msgstr "Título"
-#: data/gtk/details-window.blp:105
+#: data/gtk/details-window.blp:103
msgid "Developer (optional)"
msgstr "Desarrollador (opcional)"
-#: data/gtk/details-window.blp:110
+#: data/gtk/details-window.blp:108
msgid "Executable"
msgstr "Ejecutable"
-#: data/gtk/details-window.blp:116
+#: data/gtk/details-window.blp:114
+msgid "Select File"
+msgstr "Seleccionar el archivo"
+
+#: data/gtk/details-window.blp:125
msgid "More Info"
msgstr "Más información"
-#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
+#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
msgid "Edit"
msgstr "Editar"
-#: data/gtk/game.blp:107 src/window.py:171
+#: data/gtk/game.blp:107 src/window.py:348
msgid "Hide"
msgstr "Ocultar"
-#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:56
-#: data/gtk/window.blp:209
+#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
+#: data/gtk/window.blp:433
msgid "Remove"
msgstr "Eliminar"
-#: data/gtk/game.blp:126 src/window.py:173
+#: data/gtk/game.blp:126 src/window.py:350
msgid "Unhide"
msgstr "Desocultar"
-#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
+#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
msgid "General"
msgstr "General"
@@ -126,8 +130,8 @@ msgstr "General"
msgid "Quit"
msgstr "Salir"
-#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:217 data/gtk/window.blp:257
-#: data/gtk/window.blp:324
+#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
+#: data/gtk/window.blp:444
msgid "Search"
msgstr "Buscar"
@@ -139,8 +143,8 @@ msgstr "Mostrar preferencias"
msgid "Shortcuts"
msgstr "Atajos"
-#: data/gtk/help-overlay.blp:34 src/game.py:103 src/preferences.py:120
-#: src/importer/importer.py:366
+#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
+#: src/importer/importer.py:383
msgid "Undo"
msgstr "Deshacer"
@@ -154,7 +158,7 @@ msgstr "Juegos"
#: data/gtk/help-overlay.blp:48
msgid "Add new game"
-msgstr "Añadir juego nuevo"
+msgstr "Añadir un nuevo juego"
#: data/gtk/help-overlay.blp:53
msgid "Import games"
@@ -168,152 +172,156 @@ msgstr "Mostrar juegos ocultos"
msgid "Remove game"
msgstr "Eliminar juego"
-#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:89
-#: data/gtk/preferences.blp:304
+#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
+#: data/gtk/preferences.blp:288
msgid "Behavior"
msgstr "Comportamiento"
-#: data/gtk/preferences.blp:16
+#: data/gtk/preferences.blp:15
msgid "Exit After Launching Games"
msgstr "Salir después de iniciar juegos"
-#: data/gtk/preferences.blp:25
+#: data/gtk/preferences.blp:19
msgid "Cover Image Launches Game"
msgstr "La imagen de portada lanza el juego"
-#: data/gtk/preferences.blp:26
+#: data/gtk/preferences.blp:20
msgid "Swaps the behavior of the cover image and the play button"
msgstr ""
"Cambia el comportamiento de la imagen de portada y del botón de reproducción"
-#: data/gtk/preferences.blp:36 src/details_window.py:81
+#: data/gtk/preferences.blp:25 src/details_window.py:85
msgid "Images"
msgstr "Imágenes"
-#: data/gtk/preferences.blp:39
+#: data/gtk/preferences.blp:28
msgid "High Quality Images"
msgstr "Imágenes de alta calidad"
-#: data/gtk/preferences.blp:40
+#: data/gtk/preferences.blp:29
msgid "Save game covers losslessly at the cost of storage"
msgstr "Guarda las partidas sin pérdidas a costa del almacenamiento"
-#: data/gtk/preferences.blp:50
+#: data/gtk/preferences.blp:34
msgid "Danger Zone"
msgstr "Zona de peligro"
-#: data/gtk/preferences.blp:53
+#: data/gtk/preferences.blp:37
msgid "Remove All Games"
msgstr "Eliminar todos los juegos"
-#: data/gtk/preferences.blp:85 data/gtk/window.blp:27 data/gtk/window.blp:444
+#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
msgid "Import"
msgstr "Importar"
-#: data/gtk/preferences.blp:92
+#: data/gtk/preferences.blp:75
msgid "Remove Uninstalled Games"
msgstr "Eliminar los juegos desinstalados"
-#: data/gtk/preferences.blp:102
+#: data/gtk/preferences.blp:80
msgid "Sources"
msgstr "Fuentes"
-#: data/gtk/preferences.blp:105
+#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
msgid "Steam"
msgstr "Steam"
-#: data/gtk/preferences.blp:109 data/gtk/preferences.blp:123
-#: data/gtk/preferences.blp:164 data/gtk/preferences.blp:214
-#: data/gtk/preferences.blp:228 data/gtk/preferences.blp:242
-#: data/gtk/preferences.blp:256 data/gtk/preferences.blp:270
+#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
+#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
+#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
msgid "Install Location"
msgstr "Ruta de instalación"
-#: data/gtk/preferences.blp:119
+#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
msgid "Lutris"
msgstr "Lutris"
-#: data/gtk/preferences.blp:132
+#: data/gtk/preferences.blp:116
msgid "Cache Location"
msgstr "Ruta de la caché"
-#: data/gtk/preferences.blp:141
+#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr "Importar juegos de Steam"
-#: data/gtk/preferences.blp:150
+#: data/gtk/preferences.blp:132
msgid "Import Flatpak Games"
msgstr "Importar juegos Flatpak"
-#: data/gtk/preferences.blp:160
+#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
msgid "Heroic"
msgstr "Heroic"
-#: data/gtk/preferences.blp:173
+#: data/gtk/preferences.blp:153
msgid "Import Epic Games"
msgstr "Importar juegos de Epic"
-#: data/gtk/preferences.blp:182
+#: data/gtk/preferences.blp:157
msgid "Import GOG Games"
msgstr "Importar juegos de GOG"
-#: data/gtk/preferences.blp:191
+#: data/gtk/preferences.blp:161
msgid "Import Amazon Games"
msgstr "Importar de Amazon Games"
-#: data/gtk/preferences.blp:200
+#: data/gtk/preferences.blp:165
msgid "Import Sideloaded Games"
msgstr "Importar juegos descargados"
-#: data/gtk/preferences.blp:210
+#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
msgid "Bottles"
msgstr "Bottles"
-#: data/gtk/preferences.blp:224
+#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
msgid "itch"
msgstr "itch"
-#: data/gtk/preferences.blp:238
+#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
msgid "Legendary"
msgstr "Legendario"
-#: data/gtk/preferences.blp:252
+#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
msgid "RetroArch"
msgstr "RetroArch"
-#: data/gtk/preferences.blp:266
+#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
msgid "Flatpak"
msgstr "Flatpak"
-#: data/gtk/preferences.blp:279
+#: data/gtk/preferences.blp:254
msgid "Import Game Launchers"
msgstr "Importar lanzadores de juegos"
-#: data/gtk/preferences.blp:292
+#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
+msgid "Desktop Entries"
+msgstr "Entradas en el escritorio"
+
+#: data/gtk/preferences.blp:276
msgid "SteamGridDB"
msgstr "SteamGridDB"
-#: data/gtk/preferences.blp:296
+#: data/gtk/preferences.blp:280
msgid "Authentication"
msgstr "Autenticación"
-#: data/gtk/preferences.blp:299
+#: data/gtk/preferences.blp:283
msgid "API Key"
msgstr "Clave API"
-#: data/gtk/preferences.blp:307
+#: data/gtk/preferences.blp:291
msgid "Use SteamGridDB"
msgstr "Usar SteamGridDB"
-#: data/gtk/preferences.blp:308
+#: data/gtk/preferences.blp:292
msgid "Download images when adding or importing games"
msgstr "Descargar las imágenes al añadir o importar juegos"
-#: data/gtk/preferences.blp:317
+#: data/gtk/preferences.blp:296
msgid "Prefer Over Official Images"
msgstr "Preferir las imágenes oficiales"
-#: data/gtk/preferences.blp:326
+#: data/gtk/preferences.blp:300
msgid "Prefer Animated Images"
msgstr "Prefiero las imágenes animadas"
@@ -341,126 +349,134 @@ msgstr "No hay juegos ocultos"
msgid "Games you hide will appear here."
msgstr "Los juegos que oculte aparecerán aquí."
-#: data/gtk/window.blp:64 data/gtk/window.blp:305
-msgid "Back"
-msgstr "Volver"
+#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
+msgid "All Games"
+msgstr "Todos los juegos"
-#: data/gtk/window.blp:121
-msgid "Game Title"
-msgstr "Título del juego"
+#: data/gtk/window.blp:88 data/gtk/window.blp:162
+msgid "Toggle Sidebar"
+msgstr "Alternar la barra lateral"
-#: data/gtk/window.blp:176
-msgid "Play"
-msgstr "Jugar"
+#: data/gtk/window.blp:125 src/main.py:168
+msgid "Added"
+msgstr "Añadido"
-#: data/gtk/window.blp:243 data/gtk/window.blp:437
+#: data/gtk/window.blp:140
+msgid "Imported"
+msgstr "Importado"
+
+#: data/gtk/window.blp:168 data/gtk/window.blp:532
msgid "Add Game"
msgstr "Añadir juego"
-#: data/gtk/window.blp:250 data/gtk/window.blp:317
+#: data/gtk/window.blp:175 data/gtk/window.blp:234
msgid "Main Menu"
msgstr "Menú principal"
-#: data/gtk/window.blp:272
-msgid "Search games"
-msgstr "Buscar los juegos"
-
-#: data/gtk/window.blp:312
+#: data/gtk/window.blp:227
msgid "Hidden Games"
msgstr "Juegos ocultos"
-#: data/gtk/window.blp:339
-msgid "Search hidden games"
-msgstr "Buscar los juegos ocultos"
+#: data/gtk/window.blp:337
+msgid "Game Title"
+msgstr "Título del juego"
-#: data/gtk/window.blp:376
+#: data/gtk/window.blp:394
+msgid "Play"
+msgstr "Jugar"
+
+#: data/gtk/window.blp:471
msgid "Sort"
msgstr "Ordenar"
-#: data/gtk/window.blp:379
+#: data/gtk/window.blp:474
msgid "A-Z"
msgstr "A-Z"
-#: data/gtk/window.blp:385
+#: data/gtk/window.blp:480
msgid "Z-A"
msgstr "Z-A"
-#: data/gtk/window.blp:391
+#: data/gtk/window.blp:486
msgid "Newest"
msgstr "Más recientes"
-#: data/gtk/window.blp:397
+#: data/gtk/window.blp:492
msgid "Oldest"
msgstr "Más antiguos"
-#: data/gtk/window.blp:403
+#: data/gtk/window.blp:498
msgid "Last Played"
msgstr "Último jugado"
-#: data/gtk/window.blp:410
+#: data/gtk/window.blp:505
msgid "Show Hidden"
msgstr "Mostrar ocultos"
-#: data/gtk/window.blp:423
+#: data/gtk/window.blp:518
msgid "Keyboard Shortcuts"
msgstr "Atajos del teclado"
-#: data/gtk/window.blp:428
+#: data/gtk/window.blp:523
msgid "About Cartridges"
msgstr "Acerca de Cartuchos"
#. Translators: Replace this with your name for it to show up in the about window
-#: src/main.py:188
+#: src/main.py:207
msgid "translator_credits"
msgstr "Óscar Fernández Díaz "
#. The variable is the date when the game was added
-#: src/window.py:194
+#: src/window.py:371
msgid "Added: {}"
msgstr "Añadido: {}"
-#: src/window.py:197
+#: src/window.py:374
msgid "Never"
msgstr "Nunca"
#. The variable is the date when the game was last played
-#: src/window.py:201
+#: src/window.py:378
msgid "Last played: {}"
msgstr "Último jugado: {}"
-#: src/details_window.py:72
+#: src/details_window.py:76
msgid "Apply"
msgstr "Aplicar"
-#: src/details_window.py:78
+#: src/details_window.py:82
msgid "Add New Game"
-msgstr "Añadir juego nuevo"
+msgstr "Añadir un nuevo Juego"
-#: src/details_window.py:79
+#: src/details_window.py:83
msgid "Add"
msgstr "Añadir"
+#: src/details_window.py:93
+msgid "Executables"
+msgstr "Ejecutables"
+
#. Translate this string as you would translate "file"
-#: src/details_window.py:92
+#: src/details_window.py:108
msgid "file.txt"
msgstr "archivo.txt"
#. As in software
-#: src/details_window.py:94
+#: src/details_window.py:110
msgid "program"
msgstr "programa"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:99 src/details_window.py:101
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
msgstr "C:\\ruta\\hasta\\{}"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:105 src/details_window.py:107
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
msgstr "/ruta/hasta/{}"
-#: src/details_window.py:112
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -482,100 +498,100 @@ msgstr ""
"\n"
"Si la ruta contiene espacios, ¡asegúrese de entrecomillarla!"
-#: src/details_window.py:147 src/details_window.py:153
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
msgstr "No se puede añadir el juego"
-#: src/details_window.py:147 src/details_window.py:183
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
msgstr "El título del juego no puede estar vacío."
-#: src/details_window.py:153 src/details_window.py:191
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
msgstr "El ejecutable no puede estar vacío."
-#: src/details_window.py:182 src/details_window.py:190
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
msgstr "No se pudieron aplicar las preferencias"
#. The variable is the title of the game
-#: src/game.py:139
+#: src/game.py:141
msgid "{} launched"
msgstr "{} comenzó"
#. The variable is the title of the game
-#: src/game.py:153
+#: src/game.py:155
msgid "{} hidden"
msgstr "{} oculto"
-#: src/game.py:153
+#: src/game.py:155
msgid "{} unhidden"
msgstr "{} visible"
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:170 src/importer/importer.py:363
+#: src/game.py:169 src/importer/importer.py:380
msgid "{} removed"
msgstr "{} eliminado"
-#: src/preferences.py:119
+#: src/preferences.py:121
msgid "All games removed"
msgstr "Todos los juegos eliminados"
-#: src/preferences.py:168
+#: src/preferences.py:169
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"Se necesita una clave API para utilizar SteamGridDB. Puedes generar una {}"
"aquí{}."
-#: src/preferences.py:294
+#: src/preferences.py:296
msgid "Installation Not Found"
msgstr "Instalación no encontrada"
-#: src/preferences.py:296
+#: src/preferences.py:297
msgid "Select a valid directory."
msgstr "Selecciona un directorio válido."
-#: src/preferences.py:351
-msgid "Invalid Directory"
-msgstr "Directorio incorrecto"
-
-#: src/preferences.py:357
-msgid "Set Location"
-msgstr "Escoger la ubicación"
-
-#: src/utils/create_dialog.py:25 src/importer/importer.py:291
-msgid "Dismiss"
-msgstr "Descartar"
-
-#: src/importer/importer.py:128
-msgid "Importing Games…"
-msgstr "Importando juegos…"
-
-#: src/importer/importer.py:290
+#: src/preferences.py:333 src/importer/importer.py:306
msgid "Warning"
msgstr "Advertencia"
-#: src/importer/importer.py:311
+#: src/preferences.py:367
+msgid "Invalid Directory"
+msgstr "Directorio incorrecto"
+
+#: src/preferences.py:373
+msgid "Set Location"
+msgstr "Escoger la ubicación"
+
+#: src/utils/create_dialog.py:33 src/importer/importer.py:307
+msgid "Dismiss"
+msgstr "Descartar"
+
+#: src/importer/importer.py:142
+msgid "Importing Games…"
+msgstr "Importando juegos…"
+
+#: src/importer/importer.py:327
msgid "The following errors occured during import:"
msgstr "Han sucedido los siguientes fallos durante la importación:"
-#: src/importer/importer.py:339
+#: src/importer/importer.py:356
msgid "No new games found"
msgstr "No se encontraron juegos nuevos"
-#: src/importer/importer.py:351
+#: src/importer/importer.py:368
msgid "1 game imported"
msgstr "1 juego importado"
#. The variable is the number of games
-#: src/importer/importer.py:355
+#: src/importer/importer.py:372
msgid "{} games imported"
msgstr "0 juegos importados"
#. A single game removed
-#: src/importer/importer.py:359
+#: src/importer/importer.py:376
msgid "1 removed"
msgstr "1 eliminado"
@@ -602,6 +618,28 @@ msgstr "No se ha podido autenticar SteamGridDB"
msgid "Verify your API key in preferences"
msgstr "Verifica tu clave API en las preferencias"
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr "No seleccionaste ningún núcleo para RetroArch"
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr "Las siguientes listas de reproducción no tienen un núcleo por defecto:"
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr "Los juegos sin núcleo seleccionado no se importaron"
+
+#~ msgid "Back"
+#~ msgstr "Volver"
+
+#~ msgid "Search games"
+#~ msgstr "Buscar los juegos"
+
+#~ msgid "Search hidden games"
+#~ msgstr "Buscar los juegos ocultos"
+
#~ msgid "The title of the game"
#~ msgstr "El título del juego"
diff --git a/po/fa.po b/po/fa.po
index 0666b4c..c0943e2 100644
--- a/po/fa.po
+++ b/po/fa.po
@@ -2,13 +2,14 @@
# Copyright (C) YEAR kramo
# This file is distributed under the same license as the Cartridges package.
# سید حسین موسوی فرد , 2023.
+# Danial Behzadi , 2023.
msgid ""
msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
-"PO-Revision-Date: 2023-04-22 10:48+0000\n"
-"Last-Translator: سید حسین موسوی فرد \n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
+"PO-Revision-Date: 2023-09-10 00:49+0000\n"
+"Last-Translator: Danial Behzadi \n"
"Language-Team: Persian \n"
"Language: fa\n"
@@ -16,11 +17,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.18-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
-#: src/main.py:169
+#: data/gtk/window.blp:80
msgid "Cartridges"
msgstr "کارتریجها"
@@ -31,12 +32,14 @@ msgstr "اجراگر بازی"
#: data/hu.kramo.Cartridges.desktop.in:5
#: data/hu.kramo.Cartridges.metainfo.xml.in:7
msgid "Launch all your games"
-msgstr "اجرای همهٔ بازیهای شما"
+msgstr "اجرای همهٔ بازیهایتان"
#: data/hu.kramo.Cartridges.desktop.in:11
msgid ""
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
msgstr ""
+"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
+"بازی;استیم;لوتریس;هروییک;بطریها;باتلز;ایچ;فلتپک;لجندری;رتروآرچ;"
#: data/hu.kramo.Cartridges.metainfo.xml.in:9
msgid ""
@@ -45,75 +48,79 @@ msgid ""
"necessary. You can sort and hide games or download cover art from "
"SteamGridDB."
msgstr ""
-"کارتریج یک اجراگر سادهٔ بازی برای همهٔ بازیهای شماست. کارتریج میتواند بدون "
-"نیاز به ورود، بازیهای شما را از استیم، لوتریس، هیروییک و... وارد کند. شما "
-"میتوانید بازیهای خود را پنهان کنید یا جلدشان را از SteamGridDB بارگیری کنید."
+"کارتریج یک اجراگر سادهٔ بازی برای همهٔ بازیهایتان است. کارتریج میتواند بدون "
+"نیاز به ورود، بازیهایتان را از استیم، لوتریس، هروییک و… وارد کند. میتوانید "
+"بازیهایتان را نهفته یا طرح جلدشان را از SteamGridDB بگیرید."
#: data/hu.kramo.Cartridges.metainfo.xml.in:30
msgid "Library"
-msgstr "کتابخانه"
+msgstr "کتابخانه"
#: data/hu.kramo.Cartridges.metainfo.xml.in:34
msgid "Edit Game Details"
msgstr "ویرایش جزییات بازی"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:71
-#: src/details_window.py:67
+#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
+#: src/details_window.py:71
msgid "Game Details"
msgstr "جزییات بازی"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:418
-#: src/details_window.py:241 src/importer/importer.py:292
-#: src/importer/importer.py:342
+#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
+#: src/details_window.py:271 src/importer/importer.py:308
+#: src/importer/importer.py:359
msgid "Preferences"
msgstr "ترجیحات"
#: data/gtk/details-window.blp:25
msgid "Cancel"
-msgstr ""
+msgstr "لغو"
-#: data/gtk/details-window.blp:57
+#: data/gtk/details-window.blp:55
msgid "New Cover"
-msgstr ""
+msgstr "طرج جلد جدید"
-#: data/gtk/details-window.blp:75
+#: data/gtk/details-window.blp:73
msgid "Delete Cover"
-msgstr ""
+msgstr "حذف طرح جلد"
-#: data/gtk/details-window.blp:102 data/gtk/game.blp:80
+#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
msgid "Title"
msgstr "عنوان"
-#: data/gtk/details-window.blp:105
+#: data/gtk/details-window.blp:103
msgid "Developer (optional)"
-msgstr ""
+msgstr "توسعهدهنده (اختیاری)"
-#: data/gtk/details-window.blp:110
+#: data/gtk/details-window.blp:108
msgid "Executable"
-msgstr ""
+msgstr "اجرایی"
-#: data/gtk/details-window.blp:116
+#: data/gtk/details-window.blp:114
+msgid "Select File"
+msgstr "گزینش پرونده"
+
+#: data/gtk/details-window.blp:125
msgid "More Info"
-msgstr ""
+msgstr "اطّلاعات بیشتر"
-#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
+#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
msgid "Edit"
msgstr "ویرایش"
-#: data/gtk/game.blp:107 src/window.py:171
+#: data/gtk/game.blp:107 src/window.py:348
msgid "Hide"
-msgstr "پنهان کردن"
+msgstr "نهفتن"
-#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:56
-#: data/gtk/window.blp:209
+#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
+#: data/gtk/window.blp:433
msgid "Remove"
-msgstr "حذف"
+msgstr "برداشتن"
-#: data/gtk/game.blp:126 src/window.py:173
+#: data/gtk/game.blp:126 src/window.py:350
msgid "Unhide"
-msgstr "پیدا کردن"
+msgstr "نانهفتن"
-#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
+#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
msgid "General"
msgstr "عمومی"
@@ -121,8 +128,8 @@ msgstr "عمومی"
msgid "Quit"
msgstr "خروج"
-#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:217 data/gtk/window.blp:257
-#: data/gtk/window.blp:324
+#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
+#: data/gtk/window.blp:444
msgid "Search"
msgstr "جستوجو"
@@ -132,10 +139,10 @@ msgstr "نمایش ترجیحات"
#: data/gtk/help-overlay.blp:29
msgid "Shortcuts"
-msgstr "میانبرها"
+msgstr "میانبرها"
-#: data/gtk/help-overlay.blp:34 src/game.py:103 src/preferences.py:120
-#: src/importer/importer.py:366
+#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
+#: src/importer/importer.py:383
msgid "Undo"
msgstr "برگردان"
@@ -149,324 +156,330 @@ msgstr "بازیها"
#: data/gtk/help-overlay.blp:48
msgid "Add new game"
-msgstr "افزدون بازی"
+msgstr "افزودن بازی جدید"
#: data/gtk/help-overlay.blp:53
msgid "Import games"
-msgstr "درونریزی بازی"
+msgstr "درونریزی بازیها"
#: data/gtk/help-overlay.blp:58
msgid "Show hidden games"
-msgstr "نمایش بازیهای پنهان"
+msgstr "نمایش بازیهای نهفته"
#: data/gtk/help-overlay.blp:63
msgid "Remove game"
-msgstr "حذف کردن بازی"
+msgstr "برداشتن بازی"
-#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:89
-#: data/gtk/preferences.blp:304
+#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
+#: data/gtk/preferences.blp:288
msgid "Behavior"
-msgstr ""
+msgstr "رفتار"
-#: data/gtk/preferences.blp:16
+#: data/gtk/preferences.blp:15
msgid "Exit After Launching Games"
msgstr "خروج پس از اجرا کردن بازی"
-#: data/gtk/preferences.blp:25
+#: data/gtk/preferences.blp:19
msgid "Cover Image Launches Game"
-msgstr "عکس جلد بازی را باز میکند"
+msgstr "طرح جلد بازی را اجرا میکند"
-#: data/gtk/preferences.blp:26
+#: data/gtk/preferences.blp:20
msgid "Swaps the behavior of the cover image and the play button"
-msgstr ""
+msgstr "تعویض رفتار تصویر جلد و دکمهٔ بازی کردن"
-#: data/gtk/preferences.blp:36 src/details_window.py:81
+#: data/gtk/preferences.blp:25 src/details_window.py:85
msgid "Images"
msgstr "عکسها"
-#: data/gtk/preferences.blp:39
+#: data/gtk/preferences.blp:28
msgid "High Quality Images"
msgstr "عکسهای با کیفیت بالا"
-#: data/gtk/preferences.blp:40
+#: data/gtk/preferences.blp:29
msgid "Save game covers losslessly at the cost of storage"
-msgstr ""
+msgstr "ذخیرهٔ طرح جلدهای بدون اتلاف به فیمت ذخیرهسازی"
-#: data/gtk/preferences.blp:50
+#: data/gtk/preferences.blp:34
msgid "Danger Zone"
msgstr "منطقهٔ خطر"
-#: data/gtk/preferences.blp:53
+#: data/gtk/preferences.blp:37
msgid "Remove All Games"
msgstr "حذف کردن همهٔ بازیها"
-#: data/gtk/preferences.blp:85 data/gtk/window.blp:27 data/gtk/window.blp:444
+#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
msgid "Import"
msgstr "درونریزی"
-#: data/gtk/preferences.blp:92
-#, fuzzy
-#| msgid "Remove All Games"
+#: data/gtk/preferences.blp:75
msgid "Remove Uninstalled Games"
-msgstr "حذف کردن همهٔ بازیها"
+msgstr "برداشن بازیهای نصب نشده"
-#: data/gtk/preferences.blp:102
+#: data/gtk/preferences.blp:80
msgid "Sources"
msgstr "منبعها"
-#: data/gtk/preferences.blp:105
+#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
msgid "Steam"
msgstr "استیم"
-#: data/gtk/preferences.blp:109 data/gtk/preferences.blp:123
-#: data/gtk/preferences.blp:164 data/gtk/preferences.blp:214
-#: data/gtk/preferences.blp:228 data/gtk/preferences.blp:242
-#: data/gtk/preferences.blp:256 data/gtk/preferences.blp:270
+#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
+#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
+#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
msgid "Install Location"
-msgstr ""
+msgstr "مکان نصب"
-#: data/gtk/preferences.blp:119
+#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
msgid "Lutris"
-msgstr ""
+msgstr "لوتریس"
+
+#: data/gtk/preferences.blp:116
+msgid "Cache Location"
+msgstr "مکان انباره"
+
+#: data/gtk/preferences.blp:128
+msgid "Import Steam Games"
+msgstr "درونریزی بازیهای استیم"
#: data/gtk/preferences.blp:132
-msgid "Cache Location"
-msgstr ""
-
-#: data/gtk/preferences.blp:141
-msgid "Import Steam Games"
-msgstr ""
-
-#: data/gtk/preferences.blp:150
-#, fuzzy
-#| msgid "Import games"
msgid "Import Flatpak Games"
-msgstr "درونریزی بازی"
+msgstr "درونریزی بازیهای فلتپک"
-#: data/gtk/preferences.blp:160
+#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
msgid "Heroic"
-msgstr ""
+msgstr "هروییک"
-#: data/gtk/preferences.blp:173
+#: data/gtk/preferences.blp:153
msgid "Import Epic Games"
-msgstr ""
+msgstr "درونریزی بازیهای اپیک"
-#: data/gtk/preferences.blp:182
+#: data/gtk/preferences.blp:157
msgid "Import GOG Games"
-msgstr ""
+msgstr "درونریزی بازیهای گوگ"
-#: data/gtk/preferences.blp:191
-#, fuzzy
-#| msgid "Import games"
+#: data/gtk/preferences.blp:161
msgid "Import Amazon Games"
-msgstr "درونریزی بازی"
+msgstr "درونریزی بازیهای آمازون"
-#: data/gtk/preferences.blp:200
+#: data/gtk/preferences.blp:165
msgid "Import Sideloaded Games"
-msgstr ""
+msgstr "درونریزی بازیهای نصب شده"
-#: data/gtk/preferences.blp:210
+#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
msgid "Bottles"
-msgstr ""
+msgstr "بطریها"
-#: data/gtk/preferences.blp:224
+#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
msgid "itch"
-msgstr ""
+msgstr "ایچ"
-#: data/gtk/preferences.blp:238
+#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
msgid "Legendary"
-msgstr ""
+msgstr "لجندری"
-#: data/gtk/preferences.blp:252
+#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
msgid "RetroArch"
-msgstr ""
+msgstr "رتروآرچ"
-#: data/gtk/preferences.blp:266
+#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
msgid "Flatpak"
-msgstr ""
+msgstr "فلتپک"
-#: data/gtk/preferences.blp:279
-#, fuzzy
-#| msgid "Game Launcher"
+#: data/gtk/preferences.blp:254
msgid "Import Game Launchers"
-msgstr "اجراگر بازی"
+msgstr "درونریزی اجراگرهای بازی"
+
+#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
+msgid "Desktop Entries"
+msgstr "ورودیهای میزکار"
+
+#: data/gtk/preferences.blp:276
+msgid "SteamGridDB"
+msgstr "SteamGridDB"
+
+#: data/gtk/preferences.blp:280
+msgid "Authentication"
+msgstr "هویتسنجی"
+
+#: data/gtk/preferences.blp:283
+msgid "API Key"
+msgstr "کلید API"
+
+#: data/gtk/preferences.blp:291
+msgid "Use SteamGridDB"
+msgstr "استفاده از SteamGridDB"
#: data/gtk/preferences.blp:292
-msgid "SteamGridDB"
-msgstr ""
+msgid "Download images when adding or importing games"
+msgstr "بارگیری تصویرها هنگام افزودن یا درونریزی بازیها"
#: data/gtk/preferences.blp:296
-msgid "Authentication"
-msgstr ""
-
-#: data/gtk/preferences.blp:299
-msgid "API Key"
-msgstr ""
-
-#: data/gtk/preferences.blp:307
-msgid "Use SteamGridDB"
-msgstr ""
-
-#: data/gtk/preferences.blp:308
-msgid "Download images when adding or importing games"
-msgstr ""
-
-#: data/gtk/preferences.blp:317
msgid "Prefer Over Official Images"
-msgstr ""
+msgstr "ترجیح به تصویرهای رسمی"
-#: data/gtk/preferences.blp:326
+#: data/gtk/preferences.blp:300
msgid "Prefer Animated Images"
-msgstr ""
+msgstr "ترچیح تصویرهای پویا"
#: data/gtk/window.blp:6 data/gtk/window.blp:14
msgid "No Games Found"
-msgstr ""
+msgstr "هیچ بازیای پیدا نشد"
#: data/gtk/window.blp:7 data/gtk/window.blp:15
msgid "Try a different search."
-msgstr ""
+msgstr "آزمودن جستوجویی دیگر."
#: data/gtk/window.blp:21
msgid "No Games"
-msgstr ""
+msgstr "بدون بازی"
#: data/gtk/window.blp:22
msgid "Use the + button to add games."
-msgstr ""
+msgstr "استفاده از دکمهٔ + برای افزودن بازیها."
#: data/gtk/window.blp:40
msgid "No Hidden Games"
-msgstr ""
+msgstr "بدون بازی نهفته"
#: data/gtk/window.blp:41
msgid "Games you hide will appear here."
+msgstr "بازیهایی که پنهان میکنید، اینجا ظاهر خواهند شد."
+
+#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
+#, fuzzy
+#| msgid "Remove All Games"
+msgid "All Games"
+msgstr "حذف کردن همهٔ بازیها"
+
+#: data/gtk/window.blp:88 data/gtk/window.blp:162
+msgid "Toggle Sidebar"
msgstr ""
-#: data/gtk/window.blp:64 data/gtk/window.blp:305
-msgid "Back"
-msgstr ""
+#: data/gtk/window.blp:125 src/main.py:168
+#, fuzzy
+#| msgid "Added: {}"
+msgid "Added"
+msgstr "افزوده: {}"
-#: data/gtk/window.blp:121
-msgid "Game Title"
-msgstr ""
+#: data/gtk/window.blp:140
+#, fuzzy
+#| msgid "Import"
+msgid "Imported"
+msgstr "درونریزی"
-#: data/gtk/window.blp:176
-msgid "Play"
-msgstr ""
-
-#: data/gtk/window.blp:243 data/gtk/window.blp:437
+#: data/gtk/window.blp:168 data/gtk/window.blp:532
msgid "Add Game"
-msgstr ""
+msgstr "افزودن بازی"
-#: data/gtk/window.blp:250 data/gtk/window.blp:317
+#: data/gtk/window.blp:175 data/gtk/window.blp:234
msgid "Main Menu"
-msgstr ""
+msgstr "فهرست اصلی"
-#: data/gtk/window.blp:272
-#, fuzzy
-#| msgid "Search"
-msgid "Search games"
-msgstr "جستوجو"
-
-#: data/gtk/window.blp:312
+#: data/gtk/window.blp:227
msgid "Hidden Games"
-msgstr ""
+msgstr "بازیهای نهفته"
-#: data/gtk/window.blp:339
-#, fuzzy
-#| msgid "Show hidden games"
-msgid "Search hidden games"
-msgstr "نمایش بازیهای پنهان"
+#: data/gtk/window.blp:337
+msgid "Game Title"
+msgstr "عنوان بازی"
-#: data/gtk/window.blp:376
+#: data/gtk/window.blp:394
+msgid "Play"
+msgstr "بازی کردن"
+
+#: data/gtk/window.blp:471
msgid "Sort"
-msgstr ""
+msgstr "ترتیب"
-#: data/gtk/window.blp:379
+#: data/gtk/window.blp:474
msgid "A-Z"
-msgstr ""
+msgstr "آ-ی"
-#: data/gtk/window.blp:385
+#: data/gtk/window.blp:480
msgid "Z-A"
-msgstr ""
+msgstr "ی-آ"
-#: data/gtk/window.blp:391
+#: data/gtk/window.blp:486
msgid "Newest"
-msgstr ""
+msgstr "جدیدترین"
-#: data/gtk/window.blp:397
+#: data/gtk/window.blp:492
msgid "Oldest"
-msgstr ""
+msgstr "قدیمیترین"
-#: data/gtk/window.blp:403
+#: data/gtk/window.blp:498
msgid "Last Played"
-msgstr ""
+msgstr "آخرین بازی شده"
-#: data/gtk/window.blp:410
+#: data/gtk/window.blp:505
msgid "Show Hidden"
-msgstr ""
+msgstr "نمایش نهفته"
-#: data/gtk/window.blp:423
+#: data/gtk/window.blp:518
msgid "Keyboard Shortcuts"
-msgstr ""
+msgstr "میانبرهیا صفحهکلید"
-#: data/gtk/window.blp:428
+#: data/gtk/window.blp:523
msgid "About Cartridges"
-msgstr ""
+msgstr "دربارهٔ کارتریجها"
#. Translators: Replace this with your name for it to show up in the about window
-#: src/main.py:188
+#: src/main.py:207
msgid "translator_credits"
-msgstr ""
+msgstr "دانیال بهزادی "
#. The variable is the date when the game was added
-#: src/window.py:194
+#: src/window.py:371
msgid "Added: {}"
-msgstr ""
+msgstr "افزوده: {}"
-#: src/window.py:197
+#: src/window.py:374
msgid "Never"
-msgstr ""
+msgstr "هرگز"
#. The variable is the date when the game was last played
-#: src/window.py:201
+#: src/window.py:378
msgid "Last played: {}"
-msgstr ""
+msgstr "آخرین بازی شده: {}"
-#: src/details_window.py:72
+#: src/details_window.py:76
msgid "Apply"
-msgstr ""
+msgstr "اعمال"
-#: src/details_window.py:78
+#: src/details_window.py:82
msgid "Add New Game"
-msgstr ""
+msgstr "افزودن بازی جدید"
-#: src/details_window.py:79
+#: src/details_window.py:83
msgid "Add"
-msgstr ""
+msgstr "افزودن"
+
+#: src/details_window.py:93
+msgid "Executables"
+msgstr "اجراییها"
#. Translate this string as you would translate "file"
-#: src/details_window.py:92
+#: src/details_window.py:108
msgid "file.txt"
-msgstr ""
+msgstr "پرونده.txt"
#. As in software
-#: src/details_window.py:94
+#: src/details_window.py:110
msgid "program"
-msgstr ""
+msgstr "برنامه"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:99 src/details_window.py:101
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
-msgstr ""
+msgstr "C:\\path\\to\\{}"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:105 src/details_window.py:107
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
-msgstr ""
+msgstr "/path/to/{}"
-#: src/details_window.py:112
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -478,127 +491,154 @@ msgid ""
"\n"
"If the path contains spaces, make sure to wrap it in double quotes!"
msgstr ""
+"استفاده از این دستور برای اجرای پروندهٔ اجرایی {}:\n"
+"\n"
+"\"{}\"\n"
+"\n"
+"برای گشودن پروندهٔ {}با برنامهٔ پیشگزیده:\n"
+"\n"
+"{} \"{}\"\n"
+"\n"
+"اگر مسیر فاصله داشت، مطمئن شوید در نقلقول گذاشتهایدش!"
-#: src/details_window.py:147 src/details_window.py:153
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
-msgstr ""
+msgstr "نتوانست بازی بیفزاید"
-#: src/details_window.py:147 src/details_window.py:183
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
-msgstr ""
+msgstr "عنوان بازی نمیتواند خالی باشد."
-#: src/details_window.py:153 src/details_window.py:191
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
-msgstr ""
+msgstr "اجرایی نمیتواند خالی باشد."
-#: src/details_window.py:182 src/details_window.py:190
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
-msgstr ""
+msgstr "نتوانست ترجیحات را اعمال کند"
#. The variable is the title of the game
-#: src/game.py:139
+#: src/game.py:141
msgid "{} launched"
-msgstr ""
+msgstr "{} اجرا شد"
#. The variable is the title of the game
-#: src/game.py:153
+#: src/game.py:155
msgid "{} hidden"
-msgstr ""
+msgstr "{}نهفته"
-#: src/game.py:153
+#: src/game.py:155
msgid "{} unhidden"
-msgstr ""
+msgstr "{} نانهفته"
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:170 src/importer/importer.py:363
+#: src/game.py:169 src/importer/importer.py:380
msgid "{} removed"
-msgstr ""
+msgstr "{} برداشته"
-#: src/preferences.py:119
+#: src/preferences.py:121
msgid "All games removed"
-msgstr ""
+msgstr "همهٔ بازیها برداشته شدند"
-#: src/preferences.py:168
+#: src/preferences.py:169
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
-
-#: src/preferences.py:294
-msgid "Installation Not Found"
-msgstr ""
+"برای استفاده از SteamGridDB نیاز به یک کلید API است. میتوانید {}اینجا{} یکی "
+"بسازید."
#: src/preferences.py:296
+msgid "Installation Not Found"
+msgstr "نصب پیدا نشد"
+
+#: src/preferences.py:297
msgid "Select a valid directory."
-msgstr ""
+msgstr "گزینش شاخهای معتبر."
-#: src/preferences.py:351
-msgid "Invalid Directory"
-msgstr ""
-
-#: src/preferences.py:357
-msgid "Set Location"
-msgstr ""
-
-#: src/utils/create_dialog.py:25 src/importer/importer.py:291
-msgid "Dismiss"
-msgstr ""
-
-#: src/importer/importer.py:128
-#, fuzzy
-#| msgid "Import games"
-msgid "Importing Games…"
-msgstr "درونریزی بازی"
-
-#: src/importer/importer.py:290
+#: src/preferences.py:333 src/importer/importer.py:306
msgid "Warning"
-msgstr ""
+msgstr "هشدار"
-#: src/importer/importer.py:311
+#: src/preferences.py:367
+msgid "Invalid Directory"
+msgstr "شاخهٔ نامعتبر"
+
+#: src/preferences.py:373
+msgid "Set Location"
+msgstr "تنظیم مکان"
+
+#: src/utils/create_dialog.py:33 src/importer/importer.py:307
+msgid "Dismiss"
+msgstr "رد"
+
+#: src/importer/importer.py:142
+msgid "Importing Games…"
+msgstr "درونریزی بازیها…"
+
+#: src/importer/importer.py:327
msgid "The following errors occured during import:"
-msgstr ""
+msgstr "هنگام درونریزی خطاهای زیر رخ دادند:"
-#: src/importer/importer.py:339
-#, fuzzy
-#| msgid "Add new game"
+#: src/importer/importer.py:356
msgid "No new games found"
-msgstr "افزدون بازی"
+msgstr "هیچ بازی جدیدی پیدا نشد"
-#: src/importer/importer.py:351
+#: src/importer/importer.py:368
msgid "1 game imported"
-msgstr ""
+msgstr "۱ بازی درونریخته شد"
#. The variable is the number of games
-#: src/importer/importer.py:355
+#: src/importer/importer.py:372
msgid "{} games imported"
-msgstr ""
+msgstr "{} بازی درونریخته شدند"
#. A single game removed
-#: src/importer/importer.py:359
-#, fuzzy
-#| msgid "Remove"
+#: src/importer/importer.py:376
msgid "1 removed"
-msgstr "حذف"
+msgstr "یکی برداشته شد"
#. The variable is the name of the source
#: src/importer/sources/location.py:33
msgid "Select the {} cache directory."
-msgstr ""
+msgstr "گزینش شاخهٔ انبارهٔ {}."
#. The variable is the name of the source
#: src/importer/sources/location.py:35
msgid "Select the {} configuration directory."
-msgstr ""
+msgstr "گزینش شاخهٔ پیکربندی {}."
#. The variable is the name of the source
#: src/importer/sources/location.py:37
msgid "Select the {} data directory."
-msgstr ""
+msgstr "گزینش شاخهٔ دادهٔ {}."
#: src/store/managers/sgdb_manager.py:46
msgid "Couldn't Authenticate SteamGridDB"
-msgstr ""
+msgstr "نتوانست در SteamGridDB هویتسنجی کند"
#: src/store/managers/sgdb_manager.py:47
msgid "Verify your API key in preferences"
-msgstr ""
+msgstr "کلید APIتان را در ترجیحات تأیید کنید"
+
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr "هیچ هستهٔ رتروآرچی گزیده نشده"
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr "سیاهههای بازی کردن زیر هیچ هستهٔ پیشگزیدهای ندارند:"
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr "بازیهای بدون هسته درونریزی نشدند"
+
+#~ msgid "Back"
+#~ msgstr "بازگشت"
+
+#~ msgid "Search games"
+#~ msgstr "جستوجوی بازیها"
+
+#~ msgid "Search hidden games"
+#~ msgstr "جستوجوی بازیهای نهفته"
diff --git a/po/fi.po b/po/fi.po
index 266dc75..658297c 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
-"PO-Revision-Date: 2023-05-07 15:38+0000\n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
+"PO-Revision-Date: 2023-09-23 06:00+0000\n"
"Last-Translator: Jiri Grönroos \n"
"Language-Team: Finnish \n"
@@ -20,11 +20,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.18-dev\n"
+"X-Generator: Weblate 5.1-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
-#: src/main.py:169
+#: data/gtk/window.blp:80
msgid "Cartridges"
msgstr "Cartridges"
@@ -67,14 +67,14 @@ msgstr "Kirjasto"
msgid "Edit Game Details"
msgstr "Muokkaa pelin tietoja"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:71
-#: src/details_window.py:67
+#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
+#: src/details_window.py:71
msgid "Game Details"
msgstr "Pelin tiedot"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:418
-#: src/details_window.py:241 src/importer/importer.py:292
-#: src/importer/importer.py:342
+#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
+#: src/details_window.py:271 src/importer/importer.py:308
+#: src/importer/importer.py:359
msgid "Preferences"
msgstr "Asetukset"
@@ -82,50 +82,52 @@ msgstr "Asetukset"
msgid "Cancel"
msgstr "Peru"
-#: data/gtk/details-window.blp:57
+#: data/gtk/details-window.blp:55
msgid "New Cover"
-msgstr ""
+msgstr "Uusi kansi"
-#: data/gtk/details-window.blp:75
+#: data/gtk/details-window.blp:73
msgid "Delete Cover"
-msgstr ""
+msgstr "Poista kansi"
-#: data/gtk/details-window.blp:102 data/gtk/game.blp:80
+#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
msgid "Title"
msgstr "Nimi"
-#: data/gtk/details-window.blp:105
-#, fuzzy
-#| msgid "The developer or publisher (optional)"
+#: data/gtk/details-window.blp:103
msgid "Developer (optional)"
-msgstr "Kehittäjä tai julkaisija (valinnainen)"
+msgstr "Kehittäjä (valinnainen)"
-#: data/gtk/details-window.blp:110
+#: data/gtk/details-window.blp:108
msgid "Executable"
msgstr "Suoritettava"
-#: data/gtk/details-window.blp:116
-msgid "More Info"
-msgstr ""
+#: data/gtk/details-window.blp:114
+msgid "Select File"
+msgstr "Valitse tiedosto"
-#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
+#: data/gtk/details-window.blp:125
+msgid "More Info"
+msgstr "Lisätietoja"
+
+#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
msgid "Edit"
msgstr "Muokkaa"
-#: data/gtk/game.blp:107 src/window.py:171
+#: data/gtk/game.blp:107 src/window.py:348
msgid "Hide"
msgstr "Piilota"
-#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:56
-#: data/gtk/window.blp:209
+#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
+#: data/gtk/window.blp:433
msgid "Remove"
msgstr "Poista"
-#: data/gtk/game.blp:126 src/window.py:173
+#: data/gtk/game.blp:126 src/window.py:350
msgid "Unhide"
msgstr "Näytä"
-#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
+#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
msgid "General"
msgstr "Yleistä"
@@ -133,8 +135,8 @@ msgstr "Yleistä"
msgid "Quit"
msgstr "Lopeta"
-#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:217 data/gtk/window.blp:257
-#: data/gtk/window.blp:324
+#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
+#: data/gtk/window.blp:444
msgid "Search"
msgstr "Etsi"
@@ -146,8 +148,8 @@ msgstr "Näytä asetukset"
msgid "Shortcuts"
msgstr "Pikanäppäimet"
-#: data/gtk/help-overlay.blp:34 src/game.py:103 src/preferences.py:120
-#: src/importer/importer.py:366
+#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
+#: src/importer/importer.py:383
msgid "Undo"
msgstr "Kumoa"
@@ -175,163 +177,155 @@ msgstr "Näytä piilotetut pelit"
msgid "Remove game"
msgstr "Poista peli"
-#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:89
-#: data/gtk/preferences.blp:304
+#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
+#: data/gtk/preferences.blp:288
msgid "Behavior"
msgstr "Toiminta"
-#: data/gtk/preferences.blp:16
+#: data/gtk/preferences.blp:15
msgid "Exit After Launching Games"
msgstr "Poistuminen pelin käynnistämisen jälkeen"
-#: data/gtk/preferences.blp:25
+#: data/gtk/preferences.blp:19
msgid "Cover Image Launches Game"
msgstr "Kansikuva käynnistää pelin"
-#: data/gtk/preferences.blp:26
+#: data/gtk/preferences.blp:20
msgid "Swaps the behavior of the cover image and the play button"
-msgstr ""
+msgstr "Vaihtaa keskenään kansikuvan ja Pelaa-painikkeen toiminnallisuuden"
-#: data/gtk/preferences.blp:36 src/details_window.py:81
+#: data/gtk/preferences.blp:25 src/details_window.py:85
msgid "Images"
msgstr "Kuvat"
-#: data/gtk/preferences.blp:39
+#: data/gtk/preferences.blp:28
msgid "High Quality Images"
msgstr "Korkealaatuiset kuvat"
-#: data/gtk/preferences.blp:40
+#: data/gtk/preferences.blp:29
msgid "Save game covers losslessly at the cost of storage"
msgstr "Tallenna pelien kansikuvat häviöttömästi tallennustilan kustannuksella"
-#: data/gtk/preferences.blp:50
+#: data/gtk/preferences.blp:34
msgid "Danger Zone"
msgstr "Vaaravyöhyke"
-#: data/gtk/preferences.blp:53
+#: data/gtk/preferences.blp:37
msgid "Remove All Games"
msgstr "Poista kaikki pelit"
-#: data/gtk/preferences.blp:85 data/gtk/window.blp:27 data/gtk/window.blp:444
+#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
msgid "Import"
msgstr "Tuo"
-#: data/gtk/preferences.blp:92
-#, fuzzy
-#| msgid "Remove All Games"
+#: data/gtk/preferences.blp:75
msgid "Remove Uninstalled Games"
-msgstr "Poista kaikki pelit"
+msgstr "Poista kaikki pelit, joiden asennus on poistettu"
-#: data/gtk/preferences.blp:102
+#: data/gtk/preferences.blp:80
msgid "Sources"
msgstr "Lähteet"
-#: data/gtk/preferences.blp:105
+#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
msgid "Steam"
msgstr "Steam"
-#: data/gtk/preferences.blp:109 data/gtk/preferences.blp:123
-#: data/gtk/preferences.blp:164 data/gtk/preferences.blp:214
-#: data/gtk/preferences.blp:228 data/gtk/preferences.blp:242
-#: data/gtk/preferences.blp:256 data/gtk/preferences.blp:270
-#, fuzzy
-#| msgid "itch Install Location"
+#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
+#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
+#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
msgid "Install Location"
-msgstr "itch-asennuksen sijainti"
+msgstr "Asennussijainti"
-#: data/gtk/preferences.blp:119
+#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
msgid "Lutris"
msgstr "Lutris"
-#: data/gtk/preferences.blp:132
-#, fuzzy
-#| msgid "Lutris Cache Location"
+#: data/gtk/preferences.blp:116
msgid "Cache Location"
-msgstr "Lutris-välimuistin sijainti"
+msgstr "Välimuistin sijainti"
-#: data/gtk/preferences.blp:141
+#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr "Tuo Steam-pelejä"
-#: data/gtk/preferences.blp:150
-#, fuzzy
-#| msgid "Import Steam Games"
+#: data/gtk/preferences.blp:132
msgid "Import Flatpak Games"
-msgstr "Tuo Steam-pelejä"
+msgstr "Tuo Flatpak-pelejä"
-#: data/gtk/preferences.blp:160
+#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
msgid "Heroic"
msgstr "Heroic"
-#: data/gtk/preferences.blp:173
+#: data/gtk/preferences.blp:153
msgid "Import Epic Games"
msgstr "Tuo Epic-pelejä"
-#: data/gtk/preferences.blp:182
+#: data/gtk/preferences.blp:157
msgid "Import GOG Games"
msgstr "Tuo GOG-pelejä"
-#: data/gtk/preferences.blp:191
-#, fuzzy
-#| msgid "Import Steam Games"
+#: data/gtk/preferences.blp:161
msgid "Import Amazon Games"
-msgstr "Tuo Steam-pelejä"
+msgstr "Tuo Amazon-pelejä"
-#: data/gtk/preferences.blp:200
+#: data/gtk/preferences.blp:165
msgid "Import Sideloaded Games"
msgstr "Tuo Sideload-pelejä"
-#: data/gtk/preferences.blp:210
+#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
msgid "Bottles"
msgstr "Pullot"
-#: data/gtk/preferences.blp:224
+#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
msgid "itch"
-msgstr ""
+msgstr "itch"
-#: data/gtk/preferences.blp:238
+#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
msgid "Legendary"
msgstr ""
-#: data/gtk/preferences.blp:252
+#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
msgid "RetroArch"
-msgstr ""
+msgstr "RetroArch"
-#: data/gtk/preferences.blp:266
+#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
msgid "Flatpak"
-msgstr ""
+msgstr "Flatpak"
-#: data/gtk/preferences.blp:279
-#, fuzzy
-#| msgid "Game Launcher"
+#: data/gtk/preferences.blp:254
msgid "Import Game Launchers"
-msgstr "Pelin käynnistin"
+msgstr "Tuo pelikäynnistimiä"
-#: data/gtk/preferences.blp:292
+#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
+msgid "Desktop Entries"
+msgstr "Työpöytätietueet"
+
+#: data/gtk/preferences.blp:276
msgid "SteamGridDB"
msgstr "SteamGridDB"
-#: data/gtk/preferences.blp:296
+#: data/gtk/preferences.blp:280
msgid "Authentication"
msgstr "Tunnistautuminen"
-#: data/gtk/preferences.blp:299
+#: data/gtk/preferences.blp:283
msgid "API Key"
msgstr "API-avain"
-#: data/gtk/preferences.blp:307
+#: data/gtk/preferences.blp:291
msgid "Use SteamGridDB"
msgstr "Käytä SteamGridDB:tä"
-#: data/gtk/preferences.blp:308
+#: data/gtk/preferences.blp:292
msgid "Download images when adding or importing games"
msgstr "Lataa kuvat pelejä lisätessä tai tuotaessa"
-#: data/gtk/preferences.blp:317
+#: data/gtk/preferences.blp:296
msgid "Prefer Over Official Images"
msgstr "Suosi virallisten kuvien sijaan"
-#: data/gtk/preferences.blp:326
+#: data/gtk/preferences.blp:300
msgid "Prefer Animated Images"
msgstr "Suosi animoituja kuvia"
@@ -359,130 +353,134 @@ msgstr "Ei piilotettuja pelejä"
msgid "Games you hide will appear here."
msgstr "Piilotetut pelit näkyvät täällä."
-#: data/gtk/window.blp:64 data/gtk/window.blp:305
-msgid "Back"
-msgstr "Takaisin"
+#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
+msgid "All Games"
+msgstr "Kaikki pelit"
-#: data/gtk/window.blp:121
-msgid "Game Title"
-msgstr "Pelin nimi"
+#: data/gtk/window.blp:88 data/gtk/window.blp:162
+msgid "Toggle Sidebar"
+msgstr "Sivupalkki päälle/pois"
-#: data/gtk/window.blp:176
-msgid "Play"
-msgstr "Pelaa"
+#: data/gtk/window.blp:125 src/main.py:168
+msgid "Added"
+msgstr "Lisätty"
-#: data/gtk/window.blp:243 data/gtk/window.blp:437
+#: data/gtk/window.blp:140
+msgid "Imported"
+msgstr "Tuotu"
+
+#: data/gtk/window.blp:168 data/gtk/window.blp:532
msgid "Add Game"
msgstr "Lisää peli"
-#: data/gtk/window.blp:250 data/gtk/window.blp:317
+#: data/gtk/window.blp:175 data/gtk/window.blp:234
msgid "Main Menu"
msgstr "Päävalikko"
-#: data/gtk/window.blp:272
-#, fuzzy
-#| msgid "Search"
-msgid "Search games"
-msgstr "Etsi"
-
-#: data/gtk/window.blp:312
+#: data/gtk/window.blp:227
msgid "Hidden Games"
msgstr "Piilotetut pelit"
-#: data/gtk/window.blp:339
-#, fuzzy
-#| msgid "Show hidden games"
-msgid "Search hidden games"
-msgstr "Näytä piilotetut pelit"
+#: data/gtk/window.blp:337
+msgid "Game Title"
+msgstr "Pelin nimi"
-#: data/gtk/window.blp:376
+#: data/gtk/window.blp:394
+msgid "Play"
+msgstr "Pelaa"
+
+#: data/gtk/window.blp:471
msgid "Sort"
msgstr "Lajittele"
-#: data/gtk/window.blp:379
+#: data/gtk/window.blp:474
msgid "A-Z"
msgstr "A-Z"
-#: data/gtk/window.blp:385
+#: data/gtk/window.blp:480
msgid "Z-A"
msgstr "Z-A"
-#: data/gtk/window.blp:391
+#: data/gtk/window.blp:486
msgid "Newest"
msgstr "Uusin"
-#: data/gtk/window.blp:397
+#: data/gtk/window.blp:492
msgid "Oldest"
msgstr "Vanhin"
-#: data/gtk/window.blp:403
+#: data/gtk/window.blp:498
msgid "Last Played"
msgstr "Viimeksi pelattu"
-#: data/gtk/window.blp:410
+#: data/gtk/window.blp:505
msgid "Show Hidden"
msgstr "Näytä piilotetut"
-#: data/gtk/window.blp:423
+#: data/gtk/window.blp:518
msgid "Keyboard Shortcuts"
msgstr "Pikanäppäimet"
-#: data/gtk/window.blp:428
+#: data/gtk/window.blp:523
msgid "About Cartridges"
msgstr "Tietoja - Cartridges"
#. Translators: Replace this with your name for it to show up in the about window
-#: src/main.py:188
+#: src/main.py:207
msgid "translator_credits"
msgstr "Linux Sauna"
#. The variable is the date when the game was added
-#: src/window.py:194
+#: src/window.py:371
msgid "Added: {}"
msgstr "Lisätty: {}"
-#: src/window.py:197
+#: src/window.py:374
msgid "Never"
msgstr "Ei koskaan"
#. The variable is the date when the game was last played
-#: src/window.py:201
+#: src/window.py:378
msgid "Last played: {}"
msgstr "Viimeksi pelattu: {}"
-#: src/details_window.py:72
+#: src/details_window.py:76
msgid "Apply"
msgstr "Käytä"
-#: src/details_window.py:78
+#: src/details_window.py:82
msgid "Add New Game"
msgstr "Lisää uusi peli"
-#: src/details_window.py:79
+#: src/details_window.py:83
msgid "Add"
-msgstr ""
+msgstr "Lisää"
+
+#: src/details_window.py:93
+msgid "Executables"
+msgstr "Suoritettavat tiedostot"
#. Translate this string as you would translate "file"
-#: src/details_window.py:92
+#: src/details_window.py:108
msgid "file.txt"
msgstr "file.txt"
#. As in software
-#: src/details_window.py:94
+#: src/details_window.py:110
msgid "program"
msgstr "ohjelma"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:99 src/details_window.py:101
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
msgstr "C:\\polku\\kansioon\\{}"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:105 src/details_window.py:107
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
msgstr "/polku/kansioon/{}"
-#: src/details_window.py:112
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -505,127 +503,117 @@ msgstr ""
"Jos polku sisältää välilyöntejä, varmista, että se on suljettu "
"kaksinkertaisiin lainausmerkkeihin!"
-#: src/details_window.py:147 src/details_window.py:153
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
msgstr "Peliä ei voitu lisätä"
-#: src/details_window.py:147 src/details_window.py:183
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
msgstr "Pelin nimi ei voi olla tyhjä."
-#: src/details_window.py:153 src/details_window.py:191
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
msgstr "Suoritettava ei voi olla tyhjä."
-#: src/details_window.py:182 src/details_window.py:190
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
msgstr "Asetuksia ei voitu ottaa käyttöön"
#. The variable is the title of the game
-#: src/game.py:139
+#: src/game.py:141
msgid "{} launched"
msgstr "{} käynnistetty"
#. The variable is the title of the game
-#: src/game.py:153
+#: src/game.py:155
msgid "{} hidden"
msgstr "{} piilotettu"
-#: src/game.py:153
+#: src/game.py:155
msgid "{} unhidden"
msgstr "{} palautettu näkyviin"
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:170 src/importer/importer.py:363
+#: src/game.py:169 src/importer/importer.py:380
msgid "{} removed"
msgstr "{} poistettu"
-#: src/preferences.py:119
+#: src/preferences.py:121
msgid "All games removed"
msgstr "Kaikki pelit poistettu"
-#: src/preferences.py:168
+#: src/preferences.py:169
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"API-avain on pakollinen, jos haluat käyttää SteamGridDB:tä. Voit luoda "
"avaimen {}täällä{}."
-#: src/preferences.py:294
-#, fuzzy
-#| msgid "Installation Not Found"
+#: src/preferences.py:296
msgid "Installation Not Found"
msgstr "Asennusta ei löydy"
-#: src/preferences.py:296
+#: src/preferences.py:297
msgid "Select a valid directory."
-msgstr ""
+msgstr "Valitse kelvollinen kansio."
-#: src/preferences.py:351
+#: src/preferences.py:333 src/importer/importer.py:306
+msgid "Warning"
+msgstr "Varoitus"
+
+#: src/preferences.py:367
msgid "Invalid Directory"
-msgstr ""
+msgstr "Virheellinen kansio"
-#: src/preferences.py:357
+#: src/preferences.py:373
msgid "Set Location"
msgstr "Aseta sijainti"
-#: src/utils/create_dialog.py:25 src/importer/importer.py:291
+#: src/utils/create_dialog.py:33 src/importer/importer.py:307
msgid "Dismiss"
msgstr "Hylkää"
-#: src/importer/importer.py:128
+#: src/importer/importer.py:142
msgid "Importing Games…"
msgstr "Tuodaan pelejä…"
-#: src/importer/importer.py:290
-msgid "Warning"
-msgstr ""
-
-#: src/importer/importer.py:311
+#: src/importer/importer.py:327
msgid "The following errors occured during import:"
-msgstr ""
+msgstr "Seuraavat virheet tapahtuivat tuonnin aikana:"
-#: src/importer/importer.py:339
-#, fuzzy
-#| msgid "No Games Found"
+#: src/importer/importer.py:356
msgid "No new games found"
-msgstr "Pelejä ei löydetty"
+msgstr "Uusia pelejä ei löytynyt"
-#: src/importer/importer.py:351
-#, fuzzy
-#| msgid "Game Imported"
+#: src/importer/importer.py:368
msgid "1 game imported"
-msgstr "Peli tuotu"
+msgstr "1 peli tuotu"
#. The variable is the number of games
-#: src/importer/importer.py:355
-#, fuzzy
-#| msgid "Games Imported"
+#: src/importer/importer.py:372
msgid "{} games imported"
-msgstr "Pelit tuotu"
+msgstr "{} peliä tuotu"
#. A single game removed
-#: src/importer/importer.py:359
-#, fuzzy
-#| msgid "{} removed"
+#: src/importer/importer.py:376
msgid "1 removed"
-msgstr "{} poistettu"
+msgstr "1 poistettu"
#. The variable is the name of the source
#: src/importer/sources/location.py:33
msgid "Select the {} cache directory."
-msgstr ""
+msgstr "Valitse {}-välimuistikansio."
#. The variable is the name of the source
#: src/importer/sources/location.py:35
msgid "Select the {} configuration directory."
-msgstr ""
+msgstr "Valitse {}-asetuskansio."
#. The variable is the name of the source
#: src/importer/sources/location.py:37
msgid "Select the {} data directory."
-msgstr ""
+msgstr "Valitse {}-datakansio."
#: src/store/managers/sgdb_manager.py:46
#, fuzzy
@@ -635,7 +623,33 @@ msgstr "Ei voitu yhdistää SteamGridDB:hen"
#: src/store/managers/sgdb_manager.py:47
msgid "Verify your API key in preferences"
-msgstr ""
+msgstr "Vahvista API-avaimesi asetuksissa"
+
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr "RetroArch-ydintä ei ole valittu"
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr "Seuraavilla soittolistoilla ei ole oletusydintä:"
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr "Pelejä, joihin ei ole valittu ydintä, ei tuotu"
+
+#~ msgid "Back"
+#~ msgstr "Takaisin"
+
+#, fuzzy
+#~| msgid "Search"
+#~ msgid "Search games"
+#~ msgstr "Etsi"
+
+#, fuzzy
+#~| msgid "Show hidden games"
+#~ msgid "Search hidden games"
+#~ msgstr "Näytä piilotetut pelit"
#~ msgid "The title of the game"
#~ msgstr "Pelin nimi"
diff --git a/po/fr.po b/po/fr.po
index e338f48..77d4004 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -11,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
-"PO-Revision-Date: 2023-07-29 15:08+0000\n"
-"Last-Translator: John Donne \n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
+"PO-Revision-Date: 2023-09-21 14:55+0000\n"
+"Last-Translator: Geoffrey Coulaud \n"
"Language-Team: French \n"
"Language: fr\n"
@@ -21,11 +21,11 @@ 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 5.0-dev\n"
+"X-Generator: Weblate 5.1-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
-#: src/main.py:169
+#: data/gtk/window.blp:80
msgid "Cartridges"
msgstr "Cartouches"
@@ -39,8 +39,6 @@ msgid "Launch all your games"
msgstr "Lancez tous vos jeux"
#: data/hu.kramo.Cartridges.desktop.in:11
-#, fuzzy
-#| msgid "gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;"
msgid ""
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
msgstr "jeu;lanceur;steam;lutris;heroic;bouteilles;itch;flatpak;legendary;"
@@ -65,14 +63,14 @@ msgstr "Bibliothèque"
msgid "Edit Game Details"
msgstr "Modifier les détails du jeu"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:71
-#: src/details_window.py:67
+#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
+#: src/details_window.py:71
msgid "Game Details"
msgstr "Détails du jeu"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:418
-#: src/details_window.py:241 src/importer/importer.py:292
-#: src/importer/importer.py:342
+#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
+#: src/details_window.py:271 src/importer/importer.py:308
+#: src/importer/importer.py:359
msgid "Preferences"
msgstr "Préférences"
@@ -80,50 +78,52 @@ msgstr "Préférences"
msgid "Cancel"
msgstr "Annuler"
-#: data/gtk/details-window.blp:57
+#: data/gtk/details-window.blp:55
msgid "New Cover"
msgstr "Nouvelle couverture"
-#: data/gtk/details-window.blp:75
+#: data/gtk/details-window.blp:73
msgid "Delete Cover"
msgstr "Supprimer la couverture"
-#: data/gtk/details-window.blp:102 data/gtk/game.blp:80
+#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
msgid "Title"
msgstr "Titre"
-#: data/gtk/details-window.blp:105
-#, fuzzy
-#| msgid "The developer or publisher (optional)"
+#: data/gtk/details-window.blp:103
msgid "Developer (optional)"
-msgstr "Le développeur ou l’éditeur (facultatif)"
+msgstr "Développeur (facultatif)"
-#: data/gtk/details-window.blp:110
+#: data/gtk/details-window.blp:108
msgid "Executable"
msgstr "Exécutable"
-#: data/gtk/details-window.blp:116
+#: data/gtk/details-window.blp:114
+msgid "Select File"
+msgstr "Sélectionner un fichier"
+
+#: data/gtk/details-window.blp:125
msgid "More Info"
msgstr "Plus d’informations"
-#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
+#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
msgid "Edit"
msgstr "Modifier"
-#: data/gtk/game.blp:107 src/window.py:171
+#: data/gtk/game.blp:107 src/window.py:348
msgid "Hide"
msgstr "Masquer"
-#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:56
-#: data/gtk/window.blp:209
+#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
+#: data/gtk/window.blp:433
msgid "Remove"
msgstr "Supprimer"
-#: data/gtk/game.blp:126 src/window.py:173
+#: data/gtk/game.blp:126 src/window.py:350
msgid "Unhide"
msgstr "Ne plus masquer"
-#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
+#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
msgid "General"
msgstr "Général"
@@ -131,8 +131,8 @@ msgstr "Général"
msgid "Quit"
msgstr "Quitter"
-#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:217 data/gtk/window.blp:257
-#: data/gtk/window.blp:324
+#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
+#: data/gtk/window.blp:444
msgid "Search"
msgstr "Rechercher"
@@ -144,8 +144,8 @@ msgstr "Afficher les préférences"
msgid "Shortcuts"
msgstr "Raccourcis"
-#: data/gtk/help-overlay.blp:34 src/game.py:103 src/preferences.py:120
-#: src/importer/importer.py:366
+#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
+#: src/importer/importer.py:383
msgid "Undo"
msgstr "Annuler"
@@ -173,156 +173,158 @@ msgstr "Afficher les jeux masqués"
msgid "Remove game"
msgstr "Supprimer le jeu"
-#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:89
-#: data/gtk/preferences.blp:304
+#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
+#: data/gtk/preferences.blp:288
msgid "Behavior"
msgstr "Comportement"
-#: data/gtk/preferences.blp:16
+#: data/gtk/preferences.blp:15
msgid "Exit After Launching Games"
msgstr "Quitter après avoir lancé les jeux"
-#: data/gtk/preferences.blp:25
+#: data/gtk/preferences.blp:19
msgid "Cover Image Launches Game"
msgstr "Cliquer sur l’image de la pochette lance le jeu"
-#: data/gtk/preferences.blp:26
+#: data/gtk/preferences.blp:20
msgid "Swaps the behavior of the cover image and the play button"
msgstr ""
"Intervertit le comportement de l’image de la pochette et du bouton de lecture"
-#: data/gtk/preferences.blp:36 src/details_window.py:81
+#: data/gtk/preferences.blp:25 src/details_window.py:85
msgid "Images"
msgstr "Images"
-#: data/gtk/preferences.blp:39
+#: data/gtk/preferences.blp:28
msgid "High Quality Images"
msgstr "Images de haute qualité"
-#: data/gtk/preferences.blp:40
+#: data/gtk/preferences.blp:29
msgid "Save game covers losslessly at the cost of storage"
msgstr ""
"Sauvegarde les pochettes des jeux sans perte, mais prend plus d'espace de "
"stockage"
-#: data/gtk/preferences.blp:50
+#: data/gtk/preferences.blp:34
msgid "Danger Zone"
msgstr "Zone de danger"
-#: data/gtk/preferences.blp:53
+#: data/gtk/preferences.blp:37
msgid "Remove All Games"
msgstr "Supprimer tous les jeux"
-#: data/gtk/preferences.blp:85 data/gtk/window.blp:27 data/gtk/window.blp:444
+#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
msgid "Import"
msgstr "Importer"
-#: data/gtk/preferences.blp:92
-#, fuzzy
-#| msgid "Remove All Games"
+#: data/gtk/preferences.blp:75
msgid "Remove Uninstalled Games"
-msgstr "Supprimer tous les jeux"
+msgstr "Retirer les jeux désinstallés"
-#: data/gtk/preferences.blp:102
+#: data/gtk/preferences.blp:80
msgid "Sources"
msgstr "Sources"
-#: data/gtk/preferences.blp:105
+#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
msgid "Steam"
msgstr "Steam"
-#: data/gtk/preferences.blp:109 data/gtk/preferences.blp:123
-#: data/gtk/preferences.blp:164 data/gtk/preferences.blp:214
-#: data/gtk/preferences.blp:228 data/gtk/preferences.blp:242
-#: data/gtk/preferences.blp:256 data/gtk/preferences.blp:270
+#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
+#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
+#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
msgid "Install Location"
msgstr "Emplacement d'installation"
-#: data/gtk/preferences.blp:119
+#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
msgid "Lutris"
msgstr "Lutris"
-#: data/gtk/preferences.blp:132
+#: data/gtk/preferences.blp:116
msgid "Cache Location"
msgstr "Emplacement du cache"
-#: data/gtk/preferences.blp:141
+#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr "Importer les jeux de Steam"
-#: data/gtk/preferences.blp:150
+#: data/gtk/preferences.blp:132
msgid "Import Flatpak Games"
msgstr "Importer des jeux Flatpak"
-#: data/gtk/preferences.blp:160
+#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
msgid "Heroic"
msgstr "Heroic"
-#: data/gtk/preferences.blp:173
+#: data/gtk/preferences.blp:153
msgid "Import Epic Games"
msgstr "Importer les jeux d'Epic Games"
-#: data/gtk/preferences.blp:182
+#: data/gtk/preferences.blp:157
msgid "Import GOG Games"
msgstr "Importer les jeux de GOG"
-#: data/gtk/preferences.blp:191
+#: data/gtk/preferences.blp:161
msgid "Import Amazon Games"
msgstr "Importer les jeux Amazon"
-#: data/gtk/preferences.blp:200
+#: data/gtk/preferences.blp:165
msgid "Import Sideloaded Games"
msgstr "Importer des jeux Sideloaded"
-#: data/gtk/preferences.blp:210
+#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
msgid "Bottles"
msgstr "Bouteilles"
-#: data/gtk/preferences.blp:224
+#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
msgid "itch"
msgstr "itch"
-#: data/gtk/preferences.blp:238
+#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
msgid "Legendary"
msgstr "Légendaire"
-#: data/gtk/preferences.blp:252
+#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
msgid "RetroArch"
-msgstr ""
+msgstr "RetroArch"
-#: data/gtk/preferences.blp:266
+#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
msgid "Flatpak"
msgstr "Flatpak"
-#: data/gtk/preferences.blp:279
+#: data/gtk/preferences.blp:254
msgid "Import Game Launchers"
msgstr "Importer des lanceurs de jeux"
-#: data/gtk/preferences.blp:292
+#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
+msgid "Desktop Entries"
+msgstr "Éléments de bureau"
+
+#: data/gtk/preferences.blp:276
msgid "SteamGridDB"
msgstr "SteamGridDB"
-#: data/gtk/preferences.blp:296
+#: data/gtk/preferences.blp:280
msgid "Authentication"
msgstr "Authentification"
-#: data/gtk/preferences.blp:299
+#: data/gtk/preferences.blp:283
msgid "API Key"
msgstr "Clé API"
-#: data/gtk/preferences.blp:307
+#: data/gtk/preferences.blp:291
msgid "Use SteamGridDB"
msgstr "Utiliser SteamGridDB"
-#: data/gtk/preferences.blp:308
+#: data/gtk/preferences.blp:292
msgid "Download images when adding or importing games"
msgstr "Télécharger les images lors de l’ajout ou de l’importation de jeux"
-#: data/gtk/preferences.blp:317
+#: data/gtk/preferences.blp:296
msgid "Prefer Over Official Images"
msgstr "Préférer à la place des images officielles"
-#: data/gtk/preferences.blp:326
+#: data/gtk/preferences.blp:300
msgid "Prefer Animated Images"
msgstr "Préférer les images animées"
@@ -350,130 +352,134 @@ msgstr "Pas de jeux masqués"
msgid "Games you hide will appear here."
msgstr "Les jeux que vous masquez apparaîtront ici."
-#: data/gtk/window.blp:64 data/gtk/window.blp:305
-msgid "Back"
-msgstr "Retour"
+#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
+msgid "All Games"
+msgstr "Tous les Jeux"
-#: data/gtk/window.blp:121
-msgid "Game Title"
-msgstr "Titre du jeu"
+#: data/gtk/window.blp:88 data/gtk/window.blp:162
+msgid "Toggle Sidebar"
+msgstr "Afficher ou Cacher la Barre Latérale"
-#: data/gtk/window.blp:176
-msgid "Play"
-msgstr "Jouer"
+#: data/gtk/window.blp:125 src/main.py:168
+msgid "Added"
+msgstr "Ajouté"
-#: data/gtk/window.blp:243 data/gtk/window.blp:437
+#: data/gtk/window.blp:140
+msgid "Imported"
+msgstr "Importé"
+
+#: data/gtk/window.blp:168 data/gtk/window.blp:532
msgid "Add Game"
msgstr "Ajouter un jeu"
-#: data/gtk/window.blp:250 data/gtk/window.blp:317
+#: data/gtk/window.blp:175 data/gtk/window.blp:234
msgid "Main Menu"
msgstr "Menu principal"
-#: data/gtk/window.blp:272
-#, fuzzy
-#| msgid "Search"
-msgid "Search games"
-msgstr "Rechercher"
-
-#: data/gtk/window.blp:312
+#: data/gtk/window.blp:227
msgid "Hidden Games"
msgstr "Jeux masqués"
-#: data/gtk/window.blp:339
-#, fuzzy
-#| msgid "Show hidden games"
-msgid "Search hidden games"
-msgstr "Afficher les jeux masqués"
+#: data/gtk/window.blp:337
+msgid "Game Title"
+msgstr "Titre du jeu"
-#: data/gtk/window.blp:376
+#: data/gtk/window.blp:394
+msgid "Play"
+msgstr "Jouer"
+
+#: data/gtk/window.blp:471
msgid "Sort"
msgstr "Trier"
-#: data/gtk/window.blp:379
+#: data/gtk/window.blp:474
msgid "A-Z"
msgstr "A-Z"
-#: data/gtk/window.blp:385
+#: data/gtk/window.blp:480
msgid "Z-A"
msgstr "Z-A"
-#: data/gtk/window.blp:391
+#: data/gtk/window.blp:486
msgid "Newest"
msgstr "Le plus récent"
-#: data/gtk/window.blp:397
+#: data/gtk/window.blp:492
msgid "Oldest"
msgstr "Le plus ancien"
-#: data/gtk/window.blp:403
+#: data/gtk/window.blp:498
msgid "Last Played"
msgstr "Dernière session"
-#: data/gtk/window.blp:410
+#: data/gtk/window.blp:505
msgid "Show Hidden"
msgstr "Afficher les masqués"
-#: data/gtk/window.blp:423
+#: data/gtk/window.blp:518
msgid "Keyboard Shortcuts"
msgstr "Raccourcis clavier"
-#: data/gtk/window.blp:428
+#: data/gtk/window.blp:523
msgid "About Cartridges"
msgstr "À propos de Cartouches"
#. Translators: Replace this with your name for it to show up in the about window
-#: src/main.py:188
+#: src/main.py:207
msgid "translator_credits"
msgstr "Irénée Thirion, L. Chareton"
#. The variable is the date when the game was added
-#: src/window.py:194
+#: src/window.py:371
msgid "Added: {}"
msgstr "Ajouté : {}"
-#: src/window.py:197
+#: src/window.py:374
msgid "Never"
msgstr "Jamais"
#. The variable is the date when the game was last played
-#: src/window.py:201
+#: src/window.py:378
msgid "Last played: {}"
msgstr "Dernière session : {}"
-#: src/details_window.py:72
+#: src/details_window.py:76
msgid "Apply"
msgstr "Appliquer"
-#: src/details_window.py:78
+#: src/details_window.py:82
msgid "Add New Game"
msgstr "Ajouter un nouveau jeu"
-#: src/details_window.py:79
+#: src/details_window.py:83
msgid "Add"
-msgstr ""
+msgstr "Ajouter"
+
+#: src/details_window.py:93
+msgid "Executables"
+msgstr "Exécutables"
#. Translate this string as you would translate "file"
-#: src/details_window.py:92
+#: src/details_window.py:108
msgid "file.txt"
msgstr "fichier.txt"
#. As in software
-#: src/details_window.py:94
+#: src/details_window.py:110
msgid "program"
msgstr "programme"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:99 src/details_window.py:101
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
msgstr "C:\\chemin\\vers\\{}"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:105 src/details_window.py:107
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
msgstr "/chemin/vers/{}"
-#: src/details_window.py:112
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -496,104 +502,102 @@ msgstr ""
"Si le chemin d'accès contient des espaces, veillez à le mettre entre "
"guillemets !"
-#: src/details_window.py:147 src/details_window.py:153
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
msgstr "Impossible d’ajouter le jeu"
-#: src/details_window.py:147 src/details_window.py:183
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
msgstr "Le titre du jeu ne peut pas être vide."
-#: src/details_window.py:153 src/details_window.py:191
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
msgstr "L’exécutable ne peut pas être vide."
-#: src/details_window.py:182 src/details_window.py:190
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
msgstr "Impossible d’appliquer les préférences"
#. The variable is the title of the game
-#: src/game.py:139
+#: src/game.py:141
msgid "{} launched"
msgstr "{} lancé"
#. The variable is the title of the game
-#: src/game.py:153
+#: src/game.py:155
msgid "{} hidden"
msgstr "{} masqué"
-#: src/game.py:153
+#: src/game.py:155
msgid "{} unhidden"
msgstr "{} affiché"
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:170 src/importer/importer.py:363
+#: src/game.py:169 src/importer/importer.py:380
msgid "{} removed"
msgstr "{} retiré"
-#: src/preferences.py:119
+#: src/preferences.py:121
msgid "All games removed"
msgstr "Tous les jeux ont été supprimés"
-#: src/preferences.py:168
+#: src/preferences.py:169
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"Une clé API est requise pour utiliser SteamGridDB. Vous pouvez en générer "
"une {}ici{}."
-#: src/preferences.py:294
+#: src/preferences.py:296
msgid "Installation Not Found"
msgstr "Installation introuvable"
-#: src/preferences.py:296
+#: src/preferences.py:297
msgid "Select a valid directory."
msgstr "Sélectionnez un répertoire valide."
-#: src/preferences.py:351
+#: src/preferences.py:333 src/importer/importer.py:306
+msgid "Warning"
+msgstr "Attention"
+
+#: src/preferences.py:367
msgid "Invalid Directory"
msgstr "Répertoire invalide"
-#: src/preferences.py:357
+#: src/preferences.py:373
msgid "Set Location"
msgstr "Définir l’emplacement"
-#: src/utils/create_dialog.py:25 src/importer/importer.py:291
+#: src/utils/create_dialog.py:33 src/importer/importer.py:307
msgid "Dismiss"
msgstr "Fermer"
-#: src/importer/importer.py:128
+#: src/importer/importer.py:142
msgid "Importing Games…"
msgstr "Importation des jeux…"
-#: src/importer/importer.py:290
-msgid "Warning"
-msgstr ""
-
-#: src/importer/importer.py:311
+#: src/importer/importer.py:327
msgid "The following errors occured during import:"
-msgstr ""
+msgstr "Les erreurs suivantes se sont produites durant l'importation :"
-#: src/importer/importer.py:339
+#: src/importer/importer.py:356
msgid "No new games found"
msgstr "Aucun nouveau jeu trouvé"
-#: src/importer/importer.py:351
+#: src/importer/importer.py:368
msgid "1 game imported"
msgstr "1 jeu importé"
#. The variable is the number of games
-#: src/importer/importer.py:355
+#: src/importer/importer.py:372
msgid "{} games imported"
msgstr "{} jeux importés"
#. A single game removed
-#: src/importer/importer.py:359
-#, fuzzy
-#| msgid "{} removed"
+#: src/importer/importer.py:376
msgid "1 removed"
-msgstr "{} retiré"
+msgstr "1 retiré"
#. The variable is the name of the source
#: src/importer/sources/location.py:33
@@ -618,6 +622,28 @@ msgstr "Impossible de se connecter à SteamGridDB"
msgid "Verify your API key in preferences"
msgstr "Vérifiez votre clé API dans les préférences"
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr "Aucun noyau RetroArch sélectionné"
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr "Les listes de lecture suivantes n'ont pas de noyau par défaut :"
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr "Les jeux sans noyau sélectionné n'ont pas été importés"
+
+#~ msgid "Back"
+#~ msgstr "Retour"
+
+#~ msgid "Search games"
+#~ msgstr "Rechercher des jeux"
+
+#~ msgid "Search hidden games"
+#~ msgstr "Rechercher dans les jeux masqués"
+
#~ msgid "The title of the game"
#~ msgstr "Le titre du jeu"
diff --git a/po/hu.po b/po/hu.po
index ba6a3f6..f144530 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
-"PO-Revision-Date: 2023-08-16 10:45+0000\n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
+"PO-Revision-Date: 2023-09-21 14:55+0000\n"
"Last-Translator: kramo \n"
"Language-Team: Hungarian \n"
@@ -18,11 +18,11 @@ 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 5.0-dev\n"
+"X-Generator: Weblate 5.1-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
-#: src/main.py:169
+#: data/gtk/window.blp:80
msgid "Cartridges"
msgstr "Kazetták"
@@ -60,14 +60,14 @@ msgstr "Könyvtár"
msgid "Edit Game Details"
msgstr "Játék Szerkesztése"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:71
-#: src/details_window.py:67
+#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
+#: src/details_window.py:71
msgid "Game Details"
msgstr "Játék Tulajdonságai"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:418
-#: src/details_window.py:241 src/importer/importer.py:292
-#: src/importer/importer.py:342
+#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
+#: src/details_window.py:271 src/importer/importer.py:308
+#: src/importer/importer.py:359
msgid "Preferences"
msgstr "Beállítások"
@@ -75,48 +75,52 @@ msgstr "Beállítások"
msgid "Cancel"
msgstr "Mégse"
-#: data/gtk/details-window.blp:57
+#: data/gtk/details-window.blp:55
msgid "New Cover"
msgstr "Új borító"
-#: data/gtk/details-window.blp:75
+#: data/gtk/details-window.blp:73
msgid "Delete Cover"
msgstr "Borító törlése"
-#: data/gtk/details-window.blp:102 data/gtk/game.blp:80
+#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
msgid "Title"
msgstr "Cím"
-#: data/gtk/details-window.blp:105
+#: data/gtk/details-window.blp:103
msgid "Developer (optional)"
msgstr "Fejlesztő (nem kötelező)"
-#: data/gtk/details-window.blp:110
+#: data/gtk/details-window.blp:108
msgid "Executable"
msgstr "Program"
-#: data/gtk/details-window.blp:116
+#: data/gtk/details-window.blp:114
+msgid "Select File"
+msgstr "Fájl kiválasztása"
+
+#: data/gtk/details-window.blp:125
msgid "More Info"
msgstr "Több infó"
-#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
+#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
msgid "Edit"
msgstr "Szerkesztés"
-#: data/gtk/game.blp:107 src/window.py:171
+#: data/gtk/game.blp:107 src/window.py:348
msgid "Hide"
msgstr "Elrejtés"
-#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:56
-#: data/gtk/window.blp:209
+#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
+#: data/gtk/window.blp:433
msgid "Remove"
msgstr "Eltávolítás"
-#: data/gtk/game.blp:126 src/window.py:173
+#: data/gtk/game.blp:126 src/window.py:350
msgid "Unhide"
msgstr "Elrejtés visszavonása"
-#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
+#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
msgid "General"
msgstr "Általános"
@@ -124,8 +128,8 @@ msgstr "Általános"
msgid "Quit"
msgstr "Kilépés"
-#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:217 data/gtk/window.blp:257
-#: data/gtk/window.blp:324
+#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
+#: data/gtk/window.blp:444
msgid "Search"
msgstr "Keresés"
@@ -137,8 +141,8 @@ msgstr "Beállítások megjelenítése"
msgid "Shortcuts"
msgstr "Gyorsbillentyűk"
-#: data/gtk/help-overlay.blp:34 src/game.py:103 src/preferences.py:120
-#: src/importer/importer.py:366
+#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
+#: src/importer/importer.py:383
msgid "Undo"
msgstr "Visszavonás"
@@ -166,151 +170,155 @@ msgstr "Rejtett játékok megjelenítése"
msgid "Remove game"
msgstr "Játék eltávolítása"
-#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:89
-#: data/gtk/preferences.blp:304
+#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
+#: data/gtk/preferences.blp:288
msgid "Behavior"
msgstr "Működés"
-#: data/gtk/preferences.blp:16
+#: data/gtk/preferences.blp:15
msgid "Exit After Launching Games"
msgstr "Kilépés játékok indítása után"
-#: data/gtk/preferences.blp:25
+#: data/gtk/preferences.blp:19
msgid "Cover Image Launches Game"
msgstr "A borítókép indítja el a játékot"
-#: data/gtk/preferences.blp:26
+#: data/gtk/preferences.blp:20
msgid "Swaps the behavior of the cover image and the play button"
msgstr "Felcseréli a \"Játék\" gomb és a borítókép funkcióját"
-#: data/gtk/preferences.blp:36 src/details_window.py:81
+#: data/gtk/preferences.blp:25 src/details_window.py:85
msgid "Images"
msgstr "Képek"
-#: data/gtk/preferences.blp:39
+#: data/gtk/preferences.blp:28
msgid "High Quality Images"
msgstr "Jó minőségű képek"
-#: data/gtk/preferences.blp:40
+#: data/gtk/preferences.blp:29
msgid "Save game covers losslessly at the cost of storage"
msgstr "Játékborítók veszteségmentes tárolása a tárhely költségére"
-#: data/gtk/preferences.blp:50
+#: data/gtk/preferences.blp:34
msgid "Danger Zone"
msgstr "Veszélyzóna"
-#: data/gtk/preferences.blp:53
+#: data/gtk/preferences.blp:37
msgid "Remove All Games"
msgstr "Az összes játék eltávolítása"
-#: data/gtk/preferences.blp:85 data/gtk/window.blp:27 data/gtk/window.blp:444
+#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
msgid "Import"
msgstr "Importálás"
-#: data/gtk/preferences.blp:92
+#: data/gtk/preferences.blp:75
msgid "Remove Uninstalled Games"
msgstr "Nem található játékok eltávolítása"
-#: data/gtk/preferences.blp:102
+#: data/gtk/preferences.blp:80
msgid "Sources"
msgstr "Források"
-#: data/gtk/preferences.blp:105
+#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
msgid "Steam"
msgstr "Steam"
-#: data/gtk/preferences.blp:109 data/gtk/preferences.blp:123
-#: data/gtk/preferences.blp:164 data/gtk/preferences.blp:214
-#: data/gtk/preferences.blp:228 data/gtk/preferences.blp:242
-#: data/gtk/preferences.blp:256 data/gtk/preferences.blp:270
+#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
+#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
+#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
msgid "Install Location"
msgstr "Telepítés helye"
-#: data/gtk/preferences.blp:119
+#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
msgid "Lutris"
msgstr "Lutris"
-#: data/gtk/preferences.blp:132
+#: data/gtk/preferences.blp:116
msgid "Cache Location"
msgstr "Gyorsítótár helye"
-#: data/gtk/preferences.blp:141
+#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr "Steam játékok importálása"
-#: data/gtk/preferences.blp:150
+#: data/gtk/preferences.blp:132
msgid "Import Flatpak Games"
msgstr "Flatpak játékok importálása"
-#: data/gtk/preferences.blp:160
+#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
msgid "Heroic"
msgstr "Heroic"
-#: data/gtk/preferences.blp:173
+#: data/gtk/preferences.blp:153
msgid "Import Epic Games"
msgstr "Epic Games játékok importálása"
-#: data/gtk/preferences.blp:182
+#: data/gtk/preferences.blp:157
msgid "Import GOG Games"
msgstr "GOG játékok importálása"
-#: data/gtk/preferences.blp:191
+#: data/gtk/preferences.blp:161
msgid "Import Amazon Games"
msgstr "Amazon játékok importálása"
-#: data/gtk/preferences.blp:200
+#: data/gtk/preferences.blp:165
msgid "Import Sideloaded Games"
msgstr "Manuálisan hozzáadott játékok importálása"
-#: data/gtk/preferences.blp:210
+#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
msgid "Bottles"
msgstr "Palackok"
-#: data/gtk/preferences.blp:224
+#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
msgid "itch"
msgstr "itch"
-#: data/gtk/preferences.blp:238
+#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
msgid "Legendary"
msgstr "Legendary"
-#: data/gtk/preferences.blp:252
+#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
msgid "RetroArch"
msgstr "RetroArch"
-#: data/gtk/preferences.blp:266
+#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
msgid "Flatpak"
msgstr "Flatpak"
-#: data/gtk/preferences.blp:279
+#: data/gtk/preferences.blp:254
msgid "Import Game Launchers"
msgstr "Játékindítók importálása"
-#: data/gtk/preferences.blp:292
+#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
+msgid "Desktop Entries"
+msgstr "Asztali bejegyzések"
+
+#: data/gtk/preferences.blp:276
msgid "SteamGridDB"
msgstr "SteamGridDB"
-#: data/gtk/preferences.blp:296
+#: data/gtk/preferences.blp:280
msgid "Authentication"
msgstr "Hitelesítés"
-#: data/gtk/preferences.blp:299
+#: data/gtk/preferences.blp:283
msgid "API Key"
msgstr "API kulcs"
-#: data/gtk/preferences.blp:307
+#: data/gtk/preferences.blp:291
msgid "Use SteamGridDB"
msgstr "SteamGridDB használata"
-#: data/gtk/preferences.blp:308
+#: data/gtk/preferences.blp:292
msgid "Download images when adding or importing games"
msgstr "Képek letöltése játékok hozzáadásakor és importálásakor"
-#: data/gtk/preferences.blp:317
+#: data/gtk/preferences.blp:296
msgid "Prefer Over Official Images"
msgstr "SteamGridDB képek előnyben részesítése"
-#: data/gtk/preferences.blp:326
+#: data/gtk/preferences.blp:300
msgid "Prefer Animated Images"
msgstr "Animált képek előnyben részesítése"
@@ -338,126 +346,134 @@ msgstr "Nincsenek rejtett játékok"
msgid "Games you hide will appear here."
msgstr "A rejtett játékaid itt lesznek megtalálhatóak."
-#: data/gtk/window.blp:64 data/gtk/window.blp:305
-msgid "Back"
-msgstr "Vissza"
+#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
+msgid "All Games"
+msgstr "Összes játék"
-#: data/gtk/window.blp:121
-msgid "Game Title"
-msgstr "Cím"
+#: data/gtk/window.blp:88 data/gtk/window.blp:162
+msgid "Toggle Sidebar"
+msgstr "Oldalsáv megjelenítése"
-#: data/gtk/window.blp:176
-msgid "Play"
-msgstr "Játék"
+#: data/gtk/window.blp:125 src/main.py:168
+msgid "Added"
+msgstr "Hozzáadva"
-#: data/gtk/window.blp:243 data/gtk/window.blp:437
+#: data/gtk/window.blp:140
+msgid "Imported"
+msgstr "Importálva"
+
+#: data/gtk/window.blp:168 data/gtk/window.blp:532
msgid "Add Game"
msgstr "Játék hozzáadása"
-#: data/gtk/window.blp:250 data/gtk/window.blp:317
+#: data/gtk/window.blp:175 data/gtk/window.blp:234
msgid "Main Menu"
msgstr "Főmenü"
-#: data/gtk/window.blp:272
-msgid "Search games"
-msgstr "Játékok keresése"
-
-#: data/gtk/window.blp:312
+#: data/gtk/window.blp:227
msgid "Hidden Games"
msgstr "Rejtett játékok"
-#: data/gtk/window.blp:339
-msgid "Search hidden games"
-msgstr "Rejtett játékok keresése"
+#: data/gtk/window.blp:337
+msgid "Game Title"
+msgstr "Cím"
-#: data/gtk/window.blp:376
+#: data/gtk/window.blp:394
+msgid "Play"
+msgstr "Játék"
+
+#: data/gtk/window.blp:471
msgid "Sort"
msgstr "Rendezés"
-#: data/gtk/window.blp:379
+#: data/gtk/window.blp:474
msgid "A-Z"
msgstr "A-Z"
-#: data/gtk/window.blp:385
+#: data/gtk/window.blp:480
msgid "Z-A"
msgstr "Z-A"
-#: data/gtk/window.blp:391
+#: data/gtk/window.blp:486
msgid "Newest"
msgstr "Legújabb"
-#: data/gtk/window.blp:397
+#: data/gtk/window.blp:492
msgid "Oldest"
msgstr "Legrégebbi"
-#: data/gtk/window.blp:403
+#: data/gtk/window.blp:498
msgid "Last Played"
msgstr "Legutóbb játszott"
-#: data/gtk/window.blp:410
+#: data/gtk/window.blp:505
msgid "Show Hidden"
msgstr "Rejtett játékok"
-#: data/gtk/window.blp:423
+#: data/gtk/window.blp:518
msgid "Keyboard Shortcuts"
msgstr "Gyorsbillentyűk"
-#: data/gtk/window.blp:428
+#: data/gtk/window.blp:523
msgid "About Cartridges"
msgstr "A Kazetták névjegye"
#. Translators: Replace this with your name for it to show up in the about window
-#: src/main.py:188
+#: src/main.py:207
msgid "translator_credits"
msgstr "kramo https://kramo.hu"
#. The variable is the date when the game was added
-#: src/window.py:194
+#: src/window.py:371
msgid "Added: {}"
msgstr "Hozzáadva: {}"
-#: src/window.py:197
+#: src/window.py:374
msgid "Never"
msgstr "Soha"
#. The variable is the date when the game was last played
-#: src/window.py:201
+#: src/window.py:378
msgid "Last played: {}"
msgstr "Legutóbbi játékmenet: {}"
-#: src/details_window.py:72
+#: src/details_window.py:76
msgid "Apply"
msgstr "Alkalmazás"
-#: src/details_window.py:78
+#: src/details_window.py:82
msgid "Add New Game"
msgstr "Új játék hozzáadása"
-#: src/details_window.py:79
+#: src/details_window.py:83
msgid "Add"
msgstr "Hozzáad"
+#: src/details_window.py:93
+msgid "Executables"
+msgstr "Programok"
+
#. Translate this string as you would translate "file"
-#: src/details_window.py:92
+#: src/details_window.py:108
msgid "file.txt"
msgstr "fájl.txt"
#. As in software
-#: src/details_window.py:94
+#: src/details_window.py:110
msgid "program"
msgstr "program"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:99 src/details_window.py:101
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
msgstr "C:\\útvonal\\ide\\{}"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:105 src/details_window.py:107
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
msgstr "/útvonal/ide/{}"
-#: src/details_window.py:112
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -480,100 +496,100 @@ msgstr ""
"\n"
"Ha az elérési útvonalban szóközök vannak, rakja az útvonalat idézőjelek közé!"
-#: src/details_window.py:147 src/details_window.py:153
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
msgstr "Nem lehet hozzáadni a játékot"
-#: src/details_window.py:147 src/details_window.py:183
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
msgstr "A cím nem lehet üres."
-#: src/details_window.py:153 src/details_window.py:191
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
msgstr "A program nem lehet üres."
-#: src/details_window.py:182 src/details_window.py:190
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
msgstr "Nem lehet menteni a beállításokat"
#. The variable is the title of the game
-#: src/game.py:139
+#: src/game.py:141
msgid "{} launched"
msgstr "{} elindítva"
#. The variable is the title of the game
-#: src/game.py:153
+#: src/game.py:155
msgid "{} hidden"
msgstr "{} elrejtve"
-#: src/game.py:153
+#: src/game.py:155
msgid "{} unhidden"
msgstr "{} elrejtése visszavonva"
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:170 src/importer/importer.py:363
+#: src/game.py:169 src/importer/importer.py:380
msgid "{} removed"
msgstr "{} eltávolítva"
-#: src/preferences.py:119
+#: src/preferences.py:121
msgid "All games removed"
msgstr "Az összes játék eltávolítva"
-#: src/preferences.py:168
+#: src/preferences.py:169
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"Egy API kulcs szükséges a SteamGridDB használatához. {}Itt{} generálhat "
"egyet."
-#: src/preferences.py:294
+#: src/preferences.py:296
msgid "Installation Not Found"
msgstr "A telepítés nem található"
-#: src/preferences.py:296
+#: src/preferences.py:297
msgid "Select a valid directory."
msgstr "Válasszon ki egy érvényes mappát."
-#: src/preferences.py:351
-msgid "Invalid Directory"
-msgstr "Érvénytelen mappa"
-
-#: src/preferences.py:357
-msgid "Set Location"
-msgstr "Mappa kiválasztása"
-
-#: src/utils/create_dialog.py:25 src/importer/importer.py:291
-msgid "Dismiss"
-msgstr "Rendben"
-
-#: src/importer/importer.py:128
-msgid "Importing Games…"
-msgstr "Játékok importálása folyamatban…"
-
-#: src/importer/importer.py:290
+#: src/preferences.py:333 src/importer/importer.py:306
msgid "Warning"
msgstr "Figyelem"
-#: src/importer/importer.py:311
+#: src/preferences.py:367
+msgid "Invalid Directory"
+msgstr "Érvénytelen mappa"
+
+#: src/preferences.py:373
+msgid "Set Location"
+msgstr "Mappa kiválasztása"
+
+#: src/utils/create_dialog.py:33 src/importer/importer.py:307
+msgid "Dismiss"
+msgstr "Rendben"
+
+#: src/importer/importer.py:142
+msgid "Importing Games…"
+msgstr "Játékok importálása folyamatban…"
+
+#: src/importer/importer.py:327
msgid "The following errors occured during import:"
msgstr "A következő hibák történtek importálás közben:"
-#: src/importer/importer.py:339
+#: src/importer/importer.py:356
msgid "No new games found"
msgstr "Nem találhatóak új játékok"
-#: src/importer/importer.py:351
+#: src/importer/importer.py:368
msgid "1 game imported"
msgstr "1 játék importálva"
#. The variable is the number of games
-#: src/importer/importer.py:355
+#: src/importer/importer.py:372
msgid "{} games imported"
msgstr "{} játék importálva"
#. A single game removed
-#: src/importer/importer.py:359
+#: src/importer/importer.py:376
msgid "1 removed"
msgstr "1 eltávolítva"
@@ -600,6 +616,28 @@ msgstr "Nem lehet hitelesíteni SteamGridDB-t"
msgid "Verify your API key in preferences"
msgstr "Ellenőrizze az API kulcsát a beállításokban"
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr "Nincs kiválasztott RetroArch core"
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr "A következő listáknak nincs core-ja:"
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr "Játékok, aminek nincs kiválasztott core-ja nem lettek importálva"
+
+#~ msgid "Back"
+#~ msgstr "Vissza"
+
+#~ msgid "Search games"
+#~ msgstr "Játékok keresése"
+
+#~ msgid "Search hidden games"
+#~ msgstr "Rejtett játékok keresése"
+
#~ msgid "The title of the game"
#~ msgstr "A játék címe"
diff --git a/po/it.po b/po/it.po
index 6f63bb0..6ec34db 100644
--- a/po/it.po
+++ b/po/it.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
-"PO-Revision-Date: 2023-07-21 12:16+0000\n"
-"Last-Translator: Giasko \n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
+"PO-Revision-Date: 2023-09-23 06:00+0000\n"
+"Last-Translator: albanobattistella \n"
"Language-Team: Italian \n"
"Language: it\n"
@@ -19,11 +19,11 @@ 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 5.0-dev\n"
+"X-Generator: Weblate 5.1-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
-#: src/main.py:169
+#: data/gtk/window.blp:80
msgid "Cartridges"
msgstr "Cartucce"
@@ -37,11 +37,10 @@ msgid "Launch all your games"
msgstr "Avvia tutti i tuoi giochi"
#: data/hu.kramo.Cartridges.desktop.in:11
-#, fuzzy
-#| msgid "gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;"
msgid ""
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
-msgstr "gioco;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;"
+msgstr ""
+"gioco;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
#: data/hu.kramo.Cartridges.metainfo.xml.in:9
msgid ""
@@ -63,14 +62,14 @@ msgstr "Libreria"
msgid "Edit Game Details"
msgstr "Modifica dettagli del gioco"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:71
-#: src/details_window.py:67
+#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
+#: src/details_window.py:71
msgid "Game Details"
msgstr "Dettagli del gioco"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:418
-#: src/details_window.py:241 src/importer/importer.py:292
-#: src/importer/importer.py:342
+#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
+#: src/details_window.py:271 src/importer/importer.py:308
+#: src/importer/importer.py:359
msgid "Preferences"
msgstr "Preferenze"
@@ -78,50 +77,52 @@ msgstr "Preferenze"
msgid "Cancel"
msgstr "Annulla"
-#: data/gtk/details-window.blp:57
+#: data/gtk/details-window.blp:55
msgid "New Cover"
msgstr "Nuova copertina"
-#: data/gtk/details-window.blp:75
+#: data/gtk/details-window.blp:73
msgid "Delete Cover"
msgstr "Elimina copertina"
-#: data/gtk/details-window.blp:102 data/gtk/game.blp:80
+#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
msgid "Title"
msgstr "Titolo"
-#: data/gtk/details-window.blp:105
-#, fuzzy
-#| msgid "The developer or publisher (optional)"
+#: data/gtk/details-window.blp:103
msgid "Developer (optional)"
-msgstr "Lo sviluppatore o l'editore (opzionale)"
+msgstr "Sviluppatore (opzionale)"
-#: data/gtk/details-window.blp:110
+#: data/gtk/details-window.blp:108
msgid "Executable"
msgstr "Eseguibile"
-#: data/gtk/details-window.blp:116
+#: data/gtk/details-window.blp:114
+msgid "Select File"
+msgstr "Seleziona file"
+
+#: data/gtk/details-window.blp:125
msgid "More Info"
msgstr "Altre informazioni"
-#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
+#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
msgid "Edit"
msgstr "Modifica"
-#: data/gtk/game.blp:107 src/window.py:171
+#: data/gtk/game.blp:107 src/window.py:348
msgid "Hide"
msgstr "Nascondi"
-#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:56
-#: data/gtk/window.blp:209
+#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
+#: data/gtk/window.blp:433
msgid "Remove"
msgstr "Rimuovi"
-#: data/gtk/game.blp:126 src/window.py:173
+#: data/gtk/game.blp:126 src/window.py:350
msgid "Unhide"
msgstr "Mostra"
-#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
+#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
msgid "General"
msgstr "Generale"
@@ -129,8 +130,8 @@ msgstr "Generale"
msgid "Quit"
msgstr "Esci"
-#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:217 data/gtk/window.blp:257
-#: data/gtk/window.blp:324
+#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
+#: data/gtk/window.blp:444
msgid "Search"
msgstr "Cerca"
@@ -142,8 +143,8 @@ msgstr "Mostra preferenze"
msgid "Shortcuts"
msgstr "Scorciatoie da tastiera"
-#: data/gtk/help-overlay.blp:34 src/game.py:103 src/preferences.py:120
-#: src/importer/importer.py:366
+#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
+#: src/importer/importer.py:383
msgid "Undo"
msgstr "Annulla"
@@ -171,154 +172,156 @@ msgstr "Mostra giochi nascosti"
msgid "Remove game"
msgstr "Rimuovi gioco"
-#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:89
-#: data/gtk/preferences.blp:304
+#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
+#: data/gtk/preferences.blp:288
msgid "Behavior"
msgstr "Comportamento"
-#: data/gtk/preferences.blp:16
+#: data/gtk/preferences.blp:15
msgid "Exit After Launching Games"
msgstr "Esci dopo l'avvio dei giochi"
-#: data/gtk/preferences.blp:25
+#: data/gtk/preferences.blp:19
msgid "Cover Image Launches Game"
msgstr "La copertina avvia il gioco"
-#: data/gtk/preferences.blp:26
+#: data/gtk/preferences.blp:20
msgid "Swaps the behavior of the cover image and the play button"
msgstr "Inverti il comportamento della copertina con il pulsante di avvio"
-#: data/gtk/preferences.blp:36 src/details_window.py:81
+#: data/gtk/preferences.blp:25 src/details_window.py:85
msgid "Images"
msgstr "Immagini"
-#: data/gtk/preferences.blp:39
+#: data/gtk/preferences.blp:28
msgid "High Quality Images"
msgstr "Immagini di alta qualità"
-#: data/gtk/preferences.blp:40
+#: data/gtk/preferences.blp:29
msgid "Save game covers losslessly at the cost of storage"
msgstr ""
"Salva copertine dei giochi in formato lossless, consuma più spazio su disco"
-#: data/gtk/preferences.blp:50
+#: data/gtk/preferences.blp:34
msgid "Danger Zone"
msgstr "Zona di pericolo"
-#: data/gtk/preferences.blp:53
+#: data/gtk/preferences.blp:37
msgid "Remove All Games"
msgstr "Rimuovi tutti i giochi"
-#: data/gtk/preferences.blp:85 data/gtk/window.blp:27 data/gtk/window.blp:444
+#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
msgid "Import"
msgstr "Importa"
-#: data/gtk/preferences.blp:92
-#, fuzzy
-#| msgid "Remove All Games"
+#: data/gtk/preferences.blp:75
msgid "Remove Uninstalled Games"
-msgstr "Rimuovi tutti i giochi"
+msgstr "Rimuovi giochi disinstallati"
-#: data/gtk/preferences.blp:102
+#: data/gtk/preferences.blp:80
msgid "Sources"
msgstr "Fonti"
-#: data/gtk/preferences.blp:105
+#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
msgid "Steam"
msgstr "Steam"
-#: data/gtk/preferences.blp:109 data/gtk/preferences.blp:123
-#: data/gtk/preferences.blp:164 data/gtk/preferences.blp:214
-#: data/gtk/preferences.blp:228 data/gtk/preferences.blp:242
-#: data/gtk/preferences.blp:256 data/gtk/preferences.blp:270
+#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
+#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
+#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
msgid "Install Location"
msgstr "Posizione di installazione"
-#: data/gtk/preferences.blp:119
+#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
msgid "Lutris"
msgstr "Lutris"
-#: data/gtk/preferences.blp:132
+#: data/gtk/preferences.blp:116
msgid "Cache Location"
msgstr "Posizione della cache"
-#: data/gtk/preferences.blp:141
+#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr "Importa giochi da Steam"
-#: data/gtk/preferences.blp:150
+#: data/gtk/preferences.blp:132
msgid "Import Flatpak Games"
msgstr "Importa giochi da Flatpak"
-#: data/gtk/preferences.blp:160
+#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
msgid "Heroic"
msgstr "Heroic"
-#: data/gtk/preferences.blp:173
+#: data/gtk/preferences.blp:153
msgid "Import Epic Games"
msgstr "Importa giochi da Epic Games"
-#: data/gtk/preferences.blp:182
+#: data/gtk/preferences.blp:157
msgid "Import GOG Games"
msgstr "Importa giochi da GOG"
-#: data/gtk/preferences.blp:191
+#: data/gtk/preferences.blp:161
msgid "Import Amazon Games"
msgstr "Importa giochi Amazon"
-#: data/gtk/preferences.blp:200
+#: data/gtk/preferences.blp:165
msgid "Import Sideloaded Games"
msgstr "Importa giochi da aggiunti manualmente"
-#: data/gtk/preferences.blp:210
+#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
msgid "Bottles"
msgstr "Bottles"
-#: data/gtk/preferences.blp:224
+#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
msgid "itch"
msgstr "itch"
-#: data/gtk/preferences.blp:238
+#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
msgid "Legendary"
msgstr "Legendary"
-#: data/gtk/preferences.blp:252
+#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
msgid "RetroArch"
-msgstr ""
+msgstr "RetroArch"
-#: data/gtk/preferences.blp:266
+#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
msgid "Flatpak"
msgstr "Flatpak"
-#: data/gtk/preferences.blp:279
+#: data/gtk/preferences.blp:254
msgid "Import Game Launchers"
msgstr "Importa launcher di giochi"
-#: data/gtk/preferences.blp:292
+#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
+msgid "Desktop Entries"
+msgstr "Elementi Desktop"
+
+#: data/gtk/preferences.blp:276
msgid "SteamGridDB"
msgstr "SteamGridDB"
-#: data/gtk/preferences.blp:296
+#: data/gtk/preferences.blp:280
msgid "Authentication"
msgstr "Autenticazione"
-#: data/gtk/preferences.blp:299
+#: data/gtk/preferences.blp:283
msgid "API Key"
msgstr "Chiave API"
-#: data/gtk/preferences.blp:307
+#: data/gtk/preferences.blp:291
msgid "Use SteamGridDB"
msgstr "Usa SteamGridDB"
-#: data/gtk/preferences.blp:308
+#: data/gtk/preferences.blp:292
msgid "Download images when adding or importing games"
msgstr "Scarica immagini durante l'aggiunta o l'import di giochi"
-#: data/gtk/preferences.blp:317
+#: data/gtk/preferences.blp:296
msgid "Prefer Over Official Images"
msgstr "Preferisci alle immagini ufficiali"
-#: data/gtk/preferences.blp:326
+#: data/gtk/preferences.blp:300
msgid "Prefer Animated Images"
msgstr "Preferisci immagini animate"
@@ -346,130 +349,134 @@ msgstr "Nessun Gioco Nascosto"
msgid "Games you hide will appear here."
msgstr "I giochi nascosti appariranno qui."
-#: data/gtk/window.blp:64 data/gtk/window.blp:305
-msgid "Back"
-msgstr "Indietro"
+#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
+msgid "All Games"
+msgstr "Tutti i giochi"
-#: data/gtk/window.blp:121
-msgid "Game Title"
-msgstr "Titolo del gioco"
+#: data/gtk/window.blp:88 data/gtk/window.blp:162
+msgid "Toggle Sidebar"
+msgstr "Attiva/disattiva la barra laterale"
-#: data/gtk/window.blp:176
-msgid "Play"
-msgstr "Gioca"
+#: data/gtk/window.blp:125 src/main.py:168
+msgid "Added"
+msgstr "Aggiunto"
-#: data/gtk/window.blp:243 data/gtk/window.blp:437
+#: data/gtk/window.blp:140
+msgid "Imported"
+msgstr "Importato"
+
+#: data/gtk/window.blp:168 data/gtk/window.blp:532
msgid "Add Game"
msgstr "Aggiungi Gioco"
-#: data/gtk/window.blp:250 data/gtk/window.blp:317
+#: data/gtk/window.blp:175 data/gtk/window.blp:234
msgid "Main Menu"
msgstr "Menù Principale"
-#: data/gtk/window.blp:272
-#, fuzzy
-#| msgid "Search"
-msgid "Search games"
-msgstr "Cerca"
-
-#: data/gtk/window.blp:312
+#: data/gtk/window.blp:227
msgid "Hidden Games"
msgstr "Giochi Nascosti"
-#: data/gtk/window.blp:339
-#, fuzzy
-#| msgid "Show hidden games"
-msgid "Search hidden games"
-msgstr "Mostra giochi nascosti"
+#: data/gtk/window.blp:337
+msgid "Game Title"
+msgstr "Titolo del gioco"
-#: data/gtk/window.blp:376
+#: data/gtk/window.blp:394
+msgid "Play"
+msgstr "Gioca"
+
+#: data/gtk/window.blp:471
msgid "Sort"
msgstr "Ordina per"
-#: data/gtk/window.blp:379
+#: data/gtk/window.blp:474
msgid "A-Z"
msgstr "A-Z"
-#: data/gtk/window.blp:385
+#: data/gtk/window.blp:480
msgid "Z-A"
msgstr "Z-A"
-#: data/gtk/window.blp:391
+#: data/gtk/window.blp:486
msgid "Newest"
msgstr "Più recente"
-#: data/gtk/window.blp:397
+#: data/gtk/window.blp:492
msgid "Oldest"
msgstr "Più vecchio"
-#: data/gtk/window.blp:403
+#: data/gtk/window.blp:498
msgid "Last Played"
msgstr "Ultimo Avvio"
-#: data/gtk/window.blp:410
+#: data/gtk/window.blp:505
msgid "Show Hidden"
msgstr "Mostra Nascosti"
-#: data/gtk/window.blp:423
+#: data/gtk/window.blp:518
msgid "Keyboard Shortcuts"
msgstr "Scorciatoie da Tastiera"
-#: data/gtk/window.blp:428
+#: data/gtk/window.blp:523
msgid "About Cartridges"
msgstr "Informazioni su Cartucce"
#. Translators: Replace this with your name for it to show up in the about window
-#: src/main.py:188
+#: src/main.py:207
msgid "translator_credits"
msgstr "Alessandro Iepure https://ale.iepure.me"
#. The variable is the date when the game was added
-#: src/window.py:194
+#: src/window.py:371
msgid "Added: {}"
msgstr "Aggiunto il: {}"
-#: src/window.py:197
+#: src/window.py:374
msgid "Never"
msgstr "Mai"
#. The variable is the date when the game was last played
-#: src/window.py:201
+#: src/window.py:378
msgid "Last played: {}"
msgstr "Ultima riproduzione: {}"
-#: src/details_window.py:72
+#: src/details_window.py:76
msgid "Apply"
msgstr "Applica"
-#: src/details_window.py:78
+#: src/details_window.py:82
msgid "Add New Game"
msgstr "Aggiungi un Nuovo Gioco"
-#: src/details_window.py:79
+#: src/details_window.py:83
msgid "Add"
-msgstr ""
+msgstr "Aggiungi"
+
+#: src/details_window.py:93
+msgid "Executables"
+msgstr "Eseguibili"
#. Translate this string as you would translate "file"
-#: src/details_window.py:92
+#: src/details_window.py:108
msgid "file.txt"
msgstr "file.txt"
#. As in software
-#: src/details_window.py:94
+#: src/details_window.py:110
msgid "program"
msgstr "programma"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:99 src/details_window.py:101
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
msgstr "C:\\path\\to{}"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:105 src/details_window.py:107
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
msgstr "/percorso/to/{}"
-#: src/details_window.py:112
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -491,104 +498,102 @@ msgstr ""
"\n"
"Se il percorso contiene spazi, assicurarsi di avvolgerlo in doppi apici!"
-#: src/details_window.py:147 src/details_window.py:153
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
msgstr "Impossibile aggiungere il gioco"
-#: src/details_window.py:147 src/details_window.py:183
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
msgstr "Il titolo del gioco non può essere vuoto."
-#: src/details_window.py:153 src/details_window.py:191
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
msgstr "L'eseguibile non può essere vuoto."
-#: src/details_window.py:182 src/details_window.py:190
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
msgstr "Impossibile applicare le preferenze"
#. The variable is the title of the game
-#: src/game.py:139
+#: src/game.py:141
msgid "{} launched"
msgstr "{} avviato"
#. The variable is the title of the game
-#: src/game.py:153
+#: src/game.py:155
msgid "{} hidden"
msgstr "{} nascosto"
-#: src/game.py:153
+#: src/game.py:155
msgid "{} unhidden"
msgstr "{} visibile"
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:170 src/importer/importer.py:363
+#: src/game.py:169 src/importer/importer.py:380
msgid "{} removed"
msgstr "{} rimosso"
-#: src/preferences.py:119
+#: src/preferences.py:121
msgid "All games removed"
msgstr "Tutti i giochi sono stati rimossi"
-#: src/preferences.py:168
+#: src/preferences.py:169
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"Per utilizzare SteamGridDB è necessaria una chiave API. Puoi generarne una {}"
"qui{}."
-#: src/preferences.py:294
+#: src/preferences.py:296
msgid "Installation Not Found"
msgstr "Installazione non trovata"
-#: src/preferences.py:296
+#: src/preferences.py:297
msgid "Select a valid directory."
msgstr "Seleziona una directory valida."
-#: src/preferences.py:351
+#: src/preferences.py:333 src/importer/importer.py:306
+msgid "Warning"
+msgstr "Attenzione"
+
+#: src/preferences.py:367
msgid "Invalid Directory"
msgstr "Directory non valida"
-#: src/preferences.py:357
+#: src/preferences.py:373
msgid "Set Location"
msgstr "Imposta percorso"
-#: src/utils/create_dialog.py:25 src/importer/importer.py:291
+#: src/utils/create_dialog.py:33 src/importer/importer.py:307
msgid "Dismiss"
msgstr "Chiudi"
-#: src/importer/importer.py:128
+#: src/importer/importer.py:142
msgid "Importing Games…"
msgstr "Import dei giochi in corso…"
-#: src/importer/importer.py:290
-msgid "Warning"
-msgstr ""
-
-#: src/importer/importer.py:311
+#: src/importer/importer.py:327
msgid "The following errors occured during import:"
-msgstr ""
+msgstr "Durante l'importazione si sono verificati i seguenti errori:"
-#: src/importer/importer.py:339
+#: src/importer/importer.py:356
msgid "No new games found"
msgstr "Nessun nuovo gioco trovato"
-#: src/importer/importer.py:351
+#: src/importer/importer.py:368
msgid "1 game imported"
msgstr "1 gioco importato"
#. The variable is the number of games
-#: src/importer/importer.py:355
+#: src/importer/importer.py:372
msgid "{} games imported"
msgstr "{} giochi importati"
#. A single game removed
-#: src/importer/importer.py:359
-#, fuzzy
-#| msgid "{} removed"
+#: src/importer/importer.py:376
msgid "1 removed"
-msgstr "{} rimosso"
+msgstr "1 rimosso"
#. The variable is the name of the source
#: src/importer/sources/location.py:33
@@ -613,6 +618,28 @@ msgstr "Impossibile autenticare SteamGridDB"
msgid "Verify your API key in preferences"
msgstr "Verifica la tua chiave API nelle preferenze"
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr "Nessun core RetroArch selezionato"
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr "Le seguenti playlist non hanno un core di default:"
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr "I giochi senza core selezionato non sono stati importati"
+
+#~ msgid "Back"
+#~ msgstr "Indietro"
+
+#~ msgid "Search games"
+#~ msgstr "Cerca giochi"
+
+#~ msgid "Search hidden games"
+#~ msgstr "Cerca giochi nascosti"
+
#~ msgid "The title of the game"
#~ msgstr "Il titolo del gioco"
diff --git a/po/ko.po b/po/ko.po
index c6af1d2..9e42814 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
"PO-Revision-Date: 2023-03-28 22:23+0000\n"
"Last-Translator: MJKim \n"
"Language-Team: Korean \n"
"Language-Team: Norwegian Bokmål "
#. The variable is the date when the game was added
-#: src/window.py:194
+#: src/window.py:371
msgid "Added: {}"
msgstr "Tillagt: {}"
-#: src/window.py:197
+#: src/window.py:374
msgid "Never"
msgstr "Aldri"
#. The variable is the date when the game was last played
-#: src/window.py:201
+#: src/window.py:378
msgid "Last played: {}"
msgstr "Sist spilt: {}"
-#: src/details_window.py:72
+#: src/details_window.py:76
msgid "Apply"
msgstr "Bruk"
-#: src/details_window.py:78
+#: src/details_window.py:82
msgid "Add New Game"
msgstr "Legg til nytt spill"
-#: src/details_window.py:79
+#: src/details_window.py:83
msgid "Add"
msgstr ""
+#: src/details_window.py:93
+#, fuzzy
+#| msgid "Executable"
+msgid "Executables"
+msgstr "Kjørbar"
+
#. Translate this string as you would translate "file"
-#: src/details_window.py:92
+#: src/details_window.py:108
msgid "file.txt"
msgstr "fil.txt"
#. As in software
-#: src/details_window.py:94
+#: src/details_window.py:110
msgid "program"
msgstr "program"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:99 src/details_window.py:101
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
msgstr "C:\\sti\\til\\{}"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:105 src/details_window.py:107
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
msgstr "/sti/til/{}"
-#: src/details_window.py:112
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -499,106 +520,106 @@ msgstr ""
"Hvis stien inneholder mellomrom må du pakke den inn i doble engelske "
"sitattegn."
-#: src/details_window.py:147 src/details_window.py:153
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
msgstr "Kunne ikke legge til spill"
-#: src/details_window.py:147 src/details_window.py:183
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
msgstr "Spillnavnet kan ikke være tomt."
-#: src/details_window.py:153 src/details_window.py:191
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
msgstr "Kjørbar fil må angis."
-#: src/details_window.py:182 src/details_window.py:190
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
msgstr "Kunne ikke ta i bruk endringer"
#. The variable is the title of the game
-#: src/game.py:139
+#: src/game.py:141
msgid "{} launched"
msgstr "{} startet"
#. The variable is the title of the game
-#: src/game.py:153
+#: src/game.py:155
#, fuzzy
msgid "{} hidden"
msgstr "{} skjult"
-#: src/game.py:153
+#: src/game.py:155
msgid "{} unhidden"
msgstr "{} synlig"
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:170 src/importer/importer.py:363
+#: src/game.py:169 src/importer/importer.py:380
msgid "{} removed"
msgstr "{} fjernet"
-#: src/preferences.py:119
+#: src/preferences.py:121
msgid "All games removed"
msgstr "Alle spill fjernet"
-#: src/preferences.py:168
+#: src/preferences.py:169
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"En API-nøkkel kreves for å bruke SteamGridDB. Du kan generere en {}her{}."
-#: src/preferences.py:294
+#: src/preferences.py:296
#, fuzzy
msgid "Installation Not Found"
msgstr "Fant ikke installasjonen"
-#: src/preferences.py:296
+#: src/preferences.py:297
#, fuzzy
msgid "Select a valid directory."
msgstr "Velg {}-datamappen."
-#: src/preferences.py:351
+#: src/preferences.py:333 src/importer/importer.py:306
+msgid "Warning"
+msgstr ""
+
+#: src/preferences.py:367
msgid "Invalid Directory"
msgstr ""
-#: src/preferences.py:357
+#: src/preferences.py:373
#, fuzzy
msgid "Set Location"
msgstr "Velg mappe"
-#: src/utils/create_dialog.py:25 src/importer/importer.py:291
+#: src/utils/create_dialog.py:33 src/importer/importer.py:307
msgid "Dismiss"
msgstr "Forkast"
-#: src/importer/importer.py:128
+#: src/importer/importer.py:142
msgid "Importing Games…"
msgstr "Importerer spill …"
-#: src/importer/importer.py:290
-msgid "Warning"
-msgstr ""
-
-#: src/importer/importer.py:311
+#: src/importer/importer.py:327
msgid "The following errors occured during import:"
msgstr ""
-#: src/importer/importer.py:339
+#: src/importer/importer.py:356
#, fuzzy
msgid "No new games found"
msgstr "Fant ingen spill"
-#: src/importer/importer.py:351
+#: src/importer/importer.py:368
#, fuzzy
msgid "1 game imported"
msgstr "Spill importert"
#. The variable is the number of games
-#: src/importer/importer.py:355
+#: src/importer/importer.py:372
#, fuzzy
msgid "{} games imported"
msgstr "Spill importert"
#. A single game removed
-#: src/importer/importer.py:359
+#: src/importer/importer.py:376
#, fuzzy
#| msgid "{} removed"
msgid "1 removed"
@@ -631,6 +652,31 @@ msgstr "Kunne ikke koble til SteamGridDB"
msgid "Verify your API key in preferences"
msgstr ""
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr ""
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr ""
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr ""
+
+#~ msgid "Back"
+#~ msgstr "Tilbake"
+
+#, fuzzy
+#~ msgid "Search games"
+#~ msgstr "Søk"
+
+#, fuzzy
+#~| msgid "Show hidden games"
+#~ msgid "Search hidden games"
+#~ msgstr "Vis skjulte spill"
+
#~ msgid "The title of the game"
#~ msgstr "Navnet på spillet"
diff --git a/po/nl.po b/po/nl.po
index 822159c..35f10bf 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
"PO-Revision-Date: 2023-08-13 10:23+0000\n"
"Last-Translator: Philip Goto \n"
"Language-Team: Dutch \n"
"Language-Team: Polish \n"
"Language-Team: Portuguese \n"
"Language-Team: Portuguese (Brazil) \n"
@@ -19,11 +19,11 @@ 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 5.0-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
-#: src/main.py:169
+#: data/gtk/window.blp:80
msgid "Cartridges"
msgstr "Cartuchos"
@@ -63,14 +63,14 @@ msgstr "Biblioteca"
msgid "Edit Game Details"
msgstr "Editar detalhes do jogo"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:71
-#: src/details_window.py:67
+#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
+#: src/details_window.py:71
msgid "Game Details"
msgstr "Detalhes do jogo"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:418
-#: src/details_window.py:241 src/importer/importer.py:292
-#: src/importer/importer.py:342
+#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
+#: src/details_window.py:271 src/importer/importer.py:308
+#: src/importer/importer.py:359
msgid "Preferences"
msgstr "Preferências"
@@ -78,48 +78,52 @@ msgstr "Preferências"
msgid "Cancel"
msgstr "Cancelar"
-#: data/gtk/details-window.blp:57
+#: data/gtk/details-window.blp:55
msgid "New Cover"
msgstr "Nova capa"
-#: data/gtk/details-window.blp:75
+#: data/gtk/details-window.blp:73
msgid "Delete Cover"
msgstr "Excluir capa"
-#: data/gtk/details-window.blp:102 data/gtk/game.blp:80
+#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
msgid "Title"
msgstr "Título"
-#: data/gtk/details-window.blp:105
+#: data/gtk/details-window.blp:103
msgid "Developer (optional)"
msgstr "Desenvolvedor (opcional)"
-#: data/gtk/details-window.blp:110
+#: data/gtk/details-window.blp:108
msgid "Executable"
msgstr "Executável"
-#: data/gtk/details-window.blp:116
+#: data/gtk/details-window.blp:114
+msgid "Select File"
+msgstr "Selecionar arquivo"
+
+#: data/gtk/details-window.blp:125
msgid "More Info"
msgstr "Mais informações"
-#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
+#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
msgid "Edit"
msgstr "Editar"
-#: data/gtk/game.blp:107 src/window.py:171
+#: data/gtk/game.blp:107 src/window.py:348
msgid "Hide"
msgstr "Esconder"
-#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:56
-#: data/gtk/window.blp:209
+#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
+#: data/gtk/window.blp:433
msgid "Remove"
msgstr "Remover"
-#: data/gtk/game.blp:126 src/window.py:173
+#: data/gtk/game.blp:126 src/window.py:350
msgid "Unhide"
msgstr "Exibir"
-#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
+#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
msgid "General"
msgstr "Geral"
@@ -127,8 +131,8 @@ msgstr "Geral"
msgid "Quit"
msgstr "Sair"
-#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:217 data/gtk/window.blp:257
-#: data/gtk/window.blp:324
+#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
+#: data/gtk/window.blp:444
msgid "Search"
msgstr "Buscar"
@@ -140,8 +144,8 @@ msgstr "Mostrar preferências"
msgid "Shortcuts"
msgstr "Atalhos"
-#: data/gtk/help-overlay.blp:34 src/game.py:103 src/preferences.py:120
-#: src/importer/importer.py:366
+#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
+#: src/importer/importer.py:383
msgid "Undo"
msgstr "Desfazer"
@@ -169,151 +173,155 @@ msgstr "Exibir jogos ocultos"
msgid "Remove game"
msgstr "Remover jogo"
-#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:89
-#: data/gtk/preferences.blp:304
+#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
+#: data/gtk/preferences.blp:288
msgid "Behavior"
msgstr "Comportamento"
-#: data/gtk/preferences.blp:16
+#: data/gtk/preferences.blp:15
msgid "Exit After Launching Games"
msgstr "Fechar ao iniciar jogos"
-#: data/gtk/preferences.blp:25
+#: data/gtk/preferences.blp:19
msgid "Cover Image Launches Game"
msgstr "Imagem da capa inicia o jogo"
-#: data/gtk/preferences.blp:26
+#: data/gtk/preferences.blp:20
msgid "Swaps the behavior of the cover image and the play button"
msgstr "Troca o comportamento da imagem da capa e do botão jogar"
-#: data/gtk/preferences.blp:36 src/details_window.py:81
+#: data/gtk/preferences.blp:25 src/details_window.py:85
msgid "Images"
msgstr "Imagens"
-#: data/gtk/preferences.blp:39
+#: data/gtk/preferences.blp:28
msgid "High Quality Images"
msgstr "Imagens de alta qualidade"
-#: data/gtk/preferences.blp:40
+#: data/gtk/preferences.blp:29
msgid "Save game covers losslessly at the cost of storage"
msgstr "Salva capas de jogos sem perdas, consumindo mais armazenamento"
-#: data/gtk/preferences.blp:50
+#: data/gtk/preferences.blp:34
msgid "Danger Zone"
msgstr "Zona de Perigo"
-#: data/gtk/preferences.blp:53
+#: data/gtk/preferences.blp:37
msgid "Remove All Games"
msgstr "Remover todos os jogos"
-#: data/gtk/preferences.blp:85 data/gtk/window.blp:27 data/gtk/window.blp:444
+#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
msgid "Import"
msgstr "Importar"
-#: data/gtk/preferences.blp:92
+#: data/gtk/preferences.blp:75
msgid "Remove Uninstalled Games"
msgstr "Remover jogos desinstalados"
-#: data/gtk/preferences.blp:102
+#: data/gtk/preferences.blp:80
msgid "Sources"
msgstr "Fontes"
-#: data/gtk/preferences.blp:105
+#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
msgid "Steam"
msgstr "Steam"
-#: data/gtk/preferences.blp:109 data/gtk/preferences.blp:123
-#: data/gtk/preferences.blp:164 data/gtk/preferences.blp:214
-#: data/gtk/preferences.blp:228 data/gtk/preferences.blp:242
-#: data/gtk/preferences.blp:256 data/gtk/preferences.blp:270
+#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
+#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
+#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
msgid "Install Location"
msgstr "Local de instalação"
-#: data/gtk/preferences.blp:119
+#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
msgid "Lutris"
msgstr "Lutris"
-#: data/gtk/preferences.blp:132
+#: data/gtk/preferences.blp:116
msgid "Cache Location"
msgstr "Local do cache"
-#: data/gtk/preferences.blp:141
+#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr "Importar jogos do Steam"
-#: data/gtk/preferences.blp:150
+#: data/gtk/preferences.blp:132
msgid "Import Flatpak Games"
msgstr "Importar jogos do Flatpak"
-#: data/gtk/preferences.blp:160
+#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
msgid "Heroic"
msgstr "Heroic"
-#: data/gtk/preferences.blp:173
+#: data/gtk/preferences.blp:153
msgid "Import Epic Games"
msgstr "Importar jogos da Epic Games"
-#: data/gtk/preferences.blp:182
+#: data/gtk/preferences.blp:157
msgid "Import GOG Games"
msgstr "Importar jogos do GOG"
-#: data/gtk/preferences.blp:191
+#: data/gtk/preferences.blp:161
msgid "Import Amazon Games"
msgstr "Importar jogos da Amazon"
-#: data/gtk/preferences.blp:200
+#: data/gtk/preferences.blp:165
msgid "Import Sideloaded Games"
msgstr "Importar jogos adicionados manualmente"
-#: data/gtk/preferences.blp:210
+#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
msgid "Bottles"
msgstr "Garrafas"
-#: data/gtk/preferences.blp:224
+#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
msgid "itch"
msgstr "itch"
-#: data/gtk/preferences.blp:238
+#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
msgid "Legendary"
msgstr "Lendário"
-#: data/gtk/preferences.blp:252
+#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
msgid "RetroArch"
msgstr "RetroArch"
-#: data/gtk/preferences.blp:266
+#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
msgid "Flatpak"
msgstr "Flatpak"
-#: data/gtk/preferences.blp:279
+#: data/gtk/preferences.blp:254
msgid "Import Game Launchers"
msgstr "Importar iniciadores de jogos"
-#: data/gtk/preferences.blp:292
+#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
+msgid "Desktop Entries"
+msgstr "Entradas desktop"
+
+#: data/gtk/preferences.blp:276
msgid "SteamGridDB"
msgstr "SteamGridDB"
-#: data/gtk/preferences.blp:296
+#: data/gtk/preferences.blp:280
msgid "Authentication"
msgstr "Autenticação"
-#: data/gtk/preferences.blp:299
+#: data/gtk/preferences.blp:283
msgid "API Key"
msgstr "Chave da API"
-#: data/gtk/preferences.blp:307
+#: data/gtk/preferences.blp:291
msgid "Use SteamGridDB"
msgstr "Usar SteamGridDB"
-#: data/gtk/preferences.blp:308
+#: data/gtk/preferences.blp:292
msgid "Download images when adding or importing games"
msgstr "Baixar imagens ao adicionar ou importar jogos"
-#: data/gtk/preferences.blp:317
+#: data/gtk/preferences.blp:296
msgid "Prefer Over Official Images"
msgstr "Preferir mais que as imagens oficiais"
-#: data/gtk/preferences.blp:326
+#: data/gtk/preferences.blp:300
msgid "Prefer Animated Images"
msgstr "Preferir imagens animadas"
@@ -341,126 +349,140 @@ msgstr "Sem jogos ocultos"
msgid "Games you hide will appear here."
msgstr "Os jogos ocultos aparecerão aqui."
-#: data/gtk/window.blp:64 data/gtk/window.blp:305
-msgid "Back"
-msgstr "Voltar"
+#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
+#, fuzzy
+#| msgid "Remove All Games"
+msgid "All Games"
+msgstr "Remover todos os jogos"
-#: data/gtk/window.blp:121
-msgid "Game Title"
-msgstr "Título do jogo"
+#: data/gtk/window.blp:88 data/gtk/window.blp:162
+msgid "Toggle Sidebar"
+msgstr ""
-#: data/gtk/window.blp:176
-msgid "Play"
-msgstr "Jogar"
+#: data/gtk/window.blp:125 src/main.py:168
+#, fuzzy
+#| msgid "Added: {}"
+msgid "Added"
+msgstr "Adicionado: {}"
-#: data/gtk/window.blp:243 data/gtk/window.blp:437
+#: data/gtk/window.blp:140
+#, fuzzy
+#| msgid "Import"
+msgid "Imported"
+msgstr "Importar"
+
+#: data/gtk/window.blp:168 data/gtk/window.blp:532
msgid "Add Game"
msgstr "Adicionar jogo"
-#: data/gtk/window.blp:250 data/gtk/window.blp:317
+#: data/gtk/window.blp:175 data/gtk/window.blp:234
msgid "Main Menu"
msgstr "Menu Principal"
-#: data/gtk/window.blp:272
-msgid "Search games"
-msgstr "Buscar jogos"
-
-#: data/gtk/window.blp:312
+#: data/gtk/window.blp:227
msgid "Hidden Games"
msgstr "Jogos ocultos"
-#: data/gtk/window.blp:339
-msgid "Search hidden games"
-msgstr "Buscar jogos ocultos"
+#: data/gtk/window.blp:337
+msgid "Game Title"
+msgstr "Título do jogo"
-#: data/gtk/window.blp:376
+#: data/gtk/window.blp:394
+msgid "Play"
+msgstr "Jogar"
+
+#: data/gtk/window.blp:471
msgid "Sort"
msgstr "Ordenar"
-#: data/gtk/window.blp:379
+#: data/gtk/window.blp:474
msgid "A-Z"
msgstr "A-Z"
-#: data/gtk/window.blp:385
+#: data/gtk/window.blp:480
msgid "Z-A"
msgstr "Z-A"
-#: data/gtk/window.blp:391
+#: data/gtk/window.blp:486
msgid "Newest"
msgstr "Mais novo"
-#: data/gtk/window.blp:397
+#: data/gtk/window.blp:492
msgid "Oldest"
msgstr "Mais antigo"
-#: data/gtk/window.blp:403
+#: data/gtk/window.blp:498
msgid "Last Played"
msgstr "Última vez jogado"
-#: data/gtk/window.blp:410
+#: data/gtk/window.blp:505
msgid "Show Hidden"
msgstr "Mostrar ocultados"
-#: data/gtk/window.blp:423
+#: data/gtk/window.blp:518
msgid "Keyboard Shortcuts"
msgstr "Atalhos de teclado"
-#: data/gtk/window.blp:428
+#: data/gtk/window.blp:523
msgid "About Cartridges"
msgstr "Sobre o Cartuchos"
#. Translators: Replace this with your name for it to show up in the about window
-#: src/main.py:188
+#: src/main.py:207
msgid "translator_credits"
msgstr "Pedro Sader Azevedo, Vinícius \"Stalck\""
#. The variable is the date when the game was added
-#: src/window.py:194
+#: src/window.py:371
msgid "Added: {}"
msgstr "Adicionado: {}"
-#: src/window.py:197
+#: src/window.py:374
msgid "Never"
msgstr "Nunca"
#. The variable is the date when the game was last played
-#: src/window.py:201
+#: src/window.py:378
msgid "Last played: {}"
msgstr "Jogado pela última vez: {}"
-#: src/details_window.py:72
+#: src/details_window.py:76
msgid "Apply"
msgstr "Aplicar"
-#: src/details_window.py:78
+#: src/details_window.py:82
msgid "Add New Game"
msgstr "Adicionar novo jogo"
-#: src/details_window.py:79
+#: src/details_window.py:83
msgid "Add"
msgstr "Adicionar"
+#: src/details_window.py:93
+msgid "Executables"
+msgstr "Executáveis"
+
#. Translate this string as you would translate "file"
-#: src/details_window.py:92
+#: src/details_window.py:108
msgid "file.txt"
msgstr "arquivo.txt"
#. As in software
-#: src/details_window.py:94
+#: src/details_window.py:110
msgid "program"
msgstr "programa"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:99 src/details_window.py:101
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
msgstr "C:\\caminho\\para\\{}"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:105 src/details_window.py:107
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
msgstr "/caminho/para/{}"
-#: src/details_window.py:112
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -482,107 +504,107 @@ msgstr ""
"\n"
"Se o caminho contiver espaços, certifique-se de colocá-lo entre aspas duplas!"
-#: src/details_window.py:147 src/details_window.py:153
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
msgstr "Não foi possível adicionar o jogo"
-#: src/details_window.py:147 src/details_window.py:183
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
msgstr "O título do jogo não pode estar vazio."
-#: src/details_window.py:153 src/details_window.py:191
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
msgstr "O executável não pode estar vazio."
-#: src/details_window.py:182 src/details_window.py:190
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
msgstr "Não foi possível aplicar as preferências"
#. The variable is the title of the game
-#: src/game.py:139
+#: src/game.py:141
msgid "{} launched"
msgstr "{} iniciado"
#. The variable is the title of the game
-#: src/game.py:153
+#: src/game.py:155
msgid "{} hidden"
msgstr "{} ocultado"
-#: src/game.py:153
+#: src/game.py:155
msgid "{} unhidden"
msgstr "{} exibido"
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:170 src/importer/importer.py:363
+#: src/game.py:169 src/importer/importer.py:380
msgid "{} removed"
msgstr "{} removido"
-#: src/preferences.py:119
+#: src/preferences.py:121
msgid "All games removed"
msgstr "Todos os jogos foram removidos"
-#: src/preferences.py:168
+#: src/preferences.py:169
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"Uma chave de API é necessária para utilizar o SteamGridDB. Você pode gerar "
"uma {}aqui{}."
-#: src/preferences.py:294
+#: src/preferences.py:296
msgid "Installation Not Found"
msgstr "Instalação não encontrada"
-#: src/preferences.py:296
+#: src/preferences.py:297
msgid "Select a valid directory."
msgstr "Selecione um diretório válido."
-#: src/preferences.py:351
-msgid "Invalid Directory"
-msgstr "Diretório inválido"
-
-#: src/preferences.py:357
-msgid "Set Location"
-msgstr "Definir local"
-
-#: src/utils/create_dialog.py:25 src/importer/importer.py:291
-msgid "Dismiss"
-msgstr "Dispensar"
-
-#: src/importer/importer.py:128
-msgid "Importing Games…"
-msgstr "Importando jogos…"
-
-#: src/importer/importer.py:290
+#: src/preferences.py:333 src/importer/importer.py:306
msgid "Warning"
msgstr "Atenção"
-#: src/importer/importer.py:311
+#: src/preferences.py:367
+msgid "Invalid Directory"
+msgstr "Diretório inválido"
+
+#: src/preferences.py:373
+msgid "Set Location"
+msgstr "Definir local"
+
+#: src/utils/create_dialog.py:33 src/importer/importer.py:307
+msgid "Dismiss"
+msgstr "Dispensar"
+
+#: src/importer/importer.py:142
+msgid "Importing Games…"
+msgstr "Importando jogos…"
+
+#: src/importer/importer.py:327
msgid "The following errors occured during import:"
msgstr "Ocorreram os seguintes erros durante a importação:"
-#: src/importer/importer.py:339
+#: src/importer/importer.py:356
msgid "No new games found"
msgstr "Nenhum jogo novo encontrado"
-#: src/importer/importer.py:351
+#: src/importer/importer.py:368
msgid "1 game imported"
msgstr "1 jogo importado"
#. The variable is the number of games
-#: src/importer/importer.py:355
+#: src/importer/importer.py:372
msgid "{} games imported"
msgstr "{} jogos importados"
#. A single game removed
-#: src/importer/importer.py:359
+#: src/importer/importer.py:376
msgid "1 removed"
msgstr "1 removido"
#. The variable is the name of the source
#: src/importer/sources/location.py:33
msgid "Select the {} cache directory."
-msgstr "Selecione o diretório de cache do(a) {}."
+msgstr "Selecione o diretório de cache {}."
#. The variable is the name of the source
#: src/importer/sources/location.py:35
@@ -596,11 +618,33 @@ msgstr "Selecione o diretório de dados do(a) {}."
#: src/store/managers/sgdb_manager.py:46
msgid "Couldn't Authenticate SteamGridDB"
-msgstr "Não foi possível autenticar ao SteamGridDB"
+msgstr "Não foi possível autenticar no SteamGridDB"
#: src/store/managers/sgdb_manager.py:47
msgid "Verify your API key in preferences"
-msgstr "Verifique sua chave API nas preferências"
+msgstr "Verifique sua chave de API nas preferências"
+
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr "Nenhum núcleo RetroArch selecionado"
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr "As seguintes listas de jogos não têm núcleo padrão:"
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr "Jogos sem núcleo selecionado não foram importados"
+
+#~ msgid "Back"
+#~ msgstr "Voltar"
+
+#~ msgid "Search games"
+#~ msgstr "Buscar jogos"
+
+#~ msgid "Search hidden games"
+#~ msgstr "Buscar jogos ocultos"
#~ msgid "The title of the game"
#~ msgstr "O título do jogo"
diff --git a/po/ro.po b/po/ro.po
index a3bc12e..7641603 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
"PO-Revision-Date: 2023-04-04 17:12+0000\n"
"Last-Translator: Matt C \n"
"Language-Team: Romanian , 2023.
# kramo , 2023.
+# Сергей Ворон , 2023.
msgid ""
msgstr ""
"Project-Id-Version: cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
-"PO-Revision-Date: 2023-07-31 00:05+0000\n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
+"PO-Revision-Date: 2023-09-01 19:55+0000\n"
"Last-Translator: Сергей \n"
"Language-Team: Russian \n"
@@ -16,13 +17,13 @@ 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"
-"X-Generator: Weblate 5.0-dev\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.1-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
-#: src/main.py:169
+#: data/gtk/window.blp:80
msgid "Cartridges"
msgstr "Картриджи"
@@ -36,12 +37,11 @@ msgid "Launch all your games"
msgstr "Запустите все свои игры"
#: data/hu.kramo.Cartridges.desktop.in:11
-#, fuzzy
-#| msgid "gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;"
msgid ""
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
msgstr ""
-"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;игры;стим;"
+"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
+"игры;стим;"
#: data/hu.kramo.Cartridges.metainfo.xml.in:9
msgid ""
@@ -63,14 +63,14 @@ msgstr "Библиотека"
msgid "Edit Game Details"
msgstr "Редактировать подробности об игре"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:71
-#: src/details_window.py:67
+#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
+#: src/details_window.py:71
msgid "Game Details"
msgstr "Подробности об игре"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:418
-#: src/details_window.py:241 src/importer/importer.py:292
-#: src/importer/importer.py:342
+#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
+#: src/details_window.py:271 src/importer/importer.py:308
+#: src/importer/importer.py:359
msgid "Preferences"
msgstr "Параметры"
@@ -78,59 +78,61 @@ msgstr "Параметры"
msgid "Cancel"
msgstr "Отменить"
-#: data/gtk/details-window.blp:57
+#: data/gtk/details-window.blp:55
msgid "New Cover"
msgstr "Новая обложка"
-#: data/gtk/details-window.blp:75
+#: data/gtk/details-window.blp:73
msgid "Delete Cover"
msgstr "Удалить обложку"
-#: data/gtk/details-window.blp:102 data/gtk/game.blp:80
+#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
msgid "Title"
msgstr "Название"
-#: data/gtk/details-window.blp:105
-#, fuzzy
-#| msgid "The developer or publisher (optional)"
+#: data/gtk/details-window.blp:103
msgid "Developer (optional)"
-msgstr "Разработчик или издатель (необязательно)"
+msgstr "Разработчик (необязательно)"
-#: data/gtk/details-window.blp:110
+#: data/gtk/details-window.blp:108
msgid "Executable"
msgstr "Исполняемый"
-#: data/gtk/details-window.blp:116
+#: data/gtk/details-window.blp:114
+msgid "Select File"
+msgstr "Выбрать файл"
+
+#: data/gtk/details-window.blp:125
msgid "More Info"
msgstr "Дополнительная информация"
-#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
+#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
msgid "Edit"
msgstr "Редактировать"
-#: data/gtk/game.blp:107 src/window.py:171
+#: data/gtk/game.blp:107 src/window.py:348
msgid "Hide"
msgstr "Скрыть"
-#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:56
-#: data/gtk/window.blp:209
+#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
+#: data/gtk/window.blp:433
msgid "Remove"
msgstr "Удалить"
-#: data/gtk/game.blp:126 src/window.py:173
+#: data/gtk/game.blp:126 src/window.py:350
msgid "Unhide"
msgstr "Показать"
-#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
+#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
msgid "General"
-msgstr "Основное"
+msgstr "Общее"
#: data/gtk/help-overlay.blp:14
msgid "Quit"
msgstr "Выйти"
-#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:217 data/gtk/window.blp:257
-#: data/gtk/window.blp:324
+#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
+#: data/gtk/window.blp:444
msgid "Search"
msgstr "Поиск"
@@ -142,8 +144,8 @@ msgstr "Показать параметры"
msgid "Shortcuts"
msgstr "Комбинации клавиш"
-#: data/gtk/help-overlay.blp:34 src/game.py:103 src/preferences.py:120
-#: src/importer/importer.py:366
+#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
+#: src/importer/importer.py:383
msgid "Undo"
msgstr "Вернуть"
@@ -171,153 +173,155 @@ msgstr "Показать скрытые игры"
msgid "Remove game"
msgstr "Удалить игру"
-#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:89
-#: data/gtk/preferences.blp:304
+#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
+#: data/gtk/preferences.blp:288
msgid "Behavior"
msgstr "Поведение"
-#: data/gtk/preferences.blp:16
+#: data/gtk/preferences.blp:15
msgid "Exit After Launching Games"
-msgstr "Выход после запуска игр"
+msgstr "Выход из приложения после запуска игры"
-#: data/gtk/preferences.blp:25
+#: data/gtk/preferences.blp:19
msgid "Cover Image Launches Game"
-msgstr "Запуск игры используя изображение обложки"
+msgstr "Запускать игры используя изображение обложки"
-#: data/gtk/preferences.blp:26
+#: data/gtk/preferences.blp:20
msgid "Swaps the behavior of the cover image and the play button"
msgstr "Меняет местами поведение изображения обложки и кнопки запуска"
-#: data/gtk/preferences.blp:36 src/details_window.py:81
+#: data/gtk/preferences.blp:25 src/details_window.py:85
msgid "Images"
msgstr "Изображения"
-#: data/gtk/preferences.blp:39
+#: data/gtk/preferences.blp:28
msgid "High Quality Images"
msgstr "Изображения высокого качества"
-#: data/gtk/preferences.blp:40
+#: data/gtk/preferences.blp:29
msgid "Save game covers losslessly at the cost of storage"
msgstr "Сохранение обложек игр без потерь за счет хранилища"
-#: data/gtk/preferences.blp:50
+#: data/gtk/preferences.blp:34
msgid "Danger Zone"
msgstr "Небезопасная область"
-#: data/gtk/preferences.blp:53
+#: data/gtk/preferences.blp:37
msgid "Remove All Games"
msgstr "Удалить все игры"
-#: data/gtk/preferences.blp:85 data/gtk/window.blp:27 data/gtk/window.blp:444
+#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
msgid "Import"
-msgstr "Импортировать"
+msgstr "Импорт"
-#: data/gtk/preferences.blp:92
-#, fuzzy
-#| msgid "Remove All Games"
+#: data/gtk/preferences.blp:75
msgid "Remove Uninstalled Games"
-msgstr "Удалить все игры"
+msgstr "Удалять деинсталлированные игры"
-#: data/gtk/preferences.blp:102
+#: data/gtk/preferences.blp:80
msgid "Sources"
msgstr "Источники"
-#: data/gtk/preferences.blp:105
+#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
msgid "Steam"
msgstr "Steam"
-#: data/gtk/preferences.blp:109 data/gtk/preferences.blp:123
-#: data/gtk/preferences.blp:164 data/gtk/preferences.blp:214
-#: data/gtk/preferences.blp:228 data/gtk/preferences.blp:242
-#: data/gtk/preferences.blp:256 data/gtk/preferences.blp:270
+#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
+#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
+#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
msgid "Install Location"
msgstr "Место установки"
-#: data/gtk/preferences.blp:119
+#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
msgid "Lutris"
msgstr "Lutris"
-#: data/gtk/preferences.blp:132
+#: data/gtk/preferences.blp:116
msgid "Cache Location"
msgstr "Расположение кэша"
-#: data/gtk/preferences.blp:141
+#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr "Импорт игр Steam"
-#: data/gtk/preferences.blp:150
+#: data/gtk/preferences.blp:132
msgid "Import Flatpak Games"
msgstr "Импорт игр Flatpak"
-#: data/gtk/preferences.blp:160
+#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
msgid "Heroic"
msgstr "Heroic"
-#: data/gtk/preferences.blp:173
+#: data/gtk/preferences.blp:153
msgid "Import Epic Games"
msgstr "Импорт игр Epic"
-#: data/gtk/preferences.blp:182
+#: data/gtk/preferences.blp:157
msgid "Import GOG Games"
msgstr "Импорт игр GOG"
-#: data/gtk/preferences.blp:191
+#: data/gtk/preferences.blp:161
msgid "Import Amazon Games"
msgstr "Импорт игр Amazon"
-#: data/gtk/preferences.blp:200
+#: data/gtk/preferences.blp:165
msgid "Import Sideloaded Games"
msgstr "Импорт сторонних игр"
-#: data/gtk/preferences.blp:210
+#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
msgid "Bottles"
msgstr "Bottles"
-#: data/gtk/preferences.blp:224
+#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
msgid "itch"
msgstr "itch"
-#: data/gtk/preferences.blp:238
+#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
msgid "Legendary"
msgstr "Legendary"
-#: data/gtk/preferences.blp:252
+#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
msgid "RetroArch"
-msgstr ""
+msgstr "RetroArch"
-#: data/gtk/preferences.blp:266
+#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
msgid "Flatpak"
msgstr "Flatpak"
-#: data/gtk/preferences.blp:279
+#: data/gtk/preferences.blp:254
msgid "Import Game Launchers"
msgstr "Импорт средств запуска игр"
-#: data/gtk/preferences.blp:292
+#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
+msgid "Desktop Entries"
+msgstr "Интеграция в среду рабочего стола"
+
+#: data/gtk/preferences.blp:276
msgid "SteamGridDB"
msgstr "SteamGridDB"
-#: data/gtk/preferences.blp:296
+#: data/gtk/preferences.blp:280
msgid "Authentication"
msgstr "Аутентификация"
-#: data/gtk/preferences.blp:299
+#: data/gtk/preferences.blp:283
msgid "API Key"
msgstr "API-ключ"
-#: data/gtk/preferences.blp:307
+#: data/gtk/preferences.blp:291
msgid "Use SteamGridDB"
msgstr "Использовать SteamGridDB"
-#: data/gtk/preferences.blp:308
+#: data/gtk/preferences.blp:292
msgid "Download images when adding or importing games"
msgstr "Загрузка изображений при добавлении или импорте игр"
-#: data/gtk/preferences.blp:317
+#: data/gtk/preferences.blp:296
msgid "Prefer Over Official Images"
msgstr "Отдавать предпочтение официальным изображениям"
-#: data/gtk/preferences.blp:326
+#: data/gtk/preferences.blp:300
msgid "Prefer Animated Images"
msgstr "Отдавать предпочтение анимированным изображениям"
@@ -345,130 +349,140 @@ msgstr "Нет скрытых игр"
msgid "Games you hide will appear here."
msgstr "Здесь появятся скрытые игры."
-#: data/gtk/window.blp:64 data/gtk/window.blp:305
-msgid "Back"
-msgstr "Назад"
+#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
+#, fuzzy
+#| msgid "Remove All Games"
+msgid "All Games"
+msgstr "Удалить все игры"
-#: data/gtk/window.blp:121
-msgid "Game Title"
-msgstr "Название игры"
+#: data/gtk/window.blp:88 data/gtk/window.blp:162
+msgid "Toggle Sidebar"
+msgstr ""
-#: data/gtk/window.blp:176
-msgid "Play"
-msgstr "Играть"
+#: data/gtk/window.blp:125 src/main.py:168
+#, fuzzy
+#| msgid "Added: {}"
+msgid "Added"
+msgstr "Добавлено: {}"
-#: data/gtk/window.blp:243 data/gtk/window.blp:437
+#: data/gtk/window.blp:140
+#, fuzzy
+#| msgid "Import"
+msgid "Imported"
+msgstr "Импорт"
+
+#: data/gtk/window.blp:168 data/gtk/window.blp:532
msgid "Add Game"
msgstr "Добавить игру"
-#: data/gtk/window.blp:250 data/gtk/window.blp:317
+#: data/gtk/window.blp:175 data/gtk/window.blp:234
msgid "Main Menu"
msgstr "Главное меню"
-#: data/gtk/window.blp:272
-#, fuzzy
-#| msgid "Search"
-msgid "Search games"
-msgstr "Поиск"
-
-#: data/gtk/window.blp:312
+#: data/gtk/window.blp:227
msgid "Hidden Games"
msgstr "Скрытые игры"
-#: data/gtk/window.blp:339
-#, fuzzy
-#| msgid "Show hidden games"
-msgid "Search hidden games"
-msgstr "Показать скрытые игры"
+#: data/gtk/window.blp:337
+msgid "Game Title"
+msgstr "Название игры"
-#: data/gtk/window.blp:376
+#: data/gtk/window.blp:394
+msgid "Play"
+msgstr "Играть"
+
+#: data/gtk/window.blp:471
msgid "Sort"
msgstr "Сортировать"
-#: data/gtk/window.blp:379
+#: data/gtk/window.blp:474
msgid "A-Z"
msgstr "А-Я"
-#: data/gtk/window.blp:385
+#: data/gtk/window.blp:480
msgid "Z-A"
msgstr "Я-А"
-#: data/gtk/window.blp:391
+#: data/gtk/window.blp:486
msgid "Newest"
msgstr "Сначала новые"
-#: data/gtk/window.blp:397
+#: data/gtk/window.blp:492
msgid "Oldest"
msgstr "Сначала старые"
-#: data/gtk/window.blp:403
+#: data/gtk/window.blp:498
msgid "Last Played"
msgstr "Последняя игра"
-#: data/gtk/window.blp:410
+#: data/gtk/window.blp:505
msgid "Show Hidden"
msgstr "Показать скрытые"
-#: data/gtk/window.blp:423
+#: data/gtk/window.blp:518
msgid "Keyboard Shortcuts"
msgstr "Комбинации клавиш"
-#: data/gtk/window.blp:428
+#: data/gtk/window.blp:523
msgid "About Cartridges"
msgstr "О приложении"
#. Translators: Replace this with your name for it to show up in the about window
-#: src/main.py:188
+#: src/main.py:207
msgid "translator_credits"
msgstr "Ser82-png"
#. The variable is the date when the game was added
-#: src/window.py:194
+#: src/window.py:371
msgid "Added: {}"
msgstr "Добавлено: {}"
-#: src/window.py:197
+#: src/window.py:374
msgid "Never"
msgstr "Никогда"
#. The variable is the date when the game was last played
-#: src/window.py:201
+#: src/window.py:378
msgid "Last played: {}"
msgstr "Последний раз запускалась: {}"
-#: src/details_window.py:72
+#: src/details_window.py:76
msgid "Apply"
msgstr "Применить"
-#: src/details_window.py:78
+#: src/details_window.py:82
msgid "Add New Game"
msgstr "Добавить новую игру"
-#: src/details_window.py:79
+#: src/details_window.py:83
msgid "Add"
-msgstr ""
+msgstr "Добавить"
+
+#: src/details_window.py:93
+msgid "Executables"
+msgstr "Исполняемые"
#. Translate this string as you would translate "file"
-#: src/details_window.py:92
+#: src/details_window.py:108
msgid "file.txt"
msgstr "file.txt"
#. As in software
-#: src/details_window.py:94
+#: src/details_window.py:110
msgid "program"
msgstr "программа"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:99 src/details_window.py:101
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
msgstr "C:\\путь\\к\\{}"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:105 src/details_window.py:107
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
msgstr "/путь/к/{}"
-#: src/details_window.py:112
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -490,104 +504,102 @@ msgstr ""
"\n"
"Если путь содержит пробелы, обязательно заключите его в двойные кавычки!"
-#: src/details_window.py:147 src/details_window.py:153
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
msgstr "Не удалось добавить игру"
-#: src/details_window.py:147 src/details_window.py:183
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
msgstr "Название игры не может быть пустым."
-#: src/details_window.py:153 src/details_window.py:191
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
msgstr "Исполняемый файл не может быть пустым."
-#: src/details_window.py:182 src/details_window.py:190
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
msgstr "Не удалось применить параметры"
#. The variable is the title of the game
-#: src/game.py:139
+#: src/game.py:141
msgid "{} launched"
msgstr "{} - запущена"
#. The variable is the title of the game
-#: src/game.py:153
+#: src/game.py:155
msgid "{} hidden"
msgstr "{} - скрытая"
-#: src/game.py:153
+#: src/game.py:155
msgid "{} unhidden"
msgstr "{} - не скрыта"
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:170 src/importer/importer.py:363
+#: src/game.py:169 src/importer/importer.py:380
msgid "{} removed"
msgstr "{} удалена"
-#: src/preferences.py:119
+#: src/preferences.py:121
msgid "All games removed"
msgstr "Все игры удалены"
-#: src/preferences.py:168
+#: src/preferences.py:169
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"Для использования SteamGridDB требуется ключ API. Вы можете сгенерировать "
"его {}здесь{}."
-#: src/preferences.py:294
+#: src/preferences.py:296
msgid "Installation Not Found"
msgstr "Установка не найдена"
-#: src/preferences.py:296
+#: src/preferences.py:297
msgid "Select a valid directory."
msgstr "Выберите действующий каталог."
-#: src/preferences.py:351
+#: src/preferences.py:333 src/importer/importer.py:306
+msgid "Warning"
+msgstr "Предупреждение"
+
+#: src/preferences.py:367
msgid "Invalid Directory"
msgstr "Неверный каталог"
-#: src/preferences.py:357
+#: src/preferences.py:373
msgid "Set Location"
msgstr "Установить расположение"
-#: src/utils/create_dialog.py:25 src/importer/importer.py:291
+#: src/utils/create_dialog.py:33 src/importer/importer.py:307
msgid "Dismiss"
msgstr "Отклонить"
-#: src/importer/importer.py:128
+#: src/importer/importer.py:142
msgid "Importing Games…"
msgstr "Импорт игр…"
-#: src/importer/importer.py:290
-msgid "Warning"
-msgstr ""
-
-#: src/importer/importer.py:311
+#: src/importer/importer.py:327
msgid "The following errors occured during import:"
-msgstr ""
+msgstr "При импорте возникли следующие ошибки:"
-#: src/importer/importer.py:339
+#: src/importer/importer.py:356
msgid "No new games found"
msgstr "Новых игр не найдено"
-#: src/importer/importer.py:351
+#: src/importer/importer.py:368
msgid "1 game imported"
msgstr "1 игра импортирована"
#. The variable is the number of games
-#: src/importer/importer.py:355
+#: src/importer/importer.py:372
msgid "{} games imported"
msgstr "{} игр(ы) импортировано"
#. A single game removed
-#: src/importer/importer.py:359
-#, fuzzy
-#| msgid "{} removed"
+#: src/importer/importer.py:376
msgid "1 removed"
-msgstr "{} удалена"
+msgstr "1 удалена"
#. The variable is the name of the source
#: src/importer/sources/location.py:33
@@ -612,6 +624,37 @@ msgstr "Не удалось пройти аутентификацию SteamGridD
msgid "Verify your API key in preferences"
msgstr "Проверьте ключ API-ключ в параметрах"
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr "Ядро RetroArch не выбрано"
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr "Следующие плейлисты не имеют установленного по умолчанию ядра:"
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr "Игры без выбранного ядра не были импортированы"
+
+#~ msgid "Back"
+#~ msgstr "Назад"
+
+#~ msgid "Search games"
+#~ msgstr "Поиск игр"
+
+#~ msgid "Search hidden games"
+#~ msgstr "Поиск скрытых игр"
+
+#~ msgid "Terminal"
+#~ msgstr "Терминал"
+
+#~ msgid "Used only by games that require one to run"
+#~ msgstr "Используется только играми, требующими его запуска"
+
+#~ msgid "Custom"
+#~ msgstr "Пользовательский"
+
#~ msgid "The title of the game"
#~ msgstr "Название игры"
diff --git a/po/sv.po b/po/sv.po
index 95ad7fa..82f992d 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
-"PO-Revision-Date: 2023-07-08 14:52+0000\n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
+"PO-Revision-Date: 2023-09-06 03:24+0000\n"
"Last-Translator: Luna Jernberg \n"
"Language-Team: Swedish \n"
@@ -18,11 +18,11 @@ 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 5.0-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
-#: src/main.py:169
+#: data/gtk/window.blp:80
msgid "Cartridges"
msgstr "Cartridges"
@@ -36,12 +36,11 @@ msgid "Launch all your games"
msgstr "Starta alla dina spel"
#: data/hu.kramo.Cartridges.desktop.in:11
-#, fuzzy
-#| msgid "gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;"
msgid ""
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
msgstr ""
"gaming;spelstartare;steam;lutris;heroic;bottles;itch;flatpak;legendary;"
+"retroarch;"
#: data/hu.kramo.Cartridges.metainfo.xml.in:9
msgid ""
@@ -62,14 +61,14 @@ msgstr "Bibliotek"
msgid "Edit Game Details"
msgstr "Redigera speldetaljer"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:71
-#: src/details_window.py:67
+#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
+#: src/details_window.py:71
msgid "Game Details"
msgstr "Speldetaljer"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:418
-#: src/details_window.py:241 src/importer/importer.py:292
-#: src/importer/importer.py:342
+#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
+#: src/details_window.py:271 src/importer/importer.py:308
+#: src/importer/importer.py:359
msgid "Preferences"
msgstr "Inställningar"
@@ -77,50 +76,52 @@ msgstr "Inställningar"
msgid "Cancel"
msgstr "Avbryt"
-#: data/gtk/details-window.blp:57
+#: data/gtk/details-window.blp:55
msgid "New Cover"
msgstr "Nytt omslag"
-#: data/gtk/details-window.blp:75
+#: data/gtk/details-window.blp:73
msgid "Delete Cover"
msgstr "Ta bort omslag"
-#: data/gtk/details-window.blp:102 data/gtk/game.blp:80
+#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
msgid "Title"
msgstr "Titel"
-#: data/gtk/details-window.blp:105
-#, fuzzy
-#| msgid "The developer or publisher (optional)"
+#: data/gtk/details-window.blp:103
msgid "Developer (optional)"
-msgstr "Utvecklaren eller utgivaren (valfritt)"
+msgstr "Utvecklare (valfritt)"
-#: data/gtk/details-window.blp:110
+#: data/gtk/details-window.blp:108
msgid "Executable"
msgstr "Körbar"
-#: data/gtk/details-window.blp:116
+#: data/gtk/details-window.blp:114
+msgid "Select File"
+msgstr "Välj fil"
+
+#: data/gtk/details-window.blp:125
msgid "More Info"
msgstr "Mer info"
-#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
+#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
msgid "Edit"
msgstr "Redigera"
-#: data/gtk/game.blp:107 src/window.py:171
+#: data/gtk/game.blp:107 src/window.py:348
msgid "Hide"
msgstr "Dölj"
-#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:56
-#: data/gtk/window.blp:209
+#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
+#: data/gtk/window.blp:433
msgid "Remove"
msgstr "Ta bort"
-#: data/gtk/game.blp:126 src/window.py:173
+#: data/gtk/game.blp:126 src/window.py:350
msgid "Unhide"
msgstr "Visa"
-#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
+#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
msgid "General"
msgstr "Allmänt"
@@ -128,8 +129,8 @@ msgstr "Allmänt"
msgid "Quit"
msgstr "Avsluta"
-#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:217 data/gtk/window.blp:257
-#: data/gtk/window.blp:324
+#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
+#: data/gtk/window.blp:444
msgid "Search"
msgstr "Sök"
@@ -141,8 +142,8 @@ msgstr "Visa inställningar"
msgid "Shortcuts"
msgstr "Genvägar"
-#: data/gtk/help-overlay.blp:34 src/game.py:103 src/preferences.py:120
-#: src/importer/importer.py:366
+#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
+#: src/importer/importer.py:383
msgid "Undo"
msgstr "Ångra"
@@ -170,154 +171,156 @@ msgstr "Visa dolda spel"
msgid "Remove game"
msgstr "Ta bort spel"
-#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:89
-#: data/gtk/preferences.blp:304
+#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
+#: data/gtk/preferences.blp:288
msgid "Behavior"
msgstr "Beteende"
-#: data/gtk/preferences.blp:16
+#: data/gtk/preferences.blp:15
msgid "Exit After Launching Games"
msgstr "Avsluta efter start av spel"
-#: data/gtk/preferences.blp:25
+#: data/gtk/preferences.blp:19
msgid "Cover Image Launches Game"
msgstr "Omslagsbild startar spel"
-#: data/gtk/preferences.blp:26
+#: data/gtk/preferences.blp:20
msgid "Swaps the behavior of the cover image and the play button"
msgstr "Byt beteende för omslagsbilden och Spela-knappen"
-#: data/gtk/preferences.blp:36 src/details_window.py:81
+#: data/gtk/preferences.blp:25 src/details_window.py:85
msgid "Images"
msgstr "Bilder"
-#: data/gtk/preferences.blp:39
+#: data/gtk/preferences.blp:28
msgid "High Quality Images"
msgstr "Bilder av hög kvalitet"
-#: data/gtk/preferences.blp:40
+#: data/gtk/preferences.blp:29
msgid "Save game covers losslessly at the cost of storage"
msgstr ""
"Spara omslagsbilder utan kvalitetsförlust på bekostnad av lagringsplats"
-#: data/gtk/preferences.blp:50
+#: data/gtk/preferences.blp:34
msgid "Danger Zone"
msgstr "Farozon"
-#: data/gtk/preferences.blp:53
+#: data/gtk/preferences.blp:37
msgid "Remove All Games"
msgstr "Ta bort alla spel"
-#: data/gtk/preferences.blp:85 data/gtk/window.blp:27 data/gtk/window.blp:444
+#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
msgid "Import"
msgstr "Importera"
-#: data/gtk/preferences.blp:92
-#, fuzzy
-#| msgid "Remove All Games"
+#: data/gtk/preferences.blp:75
msgid "Remove Uninstalled Games"
-msgstr "Ta bort alla spel"
+msgstr "Ta bort avinstallerade spel"
-#: data/gtk/preferences.blp:102
+#: data/gtk/preferences.blp:80
msgid "Sources"
msgstr "Källor"
-#: data/gtk/preferences.blp:105
+#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
msgid "Steam"
msgstr "Steam"
-#: data/gtk/preferences.blp:109 data/gtk/preferences.blp:123
-#: data/gtk/preferences.blp:164 data/gtk/preferences.blp:214
-#: data/gtk/preferences.blp:228 data/gtk/preferences.blp:242
-#: data/gtk/preferences.blp:256 data/gtk/preferences.blp:270
+#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
+#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
+#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
msgid "Install Location"
msgstr "Plats för installation"
-#: data/gtk/preferences.blp:119
+#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
msgid "Lutris"
msgstr "Lutris"
-#: data/gtk/preferences.blp:132
+#: data/gtk/preferences.blp:116
msgid "Cache Location"
msgstr "Plats för cacheminne"
-#: data/gtk/preferences.blp:141
+#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr "Importera Steam-spel"
-#: data/gtk/preferences.blp:150
+#: data/gtk/preferences.blp:132
msgid "Import Flatpak Games"
msgstr "Importera Flatpak-spel"
-#: data/gtk/preferences.blp:160
+#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
msgid "Heroic"
msgstr "Heroic"
-#: data/gtk/preferences.blp:173
+#: data/gtk/preferences.blp:153
msgid "Import Epic Games"
msgstr "Importera Epic Games"
-#: data/gtk/preferences.blp:182
+#: data/gtk/preferences.blp:157
msgid "Import GOG Games"
msgstr "Importera GOG-spel"
-#: data/gtk/preferences.blp:191
+#: data/gtk/preferences.blp:161
msgid "Import Amazon Games"
msgstr "Importera Amazon-spel"
-#: data/gtk/preferences.blp:200
+#: data/gtk/preferences.blp:165
msgid "Import Sideloaded Games"
msgstr "Importera sidoladdade spel"
-#: data/gtk/preferences.blp:210
+#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
msgid "Bottles"
msgstr "Bottles"
-#: data/gtk/preferences.blp:224
+#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
msgid "itch"
msgstr "itch"
-#: data/gtk/preferences.blp:238
+#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
msgid "Legendary"
msgstr "Legendary"
-#: data/gtk/preferences.blp:252
+#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
msgid "RetroArch"
-msgstr ""
+msgstr "RetroArch"
-#: data/gtk/preferences.blp:266
+#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
msgid "Flatpak"
msgstr "Flatpak"
-#: data/gtk/preferences.blp:279
+#: data/gtk/preferences.blp:254
msgid "Import Game Launchers"
msgstr "Importera spelstartare"
-#: data/gtk/preferences.blp:292
+#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
+msgid "Desktop Entries"
+msgstr "Skrivbordsposter"
+
+#: data/gtk/preferences.blp:276
msgid "SteamGridDB"
msgstr "SteamGridDB"
-#: data/gtk/preferences.blp:296
+#: data/gtk/preferences.blp:280
msgid "Authentication"
msgstr "Autentisering"
-#: data/gtk/preferences.blp:299
+#: data/gtk/preferences.blp:283
msgid "API Key"
msgstr "API-nyckel"
-#: data/gtk/preferences.blp:307
+#: data/gtk/preferences.blp:291
msgid "Use SteamGridDB"
msgstr "Använd SteamGridDB"
-#: data/gtk/preferences.blp:308
+#: data/gtk/preferences.blp:292
msgid "Download images when adding or importing games"
msgstr "Ladda ner bilder när spel läggs till eller importeras"
-#: data/gtk/preferences.blp:317
+#: data/gtk/preferences.blp:296
msgid "Prefer Over Official Images"
msgstr "Föredra framför officiella bilder"
-#: data/gtk/preferences.blp:326
+#: data/gtk/preferences.blp:300
msgid "Prefer Animated Images"
msgstr "Föredra animerade bilder"
@@ -345,130 +348,140 @@ msgstr "Inga dolda spel"
msgid "Games you hide will appear here."
msgstr "Spel som du döljer kommer visas här."
-#: data/gtk/window.blp:64 data/gtk/window.blp:305
-msgid "Back"
-msgstr "Bakåt"
+#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
+#, fuzzy
+#| msgid "Remove All Games"
+msgid "All Games"
+msgstr "Ta bort alla spel"
-#: data/gtk/window.blp:121
-msgid "Game Title"
-msgstr "Speltitel"
+#: data/gtk/window.blp:88 data/gtk/window.blp:162
+msgid "Toggle Sidebar"
+msgstr ""
-#: data/gtk/window.blp:176
-msgid "Play"
-msgstr "Spela"
+#: data/gtk/window.blp:125 src/main.py:168
+#, fuzzy
+#| msgid "Added: {}"
+msgid "Added"
+msgstr "Tillagt: {}"
-#: data/gtk/window.blp:243 data/gtk/window.blp:437
+#: data/gtk/window.blp:140
+#, fuzzy
+#| msgid "Import"
+msgid "Imported"
+msgstr "Importera"
+
+#: data/gtk/window.blp:168 data/gtk/window.blp:532
msgid "Add Game"
msgstr "Lägg till spel"
-#: data/gtk/window.blp:250 data/gtk/window.blp:317
+#: data/gtk/window.blp:175 data/gtk/window.blp:234
msgid "Main Menu"
msgstr "Huvudmeny"
-#: data/gtk/window.blp:272
-#, fuzzy
-#| msgid "Search"
-msgid "Search games"
-msgstr "Sök"
-
-#: data/gtk/window.blp:312
+#: data/gtk/window.blp:227
msgid "Hidden Games"
msgstr "Dolda spel"
-#: data/gtk/window.blp:339
-#, fuzzy
-#| msgid "Show hidden games"
-msgid "Search hidden games"
-msgstr "Visa dolda spel"
+#: data/gtk/window.blp:337
+msgid "Game Title"
+msgstr "Speltitel"
-#: data/gtk/window.blp:376
+#: data/gtk/window.blp:394
+msgid "Play"
+msgstr "Spela"
+
+#: data/gtk/window.blp:471
msgid "Sort"
msgstr "Sortering"
-#: data/gtk/window.blp:379
+#: data/gtk/window.blp:474
msgid "A-Z"
msgstr "A-Ö"
-#: data/gtk/window.blp:385
+#: data/gtk/window.blp:480
msgid "Z-A"
msgstr "Ö-A"
-#: data/gtk/window.blp:391
+#: data/gtk/window.blp:486
msgid "Newest"
msgstr "Nyaste"
-#: data/gtk/window.blp:397
+#: data/gtk/window.blp:492
msgid "Oldest"
msgstr "Äldsta"
-#: data/gtk/window.blp:403
+#: data/gtk/window.blp:498
msgid "Last Played"
msgstr "Senast spelad"
-#: data/gtk/window.blp:410
+#: data/gtk/window.blp:505
msgid "Show Hidden"
msgstr "Visa dolda"
-#: data/gtk/window.blp:423
+#: data/gtk/window.blp:518
msgid "Keyboard Shortcuts"
msgstr "Tangentbordsgenvägar"
-#: data/gtk/window.blp:428
+#: data/gtk/window.blp:523
msgid "About Cartridges"
msgstr "Om Cartridges"
#. Translators: Replace this with your name for it to show up in the about window
-#: src/main.py:188
+#: src/main.py:207
msgid "translator_credits"
msgstr "Micke"
#. The variable is the date when the game was added
-#: src/window.py:194
+#: src/window.py:371
msgid "Added: {}"
msgstr "Tillagt: {}"
-#: src/window.py:197
+#: src/window.py:374
msgid "Never"
msgstr "Aldrig"
#. The variable is the date when the game was last played
-#: src/window.py:201
+#: src/window.py:378
msgid "Last played: {}"
msgstr "Senast spelat: {}"
-#: src/details_window.py:72
+#: src/details_window.py:76
msgid "Apply"
msgstr "Tillämpa"
-#: src/details_window.py:78
+#: src/details_window.py:82
msgid "Add New Game"
msgstr "Lägg till nytt spel"
-#: src/details_window.py:79
+#: src/details_window.py:83
msgid "Add"
-msgstr ""
+msgstr "Lägg till"
+
+#: src/details_window.py:93
+msgid "Executables"
+msgstr "Körbara filer"
#. Translate this string as you would translate "file"
-#: src/details_window.py:92
+#: src/details_window.py:108
msgid "file.txt"
msgstr "fil.txt"
#. As in software
-#: src/details_window.py:94
+#: src/details_window.py:110
msgid "program"
msgstr "program"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:99 src/details_window.py:101
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
msgstr "C:\\sökväg\\till\\{}"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:105 src/details_window.py:107
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
msgstr "/sökväg/till/{}"
-#: src/details_window.py:112
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -491,103 +504,101 @@ msgstr ""
"Om sökvägen innehåller mellanslag, se till att den omsluts av dubbla "
"citationstecken!"
-#: src/details_window.py:147 src/details_window.py:153
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
msgstr "Kunde inte lägga till spelet"
-#: src/details_window.py:147 src/details_window.py:183
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
msgstr "Spelets titel kan inte vara tom."
-#: src/details_window.py:153 src/details_window.py:191
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
msgstr "Den körbara filen kan inte vara tom."
-#: src/details_window.py:182 src/details_window.py:190
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
msgstr "Kunde inte tillämpa inställningar"
#. The variable is the title of the game
-#: src/game.py:139
+#: src/game.py:141
msgid "{} launched"
msgstr "{} startat"
#. The variable is the title of the game
-#: src/game.py:153
+#: src/game.py:155
msgid "{} hidden"
msgstr "{} dolt"
-#: src/game.py:153
+#: src/game.py:155
msgid "{} unhidden"
msgstr "{} synlig"
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:170 src/importer/importer.py:363
+#: src/game.py:169 src/importer/importer.py:380
msgid "{} removed"
msgstr "{} borttaget"
-#: src/preferences.py:119
+#: src/preferences.py:121
msgid "All games removed"
msgstr "Alla spel togs bort"
-#: src/preferences.py:168
+#: src/preferences.py:169
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"En API-nyckel krävs för att använda SteamGridDB. Du kan generera en {}här{}."
-#: src/preferences.py:294
+#: src/preferences.py:296
msgid "Installation Not Found"
msgstr "Installation hittades inte"
-#: src/preferences.py:296
+#: src/preferences.py:297
msgid "Select a valid directory."
msgstr "Välj en giltig katalog."
-#: src/preferences.py:351
+#: src/preferences.py:333 src/importer/importer.py:306
+msgid "Warning"
+msgstr "Varning"
+
+#: src/preferences.py:367
msgid "Invalid Directory"
msgstr "Ogiltig katalog"
-#: src/preferences.py:357
+#: src/preferences.py:373
msgid "Set Location"
msgstr "Ange plats"
-#: src/utils/create_dialog.py:25 src/importer/importer.py:291
+#: src/utils/create_dialog.py:33 src/importer/importer.py:307
msgid "Dismiss"
msgstr "Avvisa"
-#: src/importer/importer.py:128
+#: src/importer/importer.py:142
msgid "Importing Games…"
msgstr "Importerar spel…"
-#: src/importer/importer.py:290
-msgid "Warning"
-msgstr ""
-
-#: src/importer/importer.py:311
+#: src/importer/importer.py:327
msgid "The following errors occured during import:"
-msgstr ""
+msgstr "Följande fel uppstod under importeringen:"
-#: src/importer/importer.py:339
+#: src/importer/importer.py:356
msgid "No new games found"
msgstr "Inga nya spel hittades"
-#: src/importer/importer.py:351
+#: src/importer/importer.py:368
msgid "1 game imported"
msgstr "1 spel Importerat"
#. The variable is the number of games
-#: src/importer/importer.py:355
+#: src/importer/importer.py:372
msgid "{} games imported"
msgstr "{} spel importerade"
#. A single game removed
-#: src/importer/importer.py:359
-#, fuzzy
-#| msgid "{} removed"
+#: src/importer/importer.py:376
msgid "1 removed"
-msgstr "{} borttaget"
+msgstr "1 borttagen"
#. The variable is the name of the source
#: src/importer/sources/location.py:33
@@ -612,6 +623,28 @@ msgstr "Kunde inte autentisera SteamGridDB"
msgid "Verify your API key in preferences"
msgstr "Verifiera din API-nyckel i inställningar"
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr "Ingen RetroArch-kärna har valts"
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr "Följande spellistor har ingen standardkärna:"
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr "Spel med ingen kärna vald importerades inte"
+
+#~ msgid "Back"
+#~ msgstr "Bakåt"
+
+#~ msgid "Search games"
+#~ msgstr "Sök spel"
+
+#~ msgid "Search hidden games"
+#~ msgstr "Sök dolda spel"
+
#~ msgid "The title of the game"
#~ msgstr "Spelets titel"
diff --git a/po/ta.po b/po/ta.po
index 8916c66..0db294e 100644
--- a/po/ta.po
+++ b/po/ta.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
-"PO-Revision-Date: 2023-08-15 04:05+0000\n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
+"PO-Revision-Date: 2023-09-13 18:57+0000\n"
"Last-Translator: \"K.B.Dharun Krishna\" \n"
"Language-Team: Tamil \n"
@@ -18,11 +18,11 @@ 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 5.0-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
-#: src/main.py:169
+#: data/gtk/window.blp:80
msgid "Cartridges"
msgstr "கார்ட்ரிட்ஜ்கள்"
@@ -62,14 +62,14 @@ msgstr "நூலகம்"
msgid "Edit Game Details"
msgstr "விளையாட்டு விவரங்களைத் திருத்து"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:71
-#: src/details_window.py:67
+#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
+#: src/details_window.py:71
msgid "Game Details"
msgstr "விளையாட்டு விவரங்கள்"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:418
-#: src/details_window.py:241 src/importer/importer.py:292
-#: src/importer/importer.py:342
+#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
+#: src/details_window.py:271 src/importer/importer.py:308
+#: src/importer/importer.py:359
msgid "Preferences"
msgstr "விருப்பங்கள்"
@@ -77,48 +77,52 @@ msgstr "விருப்பங்கள்"
msgid "Cancel"
msgstr "ரத்துசெய்"
-#: data/gtk/details-window.blp:57
+#: data/gtk/details-window.blp:55
msgid "New Cover"
msgstr "புதிய அட்டை"
-#: data/gtk/details-window.blp:75
+#: data/gtk/details-window.blp:73
msgid "Delete Cover"
msgstr "அட்டையை நீக்கு"
-#: data/gtk/details-window.blp:102 data/gtk/game.blp:80
+#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
msgid "Title"
msgstr "தலைப்பு"
-#: data/gtk/details-window.blp:105
+#: data/gtk/details-window.blp:103
msgid "Developer (optional)"
msgstr "டெவலப்பர் (விரும்பினால்)"
-#: data/gtk/details-window.blp:110
+#: data/gtk/details-window.blp:108
msgid "Executable"
msgstr "செயல்படுத்தக்கூடியது"
-#: data/gtk/details-window.blp:116
+#: data/gtk/details-window.blp:114
+msgid "Select File"
+msgstr "கோப்பைத் தேர்ந்தெடுக்கவும்"
+
+#: data/gtk/details-window.blp:125
msgid "More Info"
msgstr "மேலும் தகவல்"
-#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
+#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
msgid "Edit"
msgstr "தொகு"
-#: data/gtk/game.blp:107 src/window.py:171
+#: data/gtk/game.blp:107 src/window.py:348
msgid "Hide"
msgstr "மறை"
-#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:56
-#: data/gtk/window.blp:209
+#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
+#: data/gtk/window.blp:433
msgid "Remove"
msgstr "அகற்று"
-#: data/gtk/game.blp:126 src/window.py:173
+#: data/gtk/game.blp:126 src/window.py:350
msgid "Unhide"
msgstr "மறை காட்டு"
-#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
+#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
msgid "General"
msgstr "பொது"
@@ -126,8 +130,8 @@ msgstr "பொது"
msgid "Quit"
msgstr "வெளியேறு"
-#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:217 data/gtk/window.blp:257
-#: data/gtk/window.blp:324
+#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
+#: data/gtk/window.blp:444
msgid "Search"
msgstr "தேடு"
@@ -139,8 +143,8 @@ msgstr "விருப்பங்களைக் காட்டு"
msgid "Shortcuts"
msgstr "குறுக்குவழிகள்"
-#: data/gtk/help-overlay.blp:34 src/game.py:103 src/preferences.py:120
-#: src/importer/importer.py:366
+#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
+#: src/importer/importer.py:383
msgid "Undo"
msgstr "செயல்தவிர்"
@@ -168,154 +172,156 @@ msgstr "மறைக்கப்பட்ட விளையாட்டுக
msgid "Remove game"
msgstr "விளையாட்டை அகற்று"
-#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:89
-#: data/gtk/preferences.blp:304
+#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
+#: data/gtk/preferences.blp:288
msgid "Behavior"
msgstr "நடத்தை"
-#: data/gtk/preferences.blp:16
+#: data/gtk/preferences.blp:15
msgid "Exit After Launching Games"
msgstr "விளையாட்டுகளை தொடங்கிய பிறகு வெளியேறவும்"
-#: data/gtk/preferences.blp:25
+#: data/gtk/preferences.blp:19
msgid "Cover Image Launches Game"
msgstr "அட்டைப் படம் விளையாட்டை தொடங்குகிறது"
-#: data/gtk/preferences.blp:26
+#: data/gtk/preferences.blp:20
msgid "Swaps the behavior of the cover image and the play button"
msgstr "அட்டைப் படத்தின் நடத்தை மற்றும் பிளே பட்டனை மாற்றுகிறது"
-#: data/gtk/preferences.blp:36 src/details_window.py:81
+#: data/gtk/preferences.blp:25 src/details_window.py:85
msgid "Images"
msgstr "படங்கள்"
-#: data/gtk/preferences.blp:39
+#: data/gtk/preferences.blp:28
msgid "High Quality Images"
msgstr "உயர்தர படங்கள்"
-#: data/gtk/preferences.blp:40
+#: data/gtk/preferences.blp:29
msgid "Save game covers losslessly at the cost of storage"
msgstr "சேமிப்பக செலவில் விளையாட்டுகளை இழப்பின்றி சேமிக்கவும்"
-#: data/gtk/preferences.blp:50
+#: data/gtk/preferences.blp:34
msgid "Danger Zone"
msgstr "ஆபத்து மண்டலம்"
-#: data/gtk/preferences.blp:53
+#: data/gtk/preferences.blp:37
msgid "Remove All Games"
msgstr "அனைத்து விளையாட்டுகளையும் அகற்று"
-#: data/gtk/preferences.blp:85 data/gtk/window.blp:27 data/gtk/window.blp:444
+#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
msgid "Import"
msgstr "இறக்குமதி"
-#: data/gtk/preferences.blp:92
-#, fuzzy
-#| msgid "Remove All Games"
+#: data/gtk/preferences.blp:75
msgid "Remove Uninstalled Games"
-msgstr "அனைத்து விளையாட்டுகளையும் அகற்று"
+msgstr "நிறுவல் நீக்கப்பட்ட விளையாட்டுகளை அகற்று"
-#: data/gtk/preferences.blp:102
+#: data/gtk/preferences.blp:80
msgid "Sources"
msgstr "மூலங்கள்"
-#: data/gtk/preferences.blp:105
+#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
msgid "Steam"
msgstr "Steam"
-#: data/gtk/preferences.blp:109 data/gtk/preferences.blp:123
-#: data/gtk/preferences.blp:164 data/gtk/preferences.blp:214
-#: data/gtk/preferences.blp:228 data/gtk/preferences.blp:242
-#: data/gtk/preferences.blp:256 data/gtk/preferences.blp:270
+#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
+#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
+#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
msgid "Install Location"
msgstr "நிறுவல் இடம்"
-#: data/gtk/preferences.blp:119
+#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
msgid "Lutris"
msgstr "Lutris"
-#: data/gtk/preferences.blp:132
+#: data/gtk/preferences.blp:116
msgid "Cache Location"
msgstr "தற்காலிக சேமிப்பு இடம்"
-#: data/gtk/preferences.blp:141
+#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr "Steam விளையாட்டுகளை இறக்குமதி செய்யவும்"
-#: data/gtk/preferences.blp:150
+#: data/gtk/preferences.blp:132
msgid "Import Flatpak Games"
msgstr "Flatpak கேம்களை இறக்குமதி செய்யவும்"
-#: data/gtk/preferences.blp:160
+#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
msgid "Heroic"
msgstr "Heroic"
-#: data/gtk/preferences.blp:173
+#: data/gtk/preferences.blp:153
msgid "Import Epic Games"
msgstr "Epic விளையாட்டுகளை இறக்குமதி செய்"
-#: data/gtk/preferences.blp:182
+#: data/gtk/preferences.blp:157
msgid "Import GOG Games"
msgstr "GOG விளையாட்டுகளை இறக்குமதி செய்யவும்"
-#: data/gtk/preferences.blp:191
+#: data/gtk/preferences.blp:161
msgid "Import Amazon Games"
msgstr "Amazon விளையாட்டுகளை இறக்குமதி செய்யவும்"
-#: data/gtk/preferences.blp:200
+#: data/gtk/preferences.blp:165
msgid "Import Sideloaded Games"
msgstr "பக்க ஏற்றப்பட்ட விளையாட்டுகளை இறக்குமதி செய்யவும்"
-#: data/gtk/preferences.blp:210
+#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
msgid "Bottles"
msgstr "பாட்டில்கள்"
-#: data/gtk/preferences.blp:224
+#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
msgid "itch"
msgstr "itch"
-#: data/gtk/preferences.blp:238
+#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
msgid "Legendary"
msgstr "Legendary"
-#: data/gtk/preferences.blp:252
+#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
msgid "RetroArch"
msgstr "RetroArch"
-#: data/gtk/preferences.blp:266
+#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
msgid "Flatpak"
msgstr "Flatpak"
-#: data/gtk/preferences.blp:279
+#: data/gtk/preferences.blp:254
msgid "Import Game Launchers"
msgstr "விளையாட்டு துவக்கிகளை இறக்குமதி செய்"
-#: data/gtk/preferences.blp:292
+#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
+msgid "Desktop Entries"
+msgstr "டெஸ்க்டாப் உள்ளீடுகள்"
+
+#: data/gtk/preferences.blp:276
msgid "SteamGridDB"
msgstr "SteamGridDB"
-#: data/gtk/preferences.blp:296
+#: data/gtk/preferences.blp:280
msgid "Authentication"
msgstr "அங்கீகாரம்"
-#: data/gtk/preferences.blp:299
+#: data/gtk/preferences.blp:283
msgid "API Key"
msgstr "API விசை"
-#: data/gtk/preferences.blp:307
+#: data/gtk/preferences.blp:291
msgid "Use SteamGridDB"
msgstr "SteamGridDB ஐப் பயன்படுத்தவும்"
-#: data/gtk/preferences.blp:308
+#: data/gtk/preferences.blp:292
msgid "Download images when adding or importing games"
msgstr ""
"விளையாட்டுகளைச் சேர்க்கும் போது அல்லது இறக்குமதி செய்யும் போது படங்களைப் பதிவிறக்கவும்"
-#: data/gtk/preferences.blp:317
+#: data/gtk/preferences.blp:296
msgid "Prefer Over Official Images"
msgstr "அதிகாரப்பூர்வ படங்களை விட முன்னுரிமை"
-#: data/gtk/preferences.blp:326
+#: data/gtk/preferences.blp:300
msgid "Prefer Animated Images"
msgstr "இயங்குபடம் செய்யப்பட்ட படங்களுக்கு முன்னுரிமை கொடுங்கள்"
@@ -343,126 +349,140 @@ msgstr "மறைக்கப்பட்ட விளையாட்டுக
msgid "Games you hide will appear here."
msgstr "நீங்கள் மறைக்கும் விளையாட்டுகள் இங்கே தோன்றும்."
-#: data/gtk/window.blp:64 data/gtk/window.blp:305
-msgid "Back"
-msgstr "மீண்டும்"
+#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
+#, fuzzy
+#| msgid "Remove All Games"
+msgid "All Games"
+msgstr "அனைத்து விளையாட்டுகளையும் அகற்று"
-#: data/gtk/window.blp:121
-msgid "Game Title"
-msgstr "விளையாட்டு தலைப்பு"
+#: data/gtk/window.blp:88 data/gtk/window.blp:162
+msgid "Toggle Sidebar"
+msgstr ""
-#: data/gtk/window.blp:176
-msgid "Play"
-msgstr "விளையாடு"
+#: data/gtk/window.blp:125 src/main.py:168
+#, fuzzy
+#| msgid "Added: {}"
+msgid "Added"
+msgstr "சேர்க்கப்பட்டது: {}"
-#: data/gtk/window.blp:243 data/gtk/window.blp:437
+#: data/gtk/window.blp:140
+#, fuzzy
+#| msgid "Import"
+msgid "Imported"
+msgstr "இறக்குமதி"
+
+#: data/gtk/window.blp:168 data/gtk/window.blp:532
msgid "Add Game"
msgstr "விளையாட்டைச் சேர்க்கவும்"
-#: data/gtk/window.blp:250 data/gtk/window.blp:317
+#: data/gtk/window.blp:175 data/gtk/window.blp:234
msgid "Main Menu"
msgstr "முதன்மை பட்டியல்"
-#: data/gtk/window.blp:272
-msgid "Search games"
-msgstr "விளையாட்டுகளைத் தேடுங்கள்"
-
-#: data/gtk/window.blp:312
+#: data/gtk/window.blp:227
msgid "Hidden Games"
msgstr "மறைக்கப்பட்ட விளையாட்டுகள்"
-#: data/gtk/window.blp:339
-msgid "Search hidden games"
-msgstr "மறைக்கப்பட்ட விளையாட்டுகளைத் தேடுங்கள்"
+#: data/gtk/window.blp:337
+msgid "Game Title"
+msgstr "விளையாட்டு தலைப்பு"
-#: data/gtk/window.blp:376
+#: data/gtk/window.blp:394
+msgid "Play"
+msgstr "விளையாடு"
+
+#: data/gtk/window.blp:471
msgid "Sort"
msgstr "வகைபடுத்து"
-#: data/gtk/window.blp:379
+#: data/gtk/window.blp:474
msgid "A-Z"
msgstr "A-Z"
-#: data/gtk/window.blp:385
+#: data/gtk/window.blp:480
msgid "Z-A"
msgstr "Z-A"
-#: data/gtk/window.blp:391
+#: data/gtk/window.blp:486
msgid "Newest"
msgstr "புதியது"
-#: data/gtk/window.blp:397
+#: data/gtk/window.blp:492
msgid "Oldest"
msgstr "பழமையானது"
-#: data/gtk/window.blp:403
+#: data/gtk/window.blp:498
msgid "Last Played"
msgstr "கடைசியாக விளையாடியது"
-#: data/gtk/window.blp:410
+#: data/gtk/window.blp:505
msgid "Show Hidden"
msgstr "மறைக்கப்பட்டதைக் காட்டு"
-#: data/gtk/window.blp:423
+#: data/gtk/window.blp:518
msgid "Keyboard Shortcuts"
msgstr "விசைப்பலகை குறுக்குவழிகள்"
-#: data/gtk/window.blp:428
+#: data/gtk/window.blp:523
msgid "About Cartridges"
msgstr "கார்ட்ரிட்ஜ்கள் பற்றி"
#. Translators: Replace this with your name for it to show up in the about window
-#: src/main.py:188
+#: src/main.py:207
msgid "translator_credits"
msgstr "K.B.Dharun Krishna "
#. The variable is the date when the game was added
-#: src/window.py:194
+#: src/window.py:371
msgid "Added: {}"
msgstr "சேர்க்கப்பட்டது: {}"
-#: src/window.py:197
+#: src/window.py:374
msgid "Never"
msgstr "ஒருபோதும் இல்லை"
#. The variable is the date when the game was last played
-#: src/window.py:201
+#: src/window.py:378
msgid "Last played: {}"
msgstr "கடைசியாக விளையாடியது: {}"
-#: src/details_window.py:72
+#: src/details_window.py:76
msgid "Apply"
msgstr "விண்ணப்பி"
-#: src/details_window.py:78
+#: src/details_window.py:82
msgid "Add New Game"
msgstr "புதிய விளையாட்டைச் சேர்க்கவும்"
-#: src/details_window.py:79
+#: src/details_window.py:83
msgid "Add"
msgstr "சேர்"
+#: src/details_window.py:93
+msgid "Executables"
+msgstr "செயல்படுத்தக்கூடியவை"
+
#. Translate this string as you would translate "file"
-#: src/details_window.py:92
+#: src/details_window.py:108
msgid "file.txt"
msgstr "கோப்பு.txt"
#. As in software
-#: src/details_window.py:94
+#: src/details_window.py:110
msgid "program"
msgstr "பயன்பாடு"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:99 src/details_window.py:101
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
msgstr "C:\\பாதை\\டு \\{}"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:105 src/details_window.py:107
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
msgstr "/பாதை/டு/ {}"
-#: src/details_window.py:112
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -484,102 +504,100 @@ msgstr ""
"\n"
"பாதையில் இடைவெளிகள் இருந்தால், அதை இரட்டை மேற்கோள்களில் போர்த்துவதை உறுதிசெய்யவும்!"
-#: src/details_window.py:147 src/details_window.py:153
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
msgstr "விளையாட்டைச் சேர்க்க முடியவில்லை"
-#: src/details_window.py:147 src/details_window.py:183
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
msgstr "விளையாட்டு தலைப்பு காலியாக இருக்கக்கூடாது."
-#: src/details_window.py:153 src/details_window.py:191
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
msgstr "இயங்கக்கூடியது காலியாக இருக்க முடியாது."
-#: src/details_window.py:182 src/details_window.py:190
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
msgstr "விருப்பங்களைப் பயன்படுத்த முடியவில்லை"
#. The variable is the title of the game
-#: src/game.py:139
+#: src/game.py:141
msgid "{} launched"
msgstr "{} தொடங்கப்பட்டது"
#. The variable is the title of the game
-#: src/game.py:153
+#: src/game.py:155
msgid "{} hidden"
msgstr "{} மறைக்கப்பட்டுள்ளது"
-#: src/game.py:153
+#: src/game.py:155
msgid "{} unhidden"
msgstr "{} மறைக்கப்படாதது"
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:170 src/importer/importer.py:363
+#: src/game.py:169 src/importer/importer.py:380
msgid "{} removed"
msgstr "{} அகற்றப்பட்டது"
-#: src/preferences.py:119
+#: src/preferences.py:121
msgid "All games removed"
msgstr "அனைத்து விளையாட்டுகளும் அகற்றப்பட்டன"
-#: src/preferences.py:168
+#: src/preferences.py:169
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr "SteamGridDB ஐப் பயன்படுத்த API விசை தேவை. நீங்கள் ஒன்றை {}இங்கே{} உருவாக்கலாம்."
-#: src/preferences.py:294
+#: src/preferences.py:296
msgid "Installation Not Found"
msgstr "நிறுவல் கிடைக்கவில்லை"
-#: src/preferences.py:296
+#: src/preferences.py:297
msgid "Select a valid directory."
msgstr "சரியான கோப்பகத்தைத் தேர்ந்தெடுக்கவும்."
-#: src/preferences.py:351
+#: src/preferences.py:333 src/importer/importer.py:306
+msgid "Warning"
+msgstr "எச்சரிக்கை"
+
+#: src/preferences.py:367
msgid "Invalid Directory"
msgstr "தவறான கோப்பகம்"
-#: src/preferences.py:357
+#: src/preferences.py:373
msgid "Set Location"
msgstr "இருப்பிடத்தை அமைக்கவும்"
-#: src/utils/create_dialog.py:25 src/importer/importer.py:291
+#: src/utils/create_dialog.py:33 src/importer/importer.py:307
msgid "Dismiss"
msgstr "நிராகரி"
-#: src/importer/importer.py:128
+#: src/importer/importer.py:142
msgid "Importing Games…"
msgstr "விளையாட்டுகளை இறக்குமதி செய்கிறது…"
-#: src/importer/importer.py:290
-msgid "Warning"
-msgstr ""
-
-#: src/importer/importer.py:311
+#: src/importer/importer.py:327
msgid "The following errors occured during import:"
-msgstr ""
+msgstr "இறக்குமதியின் போது பின்வரும் பிழைகள் ஏற்பட்டன:"
-#: src/importer/importer.py:339
+#: src/importer/importer.py:356
msgid "No new games found"
msgstr "புதிய விளையாட்டுகள் எதுவும் கண்டறியப்படவில்லை"
-#: src/importer/importer.py:351
+#: src/importer/importer.py:368
msgid "1 game imported"
msgstr "1 விளையாட்டு இறக்குமதி செய்யப்பட்டது"
#. The variable is the number of games
-#: src/importer/importer.py:355
+#: src/importer/importer.py:372
msgid "{} games imported"
msgstr "{} விளையாட்டுகள் இறக்குமதி செய்யப்பட்டன"
#. A single game removed
-#: src/importer/importer.py:359
-#, fuzzy
-#| msgid "{} removed"
+#: src/importer/importer.py:376
msgid "1 removed"
-msgstr "{} அகற்றப்பட்டது"
+msgstr "1 அகற்றப்பட்டது"
#. The variable is the name of the source
#: src/importer/sources/location.py:33
@@ -604,6 +622,28 @@ msgstr "SteamGridDB ஐ அங்கீகரிக்க முடியவி
msgid "Verify your API key in preferences"
msgstr "உங்கள் API விசையை விருப்பங்களில் சரிபார்க்கவும்"
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr "RetroArch மையம் தேர்ந்தெடுக்கப்படவில்லை"
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr "பின்வரும் விளையாட்டு பட்டியல்களுக்கு இயல்புநிலை மையம் இல்லை:"
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr "தேர்வு செய்யப்பட்ட மையம் இல்லாத விளையாட்டுகள் இறக்குமதி செய்யப்படவில்லை"
+
+#~ msgid "Back"
+#~ msgstr "மீண்டும்"
+
+#~ msgid "Search games"
+#~ msgstr "விளையாட்டுகளைத் தேடுங்கள்"
+
+#~ msgid "Search hidden games"
+#~ msgstr "மறைக்கப்பட்ட விளையாட்டுகளைத் தேடுங்கள்"
+
#~ msgid "The title of the game"
#~ msgstr "விளையாட்டின் தலைப்பு"
diff --git a/po/tr.po b/po/tr.po
index 1c3901f..fb59b97 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
-"PO-Revision-Date: 2023-07-15 22:51+0000\n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
+"PO-Revision-Date: 2023-09-21 14:18+0000\n"
"Last-Translator: Sabri Ünal \n"
"Language-Team: Turkish \n"
@@ -16,11 +16,11 @@ 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 5.0-dev\n"
+"X-Generator: Weblate 5.1-dev\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
-#: src/main.py:169
+#: data/gtk/window.blp:80
msgid "Cartridges"
msgstr "Kartuşlar"
@@ -34,11 +34,11 @@ msgid "Launch all your games"
msgstr "Tüm oyunlarınızı başlatın"
#: data/hu.kramo.Cartridges.desktop.in:11
-#, fuzzy
-#| msgid "gaming;launcher;steam;lutris;heroic;bottles;itch;"
msgid ""
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
-msgstr "oyun;başlatıcı;steam;lutris;heroic;bottles;itch;"
+msgstr ""
+"gaming;oyun;launcher;başlatıcı;steam;lutris;heroic;bottles;itch;flatpak;"
+"legendary;retroarch;"
#: data/hu.kramo.Cartridges.metainfo.xml.in:9
msgid ""
@@ -60,14 +60,14 @@ msgstr "Kütüphane"
msgid "Edit Game Details"
msgstr "Oyun Ayrıntılarını Düzenle"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:71
-#: src/details_window.py:67
+#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
+#: src/details_window.py:71
msgid "Game Details"
msgstr "Oyun Ayrıntıları"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:418
-#: src/details_window.py:241 src/importer/importer.py:292
-#: src/importer/importer.py:342
+#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
+#: src/details_window.py:271 src/importer/importer.py:308
+#: src/importer/importer.py:359
msgid "Preferences"
msgstr "Tercihler"
@@ -75,50 +75,52 @@ msgstr "Tercihler"
msgid "Cancel"
msgstr "İptal"
-#: data/gtk/details-window.blp:57
+#: data/gtk/details-window.blp:55
msgid "New Cover"
msgstr "Yeni Kapak"
-#: data/gtk/details-window.blp:75
+#: data/gtk/details-window.blp:73
msgid "Delete Cover"
msgstr "Kapağı Sil"
-#: data/gtk/details-window.blp:102 data/gtk/game.blp:80
+#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
msgid "Title"
msgstr "Başlık"
-#: data/gtk/details-window.blp:105
-#, fuzzy
-#| msgid "The developer or publisher (optional)"
+#: data/gtk/details-window.blp:103
msgid "Developer (optional)"
-msgstr "Geliştirici veya yayıncı (isteğe bağlı)"
+msgstr "Geliştirici (isteğe bağlı)"
-#: data/gtk/details-window.blp:110
+#: data/gtk/details-window.blp:108
msgid "Executable"
msgstr "Yürütülebilir"
-#: data/gtk/details-window.blp:116
+#: data/gtk/details-window.blp:114
+msgid "Select File"
+msgstr "Dosya Seç"
+
+#: data/gtk/details-window.blp:125
msgid "More Info"
msgstr "Daha Fazla Bilgi"
-#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
+#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
msgid "Edit"
msgstr "Düzenle"
-#: data/gtk/game.blp:107 src/window.py:171
+#: data/gtk/game.blp:107 src/window.py:348
msgid "Hide"
msgstr "Gizle"
-#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:56
-#: data/gtk/window.blp:209
+#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
+#: data/gtk/window.blp:433
msgid "Remove"
msgstr "Kaldır"
-#: data/gtk/game.blp:126 src/window.py:173
+#: data/gtk/game.blp:126 src/window.py:350
msgid "Unhide"
msgstr "Göster"
-#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
+#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
msgid "General"
msgstr "Genel"
@@ -126,27 +128,27 @@ msgstr "Genel"
msgid "Quit"
msgstr "Çık"
-#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:217 data/gtk/window.blp:257
-#: data/gtk/window.blp:324
+#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
+#: data/gtk/window.blp:444
msgid "Search"
msgstr "Ara"
#: data/gtk/help-overlay.blp:24
msgid "Show preferences"
-msgstr "Tercihleri göster"
+msgstr "Tercihleri Göster"
#: data/gtk/help-overlay.blp:29
msgid "Shortcuts"
msgstr "Kısayollar"
-#: data/gtk/help-overlay.blp:34 src/game.py:103 src/preferences.py:120
-#: src/importer/importer.py:366
+#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
+#: src/importer/importer.py:383
msgid "Undo"
msgstr "Geri Al"
#: data/gtk/help-overlay.blp:39
msgid "Open menu"
-msgstr "Menüyü aç"
+msgstr "Menüyü Aç"
#: data/gtk/help-overlay.blp:45
msgid "Games"
@@ -154,171 +156,171 @@ msgstr "Oyunlar"
#: data/gtk/help-overlay.blp:48
msgid "Add new game"
-msgstr "Yeni oyun ekle"
+msgstr "Yeni Oyun Ekle"
#: data/gtk/help-overlay.blp:53
msgid "Import games"
-msgstr "Oyunları içe aktar"
+msgstr "Oyunları İçe Aktar"
#: data/gtk/help-overlay.blp:58
msgid "Show hidden games"
-msgstr "Gizli oyunları göster"
+msgstr "Gizli Oyunları Göster"
#: data/gtk/help-overlay.blp:63
msgid "Remove game"
-msgstr "Oyunu kaldır"
+msgstr "Oyunu Kaldır"
-#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:89
-#: data/gtk/preferences.blp:304
+#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
+#: data/gtk/preferences.blp:288
msgid "Behavior"
msgstr "Davranış"
-#: data/gtk/preferences.blp:16
+#: data/gtk/preferences.blp:15
msgid "Exit After Launching Games"
msgstr "Oyunu Başlatıldıktan Sonra Çık"
-#: data/gtk/preferences.blp:25
+#: data/gtk/preferences.blp:19
msgid "Cover Image Launches Game"
msgstr "Kapak Görüntüsü Oyunu Başlatır"
-#: data/gtk/preferences.blp:26
+#: data/gtk/preferences.blp:20
msgid "Swaps the behavior of the cover image and the play button"
msgstr "Kapak görüntüsünün ve oyna düğmesinin davranışını değiştirir"
-#: data/gtk/preferences.blp:36 src/details_window.py:81
+#: data/gtk/preferences.blp:25 src/details_window.py:85
msgid "Images"
msgstr "Görüntüler"
-#: data/gtk/preferences.blp:39
+#: data/gtk/preferences.blp:28
msgid "High Quality Images"
msgstr "Yüksek Kaliteli Görüntüler"
-#: data/gtk/preferences.blp:40
+#: data/gtk/preferences.blp:29
msgid "Save game covers losslessly at the cost of storage"
msgstr ""
"Oyun kapaklarını, daha çok depolama alanı gerektirmesine rağmen, kayıpsız "
"kaydet"
-#: data/gtk/preferences.blp:50
+#: data/gtk/preferences.blp:34
msgid "Danger Zone"
msgstr "Tehlikeli Bölge"
-#: data/gtk/preferences.blp:53
+#: data/gtk/preferences.blp:37
msgid "Remove All Games"
msgstr "Tüm Oyunları Kaldır"
-#: data/gtk/preferences.blp:85 data/gtk/window.blp:27 data/gtk/window.blp:444
+#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
msgid "Import"
msgstr "İçe Aktar"
-#: data/gtk/preferences.blp:92
-#, fuzzy
-#| msgid "Remove All Games"
+#: data/gtk/preferences.blp:75
msgid "Remove Uninstalled Games"
-msgstr "Tüm Oyunları Kaldır"
+msgstr "Kaldırılmış Oyunları Sil"
-#: data/gtk/preferences.blp:102
+#: data/gtk/preferences.blp:80
msgid "Sources"
msgstr "Kaynaklar"
-#: data/gtk/preferences.blp:105
+#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
msgid "Steam"
msgstr "Steam"
-#: data/gtk/preferences.blp:109 data/gtk/preferences.blp:123
-#: data/gtk/preferences.blp:164 data/gtk/preferences.blp:214
-#: data/gtk/preferences.blp:228 data/gtk/preferences.blp:242
-#: data/gtk/preferences.blp:256 data/gtk/preferences.blp:270
+#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
+#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
+#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
msgid "Install Location"
msgstr "Kurulu Konumu"
-#: data/gtk/preferences.blp:119
+#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
msgid "Lutris"
msgstr "Lutris"
-#: data/gtk/preferences.blp:132
+#: data/gtk/preferences.blp:116
msgid "Cache Location"
msgstr "Önbellek Konumu"
-#: data/gtk/preferences.blp:141
+#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr "Steam Oyunlarını İçe Aktar"
-#: data/gtk/preferences.blp:150
+#: data/gtk/preferences.blp:132
msgid "Import Flatpak Games"
msgstr "Flatpak Oyunlarını İçe Aktarın"
-#: data/gtk/preferences.blp:160
+#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
msgid "Heroic"
msgstr "Heroic"
-#: data/gtk/preferences.blp:173
+#: data/gtk/preferences.blp:153
msgid "Import Epic Games"
msgstr "Epic Oyunlarını İçe Aktar"
-#: data/gtk/preferences.blp:182
+#: data/gtk/preferences.blp:157
msgid "Import GOG Games"
msgstr "GOG Oyunlarını İçe Aktar"
-#: data/gtk/preferences.blp:191
-#, fuzzy
-#| msgid "Import Steam Games"
+#: data/gtk/preferences.blp:161
msgid "Import Amazon Games"
-msgstr "Steam Oyunlarını İçe Aktar"
+msgstr "Amazon Oyunlarını İçe Aktar"
-#: data/gtk/preferences.blp:200
+#: data/gtk/preferences.blp:165
msgid "Import Sideloaded Games"
msgstr "Yandan Yüklenmiş Oyunları İçe Aktar"
-#: data/gtk/preferences.blp:210
+#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
msgid "Bottles"
msgstr "Şişeler"
-#: data/gtk/preferences.blp:224
+#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
msgid "itch"
msgstr "itch"
-#: data/gtk/preferences.blp:238
+#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
msgid "Legendary"
msgstr "Efsanevi"
-#: data/gtk/preferences.blp:252
+#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
msgid "RetroArch"
-msgstr ""
+msgstr "RetroArch"
-#: data/gtk/preferences.blp:266
+#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
msgid "Flatpak"
msgstr "Flatpak"
-#: data/gtk/preferences.blp:279
+#: data/gtk/preferences.blp:254
msgid "Import Game Launchers"
msgstr "Oyun Başlatıcıları İçe Aktar"
-#: data/gtk/preferences.blp:292
+#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
+msgid "Desktop Entries"
+msgstr "Masaüstü Girdileri"
+
+#: data/gtk/preferences.blp:276
msgid "SteamGridDB"
msgstr "SteamGridDB"
-#: data/gtk/preferences.blp:296
+#: data/gtk/preferences.blp:280
msgid "Authentication"
msgstr "Kimlik Doğrulaması"
-#: data/gtk/preferences.blp:299
+#: data/gtk/preferences.blp:283
msgid "API Key"
msgstr "API anahtarı"
-#: data/gtk/preferences.blp:307
+#: data/gtk/preferences.blp:291
msgid "Use SteamGridDB"
msgstr "SteamGridDB Kullan"
-#: data/gtk/preferences.blp:308
+#: data/gtk/preferences.blp:292
msgid "Download images when adding or importing games"
msgstr "Oyun eklerken veya içe aktarırken görüntüleri indir"
-#: data/gtk/preferences.blp:317
+#: data/gtk/preferences.blp:296
msgid "Prefer Over Official Images"
msgstr "Resmî Görsellere Yeğle"
-#: data/gtk/preferences.blp:326
+#: data/gtk/preferences.blp:300
msgid "Prefer Animated Images"
msgstr "Hareketli Görselleri Yeğle"
@@ -346,130 +348,140 @@ msgstr "Gizli Oyun Yok"
msgid "Games you hide will appear here."
msgstr "Gizlediğiniz oyunlar burada belirecek."
-#: data/gtk/window.blp:64 data/gtk/window.blp:305
-msgid "Back"
-msgstr "Geri"
+#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
+#, fuzzy
+#| msgid "Remove All Games"
+msgid "All Games"
+msgstr "Tüm Oyunları Kaldır"
-#: data/gtk/window.blp:121
-msgid "Game Title"
-msgstr "Oyun Başlığı"
+#: data/gtk/window.blp:88 data/gtk/window.blp:162
+msgid "Toggle Sidebar"
+msgstr ""
-#: data/gtk/window.blp:176
-msgid "Play"
-msgstr "Oyna"
+#: data/gtk/window.blp:125 src/main.py:168
+#, fuzzy
+#| msgid "Added: {}"
+msgid "Added"
+msgstr "Eklendi: {}"
-#: data/gtk/window.blp:243 data/gtk/window.blp:437
+#: data/gtk/window.blp:140
+#, fuzzy
+#| msgid "Import"
+msgid "Imported"
+msgstr "İçe Aktar"
+
+#: data/gtk/window.blp:168 data/gtk/window.blp:532
msgid "Add Game"
msgstr "Oyun Ekle"
-#: data/gtk/window.blp:250 data/gtk/window.blp:317
+#: data/gtk/window.blp:175 data/gtk/window.blp:234
msgid "Main Menu"
msgstr "Ana Menü"
-#: data/gtk/window.blp:272
-#, fuzzy
-#| msgid "Search"
-msgid "Search games"
-msgstr "Ara"
-
-#: data/gtk/window.blp:312
+#: data/gtk/window.blp:227
msgid "Hidden Games"
msgstr "Gizli Oyunlar"
-#: data/gtk/window.blp:339
-#, fuzzy
-#| msgid "Show hidden games"
-msgid "Search hidden games"
-msgstr "Gizli oyunları göster"
+#: data/gtk/window.blp:337
+msgid "Game Title"
+msgstr "Oyun Başlığı"
-#: data/gtk/window.blp:376
+#: data/gtk/window.blp:394
+msgid "Play"
+msgstr "Oyna"
+
+#: data/gtk/window.blp:471
msgid "Sort"
msgstr "Sırala"
-#: data/gtk/window.blp:379
+#: data/gtk/window.blp:474
msgid "A-Z"
msgstr "A-Z"
-#: data/gtk/window.blp:385
+#: data/gtk/window.blp:480
msgid "Z-A"
msgstr "Z-A"
-#: data/gtk/window.blp:391
+#: data/gtk/window.blp:486
msgid "Newest"
msgstr "En Yeni"
-#: data/gtk/window.blp:397
+#: data/gtk/window.blp:492
msgid "Oldest"
msgstr "En Eski"
-#: data/gtk/window.blp:403
+#: data/gtk/window.blp:498
msgid "Last Played"
msgstr "Son Oynanan"
-#: data/gtk/window.blp:410
+#: data/gtk/window.blp:505
msgid "Show Hidden"
msgstr "Gizlileri Göster"
-#: data/gtk/window.blp:423
+#: data/gtk/window.blp:518
msgid "Keyboard Shortcuts"
msgstr "Klavye Kısayolları"
-#: data/gtk/window.blp:428
+#: data/gtk/window.blp:523
msgid "About Cartridges"
msgstr "Kartuşlar Hakkında"
#. Translators: Replace this with your name for it to show up in the about window
-#: src/main.py:188
+#: src/main.py:207
msgid "translator_credits"
msgstr "Sabri Ünal "
#. The variable is the date when the game was added
-#: src/window.py:194
+#: src/window.py:371
msgid "Added: {}"
msgstr "Eklendi: {}"
-#: src/window.py:197
+#: src/window.py:374
msgid "Never"
msgstr "Asla"
#. The variable is the date when the game was last played
-#: src/window.py:201
+#: src/window.py:378
msgid "Last played: {}"
msgstr "Son oynanma: {}"
-#: src/details_window.py:72
+#: src/details_window.py:76
msgid "Apply"
msgstr "Uygula"
-#: src/details_window.py:78
+#: src/details_window.py:82
msgid "Add New Game"
msgstr "Yeni Oyun Ekle"
-#: src/details_window.py:79
+#: src/details_window.py:83
msgid "Add"
-msgstr ""
+msgstr "Ekle"
+
+#: src/details_window.py:93
+msgid "Executables"
+msgstr "Yürütülebilirler"
#. Translate this string as you would translate "file"
-#: src/details_window.py:92
+#: src/details_window.py:108
msgid "file.txt"
msgstr "dosya.txt"
#. As in software
-#: src/details_window.py:94
+#: src/details_window.py:110
msgid "program"
msgstr "program"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:99 src/details_window.py:101
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
msgstr "C:\\yol\\klasör\\{}"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:105 src/details_window.py:107
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
msgstr "/yol/klasör/{}"
-#: src/details_window.py:112
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -491,104 +503,102 @@ msgstr ""
"\n"
"Yol boşluk içeriyorsa, çift tırnak içine aldığınızdan emin olun!"
-#: src/details_window.py:147 src/details_window.py:153
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
msgstr "Oyun Eklenemedi"
-#: src/details_window.py:147 src/details_window.py:183
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
msgstr "Oyun başlığı boş olamaz."
-#: src/details_window.py:153 src/details_window.py:191
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
msgstr "Çalıştırılabilir boş olamaz."
-#: src/details_window.py:182 src/details_window.py:190
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
msgstr "Tercihler Uygulanamadı"
#. The variable is the title of the game
-#: src/game.py:139
+#: src/game.py:141
msgid "{} launched"
msgstr "{} başlatıldı"
#. The variable is the title of the game
-#: src/game.py:153
+#: src/game.py:155
msgid "{} hidden"
msgstr "{} gizli"
-#: src/game.py:153
+#: src/game.py:155
msgid "{} unhidden"
msgstr "{} görünür"
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:170 src/importer/importer.py:363
+#: src/game.py:169 src/importer/importer.py:380
msgid "{} removed"
msgstr "{} kaldırıldı"
-#: src/preferences.py:119
+#: src/preferences.py:121
msgid "All games removed"
msgstr "Tüm oyunlar kaldırıldı"
-#: src/preferences.py:168
+#: src/preferences.py:169
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"SteamGridDBʼyi kullanmak için API anahtarı gereklidir. {}Buradan{} bir tane "
"oluşturabilirsiniz."
-#: src/preferences.py:294
+#: src/preferences.py:296
msgid "Installation Not Found"
msgstr "Kurulum Bulunamadı"
-#: src/preferences.py:296
+#: src/preferences.py:297
msgid "Select a valid directory."
msgstr "Geçerli bir dizin seçin."
-#: src/preferences.py:351
+#: src/preferences.py:333 src/importer/importer.py:306
+msgid "Warning"
+msgstr "Uyarı"
+
+#: src/preferences.py:367
msgid "Invalid Directory"
msgstr "Geçersiz Dizin"
-#: src/preferences.py:357
+#: src/preferences.py:373
msgid "Set Location"
msgstr "Konum Ayarla"
-#: src/utils/create_dialog.py:25 src/importer/importer.py:291
+#: src/utils/create_dialog.py:33 src/importer/importer.py:307
msgid "Dismiss"
msgstr "Vazgeç"
-#: src/importer/importer.py:128
+#: src/importer/importer.py:142
msgid "Importing Games…"
msgstr "Oyunlar İçe Aktarılıyor…"
-#: src/importer/importer.py:290
-msgid "Warning"
-msgstr ""
-
-#: src/importer/importer.py:311
+#: src/importer/importer.py:327
msgid "The following errors occured during import:"
-msgstr ""
+msgstr "İçe aktarılırken şu hatalar oluştu:"
-#: src/importer/importer.py:339
+#: src/importer/importer.py:356
msgid "No new games found"
msgstr "Yeni oyun bulunamadı"
-#: src/importer/importer.py:351
+#: src/importer/importer.py:368
msgid "1 game imported"
msgstr "1 oyun içe aktarıldı"
#. The variable is the number of games
-#: src/importer/importer.py:355
+#: src/importer/importer.py:372
msgid "{} games imported"
msgstr "{} oyun içe aktarıldı"
#. A single game removed
-#: src/importer/importer.py:359
-#, fuzzy
-#| msgid "{} removed"
+#: src/importer/importer.py:376
msgid "1 removed"
-msgstr "{} kaldırıldı"
+msgstr "1 kaldırıldı"
#. The variable is the name of the source
#: src/importer/sources/location.py:33
@@ -613,6 +623,28 @@ msgstr "SteamGridDB Kimlik Doğrulaması Yapılamadı"
msgid "Verify your API key in preferences"
msgstr "Tercihlerde API anahtarınızı doğrulayın"
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr "RetroArch Çekirdeği Seçilmedi"
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr "Aşağıdaki oynatma listelerinin öntanımlı çekirdeği yok:"
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr "Çekirdek seçilmeyen oyunlar içe aktarılmadı"
+
+#~ msgid "Back"
+#~ msgstr "Geri"
+
+#~ msgid "Search games"
+#~ msgstr "Oyun ara"
+
+#~ msgid "Search hidden games"
+#~ msgstr "Gizli oyunları ara"
+
#~ msgid "The title of the game"
#~ msgstr "Oyunun başlığı"
diff --git a/po/uk.po b/po/uk.po
index 0707aad..dc55d10 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: cartridges\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-16 11:06+0200\n"
-"PO-Revision-Date: 2023-08-15 04:05+0000\n"
+"POT-Creation-Date: 2023-08-30 10:43+0200\n"
+"PO-Revision-Date: 2023-09-18 10:59+0000\n"
"Last-Translator: Dan \n"
"Language-Team: Ukrainian \n"
@@ -18,13 +18,13 @@ 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"
-"X-Generator: Weblate 5.0-dev\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.2\n"
#: data/hu.kramo.Cartridges.desktop.in:3
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
-#: src/main.py:169
+#: data/gtk/window.blp:80
msgid "Cartridges"
msgstr "Картриджі"
@@ -63,14 +63,14 @@ msgstr "Бібліотека"
msgid "Edit Game Details"
msgstr "Редагувати інформацію про гру"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:71
-#: src/details_window.py:67
+#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
+#: src/details_window.py:71
msgid "Game Details"
msgstr "Подробиці гри"
-#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:418
-#: src/details_window.py:241 src/importer/importer.py:292
-#: src/importer/importer.py:342
+#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
+#: src/details_window.py:271 src/importer/importer.py:308
+#: src/importer/importer.py:359
msgid "Preferences"
msgstr "Параметри"
@@ -78,48 +78,52 @@ msgstr "Параметри"
msgid "Cancel"
msgstr "Скасувати"
-#: data/gtk/details-window.blp:57
+#: data/gtk/details-window.blp:55
msgid "New Cover"
msgstr "Нова обкладинка"
-#: data/gtk/details-window.blp:75
+#: data/gtk/details-window.blp:73
msgid "Delete Cover"
msgstr "Видалити обкладинку"
-#: data/gtk/details-window.blp:102 data/gtk/game.blp:80
+#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
msgid "Title"
msgstr "Назва"
-#: data/gtk/details-window.blp:105
+#: data/gtk/details-window.blp:103
msgid "Developer (optional)"
msgstr "Розробник (необов'язково)"
-#: data/gtk/details-window.blp:110
+#: data/gtk/details-window.blp:108
msgid "Executable"
msgstr "Виконуваний"
-#: data/gtk/details-window.blp:116
+#: data/gtk/details-window.blp:114
+msgid "Select File"
+msgstr "Вибрати файл"
+
+#: data/gtk/details-window.blp:125
msgid "More Info"
msgstr "Більше інформації"
-#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:195
+#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
msgid "Edit"
msgstr "Редагувати"
-#: data/gtk/game.blp:107 src/window.py:171
+#: data/gtk/game.blp:107 src/window.py:348
msgid "Hide"
msgstr "Приховати"
-#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:56
-#: data/gtk/window.blp:209
+#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
+#: data/gtk/window.blp:433
msgid "Remove"
msgstr "Видалити"
-#: data/gtk/game.blp:126 src/window.py:173
+#: data/gtk/game.blp:126 src/window.py:350
msgid "Unhide"
msgstr "Показати"
-#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
+#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
msgid "General"
msgstr "Загальний"
@@ -127,8 +131,8 @@ msgstr "Загальний"
msgid "Quit"
msgstr "Вийти"
-#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:217 data/gtk/window.blp:257
-#: data/gtk/window.blp:324
+#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
+#: data/gtk/window.blp:444
msgid "Search"
msgstr "Пошук"
@@ -140,8 +144,8 @@ msgstr "Показати параметри"
msgid "Shortcuts"
msgstr "Ярлики"
-#: data/gtk/help-overlay.blp:34 src/game.py:103 src/preferences.py:120
-#: src/importer/importer.py:366
+#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
+#: src/importer/importer.py:383
msgid "Undo"
msgstr "Відмінити"
@@ -169,153 +173,155 @@ msgstr "Показати приховані ігри"
msgid "Remove game"
msgstr "Видалити гру"
-#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:89
-#: data/gtk/preferences.blp:304
+#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
+#: data/gtk/preferences.blp:288
msgid "Behavior"
msgstr "Поведінка"
-#: data/gtk/preferences.blp:16
+#: data/gtk/preferences.blp:15
msgid "Exit After Launching Games"
msgstr "Вихід після запуску ігор"
-#: data/gtk/preferences.blp:25
+#: data/gtk/preferences.blp:19
msgid "Cover Image Launches Game"
msgstr "Обкладинка запускає гру"
-#: data/gtk/preferences.blp:26
+#: data/gtk/preferences.blp:20
msgid "Swaps the behavior of the cover image and the play button"
msgstr "Міняє місцями поведінку зображення обкладинки та кнопки відтворення"
-#: data/gtk/preferences.blp:36 src/details_window.py:81
+#: data/gtk/preferences.blp:25 src/details_window.py:85
msgid "Images"
msgstr "Зображення"
-#: data/gtk/preferences.blp:39
+#: data/gtk/preferences.blp:28
msgid "High Quality Images"
msgstr "Зображення високої якості"
-#: data/gtk/preferences.blp:40
+#: data/gtk/preferences.blp:29
msgid "Save game covers losslessly at the cost of storage"
msgstr "Збережена гра покривається без втрат за вартістю зберігання"
-#: data/gtk/preferences.blp:50
+#: data/gtk/preferences.blp:34
msgid "Danger Zone"
msgstr "Небезпечна зона"
-#: data/gtk/preferences.blp:53
+#: data/gtk/preferences.blp:37
msgid "Remove All Games"
msgstr "Видалити всі ігри"
-#: data/gtk/preferences.blp:85 data/gtk/window.blp:27 data/gtk/window.blp:444
+#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
msgid "Import"
msgstr "Імпорт"
-#: data/gtk/preferences.blp:92
-#, fuzzy
-#| msgid "Remove All Games"
+#: data/gtk/preferences.blp:75
msgid "Remove Uninstalled Games"
-msgstr "Видалити всі ігри"
+msgstr "Вилучити видалені ігри"
-#: data/gtk/preferences.blp:102
+#: data/gtk/preferences.blp:80
msgid "Sources"
msgstr "Джерела"
-#: data/gtk/preferences.blp:105
+#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
msgid "Steam"
msgstr "Steam"
-#: data/gtk/preferences.blp:109 data/gtk/preferences.blp:123
-#: data/gtk/preferences.blp:164 data/gtk/preferences.blp:214
-#: data/gtk/preferences.blp:228 data/gtk/preferences.blp:242
-#: data/gtk/preferences.blp:256 data/gtk/preferences.blp:270
+#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
+#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
+#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
+#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
msgid "Install Location"
msgstr "Місце встановлення"
-#: data/gtk/preferences.blp:119
+#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
msgid "Lutris"
msgstr "Lutris"
-#: data/gtk/preferences.blp:132
+#: data/gtk/preferences.blp:116
msgid "Cache Location"
msgstr "Розташування кешу"
-#: data/gtk/preferences.blp:141
+#: data/gtk/preferences.blp:128
msgid "Import Steam Games"
msgstr "Імпорт ігор Steam"
-#: data/gtk/preferences.blp:150
+#: data/gtk/preferences.blp:132
msgid "Import Flatpak Games"
msgstr "Імпортувати ігри Flatpak"
-#: data/gtk/preferences.blp:160
+#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
msgid "Heroic"
msgstr "Heroic"
-#: data/gtk/preferences.blp:173
+#: data/gtk/preferences.blp:153
msgid "Import Epic Games"
msgstr "Імпорт Epic Games"
-#: data/gtk/preferences.blp:182
+#: data/gtk/preferences.blp:157
msgid "Import GOG Games"
msgstr "Імпорт ігор GOG"
-#: data/gtk/preferences.blp:191
+#: data/gtk/preferences.blp:161
msgid "Import Amazon Games"
msgstr "Імпортувати ігри Amazon"
-#: data/gtk/preferences.blp:200
+#: data/gtk/preferences.blp:165
msgid "Import Sideloaded Games"
msgstr "Імпорт сторонніх ігор"
-#: data/gtk/preferences.blp:210
+#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
msgid "Bottles"
msgstr "Bottles"
-#: data/gtk/preferences.blp:224
+#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
msgid "itch"
msgstr "itch"
-#: data/gtk/preferences.blp:238
+#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
msgid "Legendary"
msgstr "Легендарний"
-#: data/gtk/preferences.blp:252
+#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
msgid "RetroArch"
msgstr "RetroArch"
-#: data/gtk/preferences.blp:266
+#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
msgid "Flatpak"
msgstr "Flatpak"
-#: data/gtk/preferences.blp:279
+#: data/gtk/preferences.blp:254
msgid "Import Game Launchers"
msgstr "Імпортувати ігрові лаунчери"
-#: data/gtk/preferences.blp:292
+#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
+msgid "Desktop Entries"
+msgstr "Записи на робочому столі"
+
+#: data/gtk/preferences.blp:276
msgid "SteamGridDB"
msgstr "SteamGridDB"
-#: data/gtk/preferences.blp:296
+#: data/gtk/preferences.blp:280
msgid "Authentication"
msgstr "Аутентифікація"
-#: data/gtk/preferences.blp:299
+#: data/gtk/preferences.blp:283
msgid "API Key"
msgstr "Ключ API"
-#: data/gtk/preferences.blp:307
+#: data/gtk/preferences.blp:291
msgid "Use SteamGridDB"
msgstr "Використовувати SteamGridDB"
-#: data/gtk/preferences.blp:308
+#: data/gtk/preferences.blp:292
msgid "Download images when adding or importing games"
msgstr "Завантаження зображень під час додавання або імпорту ігор"
-#: data/gtk/preferences.blp:317
+#: data/gtk/preferences.blp:296
msgid "Prefer Over Official Images"
msgstr "Надавати перевагу офіційним зображенням"
-#: data/gtk/preferences.blp:326
+#: data/gtk/preferences.blp:300
msgid "Prefer Animated Images"
msgstr "Надавати перевагу анімованим зображенням"
@@ -343,126 +349,140 @@ msgstr "Ніяких прихованих ігор"
msgid "Games you hide will appear here."
msgstr "Ігри, які ви сховали, з'являться тут."
-#: data/gtk/window.blp:64 data/gtk/window.blp:305
-msgid "Back"
-msgstr "Назад"
+#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
+#, fuzzy
+#| msgid "Remove All Games"
+msgid "All Games"
+msgstr "Видалити всі ігри"
-#: data/gtk/window.blp:121
-msgid "Game Title"
-msgstr "Назва гри"
+#: data/gtk/window.blp:88 data/gtk/window.blp:162
+msgid "Toggle Sidebar"
+msgstr ""
-#: data/gtk/window.blp:176
-msgid "Play"
-msgstr "Грати"
+#: data/gtk/window.blp:125 src/main.py:168
+#, fuzzy
+#| msgid "Added: {}"
+msgid "Added"
+msgstr "Додано: {}"
-#: data/gtk/window.blp:243 data/gtk/window.blp:437
+#: data/gtk/window.blp:140
+#, fuzzy
+#| msgid "Import"
+msgid "Imported"
+msgstr "Імпорт"
+
+#: data/gtk/window.blp:168 data/gtk/window.blp:532
msgid "Add Game"
msgstr "Додати гру"
-#: data/gtk/window.blp:250 data/gtk/window.blp:317
+#: data/gtk/window.blp:175 data/gtk/window.blp:234
msgid "Main Menu"
msgstr "Головне меню"
-#: data/gtk/window.blp:272
-msgid "Search games"
-msgstr "Пошук ігор"
-
-#: data/gtk/window.blp:312
+#: data/gtk/window.blp:227
msgid "Hidden Games"
msgstr "Приховані ігри"
-#: data/gtk/window.blp:339
-msgid "Search hidden games"
-msgstr "Пошук прихованих ігор"
+#: data/gtk/window.blp:337
+msgid "Game Title"
+msgstr "Назва гри"
-#: data/gtk/window.blp:376
+#: data/gtk/window.blp:394
+msgid "Play"
+msgstr "Грати"
+
+#: data/gtk/window.blp:471
msgid "Sort"
msgstr "Сортувати"
-#: data/gtk/window.blp:379
+#: data/gtk/window.blp:474
msgid "A-Z"
msgstr "А-Я"
-#: data/gtk/window.blp:385
+#: data/gtk/window.blp:480
msgid "Z-A"
msgstr "Я-А"
-#: data/gtk/window.blp:391
+#: data/gtk/window.blp:486
msgid "Newest"
msgstr "Найновіші"
-#: data/gtk/window.blp:397
+#: data/gtk/window.blp:492
msgid "Oldest"
msgstr "Найстаріші"
-#: data/gtk/window.blp:403
+#: data/gtk/window.blp:498
msgid "Last Played"
msgstr "Остання гра"
-#: data/gtk/window.blp:410
+#: data/gtk/window.blp:505
msgid "Show Hidden"
msgstr "Показати приховане"
-#: data/gtk/window.blp:423
+#: data/gtk/window.blp:518
msgid "Keyboard Shortcuts"
msgstr "Комбінації клавіш"
-#: data/gtk/window.blp:428
+#: data/gtk/window.blp:523
msgid "About Cartridges"
msgstr "Про Картриджі"
#. Translators: Replace this with your name for it to show up in the about window
-#: src/main.py:188
+#: src/main.py:207
msgid "translator_credits"
msgstr "kefir2105"
#. The variable is the date when the game was added
-#: src/window.py:194
+#: src/window.py:371
msgid "Added: {}"
msgstr "Додано: {}"
-#: src/window.py:197
+#: src/window.py:374
msgid "Never"
msgstr "Ніколи"
#. The variable is the date when the game was last played
-#: src/window.py:201
+#: src/window.py:378
msgid "Last played: {}"
msgstr "Востаннє грали: {}"
-#: src/details_window.py:72
+#: src/details_window.py:76
msgid "Apply"
msgstr "Застосувати"
-#: src/details_window.py:78
+#: src/details_window.py:82
msgid "Add New Game"
msgstr "Додати нову гру"
-#: src/details_window.py:79
+#: src/details_window.py:83
msgid "Add"
msgstr "Додати"
+#: src/details_window.py:93
+msgid "Executables"
+msgstr "Виконувані файли"
+
#. Translate this string as you would translate "file"
-#: src/details_window.py:92
+#: src/details_window.py:108
msgid "file.txt"
msgstr "file.txt"
#. As in software
-#: src/details_window.py:94
+#: src/details_window.py:110
msgid "program"
msgstr "програма"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:99 src/details_window.py:101
+#: src/details_window.py:115 src/details_window.py:117
msgid "C:\\path\\to\\{}"
msgstr "C:\\шлях\\до\\{}"
#. Translate this string as you would translate "path to {}"
-#: src/details_window.py:105 src/details_window.py:107
+#: src/details_window.py:121 src/details_window.py:123
msgid "/path/to/{}"
msgstr "/path/to/{}"
-#: src/details_window.py:112
+#: src/details_window.py:128
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -485,104 +505,102 @@ msgstr ""
"\n"
"Якщо шлях містить пробіли, обов'язково візьміть його в подвійні лапки!"
-#: src/details_window.py:147 src/details_window.py:153
+#: src/details_window.py:171 src/details_window.py:177
msgid "Couldn't Add Game"
msgstr "Не вдалося додати гру"
-#: src/details_window.py:147 src/details_window.py:183
+#: src/details_window.py:171 src/details_window.py:213
msgid "Game title cannot be empty."
msgstr "Назва гри не може бути порожньою."
-#: src/details_window.py:153 src/details_window.py:191
+#: src/details_window.py:177 src/details_window.py:221
msgid "Executable cannot be empty."
msgstr "Виконуваний файл не може бути порожнім."
-#: src/details_window.py:182 src/details_window.py:190
+#: src/details_window.py:212 src/details_window.py:220
msgid "Couldn't Apply Preferences"
msgstr "Не вдалося застосувати параметри"
#. The variable is the title of the game
-#: src/game.py:139
+#: src/game.py:141
msgid "{} launched"
msgstr "{} запущено"
#. The variable is the title of the game
-#: src/game.py:153
+#: src/game.py:155
msgid "{} hidden"
msgstr "{} приховано"
-#: src/game.py:153
+#: src/game.py:155
msgid "{} unhidden"
msgstr "{} показано"
#. The variable is the title of the game
#. The variable is the number of games removed
-#: src/game.py:170 src/importer/importer.py:363
+#: src/game.py:169 src/importer/importer.py:380
msgid "{} removed"
msgstr "{} видалено"
-#: src/preferences.py:119
+#: src/preferences.py:121
msgid "All games removed"
msgstr "Всі ігри видалено"
-#: src/preferences.py:168
+#: src/preferences.py:169
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"Для використання SteamGridDB потрібен ключ API. Ви можете згенерувати його {}"
"тут{}."
-#: src/preferences.py:294
+#: src/preferences.py:296
msgid "Installation Not Found"
msgstr "Встановлення не знайдено"
-#: src/preferences.py:296
+#: src/preferences.py:297
msgid "Select a valid directory."
msgstr "Виберіть правильний каталог."
-#: src/preferences.py:351
+#: src/preferences.py:333 src/importer/importer.py:306
+msgid "Warning"
+msgstr "Увага"
+
+#: src/preferences.py:367
msgid "Invalid Directory"
msgstr "Неправильний каталог"
-#: src/preferences.py:357
+#: src/preferences.py:373
msgid "Set Location"
msgstr "Встановити місцезнаходження"
-#: src/utils/create_dialog.py:25 src/importer/importer.py:291
+#: src/utils/create_dialog.py:33 src/importer/importer.py:307
msgid "Dismiss"
msgstr "Відхилити"
-#: src/importer/importer.py:128
+#: src/importer/importer.py:142
msgid "Importing Games…"
msgstr "Імпорт ігор…"
-#: src/importer/importer.py:290
-msgid "Warning"
-msgstr ""
-
-#: src/importer/importer.py:311
+#: src/importer/importer.py:327
msgid "The following errors occured during import:"
-msgstr ""
+msgstr "Під час імпорту виникли наступні помилки:"
-#: src/importer/importer.py:339
+#: src/importer/importer.py:356
msgid "No new games found"
msgstr "Нових ігор не знайдено"
-#: src/importer/importer.py:351
+#: src/importer/importer.py:368
msgid "1 game imported"
msgstr "1 гру імпортовано"
#. The variable is the number of games
-#: src/importer/importer.py:355
+#: src/importer/importer.py:372
msgid "{} games imported"
msgstr "{} гри імпортовано"
#. A single game removed
-#: src/importer/importer.py:359
-#, fuzzy
-#| msgid "{} removed"
+#: src/importer/importer.py:376
msgid "1 removed"
-msgstr "{} видалено"
+msgstr "1 вилучено"
#. The variable is the name of the source
#: src/importer/sources/location.py:33
@@ -607,6 +625,28 @@ msgstr "Не вдалося автентифікувати SteamGridDB"
msgid "Verify your API key in preferences"
msgstr "Перевірте свій API-ключ у параметрах"
+#: src/importer/sources/retroarch_source.py:129
+msgid "No RetroArch Core Selected"
+msgstr "Ядро RetroArch не вибрано"
+
+#. The variable is a newline separated list of playlists
+#: src/importer/sources/retroarch_source.py:131
+msgid "The following playlists have no default core:"
+msgstr "Наведені нижче списки відтворення не мають типового ядра:"
+
+#: src/importer/sources/retroarch_source.py:133
+msgid "Games with no core selected were not imported"
+msgstr "Ігри без вибраного ядра не імпортувалися"
+
+#~ msgid "Back"
+#~ msgstr "Назад"
+
+#~ msgid "Search games"
+#~ msgstr "Пошук ігор"
+
+#~ msgid "Search hidden games"
+#~ msgstr "Пошук прихованих ігор"
+
#~ msgid "The title of the game"
#~ msgstr "Назва гри"
diff --git a/src/details_window.py b/src/details_window.py
index a178d4e..f01fba6 100644
--- a/src/details_window.py
+++ b/src/details_window.py
@@ -199,6 +199,12 @@ class DetailsWindow(Adw.Window):
}
)
+ if shared.win.sidebar.get_selected_row().get_child() not in (
+ shared.win.all_games_row_box,
+ shared.win.added_row_box,
+ ):
+ shared.win.sidebar.select_row(shared.win.added_row_box.get_parent())
+
else:
if final_name == "":
create_dialog(
@@ -239,14 +245,14 @@ class DetailsWindow(Adw.Window):
# Get a cover from SGDB if none is present
if not self.game_cover.get_texture():
self.game.set_loading(1)
- sgdb_manager: SGDBManager = shared.store.managers[SGDBManager]
+ sgdb_manager = shared.store.managers[SGDBManager]
sgdb_manager.reset_cancellable()
sgdb_manager.process_game(self.game, {}, self.update_cover_callback)
self.game_cover.pictures.remove(self.cover)
self.close()
- shared.win.show_details_view(self.game)
+ shared.win.show_details_page(self.game)
def update_cover_callback(self, manager: SGDBManager) -> None:
# Set the game as not loading
diff --git a/src/game.py b/src/game.py
index 8dc981e..e1e3141 100644
--- a/src/game.py
+++ b/src/game.py
@@ -25,7 +25,7 @@ from pathlib import Path
from time import time
from typing import Any, Optional
-from gi.repository import Adw, GLib, GObject, Gtk
+from gi.repository import Adw, GObject, Gtk
from src import shared
from src.game_cover import GameCover
@@ -66,8 +66,7 @@ class Game(Gtk.Box):
def __init__(self, data: dict[str, Any], **kwargs: Any) -> None:
super().__init__(**kwargs)
- self.win = shared.win
- self.app = self.win.get_application()
+ self.app = shared.win.get_application()
self.version = shared.SPEC_VERSION
self.update_values(data)
@@ -100,18 +99,19 @@ class Game(Gtk.Box):
def create_toast(self, title: str, action: Optional[str] = None) -> None:
toast = Adw.Toast.new(title.format(self.name))
toast.set_priority(Adw.ToastPriority.HIGH)
+ toast.set_use_markup(False)
if action:
toast.set_button_label(_("Undo"))
- toast.connect("button-clicked", self.win.on_undo_action, self, action)
+ toast.connect("button-clicked", shared.win.on_undo_action, self, action)
- if (self, action) in self.win.toasts.keys():
+ if (self, action) in shared.win.toasts.keys():
# Dismiss the toast if there already is one
- self.win.toasts[(self, action)].dismiss()
+ shared.win.toasts[(self, action)].dismiss()
- self.win.toasts[(self, action)] = toast
+ shared.win.toasts[(self, action)] = toast
- self.win.toast_overlay.add_toast(toast)
+ shared.win.toast_overlay.add_toast(toast)
def launch(self) -> None:
self.last_played = int(time())
@@ -144,17 +144,15 @@ class Game(Gtk.Box):
self.hidden = not self.hidden
self.save()
- if self.win.stack.get_visible_child() == self.win.details_view:
- self.win.on_go_back_action()
+ if shared.win.navigation_view.get_visible_page() == shared.win.details_page:
+ shared.win.navigation_view.pop()
self.update()
if toast:
self.create_toast(
# The variable is the title of the game
- (_("{} hidden") if self.hidden else _("{} unhidden")).format(
- GLib.markup_escape_text(self.name)
- ),
+ (_("{} hidden") if self.hidden else _("{} unhidden")).format(self.name),
"hide",
)
@@ -164,14 +162,11 @@ class Game(Gtk.Box):
self.save()
self.update()
- if self.win.stack.get_visible_child() == self.win.details_view:
- self.win.on_go_back_action()
+ if shared.win.navigation_view.get_visible_page() == shared.win.details_page:
+ shared.win.navigation_view.pop()
- self.create_toast(
- # The variable is the title of the game
- _("{} removed").format(GLib.markup_escape_text(self.name)),
- "remove",
- )
+ # The variable is the title of the game
+ self.create_toast(_("{} removed").format(self.name), "remove")
def set_loading(self, state: int) -> None:
self.loading += state
@@ -202,7 +197,7 @@ class Game(Gtk.Box):
if shared.schema.get_boolean("cover-launches-game") ^ button:
self.launch()
else:
- self.win.show_details_view(self)
+ shared.win.show_details_page(self)
def set_play_icon(self) -> None:
self.play_button.set_icon_name(
diff --git a/src/importer/importer.py b/src/importer/importer.py
index c18e912..8db2d8d 100644
--- a/src/importer/importer.py
+++ b/src/importer/importer.py
@@ -19,6 +19,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later
import logging
+from time import time
from typing import Any, Optional
from gi.repository import Adw, Gio, GLib, Gtk
@@ -52,9 +53,13 @@ class Importer(ErrorProducer):
removed_game_ids: set[str]
imported_game_ids: set[str]
+ close_req_id: int
+
def __init__(self) -> None:
super().__init__()
+ shared.import_time = int(time())
+
# TODO: make this stateful
shared.store.new_game_ids = set()
shared.store.duplicate_game_ids = set()
@@ -102,10 +107,13 @@ class Importer(ErrorProducer):
def run(self) -> None:
"""Use several Gio.Task to import games from added sources"""
+ shared.win.get_application().state = shared.AppState.IMPORT
+
if self.__class__.summary_toast:
self.__class__.summary_toast.dismiss()
shared.win.get_application().lookup_action("import").set_enabled(False)
+ shared.win.get_application().lookup_action("add_game").set_enabled(False)
self.create_dialog()
@@ -145,6 +153,11 @@ class Importer(ErrorProducer):
transient_for=shared.win,
deletable=False,
)
+
+ self.close_req_id = self.import_dialog.connect(
+ "close-request", lambda *_: shared.win.close()
+ )
+
self.import_dialog.present()
def source_task_thread_func(self, data: tuple) -> None:
@@ -265,10 +278,15 @@ class Importer(ErrorProducer):
self.imported_game_ids = shared.store.new_game_ids
shared.store.new_game_ids = set()
shared.store.duplicate_game_ids = set()
+ # Disconnect the close-request signal that closes the main window
+ self.import_dialog.disconnect(self.close_req_id)
self.import_dialog.close()
self.__class__.summary_toast = self.create_summary_toast()
self.create_error_dialog()
shared.win.get_application().lookup_action("import").set_enabled(True)
+ shared.win.get_application().lookup_action("add_game").set_enabled(True)
+ shared.win.get_application().state = shared.AppState.DEFAULT
+ shared.win.create_source_rows()
def create_error_dialog(self) -> None:
"""Dialog containing all errors raised by importers"""
diff --git a/src/importer/sources/bottles_source.py b/src/importer/sources/bottles_source.py
index 48d00ba..be33f6a 100644
--- a/src/importer/sources/bottles_source.py
+++ b/src/importer/sources/bottles_source.py
@@ -19,7 +19,6 @@
# SPDX-License-Identifier: GPL-3.0-or-later
from pathlib import Path
-from time import time
from typing import NamedTuple
import yaml
@@ -38,13 +37,12 @@ class BottlesSourceIterable(SourceIterable):
data = self.source.locations.data["library.yml"].read_text("utf-8")
library: dict = yaml.safe_load(data)
- added_time = int(time())
for entry in library.values():
# Build game
values = {
"source": self.source.source_id,
- "added": added_time,
+ "added": shared.import_time,
"name": entry["name"],
"game_id": self.source.game_id_format.format(game_id=entry["id"]),
"executable": self.source.make_executable(
diff --git a/src/importer/sources/desktop_source.py b/src/importer/sources/desktop_source.py
index 347f116..99b12c9 100644
--- a/src/importer/sources/desktop_source.py
+++ b/src/importer/sources/desktop_source.py
@@ -17,10 +17,10 @@
#
# SPDX-License-Identifier: GPL-3.0-or-later
+import os
import shlex
-from hashlib import sha3_256
+import subprocess
from pathlib import Path
-from time import time
from typing import NamedTuple
from gi.repository import GLib, Gtk
@@ -36,8 +36,6 @@ class DesktopSourceIterable(SourceIterable):
def __iter__(self):
"""Generator method producing games"""
- added_time = int(time())
-
icon_theme = Gtk.IconTheme.new()
search_paths = [
@@ -62,7 +60,7 @@ class DesktopSourceIterable(SourceIterable):
icon_theme.add_search_path(str(path))
- terminal_exec = self.get_terminal_exec()
+ launch_command, full_path = self.check_launch_commands()
for path in search_paths:
if str(path).startswith("/app/"):
@@ -98,6 +96,16 @@ class DesktopSourceIterable(SourceIterable):
except GLib.GError:
continue
+ try:
+ try_exec = "which " + (
+ keyfile.get_string("Desktop Entry", "TryExec").split(" %")[0]
+ )
+ if not self.check_command(try_exec):
+ continue
+
+ except GLib.GError:
+ pass
+
# Skip Steam games
if "steam://rungameid/" in executable:
continue
@@ -117,31 +125,23 @@ class DesktopSourceIterable(SourceIterable):
pass
try:
- terminal = keyfile.get_boolean("Desktop Entry", "Terminal")
+ if keyfile.get_boolean("Desktop Entry", "Hidden"):
+ continue
except GLib.GError:
- terminal = False
+ pass
- try:
- cd_path = (
- "cd " + keyfile.get_string("Desktop Entry", "Path") + " && "
- )
- except GLib.GError:
- cd_path = ""
+ # Strip /run/host from Flatpak paths
+ if entry.is_relative_to(prefix := "/run/host"):
+ entry = Path("/") / entry.relative_to(prefix)
+
+ launch_arg = shlex.quote(str(entry if full_path else entry.stem))
values = {
"source": self.source.source_id,
- "added": added_time,
+ "added": shared.import_time,
"name": name,
- "game_id": "desktop_"
- + sha3_256(
- str(entry).encode("utf-8"), usedforsecurity=False
- ).hexdigest(),
- "executable": cd_path
- + (
- (terminal_exec + shlex.quote(executable))
- if terminal
- else executable
- ),
+ "game_id": f"desktop_{entry.stem}",
+ "executable": f"{launch_command} {launch_arg}",
}
game = Game(values)
@@ -177,21 +177,33 @@ class DesktopSourceIterable(SourceIterable):
yield (game, additional_data)
- def get_terminal_exec(self) -> str:
- match shared.schema.get_enum("desktop-terminal"):
- case 0:
- terminal_exec = shared.schema.get_string("desktop-terminal-custom-exec")
- case 1:
- terminal_exec = "xdg-terminal-exec"
- case 2:
- terminal_exec = "kgx -e"
- case 3:
- terminal_exec = "gnome-terminal --"
- case 4:
- terminal_exec = "konsole -e"
- case 5:
- terminal_exec = "xterm -e"
- return terminal_exec + " "
+ def check_command(self, command) -> bool:
+ flatpak_str = "flatpak-spawn --host /bin/sh -c "
+
+ if os.getenv("FLATPAK_ID") == shared.APP_ID:
+ command = flatpak_str + shlex.quote(command)
+
+ try:
+ subprocess.run(command, shell=True, check=True)
+ except subprocess.CalledProcessError:
+ return False
+
+ return True
+
+ def check_launch_commands(self) -> (str, bool):
+ """Check whether `gio launch` `gtk4-launch` or `gtk-launch` are available on the system"""
+ commands = (("gio launch", True), ("gtk4-launch", False), ("gtk-launch", False))
+
+ for command, full_path in commands:
+ # Even if `gio` is available, `gio launch` is only available on GLib >= 2.67.2
+ command_to_check = (
+ "gio help launch" if command == "gio launch" else f"which {command}"
+ )
+
+ if self.check_command(command_to_check):
+ return command, full_path
+
+ return commands[2]
class DesktopLocations(NamedTuple):
@@ -202,7 +214,7 @@ class DesktopSource(Source):
"""Generic Flatpak source"""
source_id = "desktop"
- name = _("Desktop")
+ name = _("Desktop Entries")
iterable_class = DesktopSourceIterable
available_on = {"linux"}
diff --git a/src/importer/sources/flatpak_source.py b/src/importer/sources/flatpak_source.py
index bb7bf32..de5583d 100644
--- a/src/importer/sources/flatpak_source.py
+++ b/src/importer/sources/flatpak_source.py
@@ -18,7 +18,6 @@
# SPDX-License-Identifier: GPL-3.0-or-later
from pathlib import Path
-from time import time
from typing import NamedTuple
from gi.repository import GLib, Gtk
@@ -35,8 +34,6 @@ class FlatpakSourceIterable(SourceIterable):
def __iter__(self):
"""Generator method producing games"""
- added_time = int(time())
-
icon_theme = Gtk.IconTheme.new()
icon_theme.add_search_path(str(self.source.locations.data["icons"]))
@@ -79,7 +76,7 @@ class FlatpakSourceIterable(SourceIterable):
values = {
"source": self.source.source_id,
- "added": added_time,
+ "added": shared.import_time,
"name": name,
"game_id": self.source.game_id_format.format(game_id=flatpak_id),
"executable": self.source.make_executable(flatpak_id=flatpak_id),
diff --git a/src/importer/sources/heroic_source.py b/src/importer/sources/heroic_source.py
index b2ac629..eefa1ea 100644
--- a/src/importer/sources/heroic_source.py
+++ b/src/importer/sources/heroic_source.py
@@ -25,7 +25,6 @@ from functools import cached_property
from hashlib import sha256
from json import JSONDecodeError
from pathlib import Path
-from time import time
from typing import Iterable, NamedTuple, Optional, TypedDict
from src import shared
@@ -91,9 +90,7 @@ class SubSourceIterable(Iterable):
logging.debug("Using Heroic %s library.json path %s", self.name, path)
return path
- def process_library_entry(
- self, entry: HeroicLibraryEntry, added_time: int
- ) -> SourceIterationResult:
+ def process_library_entry(self, entry: HeroicLibraryEntry) -> SourceIterationResult:
"""Build a Game from a Heroic library entry"""
app_name = entry["app_name"]
@@ -102,7 +99,7 @@ class SubSourceIterable(Iterable):
# Build game
values = {
"source": f"{self.source.source_id}_{self.service}",
- "added": added_time,
+ "added": shared.import_time,
"name": entry["title"],
"developer": entry.get("developer", None),
"game_id": self.source.game_id_format.format(
@@ -127,7 +124,7 @@ class SubSourceIterable(Iterable):
Iterate through the games with a generator
:raises InvalidLibraryFileError: on initial call if the library file is bad
"""
- added_time = int(time())
+
try:
iterator = iter(
path_json_load(self.library_path)[self.library_json_entries_key]
@@ -138,7 +135,7 @@ class SubSourceIterable(Iterable):
) from error
for entry in iterator:
try:
- yield self.process_library_entry(entry, added_time)
+ yield self.process_library_entry(entry)
except KeyError as error:
logging.warning(
"Skipped invalid %s game %s",
@@ -176,7 +173,7 @@ class StoreSubSourceIterable(SubSourceIterable):
def is_installed(self, app_name: str) -> bool:
return app_name in self.installed_app_names
- def process_library_entry(self, entry, added_time):
+ def process_library_entry(self, entry):
# Skip games that are not installed
app_name = entry["app_name"]
if not self.is_installed(app_name):
@@ -188,7 +185,7 @@ class StoreSubSourceIterable(SubSourceIterable):
)
return None
# Process entry as normal
- return super().process_library_entry(entry, added_time)
+ return super().process_library_entry(entry)
def __iter__(self):
"""
diff --git a/src/importer/sources/itch_source.py b/src/importer/sources/itch_source.py
index 1f7e135..aa59803 100644
--- a/src/importer/sources/itch_source.py
+++ b/src/importer/sources/itch_source.py
@@ -20,7 +20,6 @@
from shutil import rmtree
from sqlite3 import connect
-from time import time
from typing import NamedTuple
from src import shared
@@ -56,12 +55,10 @@ class ItchSourceIterable(SourceIterable):
connection = connect(db_path)
cursor = connection.execute(db_request)
- added_time = int(time())
-
# Create games from the db results
for row in cursor:
values = {
- "added": added_time,
+ "added": shared.import_time,
"source": self.source.source_id,
"name": row[1],
"game_id": self.source.game_id_format.format(game_id=row[0]),
diff --git a/src/importer/sources/legendary_source.py b/src/importer/sources/legendary_source.py
index bdf10e5..8a6dae0 100644
--- a/src/importer/sources/legendary_source.py
+++ b/src/importer/sources/legendary_source.py
@@ -20,7 +20,6 @@
import json
import logging
from json import JSONDecodeError
-from time import time
from typing import NamedTuple
from src import shared
@@ -36,9 +35,7 @@ from src.importer.sources.source import (
class LegendarySourceIterable(SourceIterable):
source: "LegendarySource"
- def game_from_library_entry(
- self, entry: dict, added_time: int
- ) -> SourceIterationResult:
+ def game_from_library_entry(self, entry: dict) -> SourceIterationResult:
# Skip non-games
if entry["is_dlc"]:
return None
@@ -46,7 +43,7 @@ class LegendarySourceIterable(SourceIterable):
# Build game
app_name = entry["app_name"]
values = {
- "added": added_time,
+ "added": shared.import_time,
"source": self.source.source_id,
"name": entry["title"],
"game_id": self.source.game_id_format.format(game_id=app_name),
@@ -78,12 +75,10 @@ class LegendarySourceIterable(SourceIterable):
logging.warning("Couldn't open Legendary file: %s", str(file))
return
- added_time = int(time())
-
# Generate games from library
for entry in library.values():
try:
- result = self.game_from_library_entry(entry, added_time)
+ result = self.game_from_library_entry(entry)
except KeyError as error:
# Skip invalid games
logging.warning(
diff --git a/src/importer/sources/lutris_source.py b/src/importer/sources/lutris_source.py
index 358f178..63d9df5 100644
--- a/src/importer/sources/lutris_source.py
+++ b/src/importer/sources/lutris_source.py
@@ -19,7 +19,6 @@
# SPDX-License-Identifier: GPL-3.0-or-later
from shutil import rmtree
from sqlite3 import connect
-from time import time
from typing import NamedTuple
from src import shared
@@ -56,13 +55,11 @@ class LutrisSourceIterable(SourceIterable):
connection = connect(db_path)
cursor = connection.execute(request, params)
- added_time = int(time())
-
# Create games from the DB results
for row in cursor:
# Create game
values = {
- "added": added_time,
+ "added": shared.import_time,
"hidden": row[4],
"name": row[1],
"source": f"{self.source.source_id}_{row[3]}",
diff --git a/src/importer/sources/retroarch_source.py b/src/importer/sources/retroarch_source.py
index 93b6065..44d6f56 100644
--- a/src/importer/sources/retroarch_source.py
+++ b/src/importer/sources/retroarch_source.py
@@ -24,9 +24,7 @@ from hashlib import md5
from json import JSONDecodeError
from pathlib import Path
from shlex import quote as shell_quote
-from time import time
from typing import NamedTuple
-from urllib.parse import quote as url_quote
from src import shared
from src.errors.friendly_error import FriendlyError
@@ -54,7 +52,6 @@ class RetroarchSourceIterable(SourceIterable):
raise KeyError(f"Key not found in RetroArch config: {key}")
def __iter__(self):
- added_time = int(time())
bad_playlists = set()
config_file = self.source.locations.config["retroarch.cfg"]
@@ -102,7 +99,7 @@ class RetroarchSourceIterable(SourceIterable):
values = {
"source": self.source.source_id,
- "added": added_time,
+ "added": shared.import_time,
"name": item["label"],
"game_id": self.source.game_id_format.format(game_id=game_id),
"executable": self.source.make_executable(
diff --git a/src/importer/sources/steam_source.py b/src/importer/sources/steam_source.py
index 19bb63e..6d7dec1 100644
--- a/src/importer/sources/steam_source.py
+++ b/src/importer/sources/steam_source.py
@@ -21,7 +21,6 @@
import logging
import re
from pathlib import Path
-from time import time
from typing import Iterable, NamedTuple
from src import shared
@@ -64,8 +63,6 @@ class SteamSourceIterable(SourceIterable):
appid_cache = set()
manifests = self.get_manifests()
- added_time = int(time())
-
for manifest in manifests:
# Get metadata from manifest
steam = SteamFileHelper()
@@ -90,7 +87,7 @@ class SteamSourceIterable(SourceIterable):
# Build game from local data
values = {
- "added": added_time,
+ "added": shared.import_time,
"name": local_data["name"],
"source": self.source.source_id,
"game_id": self.source.game_id_format.format(game_id=appid),
diff --git a/src/main.py b/src/main.py
index 63aedc4..53f8538 100644
--- a/src/main.py
+++ b/src/main.py
@@ -59,6 +59,7 @@ from src.window import CartridgesWindow
class CartridgesApplication(Adw.Application):
+ state = shared.AppState.DEFAULT
win: CartridgesWindow
def __init__(self) -> None:
@@ -75,34 +76,33 @@ class CartridgesApplication(Adw.Application):
if os.name == "nt":
migrate_files_v1_to_v2()
- else:
- if not shared.state_schema.get_boolean("terminal-check-done"):
- self.check_desktop_terminals()
- shared.state_schema.set_boolean("terminal-check-done", True)
# Set fallback icon-name
Gtk.Window.set_default_icon_name(shared.APP_ID)
# Create the main window
- self.win = self.props.active_window # pylint: disable=no-member
- if not self.win:
- shared.win = self.win = CartridgesWindow(application=self)
+ win = self.props.active_window # pylint: disable=no-member
+ if not win:
+ shared.win = win = CartridgesWindow(application=self)
# Save window geometry
shared.state_schema.bind(
- "width", self.win, "default-width", Gio.SettingsBindFlags.DEFAULT
+ "width", shared.win, "default-width", Gio.SettingsBindFlags.DEFAULT
)
shared.state_schema.bind(
- "height", self.win, "default-height", Gio.SettingsBindFlags.DEFAULT
+ "height", shared.win, "default-height", Gio.SettingsBindFlags.DEFAULT
)
shared.state_schema.bind(
- "is-maximized", self.win, "maximized", Gio.SettingsBindFlags.DEFAULT
+ "is-maximized", shared.win, "maximized", Gio.SettingsBindFlags.DEFAULT
)
# Load games from disk
shared.store.add_manager(FileManager(), False)
shared.store.add_manager(DisplayManager())
+ self.state = shared.AppState.LOAD_FROM_DISK
self.load_games_from_disk()
+ self.state = shared.AppState.DEFAULT
+ shared.win.create_source_rows()
# Add rest of the managers for game imports
shared.store.add_manager(CoverManager())
@@ -128,42 +128,28 @@ class CartridgesApplication(Adw.Application):
("protondb_search",),
("lutris_search",),
("hltb_search",),
- ("show_hidden", ("h",), self.win),
- ("go_back", ("Left",), self.win),
- ("go_to_parent", ("Up",), self.win),
- ("go_home", ("Home",), self.win),
- ("toggle_search", ("f",), self.win),
- ("escape", ("Escape",), self.win),
- ("undo", ("z",), self.win),
- ("open_menu", ("F10",), self.win),
- ("close", ("w",), self.win),
+ ("show_sidebar", ("F9",), shared.win),
+ ("show_hidden", ("h",), shared.win),
+ ("go_to_parent", ("Up",), shared.win),
+ ("go_home", ("Home",), shared.win),
+ ("toggle_search", ("f",), shared.win),
+ ("escape", ("Escape",), shared.win),
+ ("undo", ("z",), shared.win),
+ ("open_menu", ("F10",), shared.win),
+ ("close", ("w",), shared.win),
}
)
sort_action = Gio.SimpleAction.new_stateful(
"sort_by", GLib.VariantType.new("s"), GLib.Variant("s", "a-z")
)
- sort_action.connect("activate", self.win.on_sort_action)
- self.win.add_action(sort_action)
- self.win.on_sort_action(sort_action, shared.state_schema.get_value("sort-mode"))
+ sort_action.connect("activate", shared.win.on_sort_action)
+ shared.win.add_action(sort_action)
+ shared.win.on_sort_action(
+ sort_action, shared.state_schema.get_value("sort-mode")
+ )
- self.win.present()
-
- def check_desktop_terminals(self) -> None:
- """Look for an installed terminal for desktop entries and set the relevant gsetting"""
- terminals = ("xdg-terminal-exec", "kgx", "gnome-terminal", "konsole", "xterm")
-
- for index, command in enumerate(terminals):
- command = f"type {command} &> /dev/null"
- if os.getenv("FLATPAK_ID") == shared.APP_ID:
- command = "flatpak-spawn --host /bin/sh -c " + shlex.quote(command)
-
- try:
- subprocess.run(command, shell=True, check=True)
- shared.schema.set_enum("desktop-terminal", index + 1)
- return
- except subprocess.CalledProcessError:
- pass
+ shared.win.present()
def load_games_from_disk(self) -> None:
if shared.games_dir.is_dir():
@@ -175,6 +161,15 @@ class CartridgesApplication(Adw.Application):
game = Game(data)
shared.store.add_game(game, {"skip_save": True})
+ def get_source_name(self, source_id: str) -> Any:
+ if source_id == "all":
+ name = _("All Games")
+ elif source_id == "imported":
+ name = _("Added")
+ else:
+ name = globals()[f'{source_id.split("_")[0].title()}Source'].name
+ return name
+
def on_about_action(self, *_args: Any) -> None:
# Get the debug info from the log files
debug_str = ""
@@ -191,13 +186,12 @@ class CartridgesApplication(Adw.Application):
debug_str += log_file.read()
log_file.close()
- about = Adw.AboutWindow(
- transient_for=self.win,
- application_name=_("Cartridges"),
- application_icon=shared.APP_ID,
- developer_name="kramo",
- version=shared.VERSION,
- developers=[
+ about = Adw.AboutWindow.new_from_appdata(
+ shared.PREFIX + "/" + shared.APP_ID + ".metainfo.xml", shared.VERSION
+ )
+ about.set_transient_for(shared.win)
+ about.set_developers(
+ (
"kramo https://kramo.hu",
"Geoffrey Coulaud https://geoffrey-coulaud.fr",
"Rilic https://rilic.red",
@@ -205,16 +199,20 @@ class CartridgesApplication(Adw.Application):
"Paweł Lidwin https://github.com/imLinguin",
"Domenico https://github.com/Domefemia",
"Rafael Mardojai CM https://mardojai.com",
- ],
- designers=("kramo https://kramo.hu",),
- copyright="© 2022-2023 kramo",
- license_type=Gtk.License.GPL_3_0,
- issue_url="https://github.com/kra-mo/cartridges/issues/new",
- website="https://github.com/kra-mo/cartridges",
- # Translators: Replace this with your name for it to show up in the about window
- translator_credits=_("translator_credits"),
- debug_info=debug_str,
- debug_info_filename="cartridges.log",
+ "Clara Hobbs https://github.com/Ratfink",
+ )
+ )
+ about.set_designers(("kramo https://kramo.hu",))
+ about.set_copyright("© 2022-2023 kramo")
+ # Translators: Replace this with your name for it to show up in the about window
+ about.set_translator_credits = (_("translator_credits"),)
+ about.set_debug_info(debug_str)
+ about.set_debug_info_filename("cartridges.log")
+ about.add_legal_section(
+ "Steam Branding",
+ "© 2023 Valve Corporation",
+ Gtk.License.CUSTOM,
+ "Steam and the Steam logo are trademarks and/or registered trademarks of Valve Corporation in the U.S. and/or other countries.", # pylint: disable=line-too-long
)
about.present()
@@ -235,13 +233,13 @@ class CartridgesApplication(Adw.Application):
return win
def on_launch_game_action(self, *_args: Any) -> None:
- self.win.active_game.launch()
+ shared.win.active_game.launch()
def on_hide_game_action(self, *_args: Any) -> None:
- self.win.active_game.toggle_hidden()
+ shared.win.active_game.toggle_hidden()
def on_edit_game_action(self, *_args: Any) -> None:
- DetailsWindow(self.win.active_game)
+ DetailsWindow(shared.win.active_game)
def on_add_game_action(self, *_args: Any) -> None:
DetailsWindow()
@@ -279,14 +277,14 @@ class CartridgesApplication(Adw.Application):
shared.importer.run()
def on_remove_game_action(self, *_args: Any) -> None:
- self.win.active_game.remove_game()
+ shared.win.active_game.remove_game()
def on_remove_game_details_view_action(self, *_args: Any) -> None:
- if self.win.stack.get_visible_child() == self.win.details_view:
+ if shared.win.navigation_view.get_visible_page() == shared.win.details_page:
self.on_remove_game_action()
def search(self, uri: str) -> None:
- Gio.AppInfo.launch_default_for_uri(f"{uri}{self.win.active_game.name}")
+ Gio.AppInfo.launch_default_for_uri(f"{uri}{shared.win.active_game.name}")
def on_igdb_search_action(self, *_args: Any) -> None:
self.search("https://www.igdb.com/search?type=1&q=")
diff --git a/src/preferences.py b/src/preferences.py
index 3111d6b..245dd70 100644
--- a/src/preferences.py
+++ b/src/preferences.py
@@ -26,9 +26,9 @@ from typing import Any, Callable, Optional
from gi.repository import Adw, Gio, GLib, Gtk
from src import shared
+from src.errors.friendly_error import FriendlyError
from src.game import Game
from src.importer.sources.bottles_source import BottlesSource
-from src.importer.sources.desktop_source import DesktopSource
from src.importer.sources.flatpak_source import FlatpakSource
from src.importer.sources.heroic_source import HeroicSource
from src.importer.sources.itch_source import ItchSource
@@ -38,6 +38,7 @@ from src.importer.sources.lutris_source import LutrisSource
from src.importer.sources.retroarch_source import RetroarchSource
from src.importer.sources.source import Source
from src.importer.sources.steam_source import SteamSource
+from src.store.managers.sgdb_manager import SGDBManager
from src.utils.create_dialog import create_dialog
@@ -98,17 +99,14 @@ class PreferencesWindow(Adw.PreferencesWindow):
flatpak_data_file_chooser_button = Gtk.Template.Child()
flatpak_import_launchers_switch = Gtk.Template.Child()
- desktop_expander_row = Gtk.Template.Child()
- desktop_terminal_exec_row = Gtk.Template.Child()
- desktop_tereminal_custom_exec_revealer = Gtk.Template.Child()
- desktop_tereminal_custom_exec = Gtk.Template.Child()
+ desktop_switch = Gtk.Template.Child()
sgdb_key_group = Gtk.Template.Child()
sgdb_key_entry_row = Gtk.Template.Child()
sgdb_switch = Gtk.Template.Child()
- sgdb_switch_row = Gtk.Template.Child()
sgdb_prefer_switch = Gtk.Template.Child()
sgdb_animated_switch = Gtk.Template.Child()
+ sgdb_fetch_button = Gtk.Template.Child()
danger_zone_group = Gtk.Template.Child()
reset_action_row = Gtk.Template.Child()
@@ -120,9 +118,8 @@ class PreferencesWindow(Adw.PreferencesWindow):
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
- self.win = shared.win
self.file_chooser = Gtk.FileDialog()
- self.set_transient_for(self.win)
+ self.set_transient_for(shared.win)
self.toast = Adw.Toast.new(_("All games removed"))
self.toast.set_button_label(_("Undo"))
@@ -144,13 +141,11 @@ class PreferencesWindow(Adw.PreferencesWindow):
if shared.PROFILE == "development":
self.reset_action_row.set_visible(True)
self.reset_button.connect("clicked", self.reset_app)
- self.set_default_size(-1, 560)
# Sources settings
for source_class in (
BottlesSource,
FlatpakSource,
- DesktopSource,
HeroicSource,
ItchSource,
LegendarySource,
@@ -165,36 +160,6 @@ class PreferencesWindow(Adw.PreferencesWindow):
else:
self.init_source_row(source)
- # Desktop Terminal Executable
- def set_terminal_exec(widget: Adw.ComboRow, _param: Any) -> None:
- shared.schema.set_enum("desktop-terminal", widget.get_selected())
- self.desktop_tereminal_custom_exec_revealer.set_reveal_child(
- widget.get_selected() == 0
- )
-
- self.desktop_terminal_exec_row.connect("notify::selected", set_terminal_exec)
- self.desktop_terminal_exec_row.set_selected(
- terminal_value := shared.schema.get_enum("desktop-terminal")
- )
- if not terminal_value:
- set_terminal_exec(
- self.desktop_terminal_exec_row, None
- ) # The default value is supposed to be 4294967295, but it's 0 and I can't change it
-
- self.desktop_tereminal_custom_exec.set_text(
- shared.schema.get_string("desktop-terminal-custom-exec")
- )
-
- def desktop_custom_exec_changed(*_args: Any) -> None:
- shared.schema.set_string(
- "desktop-terminal-custom-exec",
- self.desktop_tereminal_custom_exec.get_text(),
- )
-
- self.desktop_tereminal_custom_exec.connect(
- "changed", desktop_custom_exec_changed
- )
-
# SteamGridDB
def sgdb_key_changed(*_args: Any) -> None:
shared.schema.set_string("sgdb-key", self.sgdb_key_entry_row.get_text())
@@ -210,14 +175,40 @@ class PreferencesWindow(Adw.PreferencesWindow):
)
)
- def set_sgdb_sensitive(widget: Adw.EntryRow) -> None:
- if not widget.get_text():
- shared.schema.set_boolean("sgdb", False)
+ def redownload_sgdb(*_args) -> None:
+ counter = 0
+ games_len = shared.store.__len__() - 1 # IDK why it returns one more
+ sgdb_manager = shared.store.managers[SGDBManager]
+ sgdb_manager.reset_cancellable()
- self.sgdb_switch_row.set_sensitive(widget.get_text())
+ self.add_toast(download_toast := Adw.Toast.new(_("Downloading covers…")))
- self.sgdb_key_entry_row.connect("changed", set_sgdb_sensitive)
- set_sgdb_sensitive(self.sgdb_key_entry_row)
+ def update_cover_callback(manager: SGDBManager) -> None:
+ nonlocal counter
+ nonlocal games_len
+ nonlocal download_toast
+
+ counter += 1
+ if counter != games_len:
+ return
+
+ for error in manager.collect_errors():
+ if isinstance(error, FriendlyError):
+ create_dialog(self, error.title, error.subtitle)
+ break
+
+ for game in shared.store:
+ game.update()
+
+ toast = Adw.Toast.new(_("Covers updated"))
+ toast.set_priority(Adw.ToastPriority.HIGH)
+ download_toast.dismiss()
+ self.add_toast(toast)
+
+ for game in shared.store:
+ sgdb_manager.process_game(game, {}, update_cover_callback)
+
+ self.sgdb_fetch_button.connect("clicked", redownload_sgdb)
# Switches
self.bind_switches(
@@ -236,9 +227,19 @@ class PreferencesWindow(Adw.PreferencesWindow):
"sgdb",
"sgdb-prefer",
"sgdb-animated",
+ "desktop",
}
)
+ def set_sgdb_sensitive(widget: Adw.EntryRow) -> None:
+ if not widget.get_text():
+ shared.schema.set_boolean("sgdb", False)
+
+ self.sgdb_switch.set_sensitive(widget.get_text())
+
+ self.sgdb_key_entry_row.connect("changed", set_sgdb_sensitive)
+ set_sgdb_sensitive(self.sgdb_key_entry_row)
+
def get_switch(self, setting: str) -> Any:
return getattr(self, f'{setting.replace("-", "_")}_switch')
@@ -254,9 +255,10 @@ class PreferencesWindow(Adw.PreferencesWindow):
def choose_folder(
self, _widget: Any, callback: Callable, callback_data: Optional[str] = None
) -> None:
- self.file_chooser.select_folder(self.win, None, callback, callback_data)
+ self.file_chooser.select_folder(shared.win, None, callback, callback_data)
def undo_remove_all(self, *_args: Any) -> None:
+ shared.win.get_application().state = shared.AppState.UNDO_REMOVE_ALL_GAMES
for game in self.removed_games:
game.removed = False
game.save()
@@ -264,8 +266,12 @@ class PreferencesWindow(Adw.PreferencesWindow):
self.removed_games = set()
self.toast.dismiss()
+ shared.win.get_application().state = shared.AppState.DEFAULT
+ shared.win.create_source_rows()
def remove_all_games(self, *_args: Any) -> None:
+ shared.win.get_application().state = shared.AppState.REMOVE_ALL_GAMES
+ shared.win.row_selected(None, shared.win.all_games_row_box.get_parent())
for game in shared.store:
if not game.removed:
self.removed_games.add(game)
@@ -273,10 +279,12 @@ class PreferencesWindow(Adw.PreferencesWindow):
game.save()
game.update()
- if self.win.stack.get_visible_child() == self.win.details_view:
- self.win.on_go_back_action()
+ if shared.win.navigation_view.get_visible_page() == shared.win.details_page:
+ shared.win.navigation_view.pop()
self.add_toast(self.toast)
+ shared.win.get_application().state = shared.AppState.DEFAULT
+ shared.win.create_source_rows()
def reset_app(self, *_args: Any) -> None:
rmtree(shared.data_dir / "cartridges", True)
diff --git a/src/shared.py.in b/src/shared.py.in
index 91e7b6d..19c6c85 100644
--- a/src/shared.py.in
+++ b/src/shared.py.in
@@ -18,10 +18,20 @@
# SPDX-License-Identifier: GPL-3.0-or-later
import os
+from enum import IntEnum, auto
from pathlib import Path
from gi.repository import Gdk, Gio, GLib
+
+class AppState(IntEnum):
+ DEFAULT = auto()
+ LOAD_FROM_DISK = auto()
+ IMPORT = auto()
+ REMOVE_ALL_GAMES = auto()
+ UNDO_REMOVE_ALL_GAMES = auto()
+
+
APP_ID = "@APP_ID@"
VERSION = "@VERSION@"
PREFIX = "@PREFIX@"
@@ -52,5 +62,6 @@ image_size = (200 * scale_factor, 300 * scale_factor)
# pylint: disable=invalid-name
win = None
importer = None
+import_time = None
store = None
log_files = None
diff --git a/src/store/managers/display_manager.py b/src/store/managers/display_manager.py
index a5005a4..0304e94 100644
--- a/src/store/managers/display_manager.py
+++ b/src/store/managers/display_manager.py
@@ -17,6 +17,7 @@
#
# SPDX-License-Identifier: GPL-3.0-or-later
+from src import shared
from src.game import Game
from src.game_cover import GameCover
from src.store.managers.manager import Manager
@@ -46,27 +47,30 @@ class DisplayManager(Manager):
"notify::visible", game.toggle_play, None
)
game.menu_button.get_popover().connect(
- "notify::visible", game.win.set_active_game, game
+ "notify::visible", shared.win.set_active_game, game
)
- if game.game_id in game.win.game_covers:
- game.game_cover = game.win.game_covers[game.game_id]
+ if game.game_id in shared.win.game_covers:
+ game.game_cover = shared.win.game_covers[game.game_id]
game.game_cover.add_picture(game.cover)
else:
game.game_cover = GameCover({game.cover}, game.get_cover_path())
- game.win.game_covers[game.game_id] = game.game_cover
+ shared.win.game_covers[game.game_id] = game.game_cover
if (
- game.win.stack.get_visible_child() == game.win.details_view
- and game.win.active_game == game
+ shared.win.navigation_view.get_visible_page() == shared.win.details_page
+ and shared.win.active_game == game
):
- game.win.show_details_view(game)
+ shared.win.show_details_page(game)
if not game.removed and not game.blacklisted:
if game.hidden:
- game.win.hidden_library.append(game)
+ shared.win.hidden_library.append(game)
else:
- game.win.library.append(game)
+ shared.win.library.append(game)
game.get_parent().set_focusable(False)
- game.win.set_library_child()
+ shared.win.set_library_child()
+
+ if shared.win.get_application().state == shared.AppState.DEFAULT:
+ shared.win.create_source_rows()
diff --git a/src/store/store.py b/src/store/store.py
index 159da90..f056db3 100644
--- a/src/store/store.py
+++ b/src/store/store.py
@@ -48,7 +48,7 @@ class Store:
"""Check if the game is present in the store with the `in` keyword"""
if not isinstance(obj, Game):
return False
- if not (source_mapping := self.source_games.get(obj.source)):
+ if not (source_mapping := self.source_games.get(obj.base_source)):
return False
return obj.game_id in source_mapping
@@ -150,9 +150,9 @@ class Store:
game.connect(signal, manager.run)
# Add the game to the store
- if not game.source in self.source_games:
- self.source_games[game.source] = {}
- self.source_games[game.source][game.game_id] = game
+ if not game.base_source in self.source_games:
+ self.source_games[game.base_source] = {}
+ self.source_games[game.base_source][game.game_id] = game
# Run the pipeline for the game
if not run_pipeline:
diff --git a/src/utils/save_cover.py b/src/utils/save_cover.py
index 1bff991..336161d 100644
--- a/src/utils/save_cover.py
+++ b/src/utils/save_cover.py
@@ -61,7 +61,6 @@ def convert_cover(
tmp_path,
save_all=True,
append_images=frames[1:],
- disposal=2,
)
else:
diff --git a/src/window.py b/src/window.py
index 52a27ea..4d76b07 100644
--- a/src/window.py
+++ b/src/window.py
@@ -31,25 +31,33 @@ from src.utils.relative_date import relative_date
class CartridgesWindow(Adw.ApplicationWindow):
__gtype_name__ = "CartridgesWindow"
+ overlay_split_view = Gtk.Template.Child()
+ navigation_view = Gtk.Template.Child()
+ sidebar = Gtk.Template.Child()
+ all_games_row_box = Gtk.Template.Child()
+ all_games_no_label = Gtk.Template.Child()
+ added_row_box = Gtk.Template.Child()
+ added_games_no_label = Gtk.Template.Child()
toast_overlay = Gtk.Template.Child()
primary_menu_button = Gtk.Template.Child()
- stack = Gtk.Template.Child()
+ show_sidebar_button = Gtk.Template.Child()
details_view = Gtk.Template.Child()
+ library_page = Gtk.Template.Child()
library_view = Gtk.Template.Child()
library = Gtk.Template.Child()
scrolledwindow = Gtk.Template.Child()
- library_bin = Gtk.Template.Child()
+ library_overlay = Gtk.Template.Child()
notice_empty = Gtk.Template.Child()
notice_no_results = Gtk.Template.Child()
search_bar = Gtk.Template.Child()
search_entry = Gtk.Template.Child()
search_button = Gtk.Template.Child()
- details_view_box = Gtk.Template.Child()
+ details_page = Gtk.Template.Child()
+ details_view_toolbar_view = Gtk.Template.Child()
details_view_cover = Gtk.Template.Child()
details_view_spinner = Gtk.Template.Child()
details_view_title = Gtk.Template.Child()
- details_view_header_bar_title = Gtk.Template.Child()
details_view_blurred_cover = Gtk.Template.Child()
details_view_play_button = Gtk.Template.Child()
details_view_developer = Gtk.Template.Child()
@@ -57,11 +65,12 @@ class CartridgesWindow(Adw.ApplicationWindow):
details_view_last_played = Gtk.Template.Child()
details_view_hide_button = Gtk.Template.Child()
+ hidden_library_page = Gtk.Template.Child()
hidden_primary_menu_button = Gtk.Template.Child()
hidden_library = Gtk.Template.Child()
hidden_library_view = Gtk.Template.Child()
hidden_scrolledwindow = Gtk.Template.Child()
- hidden_library_bin = Gtk.Template.Child()
+ hidden_library_overlay = Gtk.Template.Child()
hidden_notice_empty = Gtk.Template.Child()
hidden_notice_no_results = Gtk.Template.Child()
hidden_search_bar = Gtk.Template.Child()
@@ -73,14 +82,139 @@ class CartridgesWindow(Adw.ApplicationWindow):
active_game: Game
details_view_game_cover: Optional[GameCover] = None
sort_state: str = "a-z"
+ filter_state: str = "all"
+ source_rows: dict = {}
+
+ def create_source_rows(self) -> None:
+ def get_removed(source_id: str) -> Any:
+ removed = tuple(
+ game.removed or game.hidden or game.blacklisted
+ for game in shared.store.source_games[source_id].values()
+ )
+ return (
+ (count,) if (count := sum(removed)) != len(removed) else False
+ ) # Return a tuple because 0 == False and 1 == True
+
+ total_games_no = 0
+ restored = False
+
+ selected_id = (
+ self.source_rows[selected_row][0]
+ if (selected_row := self.sidebar.get_selected_row()) in self.source_rows
+ else None
+ )
+
+ if selected_row == self.added_row_box.get_parent():
+ self.sidebar.select_row(self.added_row_box.get_parent())
+ restored = True
+
+ if added_missing := (
+ not shared.store.source_games.get("imported")
+ or not (removed := get_removed("imported"))
+ ):
+ self.sidebar.select_row(self.all_games_row_box.get_parent())
+ else:
+ games_no = len(shared.store.source_games["imported"]) - removed[0]
+ self.added_games_no_label.set_label(str(games_no))
+ total_games_no += games_no
+ self.added_row_box.get_parent().set_visible(not added_missing)
+
+ self.sidebar.get_row_at_index(2).set_visible(False)
+
+ while row := self.sidebar.get_row_at_index(3):
+ self.sidebar.remove(row)
+
+ for source_id in shared.store.source_games:
+ if source_id == "imported":
+ continue
+ if not (removed := get_removed(source_id)):
+ continue
+
+ row = Gtk.Box(
+ margin_top=12,
+ margin_bottom=12,
+ margin_start=6,
+ margin_end=6,
+ spacing=12,
+ )
+ games_no = len(shared.store.source_games[source_id]) - removed[0]
+ total_games_no += games_no
+
+ row.append(
+ Gtk.Image.new_from_icon_name(
+ "user-desktop-symbolic"
+ if (split_id := source_id.split("_")[0]) == "desktop"
+ else f"{split_id}-source-symbolic"
+ )
+ )
+
+ row.append(
+ Gtk.Label(
+ label=self.get_application().get_source_name(source_id),
+ halign=Gtk.Align.START,
+ )
+ )
+
+ row.append(
+ games_no_label := Gtk.Label(
+ label=games_no,
+ hexpand=True,
+ halign=Gtk.Align.END,
+ )
+ )
+
+ games_no_label.add_css_class("dim-label")
+
+ # Order rows based on the number of games in them
+ index = 3
+ while source_row := self.sidebar.get_row_at_index(index):
+ if self.source_rows[source_row][1] < games_no:
+ self.sidebar.insert(row, index)
+ break
+ index += 1
+ if not row.get_parent():
+ self.sidebar.append(row)
+
+ self.source_rows[row.get_parent()] = (
+ source_id,
+ games_no,
+ )
+
+ if source_id == selected_id:
+ self.sidebar.select_row(row.get_parent())
+ restored = True
+
+ self.sidebar.get_row_at_index(2).set_visible(True)
+
+ self.all_games_no_label.set_label(str(total_games_no))
+
+ if not restored:
+ self.sidebar.select_row(self.all_games_row_box.get_parent())
+
+ def row_selected(self, _widget: Any, row: Gtk.ListBoxRow | None) -> None:
+ if not row:
+ return
+ match row.get_child():
+ case self.all_games_row_box:
+ value = "all"
+ case self.added_row_box:
+ value = "imported"
+ case _:
+ value = self.source_rows[row][0]
+
+ self.library_page.set_title(self.get_application().get_source_name(value))
+
+ self.filter_state = value
+ self.library.invalidate_filter()
+
+ if self.overlay_split_view.get_collapsed():
+ self.overlay_split_view.set_show_sidebar(False)
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
- self.previous_page = self.library_view
-
- self.details_view.set_measure_overlay(self.details_view_box, True)
- self.details_view.set_clip_overlay(self.details_view_box, False)
+ self.details_view.set_measure_overlay(self.details_view_toolbar_view, True)
+ self.details_view.set_clip_overlay(self.details_view_toolbar_view, False)
self.library.set_filter_func(self.filter_func)
self.hidden_library.set_filter_func(self.filter_func)
@@ -92,6 +226,12 @@ class CartridgesWindow(Adw.ApplicationWindow):
self.notice_empty.set_icon_name(shared.APP_ID + "-symbolic")
+ self.overlay_split_view.set_show_sidebar(
+ shared.state_schema.get_boolean("show-sidebar")
+ )
+
+ self.sidebar.select_row(self.all_games_row_box.get_parent())
+
if shared.PROFILE == "development":
self.add_css_class("devel")
@@ -103,12 +243,13 @@ class CartridgesWindow(Adw.ApplicationWindow):
self.search_entry.connect("search-changed", self.search_changed, False)
self.hidden_search_entry.connect("search-changed", self.search_changed, True)
- self.search_entry.connect("activate", self.show_details_view_search)
- self.hidden_search_entry.connect("activate", self.show_details_view_search)
+ self.search_entry.connect("activate", self.show_details_page_search)
+ self.hidden_search_entry.connect("activate", self.show_details_page_search)
- back_mouse_button = Gtk.GestureClick(button=8)
- (back_mouse_button).connect("pressed", self.on_go_back_action)
- self.add_controller(back_mouse_button)
+ self.navigation_view.connect("popped", self.set_show_hidden)
+ self.navigation_view.connect("pushed", self.set_show_hidden)
+
+ self.sidebar.connect("row-selected", self.row_selected)
style_manager = Adw.StyleManager.get_default()
style_manager.connect("notify::dark", self.set_details_view_opacity)
@@ -140,25 +281,38 @@ class CartridgesWindow(Adw.ApplicationWindow):
if game.removed or game.blacklisted:
continue
if game.hidden:
- if game.filtered and hidden_child != self.hidden_scrolledwindow:
+ if game.filtered and hidden_child:
hidden_child = self.hidden_notice_no_results
continue
- hidden_child = self.hidden_scrolledwindow
+ hidden_child = None
else:
- if game.filtered and child != self.scrolledwindow:
+ if game.filtered and child:
child = self.notice_no_results
continue
- child = self.scrolledwindow
+ child = None
- self.library_bin.set_child(child)
- self.hidden_library_bin.set_child(hidden_child)
+ def remove_from_overlay(widget: Gtk.Widget) -> None:
+ if isinstance(widget.get_parent(), Gtk.Overlay):
+ widget.get_parent().remove_overlay(widget)
+
+ if child:
+ self.library_overlay.add_overlay(child)
+ else:
+ remove_from_overlay(self.notice_empty)
+ remove_from_overlay(self.notice_no_results)
+
+ if hidden_child:
+ self.hidden_library_overlay.add_overlay(hidden_child)
+ else:
+ remove_from_overlay(self.hidden_notice_empty)
+ remove_from_overlay(self.hidden_notice_no_results)
def filter_func(self, child: Gtk.Widget) -> bool:
game = child.get_child()
text = (
(
self.hidden_search_entry
- if self.stack.get_visible_child() == self.hidden_library_view
+ if self.navigation_view.get_visible_page() == self.hidden_library_page
else self.search_entry
)
.get_text()
@@ -170,6 +324,12 @@ class CartridgesWindow(Adw.ApplicationWindow):
or (text in game.developer.lower() if game.developer else False)
)
+ if not filtered:
+ if self.filter_state == "all":
+ pass
+ elif game.base_source != self.filter_state:
+ filtered = True
+
game.filtered = filtered
self.set_library_child()
@@ -178,7 +338,7 @@ class CartridgesWindow(Adw.ApplicationWindow):
def set_active_game(self, _widget: Any, _pspec: Any, game: Game) -> None:
self.active_game = game
- def show_details_view(self, game: Game) -> None:
+ def show_details_page(self, game: Game) -> None:
self.active_game = game
self.details_view_cover.set_opacity(int(not game.loading))
@@ -205,7 +365,7 @@ class CartridgesWindow(Adw.ApplicationWindow):
)
self.details_view_title.set_label(game.name)
- self.details_view_header_bar_title.set_title(game.name)
+ self.details_page.set_title(game.name)
date = relative_date(game.added)
self.details_view_added.set_label(
@@ -220,14 +380,14 @@ class CartridgesWindow(Adw.ApplicationWindow):
_("Last played: {}").format(last_played_date)
)
- if self.stack.get_visible_child() != self.details_view:
- self.navigate(self.details_view)
+ if self.navigation_view.get_visible_page() != self.details_page:
+ self.navigation_view.push(self.details_page)
self.set_focus(self.details_view_play_button)
self.set_details_view_opacity()
def set_details_view_opacity(self, *_args: Any) -> None:
- if self.stack.get_visible_child() != self.details_view:
+ if self.navigation_view.get_visible_page() != self.details_page:
return
if (
@@ -258,46 +418,30 @@ class CartridgesWindow(Adw.ApplicationWindow):
).lower()
if var != "name" and get_value(0) == get_value(1):
- var, order = "name", True
+ var, order = "name", False
return ((get_value(0) > get_value(1)) ^ order) * 2 - 1
- def navigate(self, next_page: Gtk.Widget) -> None:
- levels = (self.library_view, self.hidden_library_view, self.details_view)
- self.stack.set_transition_type(
- Gtk.StackTransitionType.UNDER_RIGHT
- if levels.index(self.stack.get_visible_child()) - levels.index(next_page)
- > 0
- else Gtk.StackTransitionType.OVER_LEFT
+ def set_show_hidden(self, navigation_view: Adw.NavigationView, *_args: Any) -> None:
+ self.lookup_action("show_hidden").set_enabled(
+ navigation_view.get_visible_page() == self.library_page
)
- if next_page in (self.library_view, self.hidden_library_view):
- self.previous_page = next_page
- self.lookup_action("show_hidden").set_enabled(
- next_page == self.library_view
- )
-
- self.stack.set_visible_child(next_page)
-
- def on_go_back_action(self, *_args: Any) -> None:
- if self.stack.get_visible_child() == self.hidden_library_view:
- self.navigate(self.library_view)
- elif self.stack.get_visible_child() == self.details_view:
- self.on_go_to_parent_action()
+ def on_show_sidebar_action(self, *_args: Any) -> None:
+ shared.state_schema.set_boolean(
+ "show-sidebar", (value := not self.overlay_split_view.get_show_sidebar())
+ )
+ self.overlay_split_view.set_show_sidebar(value)
def on_go_to_parent_action(self, *_args: Any) -> None:
- if self.stack.get_visible_child() == self.details_view:
- self.navigate(
- self.hidden_library_view
- if self.previous_page == self.hidden_library_view
- else self.library_view
- )
+ if self.navigation_view.get_visible_page() == self.details_page:
+ self.navigation_view.pop()
def on_go_home_action(self, *_args: Any) -> None:
- self.navigate(self.library_view)
+ self.navigation_view.pop_to_page(self.library_page)
def on_show_hidden_action(self, *_args: Any) -> None:
- self.navigate(self.hidden_library_view)
+ self.navigation_view.push(self.hidden_library_page)
def on_sort_action(self, action: Gio.SimpleAction, state: GLib.Variant) -> None:
action.set_state(state)
@@ -307,10 +451,10 @@ class CartridgesWindow(Adw.ApplicationWindow):
shared.state_schema.set_string("sort-mode", self.sort_state)
def on_toggle_search_action(self, *_args: Any) -> None:
- if self.stack.get_visible_child() == self.library_view:
+ if self.navigation_view.get_visible_page() == self.library_page:
search_bar = self.search_bar
search_entry = self.search_entry
- elif self.stack.get_visible_child() == self.hidden_library_view:
+ elif self.navigation_view.get_visible_page() == self.hidden_library_page:
search_bar = self.hidden_search_bar
search_entry = self.hidden_search_entry
else:
@@ -330,9 +474,9 @@ class CartridgesWindow(Adw.ApplicationWindow):
):
self.on_toggle_search_action()
else:
- self.on_go_back_action()
+ self.navigation_view.pop()
- def show_details_view_search(self, widget: Gtk.Widget) -> None:
+ def show_details_page_search(self, widget: Gtk.Widget) -> None:
library = (
self.hidden_library if widget == self.hidden_search_entry else self.library
)
@@ -343,7 +487,7 @@ class CartridgesWindow(Adw.ApplicationWindow):
break
if self.filter_func(child):
- self.show_details_view(child.get_child())
+ self.show_details_page(child.get_child())
break
index += 1
@@ -377,9 +521,9 @@ class CartridgesWindow(Adw.ApplicationWindow):
self.toasts.pop((game, undo))
def on_open_menu_action(self, *_args: Any) -> None:
- if self.stack.get_visible_child() == self.library_view:
+ if self.navigation_view.get_visible_page() == self.library_page:
self.primary_menu_button.popup()
- elif self.stack.get_visible_child() == self.hidden_library_view:
+ elif self.navigation_view.get_visible_page() == self.hidden_library_page:
self.hidden_primary_menu_button.popup()
def on_close_action(self, *_args: Any) -> None:
diff --git a/subprojects/blueprint-compiler.wrap b/subprojects/blueprint-compiler.wrap
index 0dbd898..521d368 100644
--- a/subprojects/blueprint-compiler.wrap
+++ b/subprojects/blueprint-compiler.wrap
@@ -1,7 +1,7 @@
[wrap-git]
directory = blueprint-compiler
url = https://gitlab.gnome.org/jwestman/blueprint-compiler.git
-revision = v0.8.1
+revision = v0.10.0
depth = 1
[provide]