[grilo-plugins/wip/jfelder/tracker-support-genre] tracker: Add genre key mapping



commit 67233cb8fb56efabf51b1a906deede38d669287b
Author: Jean Felder <jfelder src gnome org>
Date:   Sun Mar 29 21:54:33 2020 +0200

    tracker: Add genre key mapping
    
    Map nfo:genre to GRL_METADATA_KEY_ALBUM_GENRE.
    Extract multiple genres if a common delimiter character (comma, slash
    or semi-colon) is used.

 src/tracker/grl-tracker-utils.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)
---
diff --git a/src/tracker/grl-tracker-utils.c b/src/tracker/grl-tracker-utils.c
index 14cea8af..191220ac 100644
--- a/src/tracker/grl-tracker-utils.c
+++ b/src/tracker/grl-tracker-utils.c
@@ -107,6 +107,30 @@ set_favourite (TrackerSparqlCursor *cursor,
   grl_data_set_boolean (GRL_DATA (media), key, is_favourite);
 }
 
+static void
+set_genre (TrackerSparqlCursor *cursor,
+           gint                 column,
+           GrlMedia            *media,
+           GrlKeyID             key)
+{
+  /* Tracker concatenetes multiple genres with a comma (vorbis or flac files).
+     ID3 (mp3 files) does not support multiple genres. A usual workaround is
+     to use a delimiter character such as a semi-colon or slashes.
+   */
+  const gchar *str = tracker_sparql_cursor_get_string (cursor, column, NULL);
+  gchar **genres = g_strsplit_set (str, ",;/", -1);
+
+  if (genres) {
+    gint i = 0;
+    gchar *genre = genres[i];
+    while (genre != NULL) {
+      grl_media_add_genre (media, g_strstrip (genre));
+      genre = genres[++i];
+    }
+  }
+  g_strfreev (genres);
+}
+
 static void
 set_title_from_filename (TrackerSparqlCursor *cursor,
                          gint                 column,
@@ -285,6 +309,12 @@ grl_tracker_setup_key_mappings (void)
                       "nmm:artistName(nmm:composer(?urn))",
                       "audio");
 
+  insert_key_mapping_with_setter (GRL_METADATA_KEY_GENRE,
+                                  "nfo:genre",
+                                  "nfo:genre(?urn)",
+                                  "audio",
+                                  set_genre);
+
   insert_key_mapping (GRL_METADATA_KEY_SIZE,
                       NULL,
                       "nfo:fileSize(?urn)",


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