mirror of
https://github.com/morgan9e/warehouse
synced 2026-04-15 00:34:42 +09:00
Merge manage remotes and popular remotes window
This commit is contained in:
@@ -1,59 +0,0 @@
|
||||
using Gtk 4.0;
|
||||
using Adw 1;
|
||||
|
||||
template PopularRemotesWindow: Adw.Window {
|
||||
default-width: 450;
|
||||
default-height: 530;
|
||||
title: "";
|
||||
|
||||
Adw.ToolbarView main_toolbar_view {
|
||||
[top]
|
||||
HeaderBar header_bar {}
|
||||
|
||||
content: Adw.ToastOverlay toast_overlay {
|
||||
vexpand: true;
|
||||
|
||||
Adw.StatusPage {
|
||||
valign: start;
|
||||
title: _("Add Remote");
|
||||
description: _("Choose from a list of popular remotes or add a new one.");
|
||||
|
||||
Adw.Clamp {
|
||||
Box {
|
||||
orientation: vertical;
|
||||
|
||||
ListBox list_of_remotes {
|
||||
hexpand: true;
|
||||
valign: start;
|
||||
selection-mode: none;
|
||||
|
||||
styles [
|
||||
"boxed-list"
|
||||
]
|
||||
}
|
||||
|
||||
ListBox custom_list {
|
||||
hexpand: true;
|
||||
valign: start;
|
||||
selection-mode: none;
|
||||
|
||||
styles [
|
||||
"boxed-list"
|
||||
]
|
||||
|
||||
Adw.ActionRow add_from_file {
|
||||
title: _("Add a Repo File");
|
||||
activatable: true;
|
||||
}
|
||||
|
||||
Adw.ActionRow custom_remote {
|
||||
title: _("Add a Custom Remote");
|
||||
activatable: true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -9,12 +9,6 @@ template RemotesWindow: Adw.Window {
|
||||
Adw.ToolbarView main_toolbar_view {
|
||||
[top]
|
||||
HeaderBar header_bar {
|
||||
Button add_button {
|
||||
Adw.ButtonContent {
|
||||
label: _("Add Remote");
|
||||
icon-name: "plus-large-symbolic";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
content: Adw.ToastOverlay toast_overlay {
|
||||
@@ -33,6 +27,7 @@ template RemotesWindow: Adw.Window {
|
||||
}
|
||||
Adw.PreferencesGroup popular_remotes_list {
|
||||
title: _("Add a Popular Remote");
|
||||
visible: false;
|
||||
}
|
||||
Adw.PreferencesGroup manual_remotes_list {
|
||||
title: _("Add Other Remotes");
|
||||
|
||||
@@ -8,7 +8,6 @@ blueprints = custom_target('blueprints',
|
||||
'../data/ui/window.blp',
|
||||
'../data/ui/orphans.blp',
|
||||
'../data/ui/filter.blp',
|
||||
'../data/ui/popular_remotes.blp',
|
||||
'../data/ui/remotes.blp',
|
||||
'../data/ui/downgrade.blp',
|
||||
'../data/ui/search_install.blp',
|
||||
@@ -57,7 +56,6 @@ warehouse_sources = [
|
||||
'main.py',
|
||||
'common.py',
|
||||
'window.py',
|
||||
'popular_remotes_window.py',
|
||||
'app_row_widget.py',
|
||||
'../data/style.css',
|
||||
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
from gi.repository import Gtk, Adw, GLib, Gdk, Gio
|
||||
from .common import myUtils
|
||||
import subprocess
|
||||
import os
|
||||
import pathlib
|
||||
import re
|
||||
|
||||
@Gtk.Template(resource_path="/io/github/flattool/Warehouse/../data/ui/popular_remotes.ui")
|
||||
class PopularRemotesWindow(Adw.Window):
|
||||
__gtype_name__ = "PopularRemotesWindow"
|
||||
|
||||
list_of_remotes = Gtk.Template.Child()
|
||||
custom_list = Gtk.Template.Child()
|
||||
toast_overlay = Gtk.Template.Child()
|
||||
add_from_file = Gtk.Template.Child()
|
||||
custom_remote = Gtk.Template.Child()
|
||||
|
||||
def key_handler(self, _a, event, _c, _d):
|
||||
if event == Gdk.KEY_Escape:
|
||||
self.close()
|
||||
|
||||
def file_callback(self, object, result):
|
||||
try:
|
||||
file = object.open_finish(result)
|
||||
self.parent_window.addRemoteFromFile(file.get_path())
|
||||
self.close()
|
||||
except GLib.GError:
|
||||
pass
|
||||
|
||||
def addFromFileHandler(self, widet):
|
||||
filter = Gtk.FileFilter(name=_("Flatpak Repos"))
|
||||
filter.add_suffix("flatpakrepo")
|
||||
filters = Gio.ListStore.new(Gtk.FileFilter)
|
||||
filters.append(filter)
|
||||
file_chooser = Gtk.FileDialog()
|
||||
file_chooser.set_filters(filters)
|
||||
file_chooser.set_default_filter(filter)
|
||||
file_chooser.open(self, None, self.file_callback)
|
||||
|
||||
def generate_list(self):
|
||||
self.host_remotes = self.my_utils.getHostRemotes()
|
||||
self.list_of_remotes.remove_all()
|
||||
host_remotes_names = []
|
||||
|
||||
for i in range(len(self.remotes)):
|
||||
remote_row = Adw.ActionRow(activatable=True)
|
||||
remote_row.set_title(self.remotes[i][0])
|
||||
remote_row.set_subtitle(self.remotes[i][3])
|
||||
remote_row.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic"))
|
||||
remote_row.connect("activated", self.parent_window.add_handler, self.remotes[i][1], self.remotes[i][2])
|
||||
remote_row.connect("activated", lambda *_: self.close())
|
||||
self.list_of_remotes.append(remote_row)
|
||||
|
||||
self.add_from_file.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic"))
|
||||
self.add_from_file.connect("activated", self.addFromFileHandler)
|
||||
#self.add_from_file.connect("activated", lambda *_: self.close())
|
||||
|
||||
self.custom_remote.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic"))
|
||||
self.custom_remote.connect("activated", self.parent_window.add_handler)
|
||||
self.custom_remote.connect("activated", lambda *_: self.close())
|
||||
|
||||
if not self.list_of_remotes.get_row_at_index(0):
|
||||
self.list_of_remotes.set_visible(False)
|
||||
|
||||
def __init__(self, parent_window, remotes, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.my_utils = myUtils(self)
|
||||
self.parent_window = parent_window
|
||||
self.set_size_request(260, 230)
|
||||
event_controller = Gtk.EventControllerKey()
|
||||
event_controller.connect("key-pressed", self.key_handler)
|
||||
self.add_controller(event_controller)
|
||||
self.remotes = remotes
|
||||
|
||||
self.new_env = dict( os.environ )
|
||||
self.new_env['LC_ALL'] = 'C'
|
||||
|
||||
self.set_modal(True)
|
||||
self.set_transient_for(parent_window)
|
||||
self.generate_list()
|
||||
@@ -1,6 +1,5 @@
|
||||
from gi.repository import Gtk, Adw, GLib, Gdk, Gio
|
||||
from .common import myUtils
|
||||
from .popular_remotes_window import PopularRemotesWindow
|
||||
import subprocess
|
||||
import os
|
||||
import re
|
||||
@@ -9,7 +8,6 @@ import re
|
||||
class RemotesWindow(Adw.Window):
|
||||
__gtype_name__ = "RemotesWindow"
|
||||
|
||||
add_button = Gtk.Template.Child()
|
||||
remotes_list = Gtk.Template.Child()
|
||||
stack = Gtk.Template.Child()
|
||||
main_group = Gtk.Template.Child()
|
||||
@@ -18,8 +16,12 @@ class RemotesWindow(Adw.Window):
|
||||
popular_remotes_list = Gtk.Template.Child()
|
||||
add_from_file = Gtk.Template.Child()
|
||||
custom_remote = Gtk.Template.Child()
|
||||
refresh = Gtk.Template.Child()
|
||||
# progress_bar = Gtk.Template.Child()
|
||||
|
||||
rows_in_list = []
|
||||
rows_in_popular_list = []
|
||||
|
||||
def key_handler(self, _a, event, _c, _d):
|
||||
if event == Gdk.KEY_Escape:
|
||||
self.close()
|
||||
@@ -68,6 +70,10 @@ class RemotesWindow(Adw.Window):
|
||||
def generate_list(self):
|
||||
self.host_remotes = self.my_utils.getHostRemotes()
|
||||
self.host_flatpaks = self.get_host_flatpaks()
|
||||
for i in range(len(self.rows_in_list)):
|
||||
self.remotes_list.remove(self.rows_in_list[i])
|
||||
|
||||
self.rows_in_list = []
|
||||
|
||||
def rowCopyHandler(widget, to_copy):
|
||||
self.app_window.clipboard.set(to_copy)
|
||||
@@ -100,11 +106,50 @@ class RemotesWindow(Adw.Window):
|
||||
remove_button.connect("clicked", self.remove_handler, i)
|
||||
remote_row.add_suffix(copy_button)
|
||||
remote_row.add_suffix(remove_button)
|
||||
self.rows_in_list.append(remote_row)
|
||||
except Exception as e:
|
||||
print("Could not get remote. Error:", e)
|
||||
|
||||
# Popular remotes
|
||||
for i in range(len(self.rows_in_popular_list)):
|
||||
self.popular_remotes_list.remove(self.rows_in_popular_list[i])
|
||||
|
||||
self.rows_in_popular_list = []
|
||||
|
||||
remotes = [
|
||||
# [Name to show in GUI, Name of remote for system, Link to repo to add, Description of remote]
|
||||
["AppCenter", "appcenter", "https://flatpak.elementary.io/repo.flatpakrepo", _("The open source, pay-what-you-want app store from elementary")],
|
||||
["Flathub", "flathub", "https://dl.flathub.org/repo/flathub.flatpakrepo", _("Central repository of Flatpak applications")],
|
||||
["Flathub beta", "flathub-beta", "https://flathub.org/beta-repo/flathub-beta.flatpakrepo", _("Beta builds of Flatpak applications")],
|
||||
["Fedora", "fedora", "oci+https://registry.fedoraproject.org", _("Flatpaks packaged by Fedora Linux")],
|
||||
["GNOME Nightly", "gnome-nightly", "https://nightly.gnome.org/gnome-nightly.flatpakrepo", _("The latest beta GNOME Apps and Runtimes")],
|
||||
["KDE Testing Applications", "kdeapps", "https://distribute.kde.org/kdeapps.flatpakrepo", _("Beta KDE Apps and Runtimes")],
|
||||
["WebKit Developer SDK", "webkit-sdk", "https://software.igalia.com/flatpak-refs/webkit-sdk.flatpakrepo", _("Central repository of the WebKit Developer and Runtime SDK")],
|
||||
]
|
||||
|
||||
host_remotes = self.my_utils.getHostRemotes()
|
||||
host_remotes_names = []
|
||||
|
||||
total_added = 0
|
||||
|
||||
for i in range(len(self.host_remotes)):
|
||||
host_remotes_names.append(self.host_remotes[i][0])
|
||||
|
||||
for i in range(len(remotes)):
|
||||
if remotes[i][1] in host_remotes_names:
|
||||
continue
|
||||
|
||||
total_added += 1
|
||||
row = Adw.ActionRow(title=remotes[i][0], subtitle=(remotes[i][2]), activatable=True)
|
||||
row.connect("activated", self.add_handler, remotes[i][1], remotes[i][2])
|
||||
row.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic"))
|
||||
self.rows_in_popular_list.append(row)
|
||||
self.popular_remotes_list.add(row)
|
||||
|
||||
self.popular_remotes_list.set_visible(total_added > 0)
|
||||
|
||||
def addRemoteCallback(self, _a, _b):
|
||||
pass
|
||||
self.generate_list()
|
||||
|
||||
def addRemoteThread(self, command):
|
||||
try:
|
||||
@@ -113,7 +158,7 @@ class RemotesWindow(Adw.Window):
|
||||
self.toast_overlay.add_toast(Adw.Toast.new(_("Could not add {}").format(self.name_to_add)))
|
||||
print(e)
|
||||
|
||||
def on_add_response(self, _dialog, response_id, _function):
|
||||
def on_add_response(self, _dialog, response_id, _function, row):
|
||||
if response_id == "cancel":
|
||||
self.should_pulse = False
|
||||
return
|
||||
@@ -129,7 +174,7 @@ class RemotesWindow(Adw.Window):
|
||||
task = Gio.Task.new(None, None, self.addRemoteCallback)
|
||||
task.run_in_thread(lambda _task, _obj, _data, _cancellable: self.addRemoteThread(command))
|
||||
|
||||
def add_handler(self, _widget, name="", link=""):
|
||||
def add_handler(self, row, name="", link=""):
|
||||
dialog = Adw.MessageDialog.new(self, _("Add Flatpak Remote"))
|
||||
dialog.set_close_response("cancel")
|
||||
dialog.add_response("cancel", _("Cancel"))
|
||||
@@ -221,7 +266,7 @@ class RemotesWindow(Adw.Window):
|
||||
info_box.append(install_type_list)
|
||||
|
||||
dialog.set_extra_child(info_box)
|
||||
dialog.connect("response", self.on_add_response, dialog.choose_finish)
|
||||
dialog.connect("response", self.on_add_response, dialog.choose_finish, row)
|
||||
Gtk.Window.present(dialog)
|
||||
|
||||
if name != "":
|
||||
@@ -243,7 +288,6 @@ class RemotesWindow(Adw.Window):
|
||||
self.should_pulse = False
|
||||
return
|
||||
|
||||
self.progress_bar.set_visible(True)
|
||||
user_or_system = "user"
|
||||
if system_check.get_active():
|
||||
user_or_system = "system"
|
||||
@@ -269,7 +313,6 @@ class RemotesWindow(Adw.Window):
|
||||
dialog.set_response_enabled("continue", is_enabled)
|
||||
|
||||
self.should_pulse = True
|
||||
self.mainPulser()
|
||||
|
||||
name = filepath.split('/')
|
||||
name = name[len(name) - 1]
|
||||
@@ -308,38 +351,24 @@ class RemotesWindow(Adw.Window):
|
||||
user_check.set_active(True)
|
||||
options_list.add_css_class("boxed-list")
|
||||
Gtk.Window.present(dialog)
|
||||
|
||||
def show_new_remote_options(self):
|
||||
|
||||
remotes = [
|
||||
# [Name to show in GUI, Name of remote for system, Link to repo to add, Description of remote]
|
||||
["AppCenter", "appcenter", "https://flatpak.elementary.io/repo.flatpakrepo", _("The open source, pay-what-you-want app store from elementary")],
|
||||
["Flathub", "flathub", "https://dl.flathub.org/repo/flathub.flatpakrepo", _("Central repository of Flatpak applications")],
|
||||
["Flathub beta", "flathub-beta", "https://flathub.org/beta-repo/flathub-beta.flatpakrepo", _("Beta builds of Flatpak applications")],
|
||||
["Fedora", "fedora", "oci+https://registry.fedoraproject.org", _("Flatpaks packaged by Fedora Linux")],
|
||||
["GNOME Nightly", "gnome-nightly", "https://nightly.gnome.org/gnome-nightly.flatpakrepo", _("The latest beta GNOME Apps and Runtimes")],
|
||||
["KDE Testing Applications", "kdeapps", "https://distribute.kde.org/kdeapps.flatpakrepo", _("Beta KDE Apps and Runtimes")],
|
||||
["WebKit Developer SDK", "webkit-sdk", "https://software.igalia.com/flatpak-refs/webkit-sdk.flatpakrepo", _("Central repository of the WebKit Developer and Runtime SDK")],
|
||||
]
|
||||
|
||||
host_remotes = self.my_utils.getHostRemotes()
|
||||
host_remotes_names = []
|
||||
|
||||
for i in range(len(self.host_remotes)):
|
||||
host_remotes_names.append(self.host_remotes[i][0])
|
||||
|
||||
for i in range(len(remotes)):
|
||||
if remotes[i][1] in host_remotes_names:
|
||||
continue
|
||||
|
||||
row = Adw.ActionRow(title=remotes[i][0], subtitle=(remotes[i][2]), activatable=True)
|
||||
row.connect("activated", self.add_handler, remotes[i][1], remotes[i][2])
|
||||
row.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic"))
|
||||
self.popular_remotes_list.add(row)
|
||||
|
||||
self.add_from_file.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic"))
|
||||
self.custom_remote.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic"))
|
||||
|
||||
def file_callback(self, object, result):
|
||||
try:
|
||||
file = object.open_finish(result)
|
||||
self.addRemoteFromFile(file.get_path())
|
||||
except GLib.GError:
|
||||
pass
|
||||
|
||||
def addFromFileHandler(self, widet):
|
||||
filter = Gtk.FileFilter(name=_("Flatpak Repos"))
|
||||
filter.add_suffix("flatpakrepo")
|
||||
filters = Gio.ListStore.new(Gtk.FileFilter)
|
||||
filters.append(filter)
|
||||
file_chooser = Gtk.FileDialog()
|
||||
file_chooser.set_filters(filters)
|
||||
file_chooser.set_default_filter(filter)
|
||||
file_chooser.open(self, None, self.file_callback)
|
||||
|
||||
def __init__(self, main_window, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
||||
@@ -360,9 +389,14 @@ class RemotesWindow(Adw.Window):
|
||||
event_controller = Gtk.EventControllerKey()
|
||||
event_controller.connect("key-pressed", self.key_handler)
|
||||
self.add_controller(event_controller)
|
||||
|
||||
self.refresh.connect("clicked", lambda *_: self.generate_list())
|
||||
self.set_transient_for(main_window)
|
||||
|
||||
self.add_from_file.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic"))
|
||||
self.add_from_file.connect("activated", self.addFromFileHandler)
|
||||
self.custom_remote.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic"))
|
||||
self.custom_remote.connect("activated", self.add_handler)
|
||||
|
||||
# Calls
|
||||
self.generate_list()
|
||||
self.show_new_remote_options()
|
||||
# self.show_new_remote_options()
|
||||
@@ -4,7 +4,6 @@
|
||||
<file preprocess="xml-stripblanks">../data/ui/window.ui</file>
|
||||
<file preprocess="xml-stripblanks">../data/ui/orphans.ui</file>
|
||||
<file preprocess="xml-stripblanks">../data/ui/filter.ui</file>
|
||||
<file preprocess="xml-stripblanks">../data/ui/popular_remotes.ui</file>
|
||||
<file preprocess="xml-stripblanks">../data/ui/remotes.ui</file>
|
||||
<file preprocess="xml-stripblanks">../data/ui/downgrade.ui</file>
|
||||
<file preprocess="xml-stripblanks">../data/ui/search_install.ui</file>
|
||||
|
||||
Reference in New Issue
Block a user