diff options
Diffstat (limited to 'gio/kqueue/kqueue-missing.c')
-rw-r--r-- | gio/kqueue/kqueue-missing.c | 53 |
1 files changed, 33 insertions, 20 deletions
diff --git a/gio/kqueue/kqueue-missing.c b/gio/kqueue/kqueue-missing.c index 9decdc937..93135b962 100644 --- a/gio/kqueue/kqueue-missing.c +++ b/gio/kqueue/kqueue-missing.c @@ -23,12 +23,12 @@ #include <glib.h> #include "kqueue-helper.h" -#include "kqueue-sub.h" -#include "kqueue-missing.h" #define SCAN_MISSING_TIME 4 /* 1/4 Hz */ +void _kh_file_appeared_cb (kqueue_sub *sub); + static gboolean km_scan_missing (gpointer user_data); static gboolean km_debug_enabled = FALSE; @@ -38,21 +38,6 @@ static GSList *missing_subs_list = NULL; G_LOCK_DEFINE_STATIC (missing_lock); static volatile gboolean scan_missing_running = FALSE; -static on_create_cb file_appeared_callback; - - -/** - * _km_init: - * @cb: a callback function. It will be called when a watched file - * will appear. - * - * Initialize the kqueue-missing module (optional). - **/ -void -_km_init (on_create_cb cb) -{ - file_appeared_callback = cb; -} /** @@ -83,6 +68,35 @@ _km_add_missing (kqueue_sub *sub) } } +/** + * _kh_file_appeared_cb: + * @sub: a #kqueue_sub + * + * A callback function for kqueue-missing subsystem. + * + * Signals that a missing file has finally appeared in the filesystem. + * Emits %G_FILE_MONITOR_EVENT_CREATED. + **/ +void +_kh_file_appeared_cb (kqueue_sub *sub) +{ + GFile *child; + + g_assert (sub != NULL); + g_assert (sub->filename); + + if (!g_file_test (sub->filename, G_FILE_TEST_EXISTS)) + return; + + child = g_file_new_for_path (sub->filename); + + g_file_monitor_emit_event (G_FILE_MONITOR (sub->mon), + child, + NULL, + G_FILE_MONITOR_EVENT_CREATED); + + g_object_unref (child); +} /** * km_scan_missing: @@ -114,11 +128,10 @@ km_scan_missing (gpointer user_data) g_assert (sub != NULL); g_assert (sub->filename != NULL); - if (_kh_start_watching (sub)) + if (_kqsub_start_watching (sub)) { KM_W ("file %s now exists, starting watching", sub->filename); - if (file_appeared_callback) - file_appeared_callback (sub); + _kh_file_appeared_cb (sub); not_missing = g_slist_prepend (not_missing, head); } } |