2025.03.02 23:45:14 (desktop)

This commit is contained in:
Christian Moser 2025-03-02 23:45:14 +01:00
parent 67e0aa6db0
commit a7011df3d5
Failed to extract signature
4 changed files with 494 additions and 200 deletions

View File

@ -927,7 +927,207 @@ class SteamMacOSGame(SteamGame):
file_match,
ignore_match)
class SteamPlatformData(GameData):
def __init__(self,
savegame_type:SavegameType,
savegame_root:str,
savegame_dir:str,
variables:dict|None=None,
file_match:str|None=None,
ignore_match:str|None=None,
installdir:str|None=None,
librarydir:str|None=None):
if savegame_type not in (SavegameType.STEAM_WINDOWS,
SavegameType.STEAM_LINUX,
SavegameType.STEAM_MACOS):
raise TypeError("\"savegame_type\" is not valid!")
GameData.__init__(self,
savegame_type=savegame_type,
savegame_root=savegame_root,
savegame_dir=savegame_dir,
variables=variables,
file_match=file_match,
ignore_match=ignore_match)
self.installdir = installdir
self.librarydir = librarydir
@Property(type=str)
def installdir(self)->str:
return self.__installdir if self.__installdir else ""
@installdir.setter
def installdir(self,installdir:str|None):
self.__installdir = installdir
@Property(type=str)
def librarydir(self)->str:
return self.__librarydir if self.__librarydir else ""
@librarydir.setter
def librarydir(self,steam_libdir:str|None):
self.__librarydir = steam_libdir
def serialize(self)->dict:
data = super().serialize()
if self.__installdir:
data['installdir'] = self.__installdir
if self.__librarydir:
data['librarydir'] = self.__librarydir
return data
class SteamWindowsData(SteamPlatformData):
def __init__(self,
savegame_root:str,
savegame_dir:str,
variables:dict|None=None,
file_match:str|None=None,
ignore_match:str|None=None,
installdir:str|None=None,
librarydir:str|None=None):
SteamPlatformData.__init__(self,
savegame_type=SavegameType.STEAM_WINDOWS,
savegame_root=savegame_root,
savegame_dir=savegame_dir,
variables=variables,
file_match=file_match,
ignore_match=ignore_match,
installdir=installdir,
librarydir=librarydir)
class SteamLinuxData(SteamPlatformData):
def __init__(self,
savegame_root:str,
savegame_dir:str,
variables:dict|None=None,
file_match:str|None=None,
ignore_match:str|None=None,
installdir:str|None=None,
librarydir:str|None=None):
SteamPlatformData.__init__(self,
savegame_type=SavegameType.STEAM_LINUX,
savegame_root=savegame_root,
savegame_dir=savegame_dir,
variables=variables,
file_match=file_match,
ignore_match=ignore_match,
installdir=installdir,
librarydir=librarydir)
class SteamMacOSData(SteamPlatformData):
def __init__(self,
savegame_root:str,
savegame_dir:str,
variables:dict|None=None,
file_match:str|None=None,
ignore_match:str|None=None,
installdir:str|None=None,
librarydir:str|None=None):
SteamPlatformData.__init__(self,
savegame_type=SavegameType.STEAM_MACOS,
savegame_root=savegame_root,
savegame_dir=savegame_dir,
variables=variables,
file_match=file_match,
ignore_match=ignore_match,
installdir=installdir,
librarydir=librarydir)
class SteamGameData(GObject):
def __init__(self,appid:int,
windows:SteamWindowsData|None=None,
linux:SteamLinuxData|None=None,
macos:SteamMacOSData|None=None):
GObject.__init__(self)
self.__appid = int(appid)
self.windows = windows
self.linux = linux
self.macos = macos
@Property(type=int)
def appid(self)->int:
return self.__appid
@appid.setter
def appid(self,appid:int):
return self.__appid
@property
def windows(self)->SteamWindowsData|None:
return self.__windows_data
@windows.setter
def windows(self,data:SteamWindowsData|None):
self.__windows_data = data
@property
def linux(self)->SteamLinuxData|None:
return self.__linux_data
@linux.setter
def linux(self,data:SteamLinuxData|None):
self.__linux_data = data
@property
def macos(self)->SteamMacOSData|None:
return self.__macos_data
@macos.setter
def macos(self,data:SteamMacOSData|None):
self.__macos_data = data
@property
def windows_game(self)->SteamWindowsGame|None:
if self.windows:
return SteamWindowsGame(appid=self.appid,
savegame_root=self.windows.savegame_root,
savegame_dir=self.windows.savegame_dir,
variables=self.windows.variables,
installdir=self.windows.installdir,
file_match=self.windows.file_matchers,
ignore_match=self.windows.ignore_matchers)
return None
@property
def linux_game(self)->SteamLinuxGame|None:
if self.linux:
return SteamLinuxGame(appid=self.appid,
savegame_root=self.windows.savegame_root,
savegame_dir=self.windows.savegame_dir,
variables=self.windows.variables,
installdir=self.windows.installdir,
file_match=self.windows.file_matchers,
ignore_match=self.windows.ignore_matchers)
return None
@property
def macos_game(self)->SteamLinuxGame|None:
if self.macos:
return SteamMacOSGame(appid=self.appid,
savegame_root=self.windows.savegame_root,
savegame_dir=self.windows.savegame_dir,
variables=self.windows.variables,
installdir=self.windows.installdir,
file_match=self.windows.file_matchers,
ignore_match=self.windows.ignore_matchers)
return None
def serialize(self)->dict:
data = {
'appid': self.appid,
}
if self.windows:
data['windows'] = self.windows.serialize()
if self.linux:
data['linux'] = self.linux.serialize()
if self.macos:
data['macos'] = self.macos.serialize()
return data
class Game(GObject):
__gtype_name__ = "Game"
@ -968,18 +1168,50 @@ class Game(GObject):
return (file_match,ignore_match)
def new_steam_game(conf,cls:SteamGame):
appid = conf['appid'] if 'appid' in conf else ""
sgroot = conf['savegame_root'] if 'savegame_root' in conf else ""
sgdir = conf['savegame_dir'] if 'savegame_dir' in conf else ""
vars = conf['variables'] if 'variables' in conf else {}
installdir = conf['installdir'] if 'installdir' in conf else ""
file_match,ignore_match = get_file_match(conf)
def new_steamdata(conf)->SteamGameData|None:
def new_steam_platform_data(data:dict,cls:SteamPlatformData)->SteamPlatformData|None:
if not 'savegame_root' in data or not 'savegame_dir' in data:
return None
if appid is not None and sgroot and sgdir:
cls(appid,sgroot,sgdir,vars,installdir,file_match,ignore_match)
return cls(appid,sgroot,sgdir,vars,installdir,file_match,ignore_match)
# new_steam_game()
file_match,ignore_match = get_file_match(data)
return cls(
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
)
if ('steam' not in conf or not 'appid' in conf['steam']):
return None
steam=conf['steam']
if 'windows' in steam:
windows = new_steam_platform_data(steam['windows'],SteamWindowsData)
else:
windows = None
if 'linux' in steam:
linux = new_steam_platform_data(steam['linux'],SteamLinuxData)
else:
linux = None
if 'macos' in steam:
macos = new_steam_platform_data(steam['macos'],SteamMacOSData)
else:
macos = None
if windows is None and linux is None and macos is None:
return None
return SteamGameData(steam['appid'],
windows=windows,
linux=linux,
macos=macos)
# new_steamdata()
if not 'key' in config or not 'name' in config:
return None
@ -1034,12 +1266,7 @@ class Game(GObject):
file_match,ignore_match = get_file_match(macconf)
game.macos = MacOSGame(sgroot,sgdir,vars,binary,file_match,ignore_match)
if 'steam_windows' in config:
game.steam_windows = new_steam_game(config['steam_windows'],SteamWindowsGame)
if 'steam_linux' in config:
game.steam_linux = new_steam_game(config['steam_linux'],SteamLinuxGame)
if 'steam_macos' in config:
game.steam_macos = new_steam_game(config['steam_macos'],SteamMacOSGame)
game.steam = new_steamdata(config)
return game
@ -1070,6 +1297,9 @@ class Game(GObject):
self.__windows = None
self.__linux = None
self.__macos = None
self.__steam = None
self.__epic = None
self.__gog = None
self.__steam_windows = None
self.__steam_linux = None
self.__steam_macos = None
@ -1175,11 +1405,11 @@ class Game(GObject):
elif (sgtype == SavegameType.MACOS):
return self.macos
elif (sgtype == SavegameType.STEAM_WINDOWS):
return self.steam_windows
return self.steam.windows_game
elif (sgtype == SavegameType.STEAM_LINUX):
return self.steam_linux
return self.steam.linux_game
elif (sgtype == SavegameType.STEAM_MACOS):
return self.steam_macos
return self.steam.macos_game
elif (sgtype == SavegameType.GOG_WINDOWS):
return self.__gog_windows
elif (sgtype == SavegameType.GOG_LINUX):
@ -1226,41 +1456,39 @@ class Game(GObject):
raise TypeError("MacOSGame")
self.__macos = data
@Property
def steam(self)->SteamGameData|None:
return self.__steam
@steam.setter
def steam(self,steam_data:SteamGameData|None):
if (not steam_data):
self.__steam = steam_data
return
if (not isinstance(steam_data,SteamGameData)):
raise TypeError("\"steam\" is not \"None\" or a \"SteamGameData\" instance!")
self.__steam = steam_data
@Property
def steam_windows(self)->SteamWindowsGame|None:
return self.__steam_windows
@steam_windows.setter
def steam_windows(self,data:SteamWindowsGame|None):
if not data:
self.__steam_windows = None
else:
if not isinstance(data,SteamWindowsGame):
raise TypeError("SteamWindowsGame")
self.__steam_windows = data
if self.steam:
return self.steam.windows_game
return None
@Property
def steam_linux(self)->SteamLinuxGame|None:
return self.__steam_linux
@steam_linux.setter
def steam_linux(self,data:SteamLinuxGame|None):
if not data:
self.__steam_linux = None
else:
if not isinstance(data,SteamLinuxGame):
raise TypeError("SteamLinuxGame")
self.__steam_linux = data
if self.steam:
return self.steam.linux_game
return None
@Property
def steam_macos(self)->SteamMacOSGame|None:
return self.__steam_macos
@steam_macos.setter
def steam_macos(self,data:SteamMacOSGame|None):
if not data:
self.__steam_macos = None
else:
if not isinstance(data,SteamMacOSGame):
raise TypeError("SteamMacOSGame")
self.__steam_macos = data
if self.steam:
return self.steam.macos_game
return None
@Property
def savegame_root(self)->str|None:
@ -1315,12 +1543,9 @@ class Game(GObject):
ret['linux'] = self.linux.serialize()
if (self.macos):
ret['macos'] = self.macos.serialize()
if (self.steam_windows):
ret['steam_windows'] = self.steam_windows.serialize()
if (self.steam_linux):
ret['steam_linux'] = self.steam_linux.serialize()
if (self.steam_macos):
ret['steam_macos'] = self.steam_macos.serialize()
if (self.steam):
ret['steam'] = self.steam.serialize()
#if self.gog_windows:
# ret['gog_windows'] = self.gog_windows.serialize()
#if self.gog_linux:

View File

@ -33,6 +33,10 @@ from ..game import (
SteamLinuxGame,
SteamWindowsGame,
SteamMacOSGame,
SteamGameData,
SteamLinuxData,
SteamMacOSData,
SteamWindowsData,
GameManager,
)
@ -355,9 +359,7 @@ class GameDialog(Gtk.Dialog):
self.__windows = self.__create_windows_page()
self.__linux = self.__create_linux_page()
self.__macos = self.__create_macos_page()
self.__steam_windows = self.__create_steam_page('steam-windows','Steam Windows')
self.__steam_linux = self.__create_steam_page('steam-linux','Steam Linux')
self.__steam_macos = self.__create_steam_page('steam-macos','Steam MacOS')
self.__steam = self.__create_steam_page()
for stack_page in self.__stack.get_pages():
@ -615,51 +617,81 @@ class GameDialog(Gtk.Dialog):
return page
def __create_steam_page(self,name,title):
page = Gtk.ScrolledWindow()
vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL,2)
self.__set_widget_margin(vbox,5)
def __create_steam_page(self):
def create_notebook_page(title,icon_name):
label_widget = Gtk.Box.new(Gtk.Orientation.HORIZONTAL,2)
label_icon = Gtk.Image.new_from_icon_name(icon_name)
label_icon.set_pixel_size(12)
label=Gtk.Label.new(title)
label_widget.append(label_icon)
label_widget.append(label)
nbpage = Gtk.ScrolledWindow()
nbvbox = Gtk.Box.new(Gtk.Orientation.VERTICAL,5)
nbgrid = Gtk.Grid()
self.__set_widget_margin(nbgrid,5)
label = Gtk.Label.new("Root directory:")
nbpage.sgroot_entry = Gtk.Entry()
nbpage.sgroot_entry.set_hexpand(True)
nbpage.sgroot_entry.connect('changed',lambda w: self._on_savegame_type_changed())
nbgrid.attach(label,0,0,1,1)
nbgrid.attach(nbpage.sgroot_entry,1,0,1,1)
label = Gtk.Label.new("Backup directory:")
nbpage.sgdir_entry = Gtk.Entry()
nbpage.sgdir_entry.set_hexpand(True)
nbpage.sgdir_entry.connect('changed',lambda w: self._on_savegame_type_changed())
nbgrid.attach(label,0,1,1,1)
nbgrid.attach(nbpage.sgdir_entry,1,1,1,1)
label = Gtk.Label.new("Installation directory:")
nbpage.installdir_entry = Gtk.Entry()
nbpage.installdir_entry.set_hexpand(True)
nbgrid.attach(label,0,3,1,1)
nbgrid.attach(nbpage.installdir_entry,1,3,1,1)
nbvbox.append(nbgrid)
nbpage.filematch = self.__create_filematch_widget('Match Files')
nbvbox.append(nbpage.filematch)
nbpage.ignorematch = self.__create_filematch_widget('Ignore Files')
nbvbox.append(nbpage.ignorematch)
nbpage.variables = self.__create_variables_widget()
nbvbox.append(nbpage.variables)
nbpage.set_child(nbvbox)
return nbpage,label_widget
# create_notebook_page()
page = Gtk.Box.new(Gtk.Orientation.VERTICAL,2)
grid = Gtk.Grid()
self.__set_widget_margin(grid,5)
label = Gtk.Label.new("App ID:")
page.appid_entry = Gtk.Entry()
page.appid_entry.set_hexpand(True)
grid.attach(label,0,0,1,1)
grid.attach(page.appid_entry,1,0,1,1)
label = Gtk.Label.new("Root directory:")
page.sgroot_entry = Gtk.Entry()
page.sgroot_entry.set_hexpand(True)
page.sgroot_entry.connect('changed',lambda w: self._on_savegame_type_changed())
grid.attach(label,0,1,1,1)
grid.attach(page.sgroot_entry,1,1,1,1)
page.append(grid)
page.notebook = Gtk.Notebook()
page.notebook.set_hexpand(True)
page.notebook.set_vexpand(True)
page.windows,nb_label = create_notebook_page('Windows','windows-svgrepo-com-symbolic')
page.notebook.append_page(page.windows,nb_label)
label = Gtk.Label.new("Backup directory:")
page.sgdir_entry = Gtk.Entry()
page.sgdir_entry.set_hexpand(True)
page.sgdir_entry.connect('changed',lambda w: self._on_savegame_type_changed())
grid.attach(label,0,2,1,1)
grid.attach(page.sgdir_entry,1,2,1,1)
page.linux,nb_label = create_notebook_page("Linux",'linux-svgrepo-com-symbolic')
page.notebook.append_page(page.linux,nb_label)
label = Gtk.Label.new("Installation directory:")
page.installdir_entry = Gtk.Entry()
page.installdir_entry.set_hexpand(True)
grid.attach(label,0,3,1,1)
grid.attach(page.installdir_entry,1,3,1,1)
vbox.append(grid)
page.macos,nb_label = create_notebook_page("Mac OS",'apple-svgrepo-com-symbolic')
page.notebook.append_page(page.macos,nb_label)
page.filematch = self.__create_filematch_widget('Match Files')
vbox.append(page.filematch)
page.ignorematch = self.__create_filematch_widget('Ignore Files')
vbox.append(page.ignorematch)
page.variables = self.__create_variables_widget()
vbox.append(page.variables)
page.set_child(vbox)
self.__stack.add_titled(page,name,title)
page.append(page.notebook)
self.__stack.add_titled(page,'steam','Steam')
stack_page = self.__stack.get_page(page)
stack_page.set_icon_name("steam-svgrepo-com-symbolic")
@ -869,36 +901,31 @@ class GameDialog(Gtk.Dialog):
set_game_widget_data(self.__macos,self.__game.macos if self.__game else None)
self.__macos.binary_entry.set_text(self.__game.macos.binary if self.has_game and self.__game.macos else "")
#steam windows
set_game_widget_data(self.__steam_windows,self.__game.steam_windows if self.has_game else None)
self.__steam_windows.appid_entry.set_text(str(self.__game.steam_windows.appid)
if self.has_game and self.__game.steam_windows else "")
self.__steam_windows.installdir_entry.set_text(self.__game.steam_windows.installdir
#steam
set_game_widget_data(self.__steam.windows,self.__game.steam.windows if self.has_game and self.__game.steam else None)
set_game_widget_data(self.__steam.linux,self.__game.steam.linux if self.has_game and self.__game.steam else None)
set_game_widget_data(self.__steam.macos,self.__game.steam.macos if self.has_game and self.__game.steam else None)
self.__steam.appid_entry.set_text(str(self.__game.steam.appid)
if self.has_game and self.__game.steam else "")
self.__steam.windows.installdir_entry.set_text(self.__game.steam.windows.installdir
if self.has_game
and self.__game.steam_windows
and self.__game.steam_windows.installdir
and self.__game.steam
and self.__game.steam.windows
and self.__game.steam.windows.installdir
else "")
#steam linux
set_game_widget_data(self.__steam_linux,self.__game.steam_linux if self.has_game else None)
self.__steam_linux.appid_entry.set_text(str(self.__game.steam_linux.appid)
if self.has_game and self.__game.steam_linux else "")
self.__steam_linux.installdir_entry.set_text(self.__game.steam_linux.installdir
self.__steam.linux.installdir_entry.set_text(self.__game.steam.linux.installdir
if self.has_game
and self.__game.steam_linux
and self.__game.steam_linux.installdir
and self.__game.steam
and self.__game.steam.linux
and self.__game.steam.linux.installdir
else "")
#steam macos
set_game_widget_data(self.__steam_macos,self.__game.steam_macos if self.has_game else None)
self.__steam_macos.appid_entry.set_text(str(self.__game.steam_macos.appid)
if self.has_game and self.__game.steam_macos else "")
self.__steam_macos.installdir_entry.set_text(self.__game.steam_macos.installdir
self.__steam.macos.installdir_entry.set_text(self.__game.steam.macos.installdir
if self.has_game
and self.__game.steam_macos
and self.__game.steam_macos.installdir
and self.__game.steam
and self.__game.steam.macos
and self.__game.steam.macos.installdir
else "")
# reset()
def save(self):
@ -937,7 +964,6 @@ class GameDialog(Gtk.Dialog):
def get_steam_data(widget):
conf = get_game_data(widget)
conf.update({
'appid': int(widget.appid_entry.get_text()),
'installdir': widget.installdir_entry.get_text(),
})
return conf
@ -1048,72 +1074,77 @@ class GameDialog(Gtk.Dialog):
elif self.__game.macos:
self.__game.macos = None
if self.get_is_valid_savegame_type(SavegameType.STEAM_WINDOWS):
data = get_steam_data(self.__steam_windows)
if self.__game.steam_windows:
sg = self.__game.steam_windows
sg.savegame_root = data['sgroot']
sg.savegame_dir = data['sgdir']
sg.variables = data['variables']
sg.file_matchers = data["filematch"]
sg.ignore_matchers = data['ignorematch']
sg.appid = data['appid']
sg.installdir = data['installdir']
if (self.get_is_valid_savegame_type(SavegameType.STEAM_WINDOWS)
or self.get_is_valid_savegame_type(SavegameType.STEAM_LINUX)
or self.get_is_valid_savegame_type(SavegameType.STEAM_MACOS)):
if self.__game.steam:
self.__game.steam.appid = int(self.__steam.appid_entry.get_text())
else:
self.__game.steam_windows = SteamWindowsGame(data['appid'],
data['sgroot'],
data['sgdir'],
data['variables'],
data['installdir'],
data['filematch'],
data['ignorematch'])
elif self.__steam_windows:
self.__steam_windows = None
self.__game.steam = SteamGameData(int(self.__steam.appid_entry.get_text()))
if self.get_is_valid_savegame_type(SavegameType.STEAM_LINUX):
data = get_steam_data(self.__steam_linux)
if self.__game.steam_linux:
sg = self.__game.steam_linux
sg.savegame_root = data['sgroot']
sg.savegame_dir = data['sgdir']
sg.variables = data['variables']
sg.file_matchers = data["filematch"]
sg.ignore_matchers = data['ignorematch']
sg.appid = data['appid']
sg.installdir = data['installdir']
else:
self.__game.steam_linux = SteamLinuxGame(data['appid'],
data['sgroot'],
data['sgdir'],
data['variables'],
data['installdir'],
data['filematch'],
data['ignorematch'])
elif self.__steam_linux:
self.__steam_linux = None
if self.get_is_valid_savegame_type(SavegameType.STEAM_MACOS):
data = get_steam_data(self.__steam_macos)
if self.__game.steam_macos:
sg = self.__game.steam_macos
sg.savegame_root = data['sgroot']
sg.savegame_dir = data['sgdir']
sg.variables = data['variables']
sg.file_matchers = data["filematch"]
sg.ignore_matchers = data['ignorematch']
sg.appid = data['appid']
sg.installdir = data['installdir']
else:
self.__game.steam_macos = SteamMacOSGame(data['appid'],
data['sgroot'],
data['sgdir'],
data['variables'],
data['installdir'],
data['filematch'],
data['ignorematch'])
elif self.__steam_macos:
self.__steam_macos = None
if self.get_is_valid_savegame_type(SavegameType.STEAM_WINDOWS):
data = get_steam_data(self.__steam.windows)
if self.__game.steam.windows:
g = self.__game.steam.windows
g.savegame_root = data['sgroot']
g.savegame_dir = data['sgdir']
g.variables = data['variables']
g.file_matchers = data["filematch"]
g.ignore_matchers = data['ignorematch']
g.installdir = data['installdir']
else:
self.__game.steam.windows = SteamWindowsData(savegame_root=data['sgroot'],
savegame_dir=data['sgdir'],
variables=data['variables'],
installdir=data['installdir'],
file_match=data['filematch'],
ignore_match=data['ignorematch'])
elif self.__game.steam.windows:
self.__game.steam.windows = None
if self.get_is_valid_savegame_type(SavegameType.STEAM_LINUX):
data = get_steam_data(self.__steam.linux)
if self.__game.steam_linux:
g = self.__game.steam.linux
g.savegame_root = data['sgroot']
g.savegame_dir = data['sgdir']
g.variables = data['variables']
g.file_matchers = data["filematch"]
g.ignore_matchers = data['ignorematch']
g.installdir = data['installdir']
else:
self.__game.steam_linux = SteamLinuxData(savegame_root=data['sgroot'],
savegame_dir=data['sgdir'],
variables=data['variables'],
installdir=data['installdir'],
file_match=data['filematch'],
ignore_match=data['ignorematch'])
elif self.__game.steam.linux:
self.__game.steam.linux = None
if self.get_is_valid_savegame_type(SavegameType.STEAM_MACOS):
data = get_steam_data(self.__steam_macos)
if self.__game.steam_macos:
g = self.__game.steam_macos
g.savegame_root = data['sgroot']
g.savegame_dir = data['sgdir']
g.variables = data['variables']
g.file_matchers = data["filematch"]
g.ignore_matchers = data['ignorematch']
g.installdir = data['installdir']
else:
self.__game.steam_macos = SteamMacOSData(savegame_root=data['sgroot'],
savegame_dir=data['sgdir'],
variables=data['variables'],
installdir=data['installdir'],
file_match=data['filematch'],
ignore_match=data['ignorematch'])
elif self.__game.steam.macos:
self.__game.steam.macos = None
# bEND: steam
self.__game.save()
GameManager.get_global().add_game(self.__game)
@ -1141,7 +1172,8 @@ class GameDialog(Gtk.Dialog):
"""
def check_is_valid(widget):
return (bool(widget.sgroot_entry.get_text()) and bool(widget.sgdir_entry.get_text()))
return (len(widget.sgroot_entry.get_text().strip()) > 0
and len(widget.sgdir_entry.get_text().strip()) > 0)
if sgtype == SavegameType.WINDOWS:
return check_is_valid(self.__windows)
@ -1150,11 +1182,11 @@ class GameDialog(Gtk.Dialog):
elif sgtype == SavegameType.MACOS:
return check_is_valid(self.__macos)
elif sgtype == SavegameType.STEAM_WINDOWS:
return check_is_valid(self.__steam_windows)
return check_is_valid(self.__steam.windows)
elif sgtype == SavegameType.STEAM_LINUX:
return check_is_valid(self.__steam_linux)
return check_is_valid(self.__steam.linux)
elif sgtype == SavegameType.STEAM_MACOS:
return check_is_valid(self.__steam_macos)
return check_is_valid(self.__steam.macos)
#elif sgtype == SavegameType.EPIC_WINDOWS:
# return check_is_valid(self.__epic_windows)
#elif sgtype == SavegameType.EPIC_LINUX:
@ -1247,8 +1279,6 @@ class GameDialog(Gtk.Dialog):
if not label.get_text():
label.grab_focus()
label.start_editing()
def _on_windows_regkey_setup(self,factory,item):
label = Gtk.EditableLabel()

View File

@ -249,20 +249,6 @@ class NewSteamAppsDialog(Gtk.Dialog):
grid.set_hexpand(True)
grid.set_column_spacing(5)
vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL,2)
icon = Gtk.Image.new_from_icon_name('list-add-symbolic')
grid.add_app_button = Gtk.Button()
grid.add_app_button.set_child(icon)
vbox.append(grid.add_app_button)
icon = Gtk.Image.new_from_icon_name('edit-delete-symbolic')
grid.ignore_app_button = Gtk.Button()
grid.ignore_app_button.set_child(icon)
vbox.append(grid.ignore_app_button)
grid.attach(vbox,3,0,1,3)
#label = Gtk.Label.new("Name:")
#label.set_xalign(0.0)
grid.name_label = Gtk.Label()
@ -287,8 +273,43 @@ class NewSteamAppsDialog(Gtk.Dialog):
grid.attach(label,0,2,1,1)
grid.attach(grid.installdir_label,1,2,1,1)
item.set_child(grid)
# Buttons
button_grid = Gtk.Grid()
button_grid.set_column_spacing(2)
button_grid.set_row_spacing(2)
icon = Gtk.Image.new_from_icon_name('list-add-symbolic')
icon.set_pixel_size(16)
grid.add_app_button = Gtk.Button()
grid.add_app_button.set_child(icon)
grid.add_app_button.set_tooltip_markup('Add SteamApp as new Game.')
button_grid.attach(grid.add_app_button,0,0,1,1)
icon = Gtk.Image.new_from_icon_name('edit-delete-symbolic')
icon.set_pixel_size(16)
grid.ignore_app_button = Gtk.Button()
grid.ignore_app_button.set_child(icon)
grid.ignore_app_button.set_tooltip_text('Add SteamApp to ignore list.')
button_grid.attach(grid.ignore_app_button,1,0,1,1)
icon = Gtk.Image.new_from_icon_name('edit-find-symbolic')
icon.set_pixel_size(16)
grid.lookup_button = Gtk.Button()
grid.lookup_button.set_child(icon)
grid.lookup_button.set_tooltip_text("Lookup SteamApp for already registered game.")
button_grid.attach(grid.lookup_button,0,1,1,1)
icon = Gtk.Image.new_from_icon_name('folder-download-symbolic')
icon.set_pixel_size(16)
grid.search_online_button = Gtk.Button()
grid.search_online_button.set_child(icon)
grid.search_online_button.set_tooltip_text("Lookup SteamApp online.")
button_grid.attach(grid.search_online_button,1,1,1,1)
grid.attach(button_grid,3,0,1,3)
item.set_child(grid)
def _on_listitem_bind(self,factory,item):
child = item.get_child()
data = item.get_item()
@ -310,6 +331,15 @@ class NewSteamAppsDialog(Gtk.Dialog):
child.ignore_app_button.disconnect(child.ignore_app_button._signal_clicked_connector)
child.ignore_app_button._signal_clicked_connector = child.ignore_app_button.connect('clicked',self._on_ignore_steamapp_button_clicked,data)
if hasattr(child.lookup_button,'_signal_clicked_connector'):
child.lookup_button.disconnect(child.lookup_button._signal_clicked_connector)
#child.lookup_button._signal_clicked_connector = child.lookup_button.connect('clicked',self._on_lookup_steamapp_button_clicked,data)
child.lookup_button.set_sensitive(False)
if hasattr(child.search_online_button,'_signal_clicked_connector'):
child.search_online_button.disconnect(child.search_online_button._signal_clicked_connector)
#child.search_button._signal_clicked_connector = child.search_online_button.connect('clicked',self._on_lookup_steamapp_button_clicked,data)
child.search_online_button.set_sensitive(False)
def _on_add_steamapp_button_clicked(self,button,data:SteamApp,*args):
def on_dialog_response(dialog,response):

View File

@ -447,7 +447,7 @@ class Settings(GObject.GObject):
self.set_string('cli','pager',value)
else:
self.remove_key('cli','pager')
def add_variable(self,name:str,value:str):
self.set_string('variables',name,value)
@ -470,6 +470,15 @@ class Settings(GObject.GObject):
"CONFIGDIR": GLib.get_user_config_dir(),
"CONFIG_DIR": GLib.get_user_config_dir(),
"STEAM_INSTALLPATH": self.steam_installpath,
"DESKTOP_DIR": GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DESKTOP),
"XDG_CONFIG_HOME": GLib.get_user_config_dir(),
"XDG_DESKTOP_DIR": GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DESKTOP),
"XDG_DOCUMENTS_DIR": GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DOCUMENTS),
"DOWNLOADS": GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DOWNLOAD),
"XDG_DOWLNLOAD_DIR": GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DOWNLOAD),
"XDG_PICTURES_DIR": GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_PICTURES),
"XDG_MUSIC_DIR": GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_MUSIC),
"XDG_DATA_DIR": GLib.get_user_data_dir(),
})
ret.update(self.variables)
return ret