Blame SOURCES/drop-libmusicbrainz-dep.patch

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