[gnome-commander] Migrated from GnomeVFS to GIO file monitor
- From: Uwe Scholz <uwescholz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-commander] Migrated from GnomeVFS to GIO file monitor
- Date: Sun, 20 Jun 2021 21:58:01 +0000 (UTC)
commit 34127973b9cb6db02668563ca05854c2722379f5
Author: Uwe Scholz <u scholz83 gmx de>
Date: Sun Jun 20 23:44:06 2021 +0200
Migrated from GnomeVFS to GIO file monitor
src/gnome-cmd-dir.cc | 86 +++++++++++++++++++++++++++++-----------------------
1 file changed, 48 insertions(+), 38 deletions(-)
---
diff --git a/src/gnome-cmd-dir.cc b/src/gnome-cmd-dir.cc
index ec38d467c..0f4a89a0b 100644
--- a/src/gnome-cmd-dir.cc
+++ b/src/gnome-cmd-dir.cc
@@ -66,7 +66,7 @@ struct GnomeCmdDirPrivate
gboolean needs_mtime_update;
Handle *handle;
- GnomeVFSMonitorHandle *monitor_handle;
+ GFileMonitor *gFileMonitor;
gint monitor_users;
};
@@ -77,30 +77,40 @@ G_DEFINE_TYPE (GnomeCmdDir, gnome_cmd_dir, GNOME_CMD_TYPE_FILE)
static guint signals[LAST_SIGNAL] = { 0 };
-static void monitor_callback (GnomeVFSMonitorHandle *handle, const gchar *monitor_uri, const gchar
*info_uri, GnomeVFSMonitorEventType event_type, GnomeCmdDir *dir)
+static void monitor_callback (GFileMonitor *gFileMonitor, GFile *gFile, GFile *otherGFile,
+ GFileMonitorEvent event_type, GnomeCmdDir *dir)
{
+ auto fileUri = g_file_get_uri(gFile);
+
switch (event_type)
{
- case GNOME_VFS_MONITOR_EVENT_CHANGED:
- DEBUG('n', "GNOME_VFS_MONITOR_EVENT_CHANGED for %s\n", info_uri);
- gnome_cmd_dir_file_changed (dir, info_uri);
+ case G_FILE_MONITOR_EVENT_CHANGED:
+ DEBUG('n', "G_FILE_MONITOR_EVENT_CHANGED for %s\n", fileUri);
+ gnome_cmd_dir_file_changed (dir, fileUri);
break;
- case GNOME_VFS_MONITOR_EVENT_DELETED:
- DEBUG('n', "GNOME_VFS_MONITOR_EVENT_DELETED for %s\n", info_uri);
- gnome_cmd_dir_file_deleted (dir, info_uri);
+ case G_FILE_MONITOR_EVENT_DELETED:
+ DEBUG('n', "G_FILE_MONITOR_EVENT_DELETED for %s\n", fileUri);
+ gnome_cmd_dir_file_deleted (dir, fileUri);
break;
- case GNOME_VFS_MONITOR_EVENT_CREATED:
- DEBUG('n', "GNOME_VFS_MONITOR_EVENT_CREATED for %s\n", info_uri);
- gnome_cmd_dir_file_created (dir, info_uri);
+ case G_FILE_MONITOR_EVENT_CREATED:
+ DEBUG('n', "G_FILE_MONITOR_EVENT_CREATED for %s\n", fileUri);
+ gnome_cmd_dir_file_created (dir, fileUri);
break;
- case GNOME_VFS_MONITOR_EVENT_METADATA_CHANGED:
- case GNOME_VFS_MONITOR_EVENT_STARTEXECUTING:
- case GNOME_VFS_MONITOR_EVENT_STOPEXECUTING:
+ case G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED:
+ case G_FILE_MONITOR_EVENT_PRE_UNMOUNT:
+ case G_FILE_MONITOR_EVENT_UNMOUNTED:
+ case G_FILE_MONITOR_EVENT_MOVED:
+ case G_FILE_MONITOR_EVENT_MOVED_IN:
+ case G_FILE_MONITOR_EVENT_MOVED_OUT:
+ case G_FILE_MONITOR_EVENT_RENAMED:
+ case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
+ DEBUG('n', "Unwatched event %d\n", event_type);
break;
default:
DEBUG('n', "Unknown monitor event %d\n", event_type);
}
+ g_free(fileUri);
}
@@ -113,7 +123,7 @@ static void gnome_cmd_dir_init (GnomeCmdDir *dir)
dir->priv = g_new0 (GnomeCmdDirPrivate, 1);
dir->priv->handle = handle_new (dir);
- // dir->priv->monitor_handle = nullptr;
+ // dir->priv->gFileMonitor = nullptr;
// dir->priv->monitor_users = 0;
// dir->priv->files = nullptr;
dir->priv->file_collection = new GnomeCmdFileCollection;
@@ -890,24 +900,30 @@ void gnome_cmd_dir_start_monitoring (GnomeCmdDir *dir)
{
g_return_if_fail (GNOME_CMD_IS_DIR (dir));
- GnomeVFSResult result;
-
if (dir->priv->monitor_users == 0)
{
gchar *uri_str = GNOME_CMD_FILE (dir)->get_uri_str();
+ GError *error = nullptr;
- result = gnome_vfs_monitor_add (
- &dir->priv->monitor_handle,
- uri_str,
- GNOME_VFS_MONITOR_DIRECTORY,
- (GnomeVFSMonitorCallback) monitor_callback,
- dir);
+ auto gFileMonitor = g_file_monitor_directory (
+ GNOME_CMD_FILE (dir)->gFile,
+ //ToDo: We might want to activate G_FILE_MONITOR_WATCH_MOVES in the future
+ G_FILE_MONITOR_NONE,
+ nullptr,
+ &error);
- if (result == GNOME_VFS_OK)
- DEBUG('n', "Added monitor to 0x%x %s\n", dir, uri_str);
- else
- DEBUG ('n', "Failed to add monitor to %p %s: %s\n", dir, uri_str, gnome_vfs_result_to_string
(result));
+ g_signal_connect (gFileMonitor, "changed", G_CALLBACK (monitor_callback), dir);
+ if (error)
+ {
+ DEBUG ('n', "Failed to add monitor to %p %s: %s\n", dir, uri_str, error->message);
+ g_error_free(error);
+ g_free(uri_str);
+ return;
+ }
+
+ DEBUG('n', "Added monitor to %p %s\n", dir, uri_str);
+ dir->priv->gFileMonitor = gFileMonitor;
g_free (uri_str);
}
@@ -925,18 +941,12 @@ void gnome_cmd_dir_cancel_monitoring (GnomeCmdDir *dir)
if (dir->priv->monitor_users == 0)
{
- if (dir->priv->monitor_handle)
+ if (dir->priv->gFileMonitor)
{
- GnomeVFSResult result = gnome_vfs_monitor_cancel (dir->priv->monitor_handle);
- if (result == GNOME_VFS_OK)
- DEBUG('n', "Removed monitor from %p %s\n",
- dir, GNOME_CMD_FILE (dir)->get_uri_str());
- else
- DEBUG('n', "Failed to remove monitor from %p %s: %s\n",
- dir, GNOME_CMD_FILE (dir)->get_uri_str(),
- gnome_vfs_result_to_string (result));
-
- dir->priv->monitor_handle = nullptr;
+ g_file_monitor_cancel (dir->priv->gFileMonitor);
+ DEBUG('n', "Removed monitor from %p %s\n", dir, GNOME_CMD_FILE (dir)->get_uri_str());
+
+ dir->priv->gFileMonitor = nullptr;
}
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]