2025.03.02 04:06:43 (desktop)

This commit is contained in:
Christian Moser 2025-03-02 04:06:43 +01:00
parent a9db15a3a5
commit f9f0e07ee3
Failed to extract signature
4 changed files with 90 additions and 6 deletions

View File

@ -16,8 +16,14 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
###############################################################################
import os,sys
from sgbackup import __version__ as VERSION
from ..settings import settings
from ..command import Command
from .. import commands
from gi.repository import GLib
from io import StringIO
from subprocess import run
import logging
logger = logging.getLogger(__name__)
@ -57,7 +63,7 @@ class SynopsisCommand(Command):
for i in argv:
try:
print(COMMANDS[i].get_synopsis())
print(commands.COMMANDS[i].get_synopsis())
except:
self.logger.error("No such command {command}".foramt(command=i))
error_code = 4
@ -65,10 +71,47 @@ class SynopsisCommand(Command):
return error_code
__synopsis = SynopsisCommand()
class HelpCommand(Command):
def __init__(self):
super().__init__('help','Help', 'Show help for commands.')
def get_synopsis(self):
return "sgbackup help [COMMAND]"
def get_sgbackup_help(self):
return commands.COMMANDS['synopsis'].get_sgbackup_synopsis()
def get_help(self):
return self.get_synopsis()
def execute(self,argv):
if (len(argv) < 1):
message = self.get_sgbackup_help()
else:
try:
message = commands.COMMANDS[argv[0]].get_help()
except:
logger.error("No such command \"{}\"!".format(argv[0]))
return 2
if (sys.stdout.isatty() and settings.cli_pager is not None):
r,w = os.pipe()
with os.fdopen(w,'w',encoding="utf-8") as wr_stdin:
wr_stdin.write(message)
with os.fdopen(r,'r') as rd_stdin:
proc = run([settings.cli_pager],stdin=rd_stdin,shell=True,encoding="utf-8")
return proc.returncode
print(message)
return 0
__synopsis = SynopsisCommand()
COMMANDS = {
'version':VersionCommand(),
'synopsis': __synopsis,
'usage': __synopsis
'usage': __synopsis,
'help': HelpCommand(),
}

View File

@ -398,12 +398,10 @@ class GameView(Gtk.Box):
for name,match,pos in result:
self._liststore.get_item(pos).fuzzy_match = match
print("-"*80)
self.__filter_model.set_filter(GameViewMatchFilter())
self.__sort_model.set_sorter(GameViewMatchSorter())
def _on_search_entry_icon_release(self,entry,icon_pos):
#TODO###############################################
if icon_pos == Gtk.EntryIconPosition.PRIMARY:
search_name=entry.get_text()
if len(search_name) == 0:
@ -417,7 +415,6 @@ class GameView(Gtk.Box):
self.__sort_model.set_sorter(self.columnview.get_sorter())
def _on_search_entry_changed(self,entry):
#TODO###############################################
search_name = entry.get_text()
if len(search_name) == 0:
self.__filter_model.set_filter(None)

View File

@ -267,6 +267,19 @@ class SettingsDialog(Gtk.Dialog):
gui_frame.set_child(gui_grid)
vbox.append(gui_frame)
### CLI Settings
cli_frame = self.create_frame("Command Line Interface")
cli_grid = self.create_grid()
label = self.create_label("Pager:")
page.cli_pager_entry = Gtk.Entry()
page.cli_pager_entry.set_hexpand(True)
page.cli_pager_entry.set_text(settings.cli_pager if settings.cli_pager else "")
cli_grid.attach(label,0,0,1,1)
cli_grid.attach(page.cli_pager_entry,1,0,1,1)
cli_frame.set_child(cli_grid)
vbox.append(cli_frame)
page.set_child(vbox)
self.add_page(page,"general","Generic settings")
return page

View File

@ -26,6 +26,7 @@ from threading import RLock
from .utility import sanitize_path
ZIPFILE_COMPRESSION_STR = {
zipfile.ZIP_STORED: "stored",
zipfile.ZIP_DEFLATED: "deflated",
@ -416,6 +417,36 @@ class Settings(GObject.GObject):
@steam_installpath.setter
def steam_installpath(self,path:str):
self.set_string('steam','installpath',path)
@GObject.Property
def cli_pager(self)->str:
pager = self.get_string('cli','pager',None)
if pager is None:
if PLATFORM_WINDOWS:
for prg in ['less.exe','more.com']:
pager = GLib.find_program_in_path(prg)
if pager is not None:
return pager
return ""
else:
for prg in ['less','more']:
pager = GLib.find_program_in_path(prg)
if pager is not None:
return pager
return None
return pager
@cli_pager.setter
def cli_pager(self,pager:str):
value = None
if not os.path.isabs(pager):
value = GLib.find_program_in_path(pager)
elif os.path.isfile(pager):
value = pager
if value is not None:
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)