[tracker/avoid-album-art-duplicates: 1/4] tracker-extract: Avoid albumart duplicates for embedded
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/avoid-album-art-duplicates: 1/4] tracker-extract: Avoid albumart duplicates for embedded
- Date: Wed, 17 Aug 2011 16:15:50 +0000 (UTC)
commit 063a5f108515867094a47c827cd9ccaf071c6690
Author: Philip Van Hoof <philip codeminded be>
Date: Wed Aug 17 13:45:25 2011 +0200
tracker-extract: Avoid albumart duplicates for embedded
src/tracker-extract/tracker-albumart.c | 66 +++++++++++++++++++++++++++++++-
1 files changed, 65 insertions(+), 1 deletions(-)
---
diff --git a/src/tracker-extract/tracker-albumart.c b/src/tracker-extract/tracker-albumart.c
index 61a148f..b022259 100644
--- a/src/tracker-extract/tracker-albumart.c
+++ b/src/tracker-extract/tracker-albumart.c
@@ -67,6 +67,26 @@ albumart_queue_cb (GObject *source_object,
gpointer user_data);
+static gchar *
+checksum_for_data (GChecksumType checksum_type,
+ const guchar *data,
+ gsize length)
+{
+ GChecksum *checksum;
+ gchar *retval;
+
+ checksum = g_checksum_new (checksum_type);
+ if (!checksum) {
+ return NULL;
+ }
+
+ g_checksum_update (checksum, data, length);
+ retval = g_strdup (g_checksum_get_string (checksum));
+ g_checksum_free (checksum);
+
+ return retval;
+}
+
static gboolean
albumart_heuristic (const gchar *artist,
const gchar *album,
@@ -319,7 +339,51 @@ albumart_set (const unsigned char *buffer,
tracker_albumart_get_path (artist, album, "album", NULL, &local_path, NULL);
- retval = tracker_albumart_buffer_to_jpeg (buffer, len, mime, local_path);
+ if (artist == NULL || g_strcmp0 (artist, " ") == 0) {
+ retval = tracker_albumart_buffer_to_jpeg (buffer, len, mime, local_path);
+ } else {
+ gchar *album_path;
+
+ tracker_albumart_get_path (" ", album, "album", NULL, &album_path, NULL);
+
+ if (!g_file_test (album_path, G_FILE_TEST_EXISTS)) {
+ retval = tracker_albumart_buffer_to_jpeg (buffer, len, mime, album_path);
+
+ if (retval && symlink(album_path, local_path) != 0) {
+ perror ("symlink() error");
+ retval = FALSE;
+ } else {
+ retval = TRUE;
+ }
+ } else {
+ gchar *contents = NULL;
+ gsize len2 = 0;
+
+ if (g_file_get_contents (album_path, &contents, &len2, NULL)) {
+ gchar *sum1, *sum2;
+
+ sum1 = checksum_for_data (G_CHECKSUM_MD5, buffer, len);
+ sum2 = checksum_for_data (G_CHECKSUM_MD5, contents, len2);
+
+ if (g_strcmp0 (sum1, sum2) == 0) {
+ if (symlink (album_path, local_path) != 0) {
+ perror ("symlink() error");
+ retval = FALSE;
+ } else {
+ retval = TRUE;
+ }
+ } else {
+ retval = tracker_albumart_buffer_to_jpeg (buffer, len, mime, local_path);
+ }
+
+ g_free (sum1);
+ g_free (sum2);
+ g_free (contents);
+ }
+
+ g_free (album_path);
+ }
+ }
g_free (local_path);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]