Re: Monitoring directory changes with gnomevfs



You should use gvfs instead gnomevfs is deprecated

2008/8/28 Damien Moore <damien moore excite com>
Hi List,

I'm trying to use the directory monitoring API in gnomevfs, but I'm having difficulty understanding how it is supposed to be used. The documentation at http://library.gnome.org/devel/gnome-vfs-2.0/unstable/gnome-vfs-20-gnome-vfs-monitor.html doesn't have any examples and I haven't been able to find a simple example on the web. The API seems simple enough, but I'm not sure I understand how the callback mechanism is supposed to work. (This probably reflects a deeper lack of understanding of glib, but I'll persist...)

For example, I gather this program won't work because there is no GMainLoop in place to generate the callback:

#include <libgnomevfs/gnome-vfs.h>

int exit=0;

static void MonitorCallback(GnomeVFSMonitorHandle *handle, const gchar *monitor_uri, const gchar *info_uri, GnomeVFSMonitorEventType event_type, gpointer user_data)
{
    exit=1;
}

int main()
{
    if(!gnome_vfs_initialized())
        gnome_vfs_init();
    GnomeVFSMonitorHandle *h;
    gnome_vfs_monitor_add(&h, "/home/myusername", GNOME_VFS_MONITOR_DIRECTORY, MonitorCallback, NULL);
    while(!exit);
    gnome_vfs_monitor_cancel(h);
    return 0;
}

but something like this should work correctly?

#include <glib.h>
#include <libgnomevfs/gnome-vfs.h>

static void MonitorCallback(GnomeVFSMonitorHandle *handle, const gchar *monitor_uri, const gchar *info_uri, GnomeVFSMonitorEventType event_type, gpointer user_data)
{
    g_print("Monitor event received, exiting...\n");
    g_main_loop_quit((GMainLoop*)user_data);
}

int main()
{
    if(!gnome_vfs_initialized())
        gnome_vfs_init();
    GMainLoop *loop;
    loop = g_main_loop_new(NULL, FALSE);
    GnomeVFSMonitorHandle *h;
    gnome_vfs_monitor_add(&h, "/home/myusername", GNOME_VFS_MONITOR_DIRECTORY, MonitorCallback, loop);
    g_main_loop_run(loop);
    gnome_vfs_monitor_cancel(h);
    return 0;
}

Can someone can give me an idea of whether the above should work or what I would need to do to that simple example to get it working? Looking at the above I don't really understand how glib would know how to attach the MonitorCallback to the GMainLoop, which isn't even running yet (if I created and started another main loop inside the outer loop, would it also generate callbacks?).

thanks,
D

_______________________________________________
gnome-vfs-list mailing list
gnome-vfs-list gnome org
http://mail.gnome.org/mailman/listinfo/gnome-vfs-list




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]