[tracker] tracker-extract: Use albumartist if available



commit 99e55345d17017ad263fcf5ac5dcda1a4ab66135
Author: Marinus Schraal <mschraal src gnome org>
Date:   Fri Oct 28 10:46:57 2016 +0200

    tracker-extract: Use albumartist if available
    
    Use albumartist in libav/vorbis/flac (resource-helpers), gstreamer & mp3
    extractors if available to be part of the album(-disc) uri. This makes
    the uri more unique and tracker better at distinguishing separate albums
    and it makes all the extractors behave the same.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=773697

 src/libtracker-extract/tracker-resource-helpers.c |   23 ++++++++++-
 src/tracker-extract/tracker-extract-gstreamer.c   |   43 ++++++++++-----------
 src/tracker-extract/tracker-extract-mp3.c         |   27 +++++++++++--
 3 files changed, 63 insertions(+), 30 deletions(-)
---
diff --git a/src/libtracker-extract/tracker-resource-helpers.c 
b/src/libtracker-extract/tracker-resource-helpers.c
index 3041c64..3b49c72 100644
--- a/src/libtracker-extract/tracker-resource-helpers.c
+++ b/src/libtracker-extract/tracker-resource-helpers.c
@@ -248,12 +248,23 @@ tracker_extract_new_music_album_disc (const char      *album_title,
                                       TrackerResource *album_artist,
                                       int              disc_number)
 {
-       char *album_uri, *disc_uri;
+       gchar *album_uri, *disc_uri;
+       const gchar *album_artist_name;
+
        TrackerResource *album, *album_disc;
 
        g_return_val_if_fail (album_title != NULL, NULL);
 
-       album_uri = tracker_sparql_escape_uri_printf ("urn:album:%s", album_title);
+       album_artist_name = tracker_resource_get_first_string (album_artist,
+                                                              "nmm:artistName");
+
+       if (album_artist != NULL) {
+               album_uri = tracker_sparql_escape_uri_printf ("urn:album:%s:%s",
+                                                             album_title,
+                                                             album_artist_name);
+       } else {
+               album_uri = tracker_sparql_escape_uri_printf ("urn:album:%s", album_title);
+       }
        album = tracker_resource_new (album_uri);
 
        tracker_resource_set_uri (album, "rdf:type", "nmm:MusicAlbum");
@@ -261,14 +272,20 @@ tracker_extract_new_music_album_disc (const char      *album_title,
 
        if (album_artist != NULL) {
                tracker_resource_add_relation (album, "nmm:albumArtist", album_artist);
+               disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:%s:Disc%d",
+                                                            album_title,
+                                                            album_artist_name,
+                                                            disc_number);
+       } else {
+               disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:Disc%d", album_title, 
disc_number);
        }
 
-       disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:Disc%d", album_title, disc_number);
        album_disc = tracker_resource_new (disc_uri);
        tracker_resource_set_uri (album_disc, "rdf:type", "nmm:MusicAlbumDisc");
        tracker_resource_set_int (album_disc, "nmm:setNumber", disc_number > 0 ? disc_number : 1);
        tracker_resource_add_relation (album_disc, "nmm:albumDiscAlbum", album);
 
+       g_free (album_uri);
        g_free (disc_uri);
 
        g_object_unref (album);
diff --git a/src/tracker-extract/tracker-extract-gstreamer.c b/src/tracker-extract/tracker-extract-gstreamer.c
index 41ddf6d..74bbb91 100644
--- a/src/tracker-extract/tracker-extract-gstreamer.c
+++ b/src/tracker-extract/tracker-extract-gstreamer.c
@@ -637,10 +637,9 @@ extractor_maybe_get_album_disc (MetadataExtractor *extractor,
 {
        TrackerResource *album = NULL, *album_artist = NULL, *album_disc = NULL;
        gchar *album_uri, *album_disc_uri;
-       gchar *album_artist_name;
-       gchar *album_title = NULL;
-       gchar *album_artist_temp = NULL;
+       gchar *album_artist_name = NULL;
        gchar *track_artist_temp = NULL;
+       gchar *album_title = NULL;
        gboolean has_it;
        guint volume_number;
 
@@ -649,17 +648,15 @@ extractor_maybe_get_album_disc (MetadataExtractor *extractor,
        if (!album_title)
                return NULL;
 
-       gst_tag_list_get_string (tag_list, GST_TAG_ALBUM_ARTIST, &album_artist_temp);
+       gst_tag_list_get_string (tag_list, GST_TAG_ALBUM_ARTIST, &album_artist_name);
        gst_tag_list_get_string (tag_list, GST_TAG_ARTIST, &track_artist_temp);
 
-       album_artist_name = g_strdup (tracker_coalesce_strip (2, album_artist_temp, track_artist_temp));
-
-        if (album_artist_name != NULL) {
-                album_artist = intern_artist (extractor, album_artist_name);
-                album_uri = tracker_sparql_escape_uri_printf ("urn:album:%s:%s", album_title, 
album_artist_name);
-        } else {
-                album_uri = tracker_sparql_escape_uri_printf ("urn:album:%s", album_title);
-        }
+       if (album_artist_name != NULL) {
+               album_artist = intern_artist (extractor, album_artist_name);
+               album_uri = tracker_sparql_escape_uri_printf ("urn:album:%s:%s", album_title, 
album_artist_name);
+       } else {
+               album_uri = tracker_sparql_escape_uri_printf ("urn:album:%s", album_title);
+       }
 
        album = tracker_resource_new (album_uri);
        tracker_resource_set_uri (album, "rdf:type", "nmm:MusicAlbum");
@@ -675,15 +672,15 @@ extractor_maybe_get_album_disc (MetadataExtractor *extractor,
 
        has_it = gst_tag_list_get_uint (tag_list, GST_TAG_ALBUM_VOLUME_NUMBER, &volume_number);
 
-        if (album_artist) {
-                album_disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:%s:Disc%d",
-                                                                   album_title, album_artist_name,
-                                                                   has_it ? volume_number : 1);
-        } else {
-                album_disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:Disc%d",
-                                                                   album_title,
-                                                                   has_it ? volume_number : 1);
-        }
+       if (album_artist) {
+               album_disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:%s:Disc%d",
+                                                                  album_title, album_artist_name,
+                                                                  has_it ? volume_number : 1);
+       } else {
+               album_disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:Disc%d",
+                                                                  album_title,
+                                                                  has_it ? volume_number : 1);
+       }
 
        album_disc = tracker_resource_new (album_disc_uri);
        tracker_resource_set_uri (album_disc, "rdf:type", "nmm:MusicAlbumDisc");
@@ -694,11 +691,11 @@ extractor_maybe_get_album_disc (MetadataExtractor *extractor,
        set_property_from_gst_tag (album, "nmm:albumPeakGain", extractor->tagcache, GST_TAG_ALBUM_PEAK);
 
 #ifdef HAVE_LIBMEDIAART
-       extractor->media_art_artist = album_artist_name;
+       extractor->media_art_artist = g_strdup (tracker_coalesce_strip (2, album_artist_name, 
track_artist_temp));
        extractor->media_art_title = album_title;
 #endif
 
-       g_free (album_artist_temp);
+       g_free (album_artist_name);
        g_free (track_artist_temp);
 
        return album_disc;
diff --git a/src/tracker-extract/tracker-extract-mp3.c b/src/tracker-extract/tracker-extract-mp3.c
index bfbafa5..501b175 100644
--- a/src/tracker-extract/tracker-extract-mp3.c
+++ b/src/tracker-extract/tracker-extract-mp3.c
@@ -2456,7 +2456,17 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
        }
 
        if (md.album_name) {
-               char *album_uri = tracker_sparql_escape_uri_printf ("urn:album:%s", md.album_name);
+               gchar *album_uri;
+
+               if (md.album_artist_name) {
+                       album_uri = tracker_sparql_escape_uri_printf ("urn:album:%s:%s",
+                                                               md.album_name,
+                                                               md.album_artist_name);
+               } else {
+                       album_uri = tracker_sparql_escape_uri_printf ("urn:album:%s",
+                                                               md.album_name);
+               }
+
                md.album = tracker_resource_new (album_uri);
 
                tracker_resource_set_uri (md.album, "rdf:type", "nmm:MusicAlbum");
@@ -2473,6 +2483,8 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
                if (md.track_count > 0) {
                        tracker_resource_set_int (md.album, "nmm:albumTrackCount", md.track_count);
                }
+
+               g_free (album_uri);
        }
 
        tracker_resource_add_uri (main_resource, "rdf:type", "nmm:MusicPiece");
@@ -2537,9 +2549,16 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
                TrackerResource *album_disc;
                gchar *album_disc_uri;
 
-               album_disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:Disc%d",
-                                                                  md.album_name,
-                                                                  md.set_number > 0 ? md.set_number : 1);
+               if (md.album_artist_name) {
+                       album_disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:%s:Disc%d",
+                                                                    md.album_name,
+                                                                    md.album_artist_name,
+                                                                    md.set_number > 0 ? md.set_number : 1);
+               } else {
+                       album_disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:Disc%d",
+                                                                    md.album_name,
+                                                                    md.set_number > 0 ? md.set_number : 1);
+               }
 
                album_disc = tracker_resource_new (album_disc_uri);
                tracker_resource_set_uri (album_disc, "rdf:type", "nmm:MusicAlbumDisc");


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]