diff options
Diffstat (limited to 'src/libtracker-miner/tracker-thumbnailer.c')
-rw-r--r-- | src/libtracker-miner/tracker-thumbnailer.c | 161 |
1 files changed, 77 insertions, 84 deletions
diff --git a/src/libtracker-miner/tracker-thumbnailer.c b/src/libtracker-miner/tracker-thumbnailer.c index 3ad5a2d55..ee80999a8 100644 --- a/src/libtracker-miner/tracker-thumbnailer.c +++ b/src/libtracker-miner/tracker-thumbnailer.c @@ -63,15 +63,21 @@ typedef struct { gboolean service_is_available; } TrackerThumbnailerPrivate; -static void private_free (gpointer data); -static GPrivate private_key = G_PRIVATE_INIT (private_free); +static void tracker_thumbnailer_initable_iface_init (GInitableIface *iface); + +G_DEFINE_TYPE_WITH_CODE (TrackerThumbnailer, tracker_thumbnailer, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, + tracker_thumbnailer_initable_iface_init) + G_ADD_PRIVATE (TrackerThumbnailer)) static void -private_free (gpointer data) +tracker_thumbnailer_finalize (GObject *object) { TrackerThumbnailerPrivate *private; + TrackerThumbnailer *thumbnailer; - private = data; + thumbnailer = TRACKER_THUMBNAILER (object); + private = tracker_thumbnailer_get_instance_private (thumbnailer); if (private->cache_proxy) { g_object_unref (private->cache_proxy); @@ -96,7 +102,7 @@ private_free (gpointer data) g_slist_foreach (private->moves_from, (GFunc) g_free, NULL); g_slist_free (private->moves_from); - g_free (private); + G_OBJECT_CLASS (tracker_thumbnailer_parent_class)->finalize (object); } inline static gboolean @@ -121,42 +127,28 @@ should_be_thumbnailed (GStrv list, return should_thumbnail; } -/** - * tracker_thumbnailer_init: - * - * Initializes the thumbnailer connection. - * - * Returns: #TRUE if connection was successfully initialized, #FALSE otherwise. - * - * Since: 0.8 - */ -gboolean -tracker_thumbnailer_init (void) +static gboolean +tracker_thumbnailer_initable_init (GInitable *initable, + GCancellable *cancellable, + GError **error) { TrackerThumbnailerPrivate *private; - GError *error = NULL; + TrackerThumbnailer *thumbnailer; GVariant *v; - private = g_new0 (TrackerThumbnailerPrivate, 1); + thumbnailer = TRACKER_THUMBNAILER (initable); + private = tracker_thumbnailer_get_instance_private (thumbnailer); /* Don't start at 0, start at 1. */ private->request_id = 1; - - g_private_replace (&private_key, private); + private->service_is_available = FALSE; g_message ("Thumbnailer connections being set up..."); - private->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); - - if (!private->connection) { - g_critical ("Could not connect to the D-Bus session bus, %s", - error ? error->message : "no error given."); - g_clear_error (&error); - - private->service_is_available = FALSE; + private->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, error); + if (!private->connection) return FALSE; - } private->cache_proxy = g_dbus_proxy_new_sync (private->connection, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, @@ -165,10 +157,10 @@ tracker_thumbnailer_init (void) THUMBCACHE_PATH, THUMBCACHE_INTERFACE, NULL, - &error); - - if (error) { - goto error_handler; + error); + if (!private->cache_proxy) { + g_object_unref (private->connection); + return FALSE; } private->manager_proxy = g_dbus_proxy_new_sync (private->connection, @@ -178,10 +170,12 @@ tracker_thumbnailer_init (void) THUMBMAN_PATH, THUMBMAN_INTERFACE, NULL, - &error); + error); - if (error) { - goto error_handler; + if (!private->manager_proxy) { + g_object_unref (private->connection); + g_object_unref (private->cache_proxy); + return FALSE; } v = g_dbus_proxy_call_sync (private->manager_proxy, @@ -190,28 +184,14 @@ tracker_thumbnailer_init (void) G_DBUS_CALL_FLAGS_NONE, -1, NULL, - &error); - -error_handler: - - if (error) { - g_message ("Thumbnailer service did not return supported mime types, %s", - error->message); - - g_error_free (error); - - if (private->cache_proxy) { - g_object_unref (private->cache_proxy); - private->cache_proxy = NULL; - } - - if (private->manager_proxy) { - g_object_unref (private->manager_proxy); - private->manager_proxy = NULL; - } + error); + if (!v) { + g_object_unref (private->connection); + g_object_unref (private->cache_proxy); + g_object_unref (private->manager_proxy); return FALSE; - } else if (v) { + } else { GStrv mime_types = NULL; GStrv uri_schemes = NULL; @@ -258,17 +238,29 @@ error_handler: return TRUE; } -/** - * tracker_thumbnailer_shutdown: - * - * Shuts down the thumbnailer connection. - * - * Since: 0.8 - */ -void -tracker_thumbnailer_shutdown (void) +static void +tracker_thumbnailer_initable_iface_init (GInitableIface *iface) { - g_private_replace (&private_key, NULL); + iface->init = tracker_thumbnailer_initable_init; +} + +static void +tracker_thumbnailer_class_init (TrackerThumbnailerClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = tracker_thumbnailer_finalize; +} + +static void +tracker_thumbnailer_init (TrackerThumbnailer *thumbnailer) +{ +} + +TrackerThumbnailer * +tracker_thumbnailer_new (void) +{ + return g_initable_new (TRACKER_TYPE_THUMBNAILER, NULL, NULL, NULL); } /** @@ -285,20 +277,19 @@ tracker_thumbnailer_shutdown (void) * Since: 0.8 */ gboolean -tracker_thumbnailer_move_add (const gchar *from_uri, - const gchar *mime_type, - const gchar *to_uri) +tracker_thumbnailer_move_add (TrackerThumbnailer *thumbnailer, + const gchar *from_uri, + const gchar *mime_type, + const gchar *to_uri) { - TrackerThumbnailerPrivate *private; /* mime_type can be NULL */ - + g_return_val_if_fail (TRACKER_IS_THUMBNAILER (thumbnailer), FALSE); g_return_val_if_fail (from_uri != NULL, FALSE); g_return_val_if_fail (to_uri != NULL, FALSE); - private = g_private_get (&private_key); - g_return_val_if_fail (private != NULL, FALSE); + private = tracker_thumbnailer_get_instance_private (thumbnailer); if (!private->service_is_available) { return FALSE; @@ -331,17 +322,17 @@ tracker_thumbnailer_move_add (const gchar *from_uri, * Since: 0.8 */ gboolean -tracker_thumbnailer_remove_add (const gchar *uri, - const gchar *mime_type) +tracker_thumbnailer_remove_add (TrackerThumbnailer *thumbnailer, + const gchar *uri, + const gchar *mime_type) { TrackerThumbnailerPrivate *private; + g_return_val_if_fail (TRACKER_IS_THUMBNAILER (thumbnailer), FALSE); /* mime_type can be NULL */ - g_return_val_if_fail (uri != NULL, FALSE); - private = g_private_get (&private_key); - g_return_val_if_fail (private != NULL, FALSE); + private = tracker_thumbnailer_get_instance_private (thumbnailer); if (!private->service_is_available) { return FALSE; @@ -369,14 +360,15 @@ tracker_thumbnailer_remove_add (const gchar *uri, * Since: 0.8 */ gboolean -tracker_thumbnailer_cleanup (const gchar *uri_prefix) +tracker_thumbnailer_cleanup (TrackerThumbnailer *thumbnailer, + const gchar *uri_prefix) { TrackerThumbnailerPrivate *private; + g_return_val_if_fail (TRACKER_IS_THUMBNAILER (thumbnailer), FALSE); g_return_val_if_fail (uri_prefix != NULL, FALSE); - private = g_private_get (&private_key); - g_return_val_if_fail (private != NULL, FALSE); + private = tracker_thumbnailer_get_instance_private (thumbnailer); if (!private->service_is_available) { return FALSE; @@ -408,13 +400,14 @@ tracker_thumbnailer_cleanup (const gchar *uri_prefix) * Since: 0.8 */ void -tracker_thumbnailer_send (void) +tracker_thumbnailer_send (TrackerThumbnailer *thumbnailer) { TrackerThumbnailerPrivate *private; guint list_len; - private = g_private_get (&private_key); - g_return_if_fail (private != NULL); + g_return_if_fail (TRACKER_IS_THUMBNAILER (thumbnailer)); + + private = tracker_thumbnailer_get_instance_private (thumbnailer); if (!private->service_is_available) { return; |