[tracker] tracker-miner-fs: move albumart extraction to tracker-extract
- From: Martyn James Russell <mr src gnome org>
- To: svn-commits-list gnome org
- Subject: [tracker] tracker-miner-fs: move albumart extraction to tracker-extract
- Date: Tue, 28 Jul 2009 11:17:23 +0000 (UTC)
commit c68add4b49f6bcf4163bae6556396ff0fa58f2db
Author: Martyn Russell <martyn imendio com>
Date: Tue Jul 28 12:06:51 2009 +0100
tracker-miner-fs: move albumart extraction to tracker-extract
Now we do the processing in tracker-extract and only request the
thumbnail for the albumart to be queued from tracker-miner-fs. This
saves us sending potentially large album art over dbus
data/dbus/tracker-extract.xml | 7 +-
src/tracker-extract/Makefile.am | 7 +
.../tracker-albumart.c | 351 +++++++++-----------
.../tracker-albumart.h | 19 +-
src/tracker-extract/tracker-extract-gstreamer.c | 32 +-
src/tracker-extract/tracker-extract-mp3.c | 33 +-
src/tracker-extract/tracker-extract.c | 49 +---
src/tracker-extract/tracker-extract.h | 7 -
src/tracker-extract/tracker-main.c | 4 +
src/tracker-extract/tracker-marshal.list | 2 +-
src/tracker-miner-fs/Makefile.am | 4 -
src/tracker-miner-fs/tracker-main.c | 103 ++++++-
src/tracker-miner-fs/tracker-marshal.list | 2 +-
13 files changed, 309 insertions(+), 311 deletions(-)
---
diff --git a/data/dbus/tracker-extract.xml b/data/dbus/tracker-extract.xml
index 9100fda..51e31b5 100644
--- a/data/dbus/tracker-extract.xml
+++ b/data/dbus/tracker-extract.xml
@@ -22,12 +22,9 @@
<arg type="s" name="sparql" direction="out" />
</method>
- <signal name="ProcessAlbumArt">
- <arg type="ay" name="buffer"/>
- <arg type="s" name="mime"/>
- <arg type="s" name="artist"/>
- <arg type="s" name="album"/>
+ <signal name="QueueThumbnail">
<arg type="s" name="filename"/>
+ <arg type="s" name="mime"/>
</signal>
</interface>
</node>
diff --git a/src/tracker-extract/Makefile.am b/src/tracker-extract/Makefile.am
index 5d2cb26..7a92519 100644
--- a/src/tracker-extract/Makefile.am
+++ b/src/tracker-extract/Makefile.am
@@ -12,6 +12,7 @@ INCLUDES = \
$(WARN_CFLAGS) \
$(GLIB2_CFLAGS) \
$(GCOV_CFLAGS) \
+ $(GDKPIXBUF_CFLAGS) \
$(GMODULE_CFLAGS) \
$(DBUS_CFLAGS) \
$(EXEMPI_CFLAGS) \
@@ -231,6 +232,8 @@ libextract_playlist_la_LIBADD = $(GLIB2_LIBS) $(TOTEM_PL_PARSER_LIBS) $(GCOV_LIB
libexec_PROGRAMS = tracker-extract
tracker_extract_SOURCES = \
+ tracker-albumart.c \
+ tracker-albumart.h \
tracker-config.c \
tracker-config.h \
tracker-dbus.c \
@@ -255,6 +258,10 @@ tracker_extract_SOURCES += tracker-topanalyzer.cpp tracker-topanalyzer.h
tracker_extract_LDADD += $(STREAMANALYZER_LIBS)
endif
+if HAVE_GDKPIXBUF
+tracker_extract_LDADD += $(GDKPIXBUF_LIBS)
+endif
+
tracker-marshal.h: tracker-marshal.list
$(GLIB_GENMARSHAL) $< --prefix=tracker_marshal --header > $@
diff --git a/src/tracker-miner-fs/tracker-albumart.c b/src/tracker-extract/tracker-albumart.c
similarity index 87%
rename from src/tracker-miner-fs/tracker-albumart.c
rename to src/tracker-extract/tracker-albumart.c
index 8bd7d0c..db6cc9a 100644
--- a/src/tracker-miner-fs/tracker-albumart.c
+++ b/src/tracker-extract/tracker-albumart.c
@@ -38,9 +38,12 @@
#include <dbus/dbus-glib-bindings.h>
+#include <libtracker-common/tracker-storage.h>
#include <libtracker-common/tracker-thumbnailer.h>
#include "tracker-albumart.h"
+#include "tracker-dbus.h"
+#include "tracker-extract.h"
#include "tracker-marshal.h"
#define ALBUMARTER_SERVICE "com.nokia.albumart"
@@ -51,29 +54,18 @@
#define THUMBNAILER_PATH "/org/freedesktop/thumbnailer/Generic"
#define THUMBNAILER_INTERFACE "org.freedesktop.thumbnailer.Generic"
-#define DBUS_TYPE_UCHAR_ARRAY (dbus_g_type_get_collection ("GArray", G_TYPE_UCHAR))
-
typedef struct {
TrackerStorage *hal;
gchar *art_path;
gchar *local_uri;
} GetFileInfo;
-static void albumart_queue_cb (DBusGProxy *proxy,
- DBusGProxyCall *call,
- gpointer user_data);
-static gboolean albumart_process_cb (DBusGProxy *proxy,
- GArray *buffer,
- const gchar *mime,
- const gchar *artist,
- const gchar *album,
- const gchar *filename,
- gpointer user_data);
-
+static void albumart_queue_cb (DBusGProxy *proxy,
+ DBusGProxyCall *call,
+ gpointer user_data);
static gboolean initialized;
static gboolean disable_requests;
-static TrackerConfig *albumart_config;
static TrackerStorage *albumart_storage;
static GHashTable *albumart_cache;
static DBusGProxy *albumart_proxy;
@@ -512,7 +504,7 @@ albumart_heuristic (const gchar *artist,
file = NULL;
if (g_stat (dirname, &st) == -1) {
- g_warning ("Could not g_stat() directory:'%s' for albumart heuristic",
+ g_warning ("Could not g_stat() directory:'%s' for album art heuristic",
dirname);
g_free (dirname);
@@ -631,6 +623,26 @@ albumart_heuristic (const gchar *artist,
return retval;
}
+static void
+albumart_signal_queue_thumbnail (const gchar *file,
+ const gchar *mime)
+{
+ GObject *object;
+
+ object = tracker_dbus_get_object (TRACKER_TYPE_EXTRACT);
+ if (!object) {
+ /* This can happen if we run tracker-extract on the
+ * command line for one file only because we don't
+ * register the TrackerExtract object with DBus.
+ */
+ return;
+ }
+
+ g_message ("Album art being signaled for thumbnail queue for file:'%s', mime:'%s'",
+ file, mime);
+ g_signal_emit_by_name (object, "queue-thumbnail", file, mime);
+}
+
#ifdef HAVE_GDKPIXBUF
static gboolean
@@ -700,10 +712,7 @@ albumart_set (const unsigned char *buffer,
}
}
- if (tracker_config_get_enable_thumbnails (albumart_config)) {
- tracker_thumbnailer_queue_add (local_path, "image/jpeg");
- }
-
+ albumart_signal_queue_thumbnail (local_path, mime);
g_free (local_path);
return TRUE;
@@ -830,129 +839,6 @@ albumart_copy_to_local (TrackerStorage *hal,
}
}
-static gboolean
-albumart_process_cb (DBusGProxy *proxy,
- GArray *buffer,
- const gchar *mime,
- const gchar *artist,
- const gchar *album,
- const gchar *filename,
- gpointer user_data)
-{
- gchar *art_path;
- gboolean processed = TRUE;
- gchar *local_uri = NULL;
- gchar *filename_uri;
-
-
- if (strstr (filename, "://")) {
- filename_uri = g_strdup (filename);
- } else {
- filename_uri = g_filename_to_uri (filename, NULL, NULL);
- }
-
- albumart_get_path (artist,
- album,
- "album",
- filename_uri,
- &art_path,
- &local_uri);
-
- if (!art_path) {
- g_warning ("Albumart path could not be obtained, not processing any further");
-
- g_free (filename_uri);
- g_free (local_uri);
-
- return FALSE;
- }
-
- if (!g_file_test (art_path, G_FILE_TEST_EXISTS)) {
-#ifdef HAVE_GDKPIXBUF
- /* If we have embedded album art */
- if (buffer && buffer->len > 0) {
- processed = albumart_set ((const unsigned char *) buffer->data,
- (size_t) buffer->len,
- mime,
- artist,
- album,
- filename);
- } else {
-#endif /* HAVE_GDK_PIXBUF */
- /* If not, we perform a heuristic on the dir */
- gchar *key;
- gchar *dirname;
- GFile *file, *dirf;
-
- file = g_file_new_for_path (filename);
- dirf = g_file_get_parent (file);
- dirname = g_file_get_path (dirf);
- g_object_unref (file);
- g_object_unref (dirf);
-
- key = g_strdup_printf ("%s-%s-%s",
- artist ? artist : "",
- album ? album : "",
- dirname ? dirname : "");
-
- g_free (dirname);
-
- if (!g_hash_table_lookup (albumart_cache, key)) {
- if (!albumart_heuristic (artist,
- album,
- filename,
- local_uri,
- NULL)) {
- /* If the heuristic failed, we
- * request the download the
- * media-art to the media-art
- * downloaders
- */
- albumart_request_download (albumart_storage,
- artist,
- album,
- local_uri,
- art_path);
- }
-
- g_hash_table_insert (albumart_cache,
- key,
- GINT_TO_POINTER(TRUE));
- } else {
- g_free (key);
- }
-#ifdef HAVE_GDKPIXBUF
- }
-#endif /* HAVE_GDKPIXBUF */
-
- if (processed) {
- if (tracker_config_get_enable_thumbnails (albumart_config)) {
- tracker_thumbnailer_queue_add (filename_uri, "image/jpeg");
- }
- }
- } else {
- g_debug ("Albumart already exists for uri:'%s'",
- filename_uri);
- }
-
- if (local_uri && !g_file_test (local_uri, G_FILE_TEST_EXISTS)) {
- /* We can't reuse art_exists here because the
- * situation might have changed
- */
- if (g_file_test (art_path, G_FILE_TEST_EXISTS)) {
- albumart_copy_to_local (albumart_storage,
- art_path,
- local_uri);
- }
- }
-
- g_free (art_path);
- g_free (filename_uri);
- g_free (local_uri);
-
- return processed;
-}
-
static void
albumart_queue_cb (DBusGProxy *proxy,
DBusGProxyCall *call,
@@ -987,10 +873,7 @@ albumart_queue_cb (DBusGProxy *proxy,
g_debug ("Downloaded album art using DBus service for uri:'%s'",
uri);
- if (tracker_config_get_enable_thumbnails (albumart_config)) {
- tracker_thumbnailer_queue_add (uri, "image/jpeg");
- }
-
+ albumart_signal_queue_thumbnail (uri, "image/jpeg");
g_free (uri);
albumart_copy_to_local (info->hal,
@@ -1009,22 +892,17 @@ albumart_queue_cb (DBusGProxy *proxy,
}
gboolean
-tracker_albumart_init (TrackerConfig *config,
- TrackerStorage *storage)
+tracker_albumart_init (void)
{
- DBusGProxy *proxy;
DBusGConnection *connection;
GError *error = NULL;
g_return_val_if_fail (initialized == FALSE, FALSE);
- g_return_val_if_fail (TRACKER_IS_CONFIG (config), FALSE);
-
- albumart_config = g_object_ref (config);
#ifdef HAVE_HAL
- g_return_val_if_fail (TRACKER_IS_STORAGE (storage), FALSE);
-
- albumart_storage = g_object_ref (storage);
+ albumart_storage = tracker_storage_new ();
+#else /* HAVE_HAL */
+ albumart_storage = NULL;
#endif /* HAVE_HAL */
/* Cache to know if we have already handled uris */
@@ -1043,41 +921,6 @@ tracker_albumart_init (TrackerConfig *config,
return FALSE;
}
- /* Get proxy for Service / Path / Interface of the indexer */
- proxy = dbus_g_proxy_new_for_name (connection,
- "org.freedesktop.Tracker.Extract",
- "/org/freedesktop/Tracker/Extract",
- "org.freedesktop.Tracker.Extract");
-
- if (!proxy) {
- g_critical ("Could not create a DBusGProxy to the extract service");
- return FALSE;
- }
-
- dbus_g_object_register_marshaller (tracker_marshal_VOID__POINTER_STRING_STRING_STRING_STRING,
- G_TYPE_NONE,
- DBUS_TYPE_UCHAR_ARRAY,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_INVALID);
-
- dbus_g_proxy_add_signal (proxy,
- "ProcessAlbumArt",
- DBUS_TYPE_UCHAR_ARRAY,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal (proxy,
- "ProcessAlbumArt",
- G_CALLBACK (albumart_process_cb),
- NULL,
- NULL);
-
/* Get album art downloader proxy */
albumart_proxy = dbus_g_proxy_new_for_name (connection,
ALBUMARTER_SERVICE,
@@ -1108,9 +951,131 @@ tracker_albumart_shutdown (void)
}
#endif /* HAVE_HAL */
- if (albumart_config) {
- g_object_unref (albumart_config);
+ initialized = FALSE;
+}
+
+gboolean
+tracker_albumart_process (const unsigned char *buffer,
+ size_t len,
+ const gchar *mime,
+ const gchar *artist,
+ const gchar *album,
+ const gchar *filename)
+{
+ gchar *art_path;
+ gboolean processed = TRUE;
+ gchar *local_uri = NULL;
+ gchar *filename_uri;
+
+ g_debug ("Processing album art, buffer is %ld bytes, artist:'%s', album:'%s', filename:'%s', mime:'%s'",
+ len,
+ artist ? artist : "",
+ album ? album : "",
+ filename,
+ mime);
+
+ if (strstr (filename, "://")) {
+ filename_uri = g_strdup (filename);
+ } else {
+ filename_uri = g_filename_to_uri (filename, NULL, NULL);
}
- initialized = FALSE;
+ albumart_get_path (artist,
+ album,
+ "album",
+ filename_uri,
+ &art_path,
+ &local_uri);
+
+ if (!art_path) {
+ g_warning ("Album art path could not be obtained, not processing any further");
+
+ g_free (filename_uri);
+ g_free (local_uri);
+
+ return FALSE;
+ }
+
+ if (!g_file_test (art_path, G_FILE_TEST_EXISTS)) {
+#ifdef HAVE_GDKPIXBUF
+ /* If we have embedded album art */
+ if (buffer && len > 0) {
+ processed = albumart_set (buffer,
+ len,
+ mime,
+ artist,
+ album,
+ filename);
+ } else {
+#endif /* HAVE_GDK_PIXBUF */
+ /* If not, we perform a heuristic on the dir */
+ gchar *key;
+ gchar *dirname;
+ GFile *file, *dirf;
+
+ file = g_file_new_for_path (filename);
+ dirf = g_file_get_parent (file);
+ dirname = g_file_get_path (dirf);
+ g_object_unref (file);
+ g_object_unref (dirf);
+
+ key = g_strdup_printf ("%s-%s-%s",
+ artist ? artist : "",
+ album ? album : "",
+ dirname ? dirname : "");
+
+ g_free (dirname);
+
+ if (!g_hash_table_lookup (albumart_cache, key)) {
+ if (!albumart_heuristic (artist,
+ album,
+ filename,
+ local_uri,
+ NULL)) {
+ /* If the heuristic failed, we
+ * request the download the
+ * media-art to the media-art
+ * downloaders
+ */
+ albumart_request_download (albumart_storage,
+ artist,
+ album,
+ local_uri,
+ art_path);
+ }
+
+ g_hash_table_insert (albumart_cache,
+ key,
+ GINT_TO_POINTER(TRUE));
+ } else {
+ g_free (key);
+ }
+#ifdef HAVE_GDKPIXBUF
+ }
+#endif /* HAVE_GDKPIXBUF */
+
+ if (processed) {
+ albumart_signal_queue_thumbnail (filename_uri, "image/jpeg");
+ }
+ } else {
+ g_debug ("Album art already exists for uri:'%s'",
+ filename_uri);
+ }
+
+ if (local_uri && !g_file_test (local_uri, G_FILE_TEST_EXISTS)) {
+ /* We can't reuse art_exists here because the
+ * situation might have changed
+ */
+ if (g_file_test (art_path, G_FILE_TEST_EXISTS)) {
+ albumart_copy_to_local (albumart_storage,
+ art_path,
+ local_uri);
+ }
+ }
+
+ g_free (art_path);
+ g_free (filename_uri);
+ g_free (local_uri);
+
+ return processed;
}
diff --git a/src/tracker-miner-fs/tracker-albumart.h b/src/tracker-extract/tracker-albumart.h
similarity index 69%
rename from src/tracker-miner-fs/tracker-albumart.h
rename to src/tracker-extract/tracker-albumart.h
index 9cd3e6c..4aa2ff8 100644
--- a/src/tracker-miner-fs/tracker-albumart.h
+++ b/src/tracker-extract/tracker-albumart.h
@@ -18,21 +18,22 @@
* Boston, MA 02110-1301, USA.
*/
-#ifndef __TRACKER_MINER_FS_ALBUMART_H__
-#define __TRACKER_MINER_FS_ALBUMART_H__
+#ifndef __TRACKER_EXTRACT_ALBUMART_H__
+#define __TRACKER_EXTRACT_ALBUMART_H__
#include <glib.h>
-#include <libtracker-common/tracker-storage.h>
-
-#include "tracker-config.h"
-
G_BEGIN_DECLS
-gboolean tracker_albumart_init (TrackerConfig *config,
- TrackerStorage *hal);
+gboolean tracker_albumart_init (void);
void tracker_albumart_shutdown (void);
+gboolean tracker_albumart_process (const unsigned char *buffer,
+ size_t len,
+ const gchar *mime,
+ const gchar *artist,
+ const gchar *album,
+ const gchar *filename);
G_END_DECLS
-#endif /* __TRACKER_MINER_FS_ALBUMART_H__ */
+#endif /* __TRACKER_MINER_EXTRACT_H__ */
diff --git a/src/tracker-extract/tracker-extract-gstreamer.c b/src/tracker-extract/tracker-extract-gstreamer.c
index aeae8df..3ae0fae 100644
--- a/src/tracker-extract/tracker-extract-gstreamer.c
+++ b/src/tracker-extract/tracker-extract-gstreamer.c
@@ -38,9 +38,9 @@
#include <libtracker-common/tracker-ontology.h>
#include <libtracker-common/tracker-utils.h>
+#include "tracker-albumart.h"
#include "tracker-main.h"
#include "tracker-dbus.h"
-#include "tracker-extract.h"
/* We wait this long (seconds) for NULL state before freeing */
#define TRACKER_EXTRACT_GUARD_TIMEOUT 3
@@ -904,26 +904,20 @@ tracker_extract_gstreamer (const gchar *uri,
/* Save embedded art */
if (extractor->album_art_data && extractor->album_art_size) {
- GObject *object;
-
- object = tracker_dbus_get_object (TRACKER_TYPE_EXTRACT);
-
#ifdef HAVE_GDKPIXBUF
- tracker_extract_process_albumart (TRACKER_EXTRACT (object),
- extractor->album_art_data,
- extractor->album_art_size,
- extractor->album_art_mime,
- /* g_hash_table_lookup (metadata, "Audio:Artist") */ NULL,
- album,
- uri);
+ tracker_albumart_process (extractor->album_art_data,
+ extractor->album_art_size,
+ extractor->album_art_mime,
+ /* g_hash_table_lookup (metadata, "Audio:Artist") */ NULL,
+ album,
+ uri);
#else
- tracker_extract_process_albumart (TRACKER_EXTRACT (object),
- NULL,
- 0,
- NULL,
- /* g_hash_table_lookup (metadata, "Audio:Artist") */ NULL,
- album,
- uri);
+ tracker_albumart_process (NULL,
+ 0,
+ NULL,
+ /* g_hash_table_lookup (metadata, "Audio:Artist") */ NULL,
+ album,
+ uri);
#endif /* HAVE_GDKPIXBUF */
}
diff --git a/src/tracker-extract/tracker-extract-mp3.c b/src/tracker-extract/tracker-extract-mp3.c
index 70802da..af1386d 100644
--- a/src/tracker-extract/tracker-extract-mp3.c
+++ b/src/tracker-extract/tracker-extract-mp3.c
@@ -49,9 +49,9 @@
#include <libtracker-common/tracker-ontology.h>
#include <libtracker-common/tracker-utils.h>
+#include "tracker-albumart.h"
#include "tracker-main.h"
#include "tracker-dbus.h"
-#include "tracker-extract.h"
/* We mmap the beginning of the file and read separately the last 128 bytes
for id3v1 tags. While these are probably cornercases the rationale is that
@@ -1810,7 +1810,6 @@ static void
extract_mp3 (const gchar *uri,
TrackerSparqlBuilder *metadata)
{
- GObject *object;
gchar *filename;
int fd;
void *buffer;
@@ -1967,25 +1966,20 @@ extract_mp3 (const gchar *uri,
g_free (info.trackno);
g_free (info.genre);
- /* TODO */
- object = tracker_dbus_get_object (TRACKER_TYPE_EXTRACT);
-
#ifdef HAVE_GDKPIXBUF
- tracker_extract_process_albumart (TRACKER_EXTRACT (object),
- filedata.albumartdata,
- filedata.albumartsize,
- filedata.albumartmime,
- /* tracker_statement_list_find (metadata, NMM_PREFIX "performer") */ NULL,
- filedata.title,
- filename);
+ tracker_albumart_process (filedata.albumartdata,
+ filedata.albumartsize,
+ filedata.albumartmime,
+ /* tracker_statement_list_find (metadata, NMM_PREFIX "performer") */ NULL,
+ filedata.title,
+ filename);
#else
- tracker_extract_process_albumart (TRACKER_EXTRACT (object),
- NULL,
- 0,
- NULL,
- /* tracker_statement_list_find (metadata, NMM_PREFIX "performer") */ NULL,
- filedata.title,
- filename);
+ tracker_albumart_process (NULL,
+ 0,
+ NULL,
+ /* tracker_statement_list_find (metadata, NMM_PREFIX "performer") */ NULL,
+ filedata.title,
+ filename);
#endif /* HAVE_GDKPIXBUF */
@@ -2007,3 +2001,4 @@ tracker_get_extract_data (void)
{
return extract_data;
}
+
diff --git a/src/tracker-extract/tracker-extract.c b/src/tracker-extract/tracker-extract.c
index 6ca88bc..22aba44 100644
--- a/src/tracker-extract/tracker-extract.c
+++ b/src/tracker-extract/tracker-extract.c
@@ -40,8 +40,6 @@
#define MAX_EXTRACT_TIME 10
-#define DBUS_TYPE_UCHAR_ARRAY (dbus_g_type_get_collection ("GArray", G_TYPE_UCHAR))
-
#define TRACKER_EXTRACT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_EXTRACT, TrackerExtractPrivate))
extern gboolean debug;
@@ -57,7 +55,7 @@ typedef struct {
} ModuleData;
enum {
- PROCESS_ALBUM_ART,
+ QUEUE_THUMBNAIL,
LAST_SIGNAL
};
@@ -76,18 +74,15 @@ tracker_extract_class_init (TrackerExtractClass *klass)
object_class->finalize = tracker_extract_finalize;
- signals[PROCESS_ALBUM_ART] =
- g_signal_new ("process-album-art",
+ signals[QUEUE_THUMBNAIL] =
+ g_signal_new ("queue-thumbnail",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
- tracker_marshal_VOID__POINTER_STRING_STRING_STRING_STRING,
+ tracker_marshal_VOID__STRING_STRING,
G_TYPE_NONE,
- 5,
- DBUS_TYPE_UCHAR_ARRAY,
- G_TYPE_STRING,
- G_TYPE_STRING,
+ 2,
G_TYPE_STRING,
G_TYPE_STRING);
@@ -483,37 +478,3 @@ tracker_extract_get_metadata (TrackerExtract *object,
alarm (0);
}
}
-
-void
-tracker_extract_process_albumart (TrackerExtract *object,
- const unsigned char *buffer,
- size_t len,
- const gchar *mime,
- const gchar *artist,
- const gchar *album,
- const gchar *filename)
-{
- g_return_if_fail (buffer != NULL);
- g_return_if_fail (object != NULL);
- g_return_if_fail (mime != NULL);
- g_return_if_fail (filename != NULL);
-
- GArray *array;
-
- array = g_array_sized_new (FALSE,
- FALSE,
- sizeof (guchar),
- len);
- g_array_append_vals (array, buffer, len);
-
- g_signal_emit (object,
- signals[PROCESS_ALBUM_ART],
- 0,
- array,
- mime,
- artist,
- album,
- filename);
-
- g_array_free (array, TRUE);
-}
diff --git a/src/tracker-extract/tracker-extract.h b/src/tracker-extract/tracker-extract.h
index 0b90cd4..769b26a 100644
--- a/src/tracker-extract/tracker-extract.h
+++ b/src/tracker-extract/tracker-extract.h
@@ -64,13 +64,6 @@ void tracker_extract_get_metadata (TrackerExtract
void tracker_extract_get_metadata_by_cmdline (TrackerExtract *object,
const gchar *path,
const gchar *mime);
-void tracker_extract_process_albumart (TrackerExtract *object,
- const unsigned char *buffer,
- size_t len,
- const gchar *mime,
- const gchar *artist,
- const gchar *album,
- const gchar *filename);
G_END_DECLS
diff --git a/src/tracker-extract/tracker-main.c b/src/tracker-extract/tracker-main.c
index 97734c3..b09784c 100644
--- a/src/tracker-extract/tracker-main.c
+++ b/src/tracker-extract/tracker-main.c
@@ -49,6 +49,7 @@
#include <libtracker-common/tracker-thumbnailer.h>
#include <libtracker-common/tracker-ioprio.h>
+#include "tracker-albumart.h"
#include "tracker-config.h"
#include "tracker-main.h"
#include "tracker-dbus.h"
@@ -381,6 +382,8 @@ main (int argc, char *argv[])
return EXIT_FAILURE;
}
+ tracker_albumart_init ();
+
/* Main loop */
main_loop = g_main_loop_new (NULL, FALSE);
tracker_main_quit_timeout_reset ();
@@ -390,6 +393,7 @@ main (int argc, char *argv[])
g_message ("Shutdown started");
/* Shutdown subsystems */
+ tracker_albumart_shutdown ();
tracker_dbus_shutdown ();
tracker_log_shutdown ();
diff --git a/src/tracker-extract/tracker-marshal.list b/src/tracker-extract/tracker-marshal.list
index e4d6982..72f9937 100644
--- a/src/tracker-extract/tracker-marshal.list
+++ b/src/tracker-extract/tracker-marshal.list
@@ -1 +1 @@
-VOID:POINTER,STRING,STRING,STRING,STRING
+VOID:STRING,STRING
diff --git a/src/tracker-miner-fs/Makefile.am b/src/tracker-miner-fs/Makefile.am
index 61dbe55..92a13ce 100644
--- a/src/tracker-miner-fs/Makefile.am
+++ b/src/tracker-miner-fs/Makefile.am
@@ -13,7 +13,6 @@ INCLUDES = \
-DTRACKER_COMPILATION \
-I$(top_srcdir)/src \
$(WARN_CFLAGS) \
- $(GDKPIXBUF_CFLAGS) \
$(GMODULE_CFLAGS) \
$(PANGO_CFLAGS) \
$(DBUS_CFLAGS) \
@@ -41,8 +40,6 @@ libtracker_module_la_LIBADD = $(GCOV_LIBS)
libexec_PROGRAMS = tracker-miner-fs
tracker_miner_fs_SOURCES = \
- tracker-albumart.c \
- tracker-albumart.h \
tracker-config.c \
tracker-config.h \
tracker-crawler.c \
@@ -78,7 +75,6 @@ tracker_miner_fs_LDADD = \
$(top_builddir)/src/libinotify/libinotify.la \
$(tracker_store_win_libs) \
$(DBUS_LIBS) \
- $(GDKPIXBUF_LIBS) \
$(GMODULE_LIBS) \
$(GTHREAD_LIBS) \
$(PANGO_LIBS) \
diff --git a/src/tracker-miner-fs/tracker-main.c b/src/tracker-miner-fs/tracker-main.c
index da71ad2..811b438 100644
--- a/src/tracker-miner-fs/tracker-main.c
+++ b/src/tracker-miner-fs/tracker-main.c
@@ -48,7 +48,6 @@
#include <libtracker-data/tracker-turtle.h>
-#include "tracker-albumart.h"
#include "tracker-dbus.h"
#include "tracker-config.h"
#include "tracker-indexer.h"
@@ -67,7 +66,7 @@
" http://www.gnu.org/licenses/gpl.txt\n"
static GMainLoop *main_loop;
-
+static DBusGProxy *proxy_for_extractor;
static gboolean version;
static gint verbosity = -1;
static gint initial_sleep = -1;
@@ -220,6 +219,92 @@ daemon_availability_changed_cb (const gchar *name,
}
}
+static void
+albumart_queue_thumbnail_cb (DBusGProxy *proxy,
+ const gchar *filename,
+ const gchar *mime,
+ gpointer user_data)
+{
+ TrackerConfig *config;
+
+ g_message ("Album art received for thumbnail queue for uri:'%s' with mime:'%s'",
+ filename,
+ mime);
+
+ config = TRACKER_CONFIG (user_data);
+
+ if (tracker_config_get_enable_thumbnails (config)) {
+ tracker_thumbnailer_queue_add (filename, mime);
+ }
+}
+
+static gboolean
+albumart_init (TrackerConfig *config)
+{
+ DBusGConnection *connection;
+ GError *error = NULL;
+
+ g_message ("Setting up album art queue handler for thumbnails");
+
+ /* Signal handler for new album art from the extractor */
+ connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+
+ if (!connection) {
+ g_critical ("Could not connect to the DBus session bus, %s",
+ error ? error->message : "no error given.");
+ g_clear_error (&error);
+ return FALSE;
+ }
+
+ /* Get proxy for Service / Path / Interface of the indexer */
+ proxy_for_extractor =
+ dbus_g_proxy_new_for_name (connection,
+ "org.freedesktop.Tracker.Extract",
+ "/org/freedesktop/Tracker/Extract",
+ "org.freedesktop.Tracker.Extract");
+
+ if (!proxy_for_extractor) {
+ g_critical ("Could not create a DBusGProxy to the extract service");
+ return FALSE;
+ }
+
+ dbus_g_object_register_marshaller (tracker_marshal_VOID__STRING_STRING,
+ G_TYPE_NONE,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_INVALID);
+
+ dbus_g_proxy_add_signal (proxy_for_extractor,
+ "QueueThumbnail",
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_INVALID);
+
+ dbus_g_proxy_connect_signal (proxy_for_extractor,
+ "QueueThumbnail",
+ G_CALLBACK (albumart_queue_thumbnail_cb),
+ g_object_ref (config),
+ NULL);
+
+ return TRUE;
+}
+
+static void
+albumart_shutdown (TrackerConfig *config)
+{
+ dbus_g_proxy_disconnect_signal (proxy_for_extractor,
+ "QueueThumbnail",
+ G_CALLBACK (albumart_queue_thumbnail_cb),
+ config);
+
+ g_object_unref (config);
+
+ if (proxy_for_extractor) {
+ g_object_unref (proxy_for_extractor);
+ proxy_for_extractor = NULL;
+ }
+}
+
int
main (gint argc, gchar *argv[])
{
@@ -343,7 +428,7 @@ main (gint argc, gchar *argv[])
/* Set up connections to the thumbnailer if supported */
tracker_thumbnailer_init ();
- tracker_albumart_init (config, storage);
+ albumart_init (config);
if (process_all) {
/* Tell the indexer to process all configured modules */
@@ -363,6 +448,12 @@ main (gint argc, gchar *argv[])
tracker_turtle_shutdown ();
+ albumart_shutdown (config);
+ tracker_thumbnailer_shutdown ();
+ tracker_dbus_shutdown ();
+ tracker_module_config_shutdown ();
+ tracker_log_shutdown ();
+
g_main_loop_unref (main_loop);
g_object_unref (indexer);
g_object_unref (miner);
@@ -372,12 +463,6 @@ main (gint argc, gchar *argv[])
g_object_unref (storage);
}
- tracker_albumart_shutdown ();
- tracker_thumbnailer_shutdown ();
- tracker_dbus_shutdown ();
- tracker_module_config_shutdown ();
- tracker_log_shutdown ();
-
g_print ("\nOK\n\n");
return EXIT_SUCCESS;
diff --git a/src/tracker-miner-fs/tracker-marshal.list b/src/tracker-miner-fs/tracker-marshal.list
index 5bba08b..71edec1 100644
--- a/src/tracker-miner-fs/tracker-marshal.list
+++ b/src/tracker-miner-fs/tracker-marshal.list
@@ -5,4 +5,4 @@ VOID:STRING,OBJECT,OBJECT,BOOLEAN,BOOLEAN
VOID:STRING,BOOL
VOID:STRING,OBJECT
VOID:STRING,UINT,UINT,UINT,UINT
-VOID:POINTER,STRING,STRING,STRING,STRING
+VOID:STRING,STRING
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]