More remotes work

This commit is contained in:
heliguy
2024-07-21 17:03:14 -04:00
parent 0689db51d9
commit 66b5cec7b1
3 changed files with 76 additions and 14 deletions

View File

@@ -24,7 +24,7 @@ class RemoteRow(Adw.ActionRow):
HostInfo.clipboard.set(self.get_subtitle())
self.parent_page.toast_overlay.add_toast(Adw.Toast(title=_("Copied name")))
elif row is self.remove:
print("remove")
self.parent_page.remove_remote(self)
self.menu_pop.popdown()
def idle_stuff(self):

View File

@@ -16,16 +16,6 @@ template $RemotesPage : Adw.NavigationPage {
icon-name: "loupe-large-symbolic";
tooltip-text: _("Search Packages");
}
[end]
Button {
tooltip-text: _("Add Remote from File");
sensitive: false;
Adw.ButtonContent {
can-shrink: true;
icon-name: "folder-open-symbolic";
label: _("Open");
}
}
}
[top]
Adw.Clamp {
@@ -65,9 +55,32 @@ template $RemotesPage : Adw.NavigationPage {
description: _("Remotes available on your system");
}
Adw.PreferencesGroup new_remotes_group {
title: _("Add Remotes");
title: _("Add Popular Remotes");
description: _("Add new remotes to get more software");
}
Adw.PreferencesGroup other_remotes {
title: _("Add Other Remotes");
Adw.ActionRow file_remote_row {
activatable: true;
sensitive: false;
title: _("Add a Repo File");
subtitle: _("Open a downloaded repo file to add");
[suffix]
Image {
icon-name: "plus-large-symbolic";
}
}
Adw.ActionRow custom_remote_row {
activatable: true;
sensitive: false;
title: _("Add a Custom Remote");
subtitle: _("Manually enter new remote details");
[suffix]
Image {
icon-name: "plus-large-symbolic";
}
}
}
}
}
}

View File

@@ -17,7 +17,6 @@ class NewRemoteRow(Adw.ActionRow):
self.info = info
GLib.idle_add(self.idle_stuff)
self.set_activatable(True)
self.connect("activated", lambda *_: print(info["name"]))
@Gtk.Template(resource_path="/io/github/flattool/Warehouse/remotes_page/remotes_page.ui")
class RemotesPage(Adw.NavigationPage):
@@ -111,7 +110,7 @@ class RemotesPage(Adw.NavigationPage):
self.current_remotes_group.add(row)
self.current_remote_rows.append(row)
self.stack.set_visible_child(self.content_page)
GLib.idle_add(lambda *_: self.stack.set_visible_child(self.content_page))
def filter_remote(self, row):
self.filter_setting.set_boolean("show-apps", True)
@@ -122,6 +121,55 @@ class RemotesPage(Adw.NavigationPage):
packages_page.filters_page.generate_filters()
packages_page.apply_filters()
GLib.idle_add(lambda *_: self.main_window.activate_row(self.main_window.packages_row))
def remove_remote(self, row):
error = [None]
def thread(*args):
install = row.installation
cmd = ['flatpak-spawn', '--host', 'flatpak', 'remote-delete', row.remote.name, '-y']
if install == "user" or install == "system":
cmd.append(f"--{install}")
else:
cmd.append(f"--installation={install}")
print(cmd)
def on_response(_, response):
if response != "continue":
return
thread()
dialog = Adw.AlertDialog(heading=_("Remove {}?").format(row.remote.title), body=_("Any installed apps from {} will stop receiving updates").format(row.remote.name))
dialog.add_response("cancel", _("Cancel"))
dialog.add_response("continue", _("Remove"))
dialog.set_response_appearance("continue", Adw.ResponseAppearance.DESTRUCTIVE)
dialog.connect("response", on_response)
dialog.present(self.main_window)
def add_remote(self, name, url_or_path, formatted_installation, title=None):
error = [None]
cmd = ['flatpak-spawn', '--host', 'flatpak', 'remote-add', name, url_or_path, formatted_installation]
if title:
cmd.append(title)
def thread(*args):
try:
subprocess.run(cmd, check=True, capture_output=True, text=True)
except subprocess.CalledProcessError as cpe:
error[0] = cpe.stderr
except Exception as e:
error[0] = e
def callback(*args):
if error[0]:
self.toast_overlay.add_toast(ErrorToast(_("Could not add remote"), str(error[0])).toast)
else:
self.toast_overlay.add_toast(Adw.Toast(title=_("Added {}").format(title if title else name)))
self.start_loading()
self.end_loading()
Gio.Task.new(None, None, callback).run_in_thread(thread)
def __init__(self, main_window, **kwargs):
super().__init__(**kwargs)
@@ -141,4 +189,5 @@ class RemotesPage(Adw.NavigationPage):
# Apply
for item in self.new_remotes:
row = NewRemoteRow(item)
# row.connect("activated", lambda *_, row=row: self.add_remote())
self.new_remotes_group.add(row)