Blame SOURCES/drop-libmusicbrainz-dep.patch

145602
From 93adbd744a52c32879637375885b1df4feff21f4 Mon Sep 17 00:00:00 2001
145602
From: Felipe Borges <felipeborges@gnome.org>
145602
Date: Wed, 14 Jul 2021 16:19:19 +0200
145602
Subject: [PATCH] Drop libmusicbrainz dependency
145602
145602
We are only using libmusicbrainz for finding the ASIN code for a
145602
given artist and album.
145602
145602
With this changes we use libsoup to query the musicbrainz API
145602
directly, allowing for the dependency on libmusicbrainz5 to be
145602
dropped.
145602
145602
See https://musicbrainz.org/doc/MusicBrainz_API
145602
and https://musicbrainz.org/doc/ASIN
145602
---
145602
 flatpak/org.gnome.NautilusPreviewer.json |  11 ---
145602
 meson.build                              |   1 -
145602
 src/libsushi/meson.build                 |   1 -
145602
 src/libsushi/sushi-utils.c               | 110 -----------------------
145602
 src/viewers/audio.js                     |  30 +++++--
145602
 5 files changed, 23 insertions(+), 130 deletions(-)
145602
145602
diff --git a/flatpak/org.gnome.NautilusPreviewer.json b/flatpak/org.gnome.NautilusPreviewer.json
145602
index 22502f7..4291a26 100644
145602
--- a/flatpak/org.gnome.NautilusPreviewer.json
145602
+++ b/flatpak/org.gnome.NautilusPreviewer.json
145602
@@ -86,17 +86,6 @@
145602
                 }
145602
             ]
145602
         },
145602
-        {
145602
-            "name": "libmusicbrainz",
145602
-            "buildsystem": "cmake",
145602
-            "sources": [
145602
-                {
145602
-                    "type": "archive",
145602
-                    "url": "https://github.com/metabrainz/libmusicbrainz/releases/download/release-5.1.0/libmusicbrainz-5.1.0.tar.gz",
145602
-                    "sha256": "6749259e89bbb273f3f5ad7acdffb7c47a2cf8fcaeab4c4695484cef5f4c6b46"
145602
-                }
145602
-            ]
145602
-        },
145602
         {
145602
             "name": "gtksourceview",
145602
             "config-opts": [
145602
diff --git a/meson.build b/meson.build
145602
index 21a292a..c712397 100644
145602
--- a/meson.build
145602
+++ b/meson.build
145602
@@ -21,7 +21,6 @@ gtk_x11_dep = dependency('gtk+-x11-3.0', required: get_option('X11'))
145602
 gtk_wayland_dep = dependency('gtk+-wayland-3.0', version: '>= 3.21.5', required: get_option('wayland'))
145602
 gtksourceview_dep = dependency('gtksourceview-4', version: '>=4.0.3')
145602
 harfbuzz_dep = dependency('harfbuzz', version: '>=0.9.9')
145602
-musicbrainz_dep = dependency('libmusicbrainz5')
145602
 webkit_dep = dependency('webkit2gtk-4.0')
145602
 
145602
 bindir = join_paths(get_option('prefix'), get_option('bindir'))
145602
diff --git a/src/libsushi/meson.build b/src/libsushi/meson.build
145602
index fe2e874..8740954 100644
145602
--- a/src/libsushi/meson.build
145602
+++ b/src/libsushi/meson.build
145602
@@ -39,7 +39,6 @@ libsushi_deps = [
145602
   gstreamer_video_dep,
145602
   gtk_dep,
145602
   harfbuzz_dep,
145602
-  musicbrainz_dep
145602
 ]
145602
 
145602
 libsushi_sources = [
145602
diff --git a/src/libsushi/sushi-utils.c b/src/libsushi/sushi-utils.c
145602
index 5096fe4..d39b3f4 100644
145602
--- a/src/libsushi/sushi-utils.c
145602
+++ b/src/libsushi/sushi-utils.c
145602
@@ -27,7 +27,6 @@
145602
 
145602
 #include <glib/gstdio.h>
145602
 #include <gtk/gtk.h>
145602
-#include <musicbrainz5/mb5_c.h>
145602
 
145602
 #ifdef GDK_WINDOWING_X11
145602
 #include <gdk/gdkx.h>
145602
@@ -400,112 +399,3 @@ sushi_pixbuf_from_gst_sample (GstSample *sample,
145602
 
145602
   return pixbuf;
145602
 }
145602
-
145602
-typedef struct {
145602
-  gchar *artist;
145602
-  gchar *album;
145602
-} FetchUriTaskData;
145602
-
145602
-static void
145602
-fetch_uri_task_data_free (gpointer user_data)
145602
-{
145602
-  FetchUriTaskData *data = user_data;
145602
-
145602
-  g_free (data->artist);
145602
-  g_free (data->album);
145602
-
145602
-  g_slice_free (FetchUriTaskData, data);
145602
-}
145602
-
145602
-static FetchUriTaskData *
145602
-fetch_uri_task_data_new (const gchar *artist,
145602
-                         const gchar *album)
145602
-{
145602
-  FetchUriTaskData *retval;
145602
-
145602
-  retval = g_slice_new0 (FetchUriTaskData);
145602
-  retval->artist = g_strdup (artist);
145602
-  retval->album = g_strdup (album);
145602
-
145602
-  return retval;
145602
-}
145602
-
145602
-static void
145602
-fetch_uri_job (GTask *task,
145602
-               gpointer source_object,
145602
-               gpointer task_data,
145602
-               GCancellable *cancellable)
145602
-{
145602
-  FetchUriTaskData *data = task_data;
145602
-  g_autofree gchar *retval = NULL;
145602
-  g_auto(GStrv) param_names = NULL, param_values = NULL;
145602
-  Mb5Metadata metadata;
145602
-  Mb5Query query;
145602
-  Mb5Release release;
145602
-  Mb5ReleaseList release_list;
145602
-
145602
-  query = mb5_query_new ("sushi", NULL, 0);
145602
-
145602
-  param_names = g_new (gchar*, 3);
145602
-  param_values = g_new (gchar*, 3);
145602
-
145602
-  param_names[0] = g_strdup ("query");
145602
-  param_values[0] = g_strdup_printf ("artist:\"%s\" AND release:\"%s\"", data->artist, data->album);
145602
-
145602
-  param_names[1] = g_strdup ("limit");
145602
-  param_values[1] = g_strdup ("10");
145602
-
145602
-  param_names[2] = NULL;
145602
-  param_values[2] = NULL;
145602
-
145602
-  metadata = mb5_query_query (query, "release", "", "",
145602
-                              2, param_names, param_values);
145602
-
145602
-  mb5_query_delete (query);
145602
-
145602
-  if (metadata) {
145602
-    release_list = mb5_metadata_get_releaselist (metadata);
145602
-    int i;
145602
-    int release_list_length = mb5_release_list_size (release_list);
145602
-    for (i = 0; i < release_list_length; i++) {
145602
-      gchar asin[255];
145602
-
145602
-      release = mb5_release_list_item (release_list, i);
145602
-      mb5_release_get_asin (release, asin, 255);
145602
-
145602
-      if (asin != NULL && asin[0] != '\0') {
145602
-        retval = g_strdup (asin);
145602
-        break;
145602
-      }
145602
-    }
145602
-  }
145602
-  mb5_metadata_delete (metadata);
145602
-
145602
-  if (retval == NULL)
145602
-    g_task_return_new_error (task,
145602
-                             G_IO_ERROR,
145602
-                             G_IO_ERROR_NOT_FOUND, "%s",
145602
-                             "Error getting the ASIN from MusicBrainz");
145602
-  else
145602
-    g_task_return_pointer (task, g_steal_pointer (&retval), g_free);
145602
-}
145602
-
145602
-gchar *
145602
-sushi_get_asin_for_track_finish (GAsyncResult *result,
145602
-                                 GError **error)
145602
-{
145602
-  return g_task_propagate_pointer (G_TASK (result), error);
145602
-}
145602
-
145602
-void
145602
-sushi_get_asin_for_track (const gchar *artist,
145602
-                          const gchar *album,
145602
-                          GAsyncReadyCallback callback,
145602
-                          gpointer user_data)
145602
-{
145602
-  g_autoptr(GTask) task = g_task_new (NULL, NULL, callback, user_data);
145602
-  FetchUriTaskData *data = fetch_uri_task_data_new (artist, album);
145602
-
145602
-  g_task_set_task_data (task, data, fetch_uri_task_data_free);
145602
-  g_task_run_in_thread (task, fetch_uri_job);
145602
-}
145602
diff --git a/src/viewers/audio.js b/src/viewers/audio.js
145602
index f210165..dba474e 100644
145602
--- a/src/viewers/audio.js
145602
+++ b/src/viewers/audio.js
145602
@@ -47,6 +47,7 @@ function _formatTimeString(timeVal) {
145602
 }
145602
 
145602
 const AMAZON_IMAGE_FORMAT = "http://images.amazon.com/images/P/%s.01.LZZZZZZZ.jpg";
145602
+const MUSIC_BRAINZ_ASIN_FORMAT = "https://musicbrainz.org/ws/2/release/?query=release:\"%s\"AND artist:\"%s\"&limit=1&fmt=json&inc=asin";
145602
 const fetchCoverArt = function(_tagList, _callback) {
145602
     function _fetchFromTags() {
145602
         let coverSample = null;
145602
@@ -191,13 +192,28 @@ const fetchCoverArt = function(_tagList, _callback) {
145602
         let artist = _tagList.get_string('artist')[1];
145602
         let album = _tagList.get_string('album')[1];
145602
 
145602
-        Sushi.get_asin_for_track(artist, album, (o, res) => {
145602
-            let asin
145602
-            try {
145602
-                asin = Sushi.get_asin_for_track_finish(res);
145602
-            } catch (e) {
145602
-                done(e, null);
145602
-                return;
145602
+        let uri = MUSIC_BRAINZ_ASIN_FORMAT.format(album, artist);
145602
+        let session = new Soup.SessionAsync();
145602
+
145602
+        let request;
145602
+        try {
145602
+            request = Soup.Message.new('GET', uri);
145602
+            request.request_headers.append('User-Agent', 'gnome-sushi');
145602
+        } catch (e) {
145602
+            done(e, null);
145602
+            return;
145602
+        }
145602
+
145602
+        session.queue_message(request, (r, res) => {
145602
+            let asin = null;
145602
+            if (request.status_code == Soup.Status.OK) {
145602
+                try {
145602
+                    let json_response = JSON.parse(request.response_body.data);
145602
+                    asin = json_response['release'][0]['asin'].toString();
145602
+                } catch (e) {
145602
+                    done(e, null);
145602
+                    return;
145602
+                }
145602
             }
145602
 
145602
             _fetchFromCache(asin, (err, cover) => {
145602
-- 
145602
2.31.1
145602