From c65e7de3c157dc73986e4ab4b997df234ae65056 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Mon, 23 Sep 2024 15:27:58 -0700 Subject: [PATCH] Port to LibSoup-3 (#84) And thus platform 8 --- .github/workflows/ci.yml | 2 +- com.github.alecaddd.taxi.yml | 2 +- src/API/IFileAccess.vala | 8 +++---- src/Backend/FileAccess.vala | 14 ++++++------ src/Backend/LocalFileAccess.vala | 2 +- src/Backend/RemoteFileAccess.vala | 8 +++---- src/Frontend/MainWindow.vala | 30 +++++++++++++------------- src/Frontend/Widgets/ConnectBox.vala | 10 ++++----- src/Frontend/Widgets/FilePane.vala | 32 +++++++++++++++------------- src/Frontend/Widgets/PathBar.vala | 10 ++++----- src/meson.build | 2 +- 11 files changed, 61 insertions(+), 59 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 00714fa..54e3cfb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: fail-fast: false container: - image: ghcr.io/elementary/flatpak-platform/runtime:7.1-${{ matrix.arch }} + image: ghcr.io/elementary/flatpak-platform/runtime:8-${{ matrix.arch }} options: --privileged steps: diff --git a/com.github.alecaddd.taxi.yml b/com.github.alecaddd.taxi.yml index 0786d70..2eeeacc 100644 --- a/com.github.alecaddd.taxi.yml +++ b/com.github.alecaddd.taxi.yml @@ -1,7 +1,7 @@ app-id: com.github.alecaddd.taxi runtime: io.elementary.Platform -runtime-version: '7.1' +runtime-version: '8' sdk: io.elementary.Sdk command: com.github.alecaddd.taxi diff --git a/src/API/IFileAccess.vala b/src/API/IFileAccess.vala index 15aae49..2a9166b 100644 --- a/src/API/IFileAccess.vala +++ b/src/API/IFileAccess.vala @@ -27,7 +27,7 @@ namespace Taxi { * @return true if successful at connecting */ public async abstract bool connect_to_device ( - Soup.URI uri, + GLib.Uri uri, Gtk.Window window ); @@ -38,11 +38,11 @@ namespace Taxi { */ public async abstract List get_file_list (); - public abstract Soup.URI get_uri (); + public abstract GLib.Uri get_uri (); - public abstract void goto_dir (Soup.URI uri); + public abstract void goto_dir (GLib.Uri uri); - public abstract void open_file (Soup.URI uri); + public abstract void open_file (GLib.Uri uri); public abstract File get_current_file (); } diff --git a/src/Backend/FileAccess.vala b/src/Backend/FileAccess.vala index 4890f8c..e52519b 100644 --- a/src/Backend/FileAccess.vala +++ b/src/Backend/FileAccess.vala @@ -22,7 +22,7 @@ namespace Taxi { protected virtual IFileOperations file_operation { get; set; } public abstract async bool connect_to_device ( - Soup.URI uri, + GLib.Uri uri, Gtk.Window window ); @@ -35,21 +35,21 @@ namespace Taxi { } } - public virtual Soup.URI get_uri () { + public virtual GLib.Uri get_uri () { var uri = file_handle.get_uri (); if (!uri.has_suffix ("/")) { uri += "/"; } - return new Soup.URI (uri); + return GLib.Uri.parse (uri, PARSE_RELAXED); } - public virtual void goto_dir (Soup.URI uri) { - var uri_string = uri.to_string (false); + public virtual void goto_dir (GLib.Uri uri) { + var uri_string = uri.to_string (); file_handle = File.new_for_uri (uri_string); } - public virtual void open_file (Soup.URI uri) { - var uri_string = uri.to_string (false); + public virtual void open_file (GLib.Uri uri) { + var uri_string = uri.to_string (); try { AppInfo.launch_default_for_uri (uri_string, null); } catch (Error e) { diff --git a/src/Backend/LocalFileAccess.vala b/src/Backend/LocalFileAccess.vala index b618bb8..ae17542 100644 --- a/src/Backend/LocalFileAccess.vala +++ b/src/Backend/LocalFileAccess.vala @@ -51,7 +51,7 @@ namespace Taxi { } public async override bool connect_to_device ( - Soup.URI uri, + GLib.Uri uri, Gtk.Window window ) { return true; diff --git a/src/Backend/RemoteFileAccess.vala b/src/Backend/RemoteFileAccess.vala index c83d803..5c51816 100644 --- a/src/Backend/RemoteFileAccess.vala +++ b/src/Backend/RemoteFileAccess.vala @@ -18,7 +18,7 @@ namespace Taxi { class RemoteFileAccess : FileAccess { - private Soup.URI uri; + private GLib.Uri uri; private Gtk.Window window; public RemoteFileAccess () { @@ -26,13 +26,13 @@ namespace Taxi { } public async override bool connect_to_device ( - Soup.URI uri, + GLib.Uri uri, Gtk.Window window ) { this.window = window; var mount = mount_operation_from_uri (uri); this.uri = uri; - file_handle = File.new_for_uri (uri.to_string (false)); + file_handle = File.new_for_uri (uri.to_string ()); try { return yield file_handle.mount_enclosing_volume ( MountMountFlags.NONE, @@ -86,7 +86,7 @@ namespace Taxi { file_handle = file_handle.resolve_relative_path ("/" + path); }*/ - private Gtk.MountOperation mount_operation_from_uri (Soup.URI uri) { + private Gtk.MountOperation mount_operation_from_uri (GLib.Uri uri) { var mount = new Gtk.MountOperation (window); mount.set_domain (uri.get_host ()); return mount; diff --git a/src/Frontend/MainWindow.vala b/src/Frontend/MainWindow.vala index 4074494..67a2824 100644 --- a/src/Frontend/MainWindow.vala +++ b/src/Frontend/MainWindow.vala @@ -30,7 +30,7 @@ class Taxi.MainWindow : Hdy.ApplicationWindow { private Granite.Widgets.Welcome welcome; private FilePane local_pane; private FilePane remote_pane; - private Soup.URI conn_uri; + private GLib.Uri conn_uri; private GLib.Settings saved_state; public MainWindow ( @@ -166,7 +166,7 @@ class Taxi.MainWindow : Hdy.ApplicationWindow { popover.operations_finished.connect (hide_spinner); } - private void on_connect_initiated (Soup.URI uri) { + private void on_connect_initiated (GLib.Uri uri) { show_spinner (); remote_access.connect_to_device.begin (uri, this, (obj, res) => { if (remote_access.connect_to_device.end (res)) { @@ -177,12 +177,12 @@ class Taxi.MainWindow : Hdy.ApplicationWindow { update_pane (Location.LOCAL); update_pane (Location.REMOTE); connect_box.show_favorite_icon ( - conn_saver.is_bookmarked (remote_access.get_uri ().to_string (false)) + conn_saver.is_bookmarked (remote_access.get_uri ().to_string ()) ); conn_uri = uri; } else { alert_stack.visible_child = welcome; - welcome.title = _("Could not connect to '%s'").printf (uri.to_string (false)); + welcome.title = _("Could not connect to '%s'").printf (uri.to_string ()); } hide_spinner (); }); @@ -197,7 +197,7 @@ class Taxi.MainWindow : Hdy.ApplicationWindow { } private void bookmark () { - var uri_string = conn_uri.to_string (false); + var uri_string = conn_uri.to_string (); if (conn_saver.is_bookmarked (uri_string)) { conn_saver.remove (uri_string); } else { @@ -233,19 +233,19 @@ class Taxi.MainWindow : Hdy.ApplicationWindow { } } - private void on_local_navigate (Soup.URI uri) { + private void on_local_navigate (GLib.Uri uri) { navigate (uri, local_access, Location.LOCAL); } - private void on_local_open (Soup.URI uri) { + private void on_local_open (GLib.Uri uri) { local_access.open_file (uri); } - private void on_remote_navigate (Soup.URI uri) { + private void on_remote_navigate (GLib.Uri uri) { navigate (uri, remote_access, Location.REMOTE); } - private void on_remote_open (Soup.URI uri) { + private void on_remote_open (GLib.Uri uri) { remote_access.open_file (uri); } @@ -257,15 +257,15 @@ class Taxi.MainWindow : Hdy.ApplicationWindow { file_dragged (uri, Location.LOCAL, local_access); } - private void on_local_file_delete (Soup.URI uri) { + private void on_local_file_delete (GLib.Uri uri) { file_delete (uri, Location.LOCAL); } - private void on_remote_file_delete (Soup.URI uri) { + private void on_remote_file_delete (GLib.Uri uri) { file_delete (uri, Location.REMOTE); } - private void navigate (Soup.URI uri, IFileAccess file_access, Location pane) { + private void navigate (GLib.Uri uri, IFileAccess file_access, Location pane) { file_access.goto_dir (uri); update_pane (pane); } @@ -294,8 +294,8 @@ class Taxi.MainWindow : Hdy.ApplicationWindow { ); } - private void file_delete (Soup.URI uri, Location pane) { - var file = File.new_for_uri (uri.to_string (false)); + private void file_delete (GLib.Uri uri, Location pane) { + var file = File.new_for_uri (uri.to_string ()); file_operation.delete_recursive.begin ( file, new Cancellable (), @@ -335,7 +335,7 @@ class Taxi.MainWindow : Hdy.ApplicationWindow { }); } - private Soup.URI on_ask_hostname () { + private GLib.Uri on_ask_hostname () { return conn_uri; } diff --git a/src/Frontend/Widgets/ConnectBox.vala b/src/Frontend/Widgets/ConnectBox.vala index f49575e..2feaa15 100644 --- a/src/Frontend/Widgets/ConnectBox.vala +++ b/src/Frontend/Widgets/ConnectBox.vala @@ -22,9 +22,9 @@ namespace Taxi { private bool show_fav_icon = false; private bool added = false; - public signal void connect_initiated (Soup.URI uri); + public signal void connect_initiated (GLib.Uri uri); public signal void bookmarked (); - public signal Soup.URI ask_hostname (); + public signal GLib.Uri ask_hostname (); construct { string[] entries = {"FTP", "SFTP", "DAV", "AFP"}; @@ -54,7 +54,7 @@ namespace Taxi { private void submit_form () { var protocol = ((Protocol) protocol_combobox.get_active ()).to_plain_text (); var path = path_entry.get_text (); - var uri = new Soup.URI (protocol + "://" + path); + var uri = Uri.parse (protocol + "://" + path, PARSE_RELAXED); connect_initiated (uri); } @@ -83,7 +83,7 @@ namespace Taxi { var uri_reply = ask_hostname (); // TODO: Handle text changes in a less lazy way path_entry.changed.disconnect (this.on_changed); - path_entry.set_text (uri_reply.to_string (false)); + path_entry.set_text (uri_reply.to_string ()); path_entry.changed.connect (this.on_changed); } return false; @@ -116,7 +116,7 @@ namespace Taxi { path_entry.text = split[1]; - connect_initiated (new Soup.URI (uri)); + connect_initiated (GLib.Uri.parse (uri, PARSE_RELAXED)); } public void show_favorite_icon (bool added = false) { diff --git a/src/Frontend/Widgets/FilePane.vala b/src/Frontend/Widgets/FilePane.vala index d6ee185..31bb59b 100644 --- a/src/Frontend/Widgets/FilePane.vala +++ b/src/Frontend/Widgets/FilePane.vala @@ -27,20 +27,20 @@ namespace Taxi { }; class FilePane : Gtk.Grid { - private Soup.URI current_uri; + private GLib.Uri current_uri; private PathBar path_bar; private Gtk.ListBox list_box; private Gtk.Stack stack; public signal void file_dragged (string uri); public signal void transfer (string uri); - public signal void navigate (Soup.URI uri); - public signal void @delete (Soup.URI uri); - public signal void rename (Soup.URI uri); - public signal void open (Soup.URI uri); - public signal void edit (Soup.URI uri); + public signal void navigate (GLib.Uri uri); + public signal void @delete (GLib.Uri uri); + public signal void rename (GLib.Uri uri); + public signal void open (GLib.Uri uri); + public signal void edit (GLib.Uri uri); - delegate void ActivateFunc (Soup.URI uri); + delegate void ActivateFunc (GLib.Uri uri); construct { path_bar = new PathBar (); @@ -86,7 +86,7 @@ namespace Taxi { list_box.drag_drop.connect (on_drag_drop); list_box.drag_data_received.connect (on_drag_data_received); list_box.row_activated.connect ((row) => { - var uri = row.get_data ("uri"); + var uri = row.get_data ("uri"); var type = row.get_data ("type"); if (type == FileType.DIRECTORY) { navigate (uri); @@ -116,7 +116,7 @@ namespace Taxi { var uri_list = new Gee.ArrayList (); foreach (Gtk.Widget row in list_box.get_children ()) { if (row.get_data ("checkbutton").get_active ()) { - uri_list.add (current_uri.to_string (false) + "/" + row.get_data ("name")); + uri_list.add (current_uri.to_string () + "/" + row.get_data ("name")); } } return uri_list; @@ -187,7 +187,7 @@ namespace Taxi { row.add (size); } - var uri = new Soup.URI.with_base (current_uri, file_info.get_name ()); + var uri = GLib.Uri.parse_relative (current_uri, file_info.get_name (), PARSE_RELAXED); var ebrow = new Gtk.EventBox (); ebrow.add (row); @@ -241,10 +241,12 @@ namespace Taxi { private bool on_ebr_popup_menu (Gtk.EventBox event_box) { - var uri = new Soup.URI.with_base ( + var uri = GLib.Uri.parse_relative ( current_uri, - event_box.get_data ("name") + event_box.get_data ("name"), + PARSE_RELAXED ); + var type = event_box.get_data ("type"); var menu = new Gtk.Menu (); if (type == FileType.DIRECTORY) { @@ -266,14 +268,14 @@ namespace Taxi { private Gtk.MenuItem new_menu_item ( string label, ActivateFunc activate_fn, - Soup.URI uri + GLib.Uri uri ) { var menu_item = new Gtk.MenuItem.with_label (label); menu_item.activate.connect (() => activate_fn (uri)); return menu_item; } - public void update_pathbar (Soup.URI uri) { + public void update_pathbar (GLib.Uri uri) { current_uri = uri; path_bar.set_path (uri); path_bar.show_all (); @@ -335,7 +337,7 @@ namespace Taxi { uint time ) { string file_name = widget.get_data ("name"); - string file_uri = current_uri.to_string (false) + "/" + file_name; + string file_uri = current_uri.to_string () + "/" + file_name; switch (target_type) { case Target.URI_LIST: selection_data.set_uris ({ file_uri }); diff --git a/src/Frontend/Widgets/PathBar.vala b/src/Frontend/Widgets/PathBar.vala index e3a2e1d..4dc1935 100644 --- a/src/Frontend/Widgets/PathBar.vala +++ b/src/Frontend/Widgets/PathBar.vala @@ -18,12 +18,12 @@ namespace Taxi { class PathBar : Gtk.Grid { public bool transfer_button_sensitive { get; set; } - private Soup.URI current_uri; + private GLib.Uri current_uri; - public signal void navigate (Soup.URI uri); + public signal void navigate (GLib.Uri uri); public signal void transfer (); - public PathBar.from_uri (Soup.URI uri) { + public PathBar.from_uri (GLib.Uri uri) { set_path (uri); } @@ -64,13 +64,13 @@ namespace Taxi { button_style_context.add_class ("path-button"); button.clicked.connect (() => { - current_uri.set_path (path); + current_uri.parse (current_uri.get_scheme () + path, PARSE_RELAXED); navigate (current_uri); }); add (button); } - public void set_path (Soup.URI uri) { + public void set_path (GLib.Uri uri) { clear_path (); current_uri = uri; string transfer_icon_name; diff --git a/src/meson.build b/src/meson.build index 0577052..94e105e 100644 --- a/src/meson.build +++ b/src/meson.build @@ -27,7 +27,7 @@ executable( dependency('granite', version: '>=6.0.0'), dependency('gtk+-3.0', version: '>=3.22'), dependency('libhandy-1'), - dependency('libsoup-2.4'), + dependency('libsoup-3.0'), meson.get_compiler('vala').find_library('posix', required : false) ], install : true