diff --git a/pkgs/clan-cli/clan_cli/clan_uri.py b/pkgs/clan-cli/clan_cli/clan_uri.py index bebb84288..f0890f81b 100644 --- a/pkgs/clan-cli/clan_cli/clan_uri.py +++ b/pkgs/clan-cli/clan_cli/clan_uri.py @@ -81,7 +81,7 @@ class ClanURI: if machine_name: uri += f"#{machine_name}" - # users might copy whitespace along with the uri + # Users might copy whitespace along with the URI uri = uri.strip() # Check if the URI starts with clan:// @@ -90,6 +90,12 @@ class ClanURI: if uri.startswith(prefix): uri = uri[len(prefix) :] + # Fix missing colon (caused by browsers like Firefox) + if "//" in uri and ":" not in uri.split("//", 1)[0]: + # If there's a `//` but no colon before it, add one before the `//` + parts = uri.split("//", 1) + uri = f"{parts[0]}://{parts[1]}" + # Parse the URI into components # url://netloc/path;parameters?query#fragment components: urllib.parse.ParseResult = urllib.parse.urlparse(uri) diff --git a/pkgs/clan-cli/tests/test_clan_uri.py b/pkgs/clan-cli/tests/test_clan_uri.py index 7acb855d1..dc321c25e 100644 --- a/pkgs/clan-cli/tests/test_clan_uri.py +++ b/pkgs/clan-cli/tests/test_clan_uri.py @@ -18,6 +18,13 @@ def test_get_url() -> None: assert uri.get_url() == "/home/user/Downloads" +def test_firefox_strip_uri() -> None: + uri = ClanURI.from_str("clan://https//git.clan.lol/clan/democlan") + assert uri.get_url() == "https://git.clan.lol/clan/democlan" + uri = ClanURI.from_str("clan://git+https//git.clan.lol/clan/democlan.git") + assert uri.get_url() == "git+https://git.clan.lol/clan/democlan.git" + + def test_local_uri() -> None: # Create a ClanURI object from a local URI uri = ClanURI.from_str("clan://file:///home/user/Downloads") diff --git a/pkgs/clan-vm-manager/clan_vm_manager/windows/main_window.py b/pkgs/clan-vm-manager/clan_vm_manager/windows/main_window.py index abfd3172c..8d875cb74 100644 --- a/pkgs/clan-vm-manager/clan_vm_manager/windows/main_window.py +++ b/pkgs/clan-vm-manager/clan_vm_manager/windows/main_window.py @@ -14,7 +14,7 @@ from clan_vm_manager.views.logs import Logs gi.require_version("Adw", "1") -from gi.repository import Adw, Gio, GLib +from gi.repository import Adw, Gio, GLib, Gtk from clan_vm_manager.components.trayicon import TrayIcon @@ -46,14 +46,15 @@ class MainWindow(Adw.ApplicationWindow): # Initialize all views stack_view = ViewStack.use().view - # clamp = Adw.Clamp() - # clamp.set_child(stack_view) - # clamp.set_maximum_size(1000) + # @hsjobeki: Do not remove clamp it is needed to limit the width + clamp = Adw.Clamp() + clamp.set_child(stack_view) + clamp.set_maximum_size(1000) - # scroll = Gtk.ScrolledWindow() - # scroll.set_propagate_natural_height(True) - # scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) - # scroll.set_child(clamp) + scroll = Gtk.ScrolledWindow() + scroll.set_propagate_natural_height(True) + scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) + scroll.set_child(clamp) stack_view.add_named(ClanList(config), "list") stack_view.add_named(Details(), "details") @@ -61,7 +62,7 @@ class MainWindow(Adw.ApplicationWindow): stack_view.set_visible_child_name(config.initial_view) - view.set_content(stack_view) + view.set_content(scroll) self.connect("destroy", self.on_destroy)