From b72f62f65c658a7ac38ae250126e3c1e1c7cbb0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ant=C3=B3nio=20Fernandes?= Date: Sat, 27 Jan 2024 16:50:39 +0000 Subject: [PATCH] recent-servers: Expose functions for UI For the purpose of these functions, there is no need to set up a file monitor, nor for the NautilusRecentServers object at all. But they are provided here to keep context and reuse server_list_load(). The network address bar is going to be adding servers to the list, while the upcoming network view is going to allow to remove them. --- src/nautilus-network-address-bar.c | 6 +- src/nautilus-recent-servers.c | 88 +++++++++++++----------------- src/nautilus-recent-servers.h | 4 ++ 3 files changed, 44 insertions(+), 54 deletions(-) diff --git a/src/nautilus-network-address-bar.c b/src/nautilus-network-address-bar.c index 1ca740b00..73db197f7 100644 --- a/src/nautilus-network-address-bar.c +++ b/src/nautilus-network-address-bar.c @@ -10,6 +10,8 @@ #include #include +#include "nautilus-recent-servers.h" + struct _NautilusNetworkAddressBar { GtkBox parent_instance; @@ -90,9 +92,7 @@ server_mount_ready_cb (GObject *source_file, if (should_show) { -#if 0 - server_list_add_server (self, location); -#endif + nautilus_add_recent_server (location); /* * Only clear the entry if it successfully connects to the server. diff --git a/src/nautilus-recent-servers.c b/src/nautilus-recent-servers.c index c31fe024b..f52321136 100644 --- a/src/nautilus-recent-servers.c +++ b/src/nautilus-recent-servers.c @@ -18,14 +18,11 @@ struct _NautilusRecentServers GHashTable *server_infos; - GFile *server_list_file; GFileMonitor *server_list_monitor; guint loading : 1; }; -static void populate_servers (NautilusRecentServers *self); - static void nautilus_recent_servers_set_loading (NautilusRecentServers *self, gboolean loading); @@ -50,13 +47,36 @@ static GParamSpec *properties[LAST_PROP]; static guint signals[LAST_SIGNAL]; static void -server_file_changed_cb (NautilusRecentServers *self) +ensure_monitor (NautilusRecentServers *self) { - populate_servers (self); + if (self->server_list_monitor != NULL) + { + return; + } + + g_autofree char *filename = g_build_filename (g_get_user_config_dir (), "gtk-4.0", "servers", NULL); + g_autoptr (GFile) server_list_file = g_file_new_for_path (filename); + g_autoptr (GError) error = NULL; + + self->server_list_monitor = g_file_monitor_file (server_list_file, + G_FILE_MONITOR_NONE, + NULL, + &error); + + if (error != NULL) + { + g_warning ("Cannot monitor server file: %s", error->message); + } + else + { + g_signal_connect_object (self->server_list_monitor, "changed", + G_CALLBACK (nautilus_recent_servers_force_reload), self, + G_CONNECT_SWAPPED); + } } static GBookmarkFile * -server_list_load (NautilusRecentServers *self) +server_list_load (void) { GBookmarkFile *bookmarks; GError *error = NULL; @@ -82,35 +102,6 @@ server_list_load (NautilusRecentServers *self) g_clear_error (&error); } - /* Monitor the file in case it's modified outside this code */ - if (!self->server_list_monitor) - { - self->server_list_file = g_file_new_for_path (filename); - - if (self->server_list_file) - { - self->server_list_monitor = g_file_monitor_file (self->server_list_file, - G_FILE_MONITOR_NONE, - NULL, - &error); - - if (error) - { - g_warning ("Cannot monitor server file: %s", error->message); - g_clear_error (&error); - } - else - { - g_signal_connect_swapped (self->server_list_monitor, - "changed", - G_CALLBACK (server_file_changed_cb), - self); - } - } - - g_clear_object (&self->server_list_file); - } - g_free (datadir); g_free (filename); @@ -127,9 +118,8 @@ server_list_save (GBookmarkFile *bookmarks) g_free (filename); } -G_GNUC_UNUSED static void -server_list_add_server (NautilusRecentServers *self, - GFile *file) +void +nautilus_add_recent_server (GFile *file) { GBookmarkFile *bookmarks; GFileInfo *info; @@ -140,7 +130,7 @@ server_list_add_server (NautilusRecentServers *self, GDateTime *now; error = NULL; - bookmarks = server_list_load (self); + bookmarks = server_list_load (); if (!bookmarks) { @@ -170,13 +160,12 @@ server_list_add_server (NautilusRecentServers *self, g_free (uri); } -G_GNUC_UNUSED static void -server_list_remove_server (NautilusRecentServers *self, - const char *uri) +void +nautilus_remove_recent_server (const char *uri) { GBookmarkFile *bookmarks; - bookmarks = server_list_load (self); + bookmarks = server_list_load (); if (!bookmarks) { @@ -194,7 +183,6 @@ nautilus_recent_servers_finalize (GObject *object) { NautilusRecentServers *self = (NautilusRecentServers *) object; - g_clear_object (&self->server_list_file); g_clear_object (&self->server_list_monitor); g_clear_pointer (&self->server_infos, g_hash_table_destroy); @@ -204,12 +192,7 @@ nautilus_recent_servers_finalize (GObject *object) static void nautilus_recent_servers_dispose (GObject *object) { - NautilusRecentServers *self = (NautilusRecentServers *) object; - - if (self->server_list_monitor) - { - g_signal_handlers_disconnect_by_func (self->server_list_monitor, server_file_changed_cb, object); - } + /* Not removing this function because it's going to be used again next commit. */ G_OBJECT_CLASS (nautilus_recent_servers_parent_class)->dispose (object); } @@ -278,13 +261,16 @@ populate_servers (NautilusRecentServers *self) char **uris; gsize num_uris; - server_list = server_list_load (self); + server_list = server_list_load (); if (!server_list) { return; } + /* Monitor the file in case it's modified outside this code */ + ensure_monitor (self); + nautilus_recent_servers_set_loading (self, TRUE); uris = g_bookmark_file_get_uris (server_list, &num_uris); diff --git a/src/nautilus-recent-servers.h b/src/nautilus-recent-servers.h index 099a44c5f..f42d980ec 100644 --- a/src/nautilus-recent-servers.h +++ b/src/nautilus-recent-servers.h @@ -20,4 +20,8 @@ void nautilus_recent_servers_force_reload (NautilusRecentSe GList * nautilus_recent_servers_get_infos (NautilusRecentServers *self); gboolean nautilus_recent_servers_get_loading (NautilusRecentServers *self); +void nautilus_add_recent_server (GFile *file); + +void nautilus_remove_recent_server (const char *uri); + G_END_DECLS