From f257d4c78e4960cc95c37f24b4f65c0386b490af Mon Sep 17 00:00:00 2001 From: Christian Moser Date: Thu, 13 Mar 2025 17:56:08 +0100 Subject: [PATCH] fixed EpicGames --- sgbackup/game.py | 21 +++++++------- sgbackup/gui/_epic.py | 55 +++++++++++++++++++++++++++++++++---- sgbackup/gui/_gamedialog.py | 14 ++++++---- 3 files changed, 69 insertions(+), 21 deletions(-) diff --git a/sgbackup/game.py b/sgbackup/game.py index 1e4bfb1..4436651 100644 --- a/sgbackup/game.py +++ b/sgbackup/game.py @@ -1192,11 +1192,11 @@ class EpicWindowsData(EpicPlatformData): def __init__(self, savegame_root:str, savegame_dir:str, - variables:dict[str:str], - file_match:list[GameFileMatcher], - ignore_match:list[GameFileMatcher], - installdir:str|None): - GameData.__init__(self, + variables:dict[str:str]|None=None, + file_match:list[GameFileMatcher]|None=None, + ignore_match:list[GameFileMatcher]|None=None, + installdir:str|None=None): + EpicPlatformData.__init__(self, savegame_type=SavegameType.EPIC_WINDOWS, savegame_root=savegame_root, savegame_dir=savegame_dir, @@ -1295,8 +1295,8 @@ class Game(GObject): savegame_root=data['savegame_root'], savegame_dir=data['savegame_dir'], variables=dict(((v['name'],v['value']) for v in data['variables'])) if ('variables' in data and config['variables']) else None, - file_match=file_match, - ignore_match=ignore_match, + file_match=file_match if 'file_match' in data else None, + ignore_match=ignore_match if 'ignore_match' in data else None, installdir=data['installdir'] if ('installdir' in data and data['installdir']) else None, librarydir=data['librarydir'] if ('librarydir' in data and data['librarydir']) else None ) @@ -1340,10 +1340,9 @@ class Game(GObject): savegame_root=data['savegame_root'], savegame_dir=data['savegame_dir'], variables=dict(((v['name'],v['value']) for v in data['variables'])) if ('variables' in data and config['variables']) else None, - file_match=file_match, - ignore_match=ignore_match, - installdir=data['installdir'] if ('installdir' in data and data['installdir']) else None, - librarydir=data['librarydir'] if ('librarydir' in data and data['librarydir']) else None + file_match=file_match if 'file_match' in data else None , + ignore_match=ignore_match if 'ignore_match' in data else None, + installdir=data['installdir'] if ('installdir' in data and data['installdir']) else None ) if not "epic" in conf: diff --git a/sgbackup/gui/_epic.py b/sgbackup/gui/_epic.py index f40fb89..d2de8d6 100644 --- a/sgbackup/gui/_epic.py +++ b/sgbackup/gui/_epic.py @@ -22,10 +22,50 @@ from gi.repository.GObject import GObject,Property,Signal,SignalFlags from ..i18n import gettext as _,gettext_noop as N_ from ..game import GameManager,Game,EpicGameData,EpicWindowsData from ..epic import Epic,EpicGameInfo,EpicIgnoredApp +from ._gamedialog import GameSearchDialog from ..utility import PLATFORM_WINDOWS from ._gamedialog import GameDialog +class EpicLookupGamesDialog(GameSearchDialog): + def __init__(self,parent:Gtk.Window|None=None,info:EpicGameInfo|None=None): + GameSearchDialog.__init__(self,parent,info.name if info else None) + self.__gameinfo = info + + @Property + def gameinfo(self)->EpicGameInfo|None: + return self.__gameinfo + + @gameinfo.setter + def gameinfo(self,info:EpicGameInfo|None): + if info: + self.search_name = info.name + else: + self.search_name = None + self.__gameinfo = info + + def do_prepare_game(self,game:Game): + game = super().do_prepare_game(game) + if self.gameinfo: + if game.epic: + game.epic.catalog_item_id = self.gameinfo.catalog_item_id + else: + game.epic = EpicGameData(self.gameinfo.catalog_item_id) + if PLATFORM_WINDOWS: + if not game.epic.windows: + game.epic.windows = EpicWindowsData("","",installdir=self.gameinfo.installdir) + else: + game.epic.windows.installdir = self.gameinfo.installdir + else: + if not game.epic: + game.epic = EpicGameData() + if PLATFORM_WINDOWS and not game.epic.windows: + game.epic.windows = EpicWindowsData("","") + + return game + +### EpicNewGamesDialog ######################################################## + class EpicNewAppsDialogSorter(Gtk.Sorter): def do_compare(self,item1:EpicGameInfo,item2:EpicGameInfo): name1 = item1.name.lower() @@ -152,7 +192,6 @@ class EpicNewAppsDialog(Gtk.Dialog): child.lookup_button._signal_clicked_connector = child.lookup_button.connect('clicked', self._on_listview_lookup_button_clicked, data) - child.lookup_button.set_sensitive(False) if hasattr(child.online_button,'_signal_clicked_connector'): child.online_button.disconnect(child.online_button._signal_clicked_connector) @@ -215,10 +254,9 @@ class EpicNewAppsDialog(Gtk.Dialog): dialog.connect('response',self._on_ignore_dialog_response,info) dialog.present() - - def _on_listview_lookup_button_clicked(self,button:Gtk.Button,info:EpicGameInfo): - pass + dialog = EpicLookupGamesDialog(parent=self,info=info) + dialog.present() def _on_listview_online_button_clicked(self,button:Gtk.Button,info:EpicGameInfo): pass @@ -226,4 +264,11 @@ class EpicNewAppsDialog(Gtk.Dialog): def do_response(self,response): self.hide() self.destroy() - \ No newline at end of file + + def refresh(self): + epic = Epic() + self.__liststore.remove_all() + + for gameinfo in epic.find_new_apps(): + self.__liststore.append(gameinfo) + diff --git a/sgbackup/gui/_gamedialog.py b/sgbackup/gui/_gamedialog.py index c145bdf..1702560 100644 --- a/sgbackup/gui/_gamedialog.py +++ b/sgbackup/gui/_gamedialog.py @@ -759,7 +759,7 @@ class GameDialog(Gtk.Dialog): page.catalogitemid_entry = Gtk.Entry() page.catalogitemid_entry.set_hexpand(True) grid.attach(label,0,0,1,1) - grid.attach(page.appname_entry,1,0,1,1) + grid.attach(page.catalogitemid_entry,1,0,1,1) page.append(grid) page.notebook = Gtk.Notebook() @@ -1071,6 +1071,7 @@ class GameDialog(Gtk.Dialog): def get_epic_data(widget): conf = get_game_data(widget) conf.update({'installdir':widget.installdir_entry.get_text()}) + return conf if not self.get_is_valid(): return @@ -1569,6 +1570,7 @@ class GameSearchDialog(Gtk.Dialog): if parent: self.set_transient_for(parent) + self.set_default_size(640,500) self.search_name = search_name self.__actionbar = Gtk.ActionBar() @@ -1605,7 +1607,9 @@ class GameSearchDialog(Gtk.Dialog): factory.connect('bind',self._on_listview_bind) self.__listview = Gtk.ListView(model=selection,factory=factory) + self.__listview.set_vexpand(True) scrolled.set_child(self.__listview) + scrolled.set_vexpand(True) self.get_content_area().append(scrolled) @@ -1728,16 +1732,16 @@ class GameSearchDialog(Gtk.Dialog): parent.refresh() try: - game = self.do_prepare_game() + game = self.do_prepare_game(game) except Exception as ex: dialog = Gtk.MessageDialog( - message=_("Unable to edit game {}!".format(GLib.markup_escape_text(game.name))), + text=_("Unable to edit game {}!".format(GLib.markup_escape_text(game.name))), use_markup=True, - secondary_message=str(ex), + secondary_text=str(ex), secondary_use_markup=False, transient_for=self.get_transient_for(), parent=self.get_transient_for(), - buttons=Gtk.Buttons.OK + buttons=Gtk.ButtonsType.OK ) dialog.connect('response',lambda dialog,response: dialog.destroy()) dialog.present()