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