summaryrefslogtreecommitdiff
path: root/src/libtracker-miner/tracker-thumbnailer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libtracker-miner/tracker-thumbnailer.c')
-rw-r--r--src/libtracker-miner/tracker-thumbnailer.c161
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;