diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2014-01-25 23:36:04 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2014-02-20 13:09:01 +0100 |
commit | 1ea22530ec093a97b0e591fbc141791f10ecd2a1 (patch) | |
tree | 7739f7307e24fd4214d6610ca70f28378bdba71b | |
parent | 60fdc9b900ae1c66a65721c8314e8cc3358ca461 (diff) | |
download | tracker-1ea22530ec093a97b0e591fbc141791f10ecd2a1.tar.gz |
libtracker-miner: Turn thumbnailer into an object
TrackerMinerFS in libtracker-miner was already doing most of the
tracker_thumbnailer_* calls necessary. The only API required on
callers only was tracker_thumbnailer_init/shutdown(). So just
turn this into an object so all usage is kept private to
libtracker-miner, and we can remove these headers out of the
public.
-rw-r--r-- | docs/reference/libtracker-miner/libtracker-miner-docs.sgml | 1 | ||||
-rw-r--r-- | docs/reference/libtracker-miner/libtracker-miner-sections.txt | 10 | ||||
-rw-r--r-- | src/libtracker-miner/Makefile.am | 11 | ||||
-rw-r--r-- | src/libtracker-miner/tracker-miner-fs.c | 19 | ||||
-rw-r--r-- | src/libtracker-miner/tracker-miner.h | 1 | ||||
-rw-r--r-- | src/libtracker-miner/tracker-miner.vapi | 12 | ||||
-rw-r--r-- | src/libtracker-miner/tracker-thumbnailer.c | 161 | ||||
-rw-r--r-- | src/libtracker-miner/tracker-thumbnailer.h | 44 | ||||
-rw-r--r-- | src/miners/fs/tracker-main.c | 4 |
9 files changed, 132 insertions, 131 deletions
diff --git a/docs/reference/libtracker-miner/libtracker-miner-docs.sgml b/docs/reference/libtracker-miner/libtracker-miner-docs.sgml index 1bcca34da..033041138 100644 --- a/docs/reference/libtracker-miner/libtracker-miner-docs.sgml +++ b/docs/reference/libtracker-miner/libtracker-miner-docs.sgml @@ -58,7 +58,6 @@ <xi:include href="xml/tracker-miner-enums.xml"/> <xi:include href="xml/tracker-storage.xml"/> <xi:include href="xml/tracker-media-art.xml"/> - <xi:include href="xml/tracker-thumbnailer.xml"/> </chapter> </part> diff --git a/docs/reference/libtracker-miner/libtracker-miner-sections.txt b/docs/reference/libtracker-miner/libtracker-miner-sections.txt index 2dd3b896f..3428a008a 100644 --- a/docs/reference/libtracker-miner/libtracker-miner-sections.txt +++ b/docs/reference/libtracker-miner/libtracker-miner-sections.txt @@ -259,16 +259,6 @@ tracker_storage_get_type </SECTION> <SECTION> -<FILE>tracker-thumbnailer</FILE> -tracker_thumbnailer_cleanup -tracker_thumbnailer_init -tracker_thumbnailer_move_add -tracker_thumbnailer_remove_add -tracker_thumbnailer_send -tracker_thumbnailer_shutdown -</SECTION> - -<SECTION> <FILE>tracker-decorator</FILE> <TITLE>TrackerDecorator</TITLE> TrackerDecorator diff --git a/src/libtracker-miner/Makefile.am b/src/libtracker-miner/Makefile.am index 7a5b45785..e91a2fe6c 100644 --- a/src/libtracker-miner/Makefile.am +++ b/src/libtracker-miner/Makefile.am @@ -50,7 +50,9 @@ private_sources = \ tracker-sparql-buffer.h \ tracker-sparql-buffer.c \ tracker-storage.c \ - tracker-storage.h + tracker-storage.h \ + tracker-thumbnailer.c \ + tracker-thumbnailer.h miner_sources = \ $(libtracker_miner_monitor_sources) \ @@ -85,8 +87,6 @@ libtracker_miner_@TRACKER_API_VERSION@_la_SOURCES = \ tracker-indexing-tree.h \ tracker-network-provider.c \ tracker-password-provider.c \ - tracker-thumbnailer.c \ - tracker-thumbnailer.h \ tracker-media-art.c \ tracker-media-art.h @@ -106,8 +106,7 @@ libtracker_minerinclude_HEADERS = \ tracker-miner-web.h \ tracker-network-provider.h \ tracker-password-provider.h \ - tracker-storage.h \ - tracker-thumbnailer.h + tracker-storage.h libtracker_miner_@TRACKER_API_VERSION@_la_LDFLAGS = \ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) @@ -115,7 +114,7 @@ if !ENABLE_GCOV # Using enable_gcov instead of have_unit_test because when doing a release # we disable gcov but NOT the unit tests libtracker_miner_@TRACKER_API_VERSION@_la_LDFLAGS += \ - -export-symbols-regex '^tracker_(miner|thumbnailer|crawler|storage|password_provider|network_provider|indexing_tree|file_system|file_notifier|directory_flags|filter_type|filter_policy|decorator)_.*' + -export-symbols-regex '^tracker_(miner|crawler|storage|password_provider|network_provider|indexing_tree|file_system|file_notifier|directory_flags|filter_type|filter_policy|decorator)_.*' endif libtracker_miner_@TRACKER_API_VERSION@_la_LIBADD = \ diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c index 1bf742e33..23f72e9a4 100644 --- a/src/libtracker-miner/tracker-miner-fs.c +++ b/src/libtracker-miner/tracker-miner-fs.c @@ -144,6 +144,7 @@ typedef struct { GString *sparql; const gchar *source_uri; const gchar *uri; + TrackerMiner *miner; } RecursiveMoveData; struct _TrackerMinerFSPrivate { @@ -186,6 +187,8 @@ struct _TrackerMinerFSPrivate { TrackerIndexingTree *indexing_tree; + TrackerThumbnailer *thumbnailer; + /* Status */ guint been_started : 1; /* TRUE if miner has been started */ guint been_crawled : 1; /* TRUE if initial crawling has been @@ -637,6 +640,8 @@ miner_fs_initable_init (GInitable *initable, G_CALLBACK (task_pool_limit_reached_notify_cb), initable); + priv->thumbnailer = tracker_thumbnailer_new (); + return TRUE; } @@ -710,6 +715,9 @@ fs_finalize (GObject *object) g_object_unref (priv->indexing_tree); g_object_unref (priv->file_notifier); + if (priv->thumbnailer) + g_object_unref (priv->thumbnailer); + #ifdef EVENT_QUEUE_ENABLE_TRACE if (priv->queue_status_timeout_id) g_source_remove (priv->queue_status_timeout_id); @@ -1352,7 +1360,7 @@ item_remove (TrackerMinerFS *fs, if (!only_children) { flags = TRACKER_BULK_MATCH_EQUALS; } else { - tracker_thumbnailer_remove_add (uri, NULL); + tracker_thumbnailer_remove_add (fs->priv->thumbnailer, uri, NULL); tracker_media_art_queue_remove (uri, NULL); } @@ -1505,6 +1513,7 @@ item_update_children_uri_cb (GObject *object, gpointer user_data) { RecursiveMoveData *data = user_data; + TrackerMinerFS *fs = TRACKER_MINER_FS (data->miner); GError *error = NULL; TrackerSparqlCursor *cursor = tracker_sparql_connection_query_finish (TRACKER_SPARQL_CONNECTION (object), result, &error); @@ -1547,7 +1556,8 @@ item_update_children_uri_cb (GObject *object, "} ", child_urn, child_urn, child_uri); - tracker_thumbnailer_move_add (child_source_uri, child_mime, child_uri); + tracker_thumbnailer_move_add (fs->priv->thumbnailer, + child_source_uri, child_mime, child_uri); g_free (child_uri); } @@ -1634,7 +1644,7 @@ item_move (TrackerMinerFS *fs, source_uri, uri); - tracker_thumbnailer_move_add (source_uri, + tracker_thumbnailer_move_add (fs->priv->thumbnailer, source_uri, g_file_info_get_content_type (file_info), uri); @@ -1712,6 +1722,7 @@ item_move (TrackerMinerFS *fs, move_data.sparql = sparql; move_data.source_uri = source_uri; move_data.uri = uri; + move_data.miner = TRACKER_MINER (fs); item_update_children_uri (fs, &move_data, source_uri, uri); @@ -2270,7 +2281,7 @@ item_queue_handlers_cb (gpointer user_data) /* Print stats and signal finished */ process_stop (fs); - tracker_thumbnailer_send (); + tracker_thumbnailer_send (fs->priv->thumbnailer); tracker_media_art_queue_empty (tracker_miner_get_connection (TRACKER_MINER (fs))); } else { /* Flush any possible pending update here */ diff --git a/src/libtracker-miner/tracker-miner.h b/src/libtracker-miner/tracker-miner.h index 386f21d2a..ab4ea1037 100644 --- a/src/libtracker-miner/tracker-miner.h +++ b/src/libtracker-miner/tracker-miner.h @@ -26,7 +26,6 @@ #include <libtracker-miner/tracker-decorator.h> #include <libtracker-miner/tracker-decorator-fs.h> #include <libtracker-miner/tracker-storage.h> -#include <libtracker-miner/tracker-thumbnailer.h> #include <libtracker-miner/tracker-media-art.h> #include <libtracker-miner/tracker-network-provider.h> #include <libtracker-miner/tracker-password-provider.h> diff --git a/src/libtracker-miner/tracker-miner.vapi b/src/libtracker-miner/tracker-miner.vapi index 92db951f9..096e38e1c 100644 --- a/src/libtracker-miner/tracker-miner.vapi +++ b/src/libtracker-miner/tracker-miner.vapi @@ -134,16 +134,4 @@ namespace Tracker { } [CCode (cheader_filename = "libtracker-miner/tracker-miner.h")] public const string MINER_WEB_DBUS_INTERFACE; - [CCode (cheader_filename = "libtracker-miner/tracker-miner.h")] - public static bool thumbnailer_cleanup (string uri_prefix); - [CCode (cheader_filename = "libtracker-miner/tracker-miner.h")] - public static bool thumbnailer_init (); - [CCode (cheader_filename = "libtracker-miner/tracker-miner.h")] - public static bool thumbnailer_move_add (string from_uri, string mime_type, string to_uri); - [CCode (cheader_filename = "libtracker-miner/tracker-miner.h")] - public static bool thumbnailer_remove_add (string uri, string mime_type); - [CCode (cheader_filename = "libtracker-miner/tracker-miner.h")] - public static void thumbnailer_send (); - [CCode (cheader_filename = "libtracker-miner/tracker-miner.h")] - public static void thumbnailer_shutdown (); } 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; diff --git a/src/libtracker-miner/tracker-thumbnailer.h b/src/libtracker-miner/tracker-thumbnailer.h index d6fc5b0c8..c7b2f0859 100644 --- a/src/libtracker-miner/tracker-thumbnailer.h +++ b/src/libtracker-miner/tracker-thumbnailer.h @@ -24,17 +24,43 @@ #error "Only <libtracker-miner/tracker-miner.h> can be included directly." #endif +#include <glib-object.h> + G_BEGIN_DECLS -gboolean tracker_thumbnailer_init (void); -void tracker_thumbnailer_shutdown (void); -void tracker_thumbnailer_send (void); -gboolean tracker_thumbnailer_move_add (const gchar *from_uri, - const gchar *mime_type, - const gchar *to_uri); -gboolean tracker_thumbnailer_remove_add (const gchar *uri, - const gchar *mime_type); -gboolean tracker_thumbnailer_cleanup (const gchar *uri_prefix); +#define TRACKER_TYPE_THUMBNAILER (tracker_thumbnailer_get_type()) +#define TRACKER_THUMBNAILER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TRACKER_TYPE_THUMBNAILER, TrackerThumbnailer)) +#define TRACKER_THUMBNAILER_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), TRACKER_TYPE_THUMBNAILER, TrackerThumbnailerClass)) +#define TRACKER_IS_THUMBNAILER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TRACKER_TYPE_THUMBNAILER)) +#define TRACKER_IS_THUMBNAILER_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), TRACKER_TYPE_THUMBNAILER)) +#define TRACKER_THUMBNAILER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TRACKER_TYPE_THUMBNAILER, TrackerThumbnailerClass)) + +typedef struct _TrackerThumbnailer TrackerThumbnailer; +typedef struct _TrackerThumbnailerClass TrackerThumbnailerClass; + +struct _TrackerThumbnailer { + GObject parent_instance; +}; + +struct _TrackerThumbnailerClass { + GObjectClass parent_class; +}; + + +GType tracker_thumbnailer_get_type (void) G_GNUC_CONST; +TrackerThumbnailer * + tracker_thumbnailer_new (void); + +void tracker_thumbnailer_send (TrackerThumbnailer *thumbnailer); +gboolean tracker_thumbnailer_move_add (TrackerThumbnailer *thumbnailer, + const gchar *from_uri, + const gchar *mime_type, + const gchar *to_uri); +gboolean tracker_thumbnailer_remove_add (TrackerThumbnailer *thumbnailer, + const gchar *uri, + const gchar *mime_type); +gboolean tracker_thumbnailer_cleanup (TrackerThumbnailer *thumbnailer, + const gchar *uri_prefix); G_END_DECLS diff --git a/src/miners/fs/tracker-main.c b/src/miners/fs/tracker-main.c index 41305c035..120404452 100644 --- a/src/miners/fs/tracker-main.c +++ b/src/miners/fs/tracker-main.c @@ -1081,8 +1081,6 @@ main (gint argc, gchar *argv[]) miners = g_slist_prepend (miners, miner_files); miners = g_slist_prepend (miners, miner_applications); - tracker_thumbnailer_init (); - miner_handle_first (config, do_mtime_checking); /* Go, go, go! */ @@ -1105,8 +1103,6 @@ main (gint argc, gchar *argv[]) g_object_unref (config); g_object_unref (miner_files_index); - tracker_thumbnailer_shutdown (); - g_slist_foreach (miners, (GFunc) finalize_miner, NULL); g_slist_free (miners); |