[grilo-plugins/wip/jfelder/acoustid-creation-date] acoustid: Add support for creation_date



commit 12b84f9a6dca884ca1e54f9fc0835837a4369ec9
Author: Jean Felder <jfelder src gnome org>
Date:   Mon Jul 8 16:05:37 2019 +0200

    acoustid: Add support for creation_date
    
    According to Picard
    website (https://picard.musicbrainz.org/docs/mappings/), the creation
    date is the earliest release in the release group.
    
    Acoustid test is also updated to retrieve the creation_date.

 src/lua-factory/sources/grl-acoustid.lua      | 28 ++++++++++++++++++++++++++-
 tests/lua-factory/sources/test_lua_acoustid.c | 27 ++++++++++++++++----------
 2 files changed, 44 insertions(+), 11 deletions(-)
---
diff --git a/src/lua-factory/sources/grl-acoustid.lua b/src/lua-factory/sources/grl-acoustid.lua
index 07a2439..1778585 100644
--- a/src/lua-factory/sources/grl-acoustid.lua
+++ b/src/lua-factory/sources/grl-acoustid.lua
@@ -28,7 +28,7 @@ source = {
   id = "grl-acoustid",
   name = "Acoustid",
   description = "a source that provides audio identification",
-  supported_keys = { "title", "album", "artist", "mb-recording-id", "mb-album-id", "mb-artist-id", 
"mb-release-group-id", "mb-release-id", "album-disc-number", "publication-date", "track-number" },
+  supported_keys = { "title", "album", "artist", "mb-recording-id", "mb-album-id", "mb-artist-id", 
"mb-release-group-id", "mb-release-id", "album-disc-number", "publication-date", "track-number", 
"creation-date" },
   supported_media = { 'audio' },
   config_keys = {
     required = { "api-key" },
@@ -103,6 +103,7 @@ function build_media(results)
   local record, album, artist
   local release_group_id
   local sources = 0
+  local creation_date = nil
 
   if results and #results > 0 and
       results[1].recordings and
@@ -139,6 +140,31 @@ function build_media(results)
   end
 
   if album and album.releases and #album.releases > 0 then
+    if keys.creation_date then
+      for _, release in ipairs(album.releases) do
+       if release.date then
+         local month = release.date.month or 1
+         local day = release.date.day or 1
+         local date_tmp = {day=day, month=month, year=release.date.year}
+         if not creation_date or
+             date_tmp.year < creation_date.year or
+             (date_tmp.year == creation_date.year and
+               date_tmp.month < creation_date.month) or
+             (date_tmp.year == creation_date.year and
+               date_tmp.month == creation_date.month and
+               date_tmp.day < creation_date.day) then
+           creation_date = date_tmp
+         end
+       end
+      end
+
+      if creation_date then
+       local str_date = string.format('%04d-%02d-%02d', creation_date.year,
+                                      creation_date.month, creation_date.day)
+       media.creation_date = str_date
+      end
+    end
+
     release = album.releases[1]
     media.mb_release_id = keys.mb_album_id and release.id or nil
 
diff --git a/tests/lua-factory/sources/test_lua_acoustid.c b/tests/lua-factory/sources/test_lua_acoustid.c
index a2255a5..36329f2 100644
--- a/tests/lua-factory/sources/test_lua_acoustid.c
+++ b/tests/lua-factory/sources/test_lua_acoustid.c
@@ -52,6 +52,7 @@ resolve (GrlSource   *source,
          gchar      **out_mb_release_group_id,
          gint        *out_album_disc_number,
          gchar      **out_publication_date,
+        gchar      **out_creation_date,
          gint        *out_track_number)
 {
   GList *keys;
@@ -59,7 +60,7 @@ resolve (GrlSource   *source,
   GrlOperationOptions *options;
   GrlRegistry *registry;
   GrlKeyID chromaprint_key, mb_release_id_key, mb_release_group_id_key;
-  GDateTime *date;
+  GDateTime *publication_date, *creation_date;
   GError *error = NULL;
 
   registry = grl_registry_get_default ();
@@ -78,6 +79,7 @@ resolve (GrlSource   *source,
                                     GRL_METADATA_KEY_TITLE,
                                     GRL_METADATA_KEY_ALBUM_DISC_NUMBER,
                                     GRL_METADATA_KEY_PUBLICATION_DATE,
+                                   GRL_METADATA_KEY_CREATION_DATE,
                                     GRL_METADATA_KEY_TRACK_NUMBER,
                                     NULL);
   options = grl_operation_options_new (NULL);
@@ -105,8 +107,10 @@ resolve (GrlSource   *source,
   *out_mb_release_group_id = g_strdup (grl_data_get_string (GRL_DATA (audio),
                                                             mb_release_group_id_key));
   *out_album_disc_number = grl_media_get_album_disc_number (audio);
-  date = grl_media_get_publication_date (audio);
-  *out_publication_date = g_date_time_format (date, "%Y-%m-%d");
+  publication_date = grl_media_get_publication_date (audio);
+  *out_publication_date = g_date_time_format (publication_date, "%Y-%m-%d");
+  creation_date = grl_media_get_creation_date (audio);
+  *out_creation_date = g_date_time_format (creation_date, "%Y-%m-%d");
   *out_track_number = grl_media_get_track_number (audio);
 
   g_list_free (keys);
@@ -133,6 +137,7 @@ test_resolve_fingerprint (void)
     gchar *mb_release_id;
     gint album_disc_number;
     gchar *publication_date;
+    gchar *creation_date;
     gint track_number;
   } audios[] = {
    { FINGERPRINT_LUDOVICO_EI, 445,
@@ -140,31 +145,31 @@ test_resolve_fingerprint (void)
      "ac615d26-df00-3053-9462-7636375603b4", "The Number One Classical Album 2008",
      "8f6ac978-95cf-41e8-82fb-043624652e04", "Primavera",
      "d73e4041-375c-4b9f-8366-46089bca304c",
-     1, "2007-11-26", 19 },
+     1, "2007-11-26", "2007-11-26", 19 },
    { FINGERPRINT_NORAH_JONES, 160,
      "985c709c-7771-4de3-9024-7bda29ebe3f9", "Norah Jones",
      "f5cffa96-262c-49af-9747-3f04a1d42c78", "\u00d63 Greatest Hits 49",
      "6d8ba615-d8fe-4f99-b38f-0a17d657b1bb", "Chasing Pirates",
      "1ee64f6c-560f-421f-83dc-7fd34e5b0674",
-     1, "2010-03-12", 18 },
+     1, "2010-03-12", "2010-03-12", 18 },
    { FINGERPRINT_TROMBONE_SH, 243,
      "cae4fd51-4d58-4d48-92c1-6198cc2e45ed", "Trombone Shorty",
      "c3418122-387b-4477-90cf-e5e6d110e054", "For True",
      "96483bdd-f219-4ae3-a94e-04feeeef22a4", "Buckjump",
      "567621e3-b80f-4c30-af5f-2ecf0882e94a",
-     1, "2011-01-01", 1 },
+     1, "2011-01-01", "2011-01-01", 1 },
    { FINGERPRINT_PHILIP_GLAS, 601,
      "5ae54dee-4dba-49c0-802a-a3b3b3adfe9b", "Philip Glass",
      "52f1f9d5-5166-4ceb-9289-6fb1a87f367c", "The Passion of Ramakrishna",
      "298e15a1-b29b-4947-9dca-ec3634f9ebde", "Part 2",
      "2807def3-7873-4277-b079-c9a963d99993",
-     1, "2012-01-01", 3 },
+     1, "2012-01-01", "2012-01-01", 3 },
    { FINGERPRINT_RADIOHEAD_PA, 385,
      "a74b1b7f-71a5-4011-9441-d0b5e4122711", "Radiohead",
      "dd02a722-bb7f-4771-9a5b-681f5556ce71", "3X plus de bruit!",
      "9f9cf187-d6f9-437f-9d98-d59cdbd52757", "Paranoid Android",
      "67016a2b-118d-483d-9e36-49080ae43df4",
-     1, "1997-01-01", 4,
+     1, "1997-01-01", "1997-01-01", 4,
    },
   };
 
@@ -175,7 +180,7 @@ test_resolve_fingerprint (void)
     gsize size;
     GError *error = NULL;
     gchar *mb_artist_id, *artist, *mb_album_id, *album, *mb_recording_id, *title,
-          *mb_release_id, *mb_release_group_id, *publication_date;
+          *mb_release_id, *mb_release_group_id, *publication_date, *creation_date;
     gint album_disc_number, track_number;
 
     file = g_file_new_for_uri (audios[i].fingerprint_file);
@@ -186,7 +191,7 @@ test_resolve_fingerprint (void)
     resolve (source, data, audios[i].duration,
              &mb_artist_id, &artist, &mb_album_id, &album, &mb_recording_id, &title,
              &mb_release_id, &mb_release_group_id, &album_disc_number, &publication_date,
-             &track_number);
+             &creation_date, &track_number);
     g_free (data);
 
     g_assert_cmpstr (audios[i].title, ==, title);
@@ -208,6 +213,8 @@ test_resolve_fingerprint (void)
     g_assert_cmpint (audios[i].album_disc_number, ==, album_disc_number);
     g_assert_cmpstr (audios[i].publication_date, ==, publication_date);
     g_free (publication_date);
+    g_assert_cmpstr (audios[i].creation_date, ==, creation_date);
+    g_free (creation_date);
     g_assert_cmpint (audios[i].track_number, ==, track_number);
   }
 }


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