From be71bf80d290c98c0f6a66d3dcab28515b4ea371 Mon Sep 17 00:00:00 2001 From: Lucas Fryzek Date: Fri, 4 Oct 2024 20:53:17 +0100 Subject: Initial commit --- src/preferences.py | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/preferences.py (limited to 'src/preferences.py') diff --git a/src/preferences.py b/src/preferences.py new file mode 100644 index 0000000..d864012 --- /dev/null +++ b/src/preferences.py @@ -0,0 +1,90 @@ +# window.py +# +# Copyright 2024 Lucas Fryzek +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# SPDX-License-Identifier: GPL-3.0-or-later +from gi.repository import Adw +from gi.repository import Gtk +from gi.repository import GLib + +from weegtk import config + +import os + +@Gtk.Template(resource_path='/com/fryzekconcepts/weegtk/gtk/preferences.ui') +class WeegtkPreferences(Adw.PreferencesDialog): + __gtype_name__ = 'WeegtkPreferences' + + hostname = Gtk.Template.Child() + port = Gtk.Template.Child() + password = Gtk.Template.Child() + + ssh_host = Gtk.Template.Child() + ssh_port = Gtk.Template.Child() + ssh_username = Gtk.Template.Child() + ssh_key_label = Gtk.Template.Child() + + ssh_key_path = "" + + def __init__(self, **kwargs): + super().__init__(**kwargs) + + self.config = config.read() + + self.hostname.set_text(self.config["relay"]["hostname"]) + self.port.set_text(self.config["relay"]["port"]) + self.password.set_text(self.config["relay"]["password"]) + + self.ssh_host.set_text(self.config["ssh"]["host"]) + self.ssh_port.set_text(self.config["ssh"]["port"]) + self.ssh_username.set_text(self.config["ssh"]["username"]) + self.set_ssh_key(self.config["ssh"]["key"]) + + self.install_action("ssh_key.open", None, self.ssh_key_open) + + def read_preferences(self): + self.config["relay"]["hostname"] = self.hostname.get_text() + self.config["relay"]["port"] = self.port.get_text() + self.config["relay"]["password"] = self.password.get_text() + + self.config["ssh"]["host"] = self.ssh_host.get_text() + self.config["ssh"]["port"] = self.ssh_port.get_text() + self.config["ssh"]["username"] = self.ssh_username.get_text() + self.config["ssh"]["key"] = self.ssh_key_path + + def set_ssh_key(self, key_path): + self.ssh_key_path = key_path + short_name = os.path.basename(key_path) + self.ssh_key_label.set_label(short_name) + + def ssh_key_open_dialog(self, dialog, result, caller): + try: + file = dialog.open_finish(result) + except GLib.GError: + # gtk-dialog-error-quark: Dismissed by user + pass + else: + self.set_ssh_key(file.get_path()) + + def ssh_key_open(self, *args): + dialog = Gtk.FileDialog() + dialog.set_title("Select SSH private key") + dialog.open(self.get_root(), None, self.ssh_key_open_dialog, self) + + @Gtk.Template.Callback() + def preferences_closed(self, *args): + self.read_preferences() + config.write(self.config) -- cgit