1
0
mirror of https://gitlab.gnome.org/GNOME/nautilus synced 2024-06-30 23:46:35 +00:00

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.
This commit is contained in:
António Fernandes 2024-01-27 16:50:39 +00:00
parent 0a78f8cee2
commit b72f62f65c
3 changed files with 44 additions and 54 deletions

View File

@ -10,6 +10,8 @@
#include <glib/gi18n.h>
#include <adwaita.h>
#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.

View File

@ -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);

View File

@ -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