mirror of
https://github.com/openbsd/ports.git
synced 2026-06-17 23:13:55 +02:00
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:
@@ -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>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 "–\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 d’un 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);
|
||||
Reference in New Issue
Block a user