audio/glyr: disable all broken metadata providers, update to musicbrainz v2 API

musicbrainz v1 API was removed in 2018, glyr itself is more or less
abandoned upstream in 2016, but some metadata providers still work fine
(mostly lastfm, musicbrainz, lyrix & elyrics)

required to update audio/gmpc to a less deprecated version and somewhat
retain metadata fetching..
This commit is contained in:
landry
2026-02-22 08:18:57 +00:00
parent 428138e1cc
commit 191f2b1e24
16 changed files with 640 additions and 2 deletions
+5
View File
@@ -3,6 +3,7 @@ COMMENT = music related metadata searchengine
GH_ACCOUNT = sahib
GH_PROJECT = glyr
GH_TAGNAME = 1.0.10
REVISION = 0
CATEGORIES = audio net
SHARED_LIBS += glyr 0.0 # 1.1
@@ -22,4 +23,8 @@ MODCMAKE_POLICY_VERSION_OVERRIDE = Yes
NO_TEST = Yes
# ensure the one generated in the builddir is picked up
post-configure:
cp ${WRKBUILD}/lib/config.h ${WRKSRC}/lib/config.h
.include <bsd.port.mk>
+14 -2
View File
@@ -1,5 +1,17 @@
--- CMakeLists.txt.orig Mon Jan 19 00:47:10 2015
+++ CMakeLists.txt Wed Jun 17 20:30:15 2015
chunk 1: https://github.com/sahib/glyr/pull/104
Index: CMakeLists.txt
--- CMakeLists.txt.orig
+++ CMakeLists.txt
@@ -38,7 +38,7 @@ ENDIF()
# ------------------------------------------------
SET(GLYR_VERSION_MAJOR "1")
SET(GLYR_VERSION_MINOR "0")
-SET(GLYR_VERSION_MICRO "9")
+SET(GLYR_VERSION_MICRO "10")
SET(GLYR_VERSION_NAME "Raving Raven")
# ------------------------------------------------
@@ -92,6 +92,7 @@ FIND_PACKAGE(CURL REQUIRED)
PKG_CHECK_MODULES(GLIBPKG glib-2.0>=2.10 gthread-2.0 REQUIRED)
PKG_CHECK_MODULES(SQLITE3 sqlite3 REQUIRED)
+68
View File
@@ -1,3 +1,8 @@
Lower loglevel to debug
fix curl_easy_setopt warnings about wanting a long
cf https://github.com/curl/curl/issues/9779
include the right curl header
Index: lib/core.c
--- lib/core.c.orig
+++ lib/core.c
@@ -10,3 +15,66 @@ Index: lib/core.c
#include "stringlib.h"
#include "core.h"
@@ -48,7 +48,7 @@ static int _msg (const char * fmt, va_list params)
if (written != -1 && tmp_buf != NULL)
{
- g_log (G_LOG_DOMAIN,G_LOG_LEVEL_INFO,"%s",tmp_buf);
+ g_log (G_LOG_DOMAIN,G_LOG_LEVEL_DEBUG,"%s",tmp_buf);
g_free (tmp_buf);
tmp_buf = NULL;
}
@@ -403,14 +403,14 @@ static struct header_data * retrieve_content_info (gch
info = g_malloc0 (sizeof (struct header_data) );
gchar * link_user_agent = g_strdup_printf ("%s / linkvalidator",useragent);
- curl_easy_setopt (eh, CURLOPT_TIMEOUT, 10);
+ curl_easy_setopt (eh, CURLOPT_TIMEOUT, 10L);
curl_easy_setopt (eh, CURLOPT_NOSIGNAL, 1L);
curl_easy_setopt (eh, CURLOPT_USERAGENT, link_user_agent);
curl_easy_setopt (eh, CURLOPT_URL,url);
- curl_easy_setopt (eh, CURLOPT_FOLLOWLOCATION, TRUE);
+ curl_easy_setopt (eh, CURLOPT_FOLLOWLOCATION, (long)TRUE);
curl_easy_setopt (eh, CURLOPT_MAXREDIRS, 5L);
- curl_easy_setopt (eh, CURLOPT_HEADER,TRUE);
- curl_easy_setopt (eh, CURLOPT_SSL_VERIFYPEER, FALSE);
+ curl_easy_setopt (eh, CURLOPT_HEADER, (long)TRUE);
+ curl_easy_setopt (eh, CURLOPT_SSL_VERIFYPEER, (long)FALSE);
/* Dirty hack here: Amazon bitches at me when setting NOBODY to true *
* But otherwise large images won't pass with other providers *
@@ -418,11 +418,11 @@ static struct header_data * retrieve_content_info (gch
*/
if (strstr (url,"amazon") != NULL)
{
- curl_easy_setopt (eh, CURLOPT_NOBODY,FALSE);
+ curl_easy_setopt (eh, CURLOPT_NOBODY,(long)FALSE);
}
else
{
- curl_easy_setopt (eh, CURLOPT_NOBODY,TRUE);
+ curl_easy_setopt (eh, CURLOPT_NOBODY,(long)TRUE);
}
curl_easy_setopt (eh, CURLOPT_HEADERFUNCTION, header_cb);
@@ -477,9 +477,9 @@ static DLBufferContainer * DL_setopt (CURL *eh, GlyrMe
// Pass vars to curl
curl_easy_setopt (eh, CURLOPT_URL, url);
curl_easy_setopt (eh, CURLOPT_PRIVATE, magic_private_ptr);
- curl_easy_setopt (eh, CURLOPT_VERBOSE, (s && s->verbosity >= 4) );
+ curl_easy_setopt (eh, CURLOPT_VERBOSE, (long) (s && s->verbosity >= 4) );
curl_easy_setopt (eh, CURLOPT_WRITEFUNCTION, DL_buffer);
- curl_easy_setopt (eh, CURLOPT_SSL_VERIFYPEER, FALSE);
+ curl_easy_setopt (eh, CURLOPT_SSL_VERIFYPEER, (long) FALSE);
DLBufferContainer * dlbuffer = g_malloc0 (sizeof (DLBufferContainer) );
curl_easy_setopt (eh, CURLOPT_WRITEDATA, (void *) dlbuffer);
@@ -489,7 +489,7 @@ static DLBufferContainer * DL_setopt (CURL *eh, GlyrMe
// amazon plugin requires redirects
curl_easy_setopt (eh, CURLOPT_FOLLOWLOCATION, 1L);
- curl_easy_setopt (eh, CURLOPT_MAXREDIRS, (s) ? s->redirects : 2);
+ curl_easy_setopt (eh, CURLOPT_MAXREDIRS, (long) ((s) ? s->redirects : 2));
// Do not download 404 pages
curl_easy_setopt (eh, CURLOPT_FAILONERROR, 1L);
+14
View File
@@ -0,0 +1,14 @@
https://github.com/sahib/glyr/issues/99
Index: lib/glyr.h
--- lib/glyr.h.orig
+++ lib/glyr.h
@@ -18,7 +18,7 @@
* along with glyr. If not, see <http://www.gnu.org/licenses/>.
**************************************************************/
#ifndef GLYR_H
-#define GLYR_GLYR_H
+#define GLYR_H
/**
* SECTION:glyr
@@ -0,0 +1,68 @@
adapt for musicbrainz api v2
Index: lib/intern/albumlist/musicbrainz.c
--- lib/intern/albumlist/musicbrainz.c.orig
+++ lib/intern/albumlist/musicbrainz.c
@@ -23,7 +23,7 @@
static const gchar * albumlist_musicbrainz_url (GlyrQuery * sets)
{
- return "http://musicbrainz.org/ws/1/release/?type=xml&artist=${artist}&limit=100";
+ return "http://musicbrainz.org/ws/2/release/?query=artist:${artist}&limit=100";
}
/////////////////////////////////////////////////////////////
@@ -33,6 +33,8 @@ static const gchar * albumlist_musicbrainz_url (GlyrQu
#define TYPE_BEGIN "type=\""
#define TYPE_ENDIN "\" "
+#define GROUP_BEGIN "<release-group "
+#define GROUP_ENDIN "</release-group>"
#define ARTIST_BEGIN "<name>"
#define ARTIST_ENDIN "</name>"
@@ -40,6 +42,9 @@ static const gchar * albumlist_musicbrainz_url (GlyrQu
#define TITLE_BEGIN "<title>"
#define TITLE_ENDIN "</title>"
+
+#define STATUS_BEGIN "<status "
+#define STATUS_ENDIN "</status>"
/////////////////////////////////////////////////////////////
static bool is_in_list (GList * list, const char * to_cmp)
@@ -70,8 +75,8 @@ static bool type_is_valid (const char * type)
return result;
static const char * valid_types[] = {
- "Single Official",
- "Album Official",
+ "Single",
+ "Album",
NULL
};
@@ -97,8 +102,12 @@ static GList * albumlist_musicbrainz_parse (cb_object
while (continue_search (g_list_length (result_list),capo->s) &&
(node = strstr (node + 1, ALBUM_BEGIN) ) != NULL)
{
- gchar * type = get_search_value (node, TYPE_BEGIN, TYPE_ENDIN);
- if (type_is_valid (type))
+ gchar * rg = get_search_value (node, GROUP_BEGIN, GROUP_ENDIN);
+ gchar * type = get_search_value (rg, TYPE_BEGIN, TYPE_ENDIN);
+ gchar * statusn = get_search_value (node, STATUS_BEGIN, STATUS_ENDIN);
+ gchar * status = strstr(statusn, ">");
+ status++;
+ if (type_is_valid (type) && g_strcmp0(status, "Official") == 0)
{
gchar * artist = get_search_value (node,ARTIST_BEGIN, ARTIST_ENDIN);
if (artist != NULL &&
@@ -123,6 +132,8 @@ static GList * albumlist_musicbrainz_parse (cb_object
}
g_free (type);
+ g_free (rg);
+ g_free (statusn);
}
return result_list;
}
@@ -0,0 +1,38 @@
Tentatively port to MB API v2
Index: lib/intern/common/musicbrainz.c
--- lib/intern/common/musicbrainz.c.orig
+++ lib/intern/common/musicbrainz.c
@@ -57,11 +57,11 @@ const gchar * generic_musicbrainz_url (GlyrQuery * set
switch (please_what_type (sets) )
{
case GLYR_TYPE_TAG_TITLE :
- return g_strdup_printf ("http://musicbrainz.org/ws/1/track/?type=xml&title=%s&artist=%s&release=%s",wrap_t,wrap_a,wrap_b);
+ return g_strdup_printf ("http://musicbrainz.org/ws/2/recording/?query=recording:%s%%20AND%%20artist:%s%%20AND%%20release:%s",wrap_t,wrap_a,wrap_b);
case GLYR_TYPE_TAG_ALBUM :
- return g_strdup_printf ("http://musicbrainz.org/ws/1/release/?type=xml&title=%s&artist=%s",wrap_b,wrap_a);
+ return g_strdup_printf ("http://musicbrainz.org/ws/2/release/?query=release:%s%%20AND%%20artist:%s",wrap_b,wrap_a);
case GLYR_TYPE_TAG_ARTIST:
- return g_strdup_printf ("http://musicbrainz.org/ws/1/artist/?type=xml&name=%s",wrap_a);
+ return g_strdup_printf ("http://musicbrainz.org/ws/2/artist/?query=%s",wrap_a);
default:
return NULL;
}
@@ -150,7 +150,7 @@ GlyrMemCache * generic_musicbrainz_parse (cb_object *
switch (please_what_type (capo->s) )
{
case GLYR_TYPE_TAG_TITLE:
- type = "track";
+ type = "recording";
break;
case GLYR_TYPE_TAG_ALBUM:
type = "release";
@@ -160,7 +160,7 @@ GlyrMemCache * generic_musicbrainz_parse (cb_object *
break;
}
- gchar * info_page_url = g_strdup_printf ("http://musicbrainz.org/ws/1/%s/%s?type=xml&inc=%s",type,mbid,include);
+ gchar * info_page_url = g_strdup_printf ("http://musicbrainz.org/ws/2/%s/%s?inc=%s",type,mbid,include);
if (info_page_url)
{
info = download_single (info_page_url,capo->s,NULL);
@@ -0,0 +1,17 @@
https://github.com/sahib/glyr/issues/102
Index: lib/intern/lyrics/elyrics.c
--- lib/intern/lyrics/elyrics.c.orig
+++ lib/intern/lyrics/elyrics.c
@@ -88,9 +88,9 @@ static void remove_from_from_string (gchar * string)
/////////////////////////////////
-#define LYRICS_BEGIN "<div class='ly' style='font-size:12px;'>"
+#define LYRICS_BEGIN "<div id='inlyr'>"
#define LYRICS_ALT_END "these lyrics are submitted by"
-#define LYRICS_END "</div>"
+#define LYRICS_END "</div><br>\n"
static GList * lyrics_elyrics_parse (cb_object * capo)
{
@@ -0,0 +1,16 @@
https://github.com/sahib/glyr/issues/102
Index: lib/intern/lyrics/lyricsreg.c
--- lib/intern/lyrics/lyricsreg.c.orig
+++ lib/intern/lyrics/lyricsreg.c
@@ -20,8 +20,8 @@
#include "../../core.h"
#include "../../stringlib.h"
-#define INFO_BEGIN "</div><div style=\"text-align:center;\">"
-#define INFO_ENDIN " <a href=\""
+#define INFO_BEGIN "</script>\n</div>\n"
+#define INFO_ENDIN "<div class=\"lyrics_below_ad2\">"
static const char * lyrics_lyricsreg_url (GlyrQuery * s)
{
@@ -0,0 +1,15 @@
https://github.com/sahib/glyr/commit/e580b1c446d4ac7077a59c52de2b996d0d832d2f
doesnt work anyway ?
Index: lib/intern/lyrics/lyricswiki.c
--- lib/intern/lyrics/lyricswiki.c.orig
+++ lib/intern/lyrics/lyricswiki.c
@@ -65,7 +65,7 @@ static gboolean lv_cmp_content (const gchar * to_artis
#define LYR_NODE "<div class='lyricbox"
#define LYR_BEGIN ">"
-#define LYR_ENDIN "<!--"
+#define LYR_ENDIN "<div class='lyricsbreak"
#define LYR_FOOTER "<div id=\"songfooter"
#define LYR_CREDITS "<table"
#define LYR_INSTRUMENTAL "/Category:Instrumental"
@@ -0,0 +1,58 @@
https://github.com/sahib/glyr/issues/102
Index: lib/intern/lyrics/magistrix.c
--- lib/intern/lyrics/magistrix.c.orig
+++ lib/intern/lyrics/magistrix.c
@@ -29,13 +29,16 @@ static const char * lyrics_magistrix_url (GlyrQuery *
///////////////////////////////////
+#define MAGISTRIX_LYRIC_START_INDICATOR "<i class=\"icon-twitter\"></i>\n</button>\n</div>\n"
+#define MAGISTRIX_LYRICS_END_INDICATOR "</div>\n<p class='hidden-xs'>"
+
static GlyrMemCache * parse_lyric_page (GlyrMemCache * cache)
{
GlyrMemCache * result = NULL;
g_return_val_if_fail (cache,NULL);
g_return_val_if_fail (cache->data,NULL);
- gchar * data = get_search_value (cache->data,"id='songtext'>","<div class='lyric-actions'>");
+ gchar * data = get_search_value (cache->data, MAGISTRIX_LYRIC_START_INDICATOR, MAGISTRIX_LYRICS_END_INDICATOR);
if (data != NULL)
{
result = DL_init();
@@ -49,11 +52,11 @@ static GlyrMemCache * parse_lyric_page (GlyrMemCache *
///////////////////////////////////
-#define SEARCH_FIRST_RESULT "<table class='searchresult'>"
-#define SEARCH_LAST_RESULT "</table>"
-#define SEARCH_NODE "<div class='title'>"
-#define SEARCH_LINK_START "&ndash;\n<a href=\""
-#define SEARCH_LINK_END "\" class"
+#define SEARCH_FIRST_RESULT "<ol class='list-unstyled search-results'>"
+#define SEARCH_LAST_RESULT "</ol>"
+#define SEARCH_NODE "<li class='lyric search-result'>"
+#define SEARCH_LINK_START "<a class=\"search-title\" data-track-event=\"Search/click/Lyric\" href=\""
+#define SEARCH_LINK_END "\">"
static GList * parse_search_result_page (cb_object * capo)
{
@@ -93,12 +96,15 @@ static GList * parse_search_result_page (cb_object * c
///////////////////////////////////
+#define MAGISTRIX_SEARCH_RESULT_TITLE "<title>Deine Suchergebnisse"
+#define MAGISTRIX_SEARCH_RESULT_FAILURE "Es konnten leider keine Ergebnisse gefunden werden."
+
static GList * lyrics_magistrix_parse (cb_object * capo)
{
GList * result_list = NULL;
- if (strstr (capo->cache->data,"Es wurden keine Songtexte gefunden") == NULL) /* "No songtext" page? */
+ if (strstr (capo->cache->data, MAGISTRIX_SEARCH_RESULT_FAILURE) == NULL) /* "No songtext" page? */
{
- if (strstr (capo->cache->data,"<title>Songtext-Suche</title>") == NULL) /* Are we not on the search result page? */
+ if (strstr (capo->cache->data, MAGISTRIX_SEARCH_RESULT_TITLE) == NULL) /* Are we not on the search result page? */
{
GlyrMemCache * result = parse_lyric_page (capo->cache);
if (result != NULL)
@@ -0,0 +1,16 @@
https://github.com/sahib/glyr/issues/102
Index: lib/intern/lyrics/vagalume.c
--- lib/intern/lyrics/vagalume.c.orig
+++ lib/intern/lyrics/vagalume.c
@@ -24,8 +24,8 @@
/* JSON Parsing */
#include "../../jsmn/jsmn.h"
-#define VAGALUME_DOMAIN "http://www.vagalume.com.br"
-#define VAGALUME_PATH "/api/search.php?art=${artist}&mus=${title}"
+#define VAGALUME_DOMAIN "http://api.vagalume.com.br"
+#define VAGALUME_PATH "/search.php?art=${artist}&mus=${title}"
/**
* Vagalume Provider written by: Felipe Bessa Coelho
@@ -0,0 +1,123 @@
XXX needs to parse the returned XML
taken/adapted from similar_artist & cover implems
only returns the dummy picture 2a96cbd8b46e442fc41c2b86b821562f.png ?
Index: lib/intern/photos/lastfm.c
--- lib/intern/photos/lastfm.c.orig
+++ lib/intern/photos/lastfm.c
@@ -28,79 +28,57 @@
static const gchar * photos_lastfm_url (GlyrQuery * settings)
{
- return "http://ws.audioscrobbler.com/2.0/?method=artist.getimages&autocorrect=1&artist=${artist}&api_key="API_KEY_LASTFM;
+ return "http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&autocorrect=1&artist=${artist}&api_key="API_KEY_LASTFM;
}
/////////////////////////////////
-static gboolean size_fits (GlyrQuery * s, gchar ** ref)
-{
- gboolean result = FALSE;
- if (ref != NULL)
- {
- gchar * search_ptr = ref[0];
- if (search_ptr != NULL)
- {
- search_ptr = strchr (search_ptr,'"');
-
- gint ratio = 0;
- gchar * width_string = get_search_value (search_ptr,"width=\"","\"");
- gchar * height_string = get_search_value (search_ptr,"height=\"","\"");
- if (width_string && height_string)
- {
- ratio = (strtol (width_string,NULL,10) + strtol (height_string,NULL,10) ) /2;
- }
- g_free (width_string);
- g_free (height_string);
-
- gboolean original_size_allowed = TRUE;
- if (g_strstr_len (ref[0],100,"original") != NULL)
- {
- /* Deny extremelly large images by default, except explicitely wanted */
- if (! (ratio >= 1000 && s->img_min_size >= 1000 && s->img_max_size == -1) )
- {
- original_size_allowed = FALSE;
- }
- }
-
- if (size_is_okay (ratio, s->img_min_size, s->img_max_size) == TRUE && original_size_allowed == TRUE)
- {
- result = TRUE;
- }
-
- search_ptr = strchr (search_ptr,'>');
- }
- ref[0] = search_ptr + 1;
- }
- return result;
-}
-
/////////////////////////////////
static GList * photos_lastfm_parse (cb_object * capo)
{
- gchar * root = capo->cache->data;
+ /* Handle size requirements (Default to large) */
+ const gchar * tag_ssize = NULL ;
+ const gchar * tag_esize = "</image>";
+
+ /* find desired size */
+ if ( size_is_okay (300,capo->s->img_min_size,capo->s->img_max_size) )
+ tag_ssize = "<image size=\"extralarge\">";
+ else if ( size_is_okay (125,capo->s->img_min_size,capo->s->img_max_size) )
+ tag_ssize = "<image size=\"large\">";
+ else if ( size_is_okay (64, capo->s->img_min_size,capo->s->img_max_size) )
+ tag_ssize = "<image size=\"middle\">";
+ else if ( size_is_okay (34, capo->s->img_min_size,capo->s->img_max_size) )
+ tag_ssize = "<image size=\"small\">";
+ else if ( true || false )
+ tag_ssize = "<image size=\"extralarge\">";
+
+ /* The result (perhaps) */
GList * result_list = NULL;
+ gchar * find = capo->cache->data;
- while (continue_search (g_list_length (result_list),capo->s) && (root = strstr (root,SIZE_FO) ) != NULL)
+ while (continue_search (g_list_length (result_list),capo->s) && (find = strstr (find+1, "<artist>") ) != NULL)
{
- gchar * begin = root + strlen (SIZE_FO);
- if (size_fits (capo->s,&begin) == TRUE)
- {
- gchar * endin = strstr (begin,URL_ENDIN);
- if (endin != NULL)
+ gchar * artist = get_search_value (find, "<name>", "</name>");
+
+ if (levenshtein_strnormcmp (capo->s, artist, capo->s->artist) <= capo->s->fuzzyness) {
+
+ gchar * img_start = strstr(find, tag_ssize);
+
+ if (img_start != NULL)
{
- gchar * urlb = copy_value (begin,endin);
- if (urlb != NULL)
+ gchar * url = get_search_value (find, (gchar*) tag_ssize, (gchar*) tag_esize);
+ if (url != NULL)
{
- GlyrMemCache * cache = DL_init();
- cache->data = urlb;
- cache->size = strlen (urlb);
- result_list = g_list_prepend (result_list,cache);
+ GlyrMemCache * result = DL_init();
+ result->data = url;
+ result->size = strlen (url);
+ result_list = g_list_prepend (result_list,result);
}
}
}
- root += (sizeof SIZE_FO) - 1;
+
+ g_free (artist);
}
return result_list;
}
@@ -0,0 +1,39 @@
Index: lib/intern/relations/musicbrainz.c
--- lib/intern/relations/musicbrainz.c.orig
+++ lib/intern/relations/musicbrainz.c
@@ -23,9 +23,12 @@
/////////////////////////////////
-#define RELATION_TARGLYR_GET_TYPE "<relation-list target-type=\"Url\">"
+#define RELATION_TARGLYR_GET_TYPE "<relation-list target-type=\"url\">"
#define RELATION_BEGIN_TYPE "<relation"
+#define TARGET_BEGIN "<target "
+#define TARGET_ENDIN "</target>"
+
/* Wrap around the (a bit more) generic versions */
static GList * relations_musicbrainz_parse (cb_object * capo)
{
@@ -46,8 +49,11 @@ static GList * relations_musicbrainz_parse (cb_object
while (continue_search (ctr,capo->s) && (node = strstr (node+nlen,RELATION_BEGIN_TYPE) ) )
{
node += nlen;
- gchar * target = get_search_value (node,"target=\"","\"");
+ gchar * targetn = get_search_value (node, TARGET_BEGIN, TARGET_ENDIN);
gchar * type = get_search_value (node,"type=\"","\"");
+ // strip id="xxxx">
+ gchar* target = strstr(targetn, ">");
+ target++;
if (type != NULL && target != NULL)
{
@@ -59,7 +65,7 @@ static GList * relations_musicbrainz_parse (cb_object
ctr++;
g_free (type);
- g_free (target);
+ g_free (targetn);
}
}
}
@@ -0,0 +1,43 @@
port to MB API v2
Index: lib/intern/tracklist/musicbrainz.c
--- lib/intern/tracklist/musicbrainz.c.orig
+++ lib/intern/tracklist/musicbrainz.c
@@ -22,17 +22,33 @@
static const gchar * tracklist_musicbrainz_url (GlyrQuery * sets)
{
- return "http://musicbrainz.org/ws/1/release/?type=xml&artist=${artist}&releasetypes=Official&limit=10&title=${album}&limit=1";
+ return "http://musicbrainz.org/ws/2/release/?query=artist:${artist}%20AND%20release=${album}&limit=1";
}
/////////////////////////////////
#define REL_ID_BEGIN "id=\""
#define REL_ID_ENDIN "\" "
-#define REL_ID_FORM "http://musicbrainz.org/ws/1/release/%s?type=xml&inc=tracks"
+#define REL_ID_FORM "http://musicbrainz.org/ws/2/release/%s?inc=recordings"
-#define DUR_BEGIN "<duration>"
-#define DUR_ENDIN "</duration>"
+/* parse the following XML
+
+ <track-list count="7" offset="0">
+ <track id="478cde5a-9b3e-401a-a4c8-ebf6ce12e3ff">
+ <position>1</position>
+ <number>1</number>
+ <length>253000</length>
+ <recording id="387cff95-595c-4625-afbf-2fb0a8c02e95">
+ <title>Les Ailes dun ange</title>
+ <length>253000</length>
+ <first-release-date>2016</first-release-date>
+ </recording>
+ </track>
+
+*/
+
+#define DUR_BEGIN "<length>"
+#define DUR_ENDIN "</length>"
#define TIT_BEGIN "<title>"
#define TIT_ENDIN "</title>"
@@ -0,0 +1,77 @@
drop most broken providers, keep only lastfm & musicbrainz which need fixing, wip
working lyrics providers: lyrix & elyrics, lyricswiki ?
no working albumreview, nor backdrops & guitartabs provider
Index: lib/register_plugins.c
--- lib/register_plugins.c.orig
+++ lib/register_plugins.c
@@ -143,9 +143,6 @@ void plugin_add_to_list (GList ** list, void * data)
static void register_provider_plugins (void)
{
plugin_add_to_list (&glyrMetaDataSourceList,&ainfo_lastfm_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&ainfo_lyricsreg_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&ainfo_bbcmusic_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&ainfo_echonest_src);
plugin_add_to_list (&glyrMetaDataSourceList,&albumlist_musicbrainz_src);
// FIXME: Seems to be broken too. (serverside)
@@ -159,56 +156,20 @@ static void register_provider_plugins (void)
// FIXME: No real data yet there.. adele:19 gives a correct mbid, but no results
- plugin_add_to_list(&glyrMetaDataSourceList,&cover_coverartarchive_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&cover_discogs_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&cover_google_src);
plugin_add_to_list (&glyrMetaDataSourceList,&cover_lastfm_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&cover_jamendo_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&cover_lyricswiki_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&cover_rhapsody_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&cover_picsearch_src);
plugin_add_to_list (&glyrMetaDataSourceList,&cover_musicbrainz_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&cover_slothradio_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&lyrics_lipwalk_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&lyrics_lyrdb_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&lyrics_lyricsreg_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&lyrics_lyricstime_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&lyrics_lyricsvip_src);
+
plugin_add_to_list (&glyrMetaDataSourceList,&lyrics_lyricswiki_src);
plugin_add_to_list (&glyrMetaDataSourceList,&lyrics_lyrix_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&lyrics_magistrix_src);
- //plugin_add_to_list (&glyrMetaDataSourceList,&lyrics_metrolyrics_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&lyrics_metallum_src);
plugin_add_to_list (&glyrMetaDataSourceList,&lyrics_elyrics_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&lyrics_vagalume_src);
-
- // FIXME: Chartlyrics reacts very slowly, and often not at all
- // add again when running again ( :( - good api though)
- // 28.1.2012: Seems to be on again, API fails too often though still.
- plugin_add_to_list (&glyrMetaDataSourceList,&lyrics_chartlyrics_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&photos_flickr_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&photos_google_src);
plugin_add_to_list (&glyrMetaDataSourceList,&photos_lastfm_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&photos_discogs_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&photos_singerpictures_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&photos_rhapsody_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&photos_picsearch_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&photos_bbcmusic_src);
plugin_add_to_list (&glyrMetaDataSourceList,&relations_musicbrainz_src);
- // FIXME: Silly amazon requires to be a Seller to use their API
- //plugin_add_to_list(&glyrMetaDataSourceList,&review_amazon_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&review_metallum_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&review_echonest_src);
plugin_add_to_list (&glyrMetaDataSourceList,&similar_artist_lastfm_src);
plugin_add_to_list (&glyrMetaDataSourceList,&similar_song_lastfm_src);
plugin_add_to_list (&glyrMetaDataSourceList,&tags_musicbrainz_src);
plugin_add_to_list (&glyrMetaDataSourceList,&tracklist_musicbrainz_src);
- // FIXME: Searchfunction of guitaretabs seems to be broken
- //plugin_add_to_list(&glyrMetaDataSourceList,&guitartabs_guitaretab_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&guitartabs_chordie_src);
- plugin_add_to_list (&glyrMetaDataSourceList,&backdrops_htbackdrops_src);
/* Special offline providers */
plugin_add_to_list (&glyrMetaDataSourceList,&relations_generated_src);
@@ -0,0 +1,29 @@
ihttps://github.com/curl/curl/issues/9779
Index: src/utils/ping_url.c
--- src/utils/ping_url.c.orig
+++ src/utils/ping_url.c
@@ -129,18 +129,18 @@ static struct header_data * url_is_gettable (gchar * u
info = g_malloc0 (sizeof (struct header_data) );
- curl_easy_setopt (eh, CURLOPT_TIMEOUT, 3);
+ curl_easy_setopt (eh, CURLOPT_TIMEOUT, 3L);
curl_easy_setopt (eh, CURLOPT_NOSIGNAL, 1L);
curl_easy_setopt (eh, CURLOPT_USERAGENT, GLYR_DEFAULT_USERAGENT"/linkvalidator");
curl_easy_setopt (eh, CURLOPT_URL,url);
- curl_easy_setopt (eh, CURLOPT_FOLLOWLOCATION, TRUE);
- curl_easy_setopt (eh, CURLOPT_HEADER,TRUE);
- curl_easy_setopt (eh, CURLOPT_NOBODY,TRUE);
+ curl_easy_setopt (eh, CURLOPT_FOLLOWLOCATION, (long)TRUE);
+ curl_easy_setopt (eh, CURLOPT_HEADER,(long)TRUE);
+ curl_easy_setopt (eh, CURLOPT_NOBODY,(long)TRUE);
curl_easy_setopt (eh, CURLOPT_HEADERFUNCTION, header_cb);
curl_easy_setopt (eh, CURLOPT_WRITEFUNCTION, empty_cb);
curl_easy_setopt (eh, CURLOPT_WRITEHEADER, info);
- curl_easy_setopt (eh, CURLOPT_VERBOSE,TRUE);
+ curl_easy_setopt (eh, CURLOPT_VERBOSE,(long)TRUE);
rc = curl_easy_perform (eh);
curl_easy_cleanup (eh);