diff --git a/src/change_version_page/change_version_page.blp b/src/change_version_page/change_version_page.blp new file mode 100644 index 0000000..7a87cc6 --- /dev/null +++ b/src/change_version_page/change_version_page.blp @@ -0,0 +1,59 @@ +using Gtk 4.0; +using Adw 1; + +template $ChangeVersionPage : Adw.NavigationPage { + title: _("Change Versions"); + Adw.ToolbarView { + [top] + Adw.HeaderBar { + } + Adw.ToastOverlay { + ScrolledWindow scrolled_window { + Adw.Clamp { + Box { + margin-start: 12; + margin-end: 12; + margin-top: 12; + margin-bottom: 12; + spacing: 12; + orientation: vertical; + halign: fill; + hexpand: true; + + CheckButton root_group_check_button { + visible: false; + active: true; + } + + Adw.PreferencesGroup mask_group { + Adw.SwitchRow mask_row { + title: _("Disable Updates"); + } + } + + Adw.PreferencesGroup versions_group { + title: _("Select a Release"); + description: _("This will uninstalls the current release and install the chosen one instead. Note that downgrading can cause issues."); + } + } + } + } + } + [bottom] + ActionBar action_bar { + revealed: false; + [center] + Button apply_button { + sensitive: bind action_bar.revealed; + halign: center; + margin-top: 3; + margin-bottom: 3; + Adw.ButtonContent { + label: _("Change Version"); + icon-name: "double-ended-arrows-vertical-symbolic"; + } + styles ["suggested-action", "pill"] + } + } + } +} \ No newline at end of file diff --git a/src/change_version_page/change_version_page.py b/src/change_version_page/change_version_page.py new file mode 100644 index 0000000..dfe27ba --- /dev/null +++ b/src/change_version_page/change_version_page.py @@ -0,0 +1,73 @@ +from gi.repository import Adw, Gtk,GLib#, Gio, Pango +from .error_toast import ErrorToast +from .host_info import HostInfo +import subprocess, os + +@Gtk.Template(resource_path="/io/github/flattool/Warehouse/change_version_page/change_version_page.ui") +class ChangeVersionPage(Adw.NavigationPage): + __gtype_name__ = 'ChangeVersionPage' + gtc = Gtk.Template.Child + scrolled_window = gtc() + root_group_check_button = gtc() + mask_group = gtc() + mask_row = gtc() + versions_group = gtc() + action_bar = gtc() + + def get_commits(self): + cmd = ['flatpak-spawn', '--host', 'sh', '-c'] + script = f"LC_ALL=C flatpak remote-info --log {self.package.info['origin']} {self.package.info['ref']} " + installation = self.package.info["installation"] + if installation == "user" or installation == "system": + script += f"--{installation}" + else: + script += f"--installation={installation}" + + cmd.append(script) + + commits = [] + changes = [] + dates = [] + output = subprocess.run(cmd, check=True, capture_output=True, text=True).stdout + lines = output.strip().split('\n') + for line in lines: + line = line.strip().split(": ", 1) + if len(line) < 2: + continue + elif line[0].startswith("Commit"): + commits.append(line[1]) + elif line[0].startswith("Subject"): + changes.append(line[1]) + elif line[0].startswith("Date"): + dates.append(line[1]) + + if not (len(commits) == len(changes) == len(dates)): + return + + for index, element in enumerate(changes): + row = Adw.ActionRow(title=GLib.markup_escape_text(element), subtitle=GLib.markup_escape_text(dates[index])) + self.versions_group.add(row) + + def __init__(self, main_window, package, **kwargs): + super().__init__(**kwargs) + + # Extra Object Creation + self.package = package + + # Apply + pkg_name = package.info["name"] + self.set_title(_("{} Versions").format(pkg_name)) + self.mask_row.set_subtitle(_("Ensure that {} will never be updated to a newer version").format(pkg_name)) + self.get_commits() + + # for i in range(10): + # row = Adw.ActionRow(title=f"Update to {i}.0", subtitle="Some dumb nerd shit I don't care about", activatable=True) + # check_button = Gtk.CheckButton() + # check_button.set_group(self.root_group_check_button) + # prev_check = check_button + # row.add_prefix(check_button) + # row.set_activatable_widget(check_button) + # self.versions_group.add(row) + + # Connections + self.root_group_check_button.connect("toggled", lambda *_: self.action_bar.set_revealed(True)) \ No newline at end of file diff --git a/src/meson.build b/src/meson.build index 0e958b6..3d23244 100644 --- a/src/meson.build +++ b/src/meson.build @@ -9,6 +9,7 @@ blueprints = custom_target('blueprints', 'main_window/window.blp', 'packages_page/packages_page.blp', 'properties_page/properties_page.blp', + 'change_version_page/change_version_page.blp', ), output: '.', command: [find_program('blueprint-compiler'), 'batch-compile', '@OUTPUT@', '@CURRENT_SOURCE_DIR@', '@INPUT@'], @@ -56,6 +57,7 @@ warehouse_sources = [ 'main_window/window.py', 'packages_page/packages_page.py', 'properties_page/properties_page.py', + 'change_version_page/change_version_page.py', '../data/style.css', ] diff --git a/src/properties_page/properties_page.blp b/src/properties_page/properties_page.blp index ff1eb6f..84db7ec 100644 --- a/src/properties_page/properties_page.blp +++ b/src/properties_page/properties_page.blp @@ -147,6 +147,7 @@ template $PropertiesPage : Adw.NavigationPage { Adw.ExpanderRow version_row { title: _("Version"); styles ["property"] + expanded: true; [suffix] Label mask_label { label: _("Updates Disabled"); @@ -162,7 +163,7 @@ template $PropertiesPage : Adw.NavigationPage { can-target: false; } } - Adw.ActionRow downgrade_row { + Adw.ActionRow change_version_row { title: _("Change Version"); subtitle: _("Upgrade or downgrade this package"); activatable: true; diff --git a/src/properties_page/properties_page.py b/src/properties_page/properties_page.py index 5c6bcad..c576a7c 100644 --- a/src/properties_page/properties_page.py +++ b/src/properties_page/properties_page.py @@ -1,6 +1,7 @@ from gi.repository import Adw, Gtk,GLib#, Gio, Pango from .error_toast import ErrorToast from .host_info import HostInfo +from .change_version_page import ChangeVersionPage import subprocess, os @Gtk.Template(resource_path="/io/github/flattool/Warehouse/properties_page/properties_page.ui") @@ -29,7 +30,7 @@ class PropertiesPage(Adw.NavigationPage): mask_label = gtc() mask_row = gtc() mask_switch = gtc() - downgrade_row = gtc() + change_version_row = gtc() installed_size_row = gtc() runtime_row = gtc() eol_package_package_status_icon = gtc() @@ -202,6 +203,10 @@ class PropertiesPage(Adw.NavigationPage): HostInfo.clipboard.set(row.get_subtitle()) self.toast_overlay.add_toast(Adw.Toast(title=_("Copeid {}").format(row.get_title()))) + def change_version_handler(self, row): + page = ChangeVersionPage(self.main_window, self.package) + self.nav_view.push(page) + def __init__(self, main_window, **kwargs): super().__init__(**kwargs) @@ -236,6 +241,7 @@ class PropertiesPage(Adw.NavigationPage): self.open_app_button.connect("clicked", self.open_app_handler) self.mask_row.connect("activated", self.set_mask_handler) self.pin_row.connect("activated", self.set_pin_handler) + self.change_version_row.connect("activated", self.change_version_handler) for key in self.info_rows: row = self.info_rows[key] if type(row) != Adw.ActionRow: