From 0f5950b10a85a1f6b71c7e8046ccabee2e03cb19 Mon Sep 17 00:00:00 2001 From: "Jason E. Hale" Date: Tue, 9 Feb 2021 15:27:17 +0000 Subject: [PATCH] MFH: r564788 audio/liblastfm-qt5: Restore the patches that were originally part of audio/liblastfm (R.I.P.) to make the library function again. It seems they were forgotten when this was converted to a free-standing port in r495869. --- audio/liblastfm-qt5/Makefile | 2 +- .../liblastfm-qt5/files/patch-CMakeLists.txt | 25 ++++ .../files/patch-src_UrlBuilder.cpp | 123 ++++++++++++++++++ .../files/patch-src_UrlBuilder.h | 33 +++++ .../liblastfm-qt5/files/patch-src_mbid__mp3.c | 15 +++ .../files/patch-tests_TestUrlBuilder.h | 13 ++ 6 files changed, 210 insertions(+), 1 deletion(-) create mode 100644 audio/liblastfm-qt5/files/patch-CMakeLists.txt create mode 100644 audio/liblastfm-qt5/files/patch-src_UrlBuilder.cpp create mode 100644 audio/liblastfm-qt5/files/patch-src_UrlBuilder.h create mode 100644 audio/liblastfm-qt5/files/patch-src_mbid__mp3.c create mode 100644 audio/liblastfm-qt5/files/patch-tests_TestUrlBuilder.h diff --git a/audio/liblastfm-qt5/Makefile b/audio/liblastfm-qt5/Makefile index 18927ab052a4..4b7ed7204a84 100644 --- a/audio/liblastfm-qt5/Makefile +++ b/audio/liblastfm-qt5/Makefile @@ -2,7 +2,7 @@ PORTNAME= liblastfm DISTVERSION= 1.0.9-5 -PORTREVISION= 1 +PORTREVISION= 2 DISTVERSIONSUFFIX= -g4433165 CATEGORIES= audio PKGNAMESUFFIX= -qt5 diff --git a/audio/liblastfm-qt5/files/patch-CMakeLists.txt b/audio/liblastfm-qt5/files/patch-CMakeLists.txt new file mode 100644 index 000000000000..d783371d4780 --- /dev/null +++ b/audio/liblastfm-qt5/files/patch-CMakeLists.txt @@ -0,0 +1,25 @@ +- Support symbol visibility with Clang +- Don't put linker flags in CXXFLAGS + +--- CMakeLists.txt.orig 2014-10-02 14:05:46 UTC ++++ CMakeLists.txt +@@ -1,4 +1,5 @@ + cmake_minimum_required(VERSION 2.8.6) ++cmake_policy(SET CMP0043 OLD) + project(liblastfm) + + set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) +@@ -62,11 +63,11 @@ else() + endif() + + +-if(CMAKE_COMPILER_IS_GNUCXX) ++if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_definitions("-fno-operator-names -fvisibility-inlines-hidden -fvisibility=hidden") + endif() + if(UNIX AND NOT APPLE) +-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--no-undefined") ++set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined") + endif() + + if(MSVC) diff --git a/audio/liblastfm-qt5/files/patch-src_UrlBuilder.cpp b/audio/liblastfm-qt5/files/patch-src_UrlBuilder.cpp new file mode 100644 index 000000000000..dbe336905355 --- /dev/null +++ b/audio/liblastfm-qt5/files/patch-src_UrlBuilder.cpp @@ -0,0 +1,123 @@ +url(): + - Use https scheme to avoid 301 redirects + - Override default QUrl::TolerantMode with QUrl::StrictMode for Qt 5.x to + prevent overprocessing the already encoded input URL +localePath(): + - New function to return the base path of the localized website +host(): + - Just return www.last.fm since the localized hosts 301 redirect there +localize(): + - Set the path of the url instead of the host since the localized + hosts 301 redirect to the main website with a localized path +mobilize(): + - Mobile website 301 redirects to main website, so just return the url as-is + +--- src/UrlBuilder.cpp.orig 2014-10-02 14:05:46 UTC ++++ src/UrlBuilder.cpp +@@ -32,7 +32,7 @@ class lastfm::UrlBuilderPrivate (public) + lastfm::UrlBuilder::UrlBuilder( const QString& base ) + : d( new UrlBuilderPrivate ) + { +- d->path = '/' + base.toLatin1(); ++ d->path = localePath().toLatin1() + '/' + base.toLatin1(); + } + + +@@ -60,10 +60,10 @@ QUrl + lastfm::UrlBuilder::url() const + { + QUrl url; +- url.setScheme( "http" ); ++ url.setScheme( "https" ); + url.setHost( host() ); + #if QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 ) +- url.setPath( d->path ); ++ url.setPath( d->path, QUrl::StrictMode ); + #else + url.setEncodedPath( d->path ); + #endif +@@ -85,49 +85,50 @@ lastfm::UrlBuilder::encode( QString s ) + + + QString //static +-lastfm::UrlBuilder::host( const QLocale& locale ) ++lastfm::UrlBuilder::localePath( const QLocale& locale ) + { + switch (locale.language()) + { +- case QLocale::Portuguese: return "www.lastfm.com.br"; +- case QLocale::Turkish: return "www.lastfm.com.tr"; +- case QLocale::French: return "www.lastfm.fr"; +- case QLocale::Italian: return "www.lastfm.it"; +- case QLocale::German: return "www.lastfm.de"; +- case QLocale::Spanish: return "www.lastfm.es"; +- case QLocale::Polish: return "www.lastfm.pl"; +- case QLocale::Russian: return "www.lastfm.ru"; +- case QLocale::Japanese: return "www.lastfm.jp"; +- case QLocale::Swedish: return "www.lastfm.se"; +- case QLocale::Chinese: return "cn.last.fm"; +- default: return "www.last.fm"; ++ case QLocale::Chinese: return "/zh"; ++ case QLocale::French: return "/fr"; ++ case QLocale::German: return "/de"; ++ case QLocale::Italian: return "/it"; ++ case QLocale::Japanese: return "/ja"; ++ case QLocale::Polish: return "/pl"; ++ case QLocale::Portuguese: return "/pt"; ++ case QLocale::Russian: return "/ru"; ++ case QLocale::Spanish: return "/es"; ++ case QLocale::Swedish: return "/sv"; ++ case QLocale::Turkish: return "/tr"; ++ default: return ""; + } + } + + ++QString //static ++lastfm::UrlBuilder::host( const QLocale& locale ) ++{ ++ return "www.last.fm"; ++} ++ ++ + bool // static + lastfm::UrlBuilder::isHost( const QUrl& url ) + { +- QStringList hosts = QStringList() << "www.lastfm.com.br" +- << "www.lastfm.com.tr" +- << "www.lastfm.fr" +- << "www.lastfm.it" +- << "www.lastfm.de" +- << "www.lastfm.es" +- << "www.lastfm.pl" +- << "www.lastfm.ru" +- << "www.lastfm.jp" +- << "www.lastfm.se" +- << "cn.last.fm" +- << "www.last.fm"; ++ QStringList hosts = QStringList() << "www.last.fm"; + + return hosts.contains( url.host() ); + } + ++ + QUrl //static + lastfm::UrlBuilder::localize( QUrl url) + { +- url.setHost( url.host().replace( QRegExp("^(www.)?last.fm"), host() ) ); ++#if QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 ) ++ url.setPath( url.path().prepend( localePath() ), QUrl::DecodedMode ); ++#else ++ url.setPath( url.path().prepend( localePath() ) ); ++#endif + return url; + } + +@@ -135,7 +136,6 @@ lastfm::UrlBuilder::localize( QUrl url) + QUrl //static + lastfm::UrlBuilder::mobilize( QUrl url ) + { +- url.setHost( url.host().replace( QRegExp("^(www.)?last"), "m.last" ) ); + return url; + } + diff --git a/audio/liblastfm-qt5/files/patch-src_UrlBuilder.h b/audio/liblastfm-qt5/files/patch-src_UrlBuilder.h new file mode 100644 index 000000000000..06ed8a3b666e --- /dev/null +++ b/audio/liblastfm-qt5/files/patch-src_UrlBuilder.h @@ -0,0 +1,33 @@ +Add prototype for localePath() and adjust comments to reflect current +website layout + +--- src/UrlBuilder.h.orig 2015-02-06 16:49:40 UTC ++++ src/UrlBuilder.h +@@ -44,10 +44,12 @@ namespace lastfm + + QUrl url() const; + +- /** www.last.fm becomes the local version, eg www.lastfm.de */ ++ /** www.last.fm becomes the local version, e.g. www.last.fm/de */ + static QUrl localize( QUrl ); +- /** www.last.fm becomes m.last.fm, localisation is preserved */ +- static QUrl mobilize( QUrl ); ++ ++ /** DEPRECATED: Returns url as-is since the mobile website redirects ++ * to the main website */ ++ Q_DECL_DEPRECATED static QUrl mobilize( QUrl ); + + /** Use this to URL encode any database item (artist, track, album). It + * internally calls UrlEncodeSpecialChars to double encode some special +@@ -60,7 +62,10 @@ namespace lastfm + */ + static QByteArray encode( QString ); + +- /** returns eg. www.lastfm.de */ ++ /** returns the base path of the localized website e.g. /de */ ++ static QString localePath ( const QLocale& = QLocale() ); ++ ++ /** returns www.last.fm */ + static QString host( const QLocale& = QLocale() ); + + /** return true if url is a last.fm url */ diff --git a/audio/liblastfm-qt5/files/patch-src_mbid__mp3.c b/audio/liblastfm-qt5/files/patch-src_mbid__mp3.c new file mode 100644 index 000000000000..a56a6974f2cb --- /dev/null +++ b/audio/liblastfm-qt5/files/patch-src_mbid__mp3.c @@ -0,0 +1,15 @@ +Silence warning +warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses] + if (!strncmp(head,"ID3",3) == 0) { + +--- src/mbid_mp3.c.orig 2014-10-02 14:05:46 UTC ++++ src/mbid_mp3.c +@@ -94,7 +94,7 @@ int getMP3_MBID(const char *path, char mbid[MBID_BUFFE + + while (s) { + mfile(3,head,fp,&s); +- if (!strncmp(head,"ID3",3) == 0) { ++ if (!(strncmp(head,"ID3",3) == 0)) { + //debug("No ID3v2 tag found: %s\n",path); + break; + } diff --git a/audio/liblastfm-qt5/files/patch-tests_TestUrlBuilder.h b/audio/liblastfm-qt5/files/patch-tests_TestUrlBuilder.h new file mode 100644 index 000000000000..65807f92c783 --- /dev/null +++ b/audio/liblastfm-qt5/files/patch-tests_TestUrlBuilder.h @@ -0,0 +1,13 @@ +http://www.last.fm 301 redirects to https://www.last.fm causing test to fail + +--- tests/TestUrlBuilder.h.orig 2018-03-31 12:04:00 UTC ++++ tests/TestUrlBuilder.h +@@ -81,7 +81,7 @@ private slots: + + void test404() /** @author */ + { +- QCOMPARE( getResponseCode( QUrl("http://www.last.fm/404") ), 404 ); ++ QCOMPARE( getResponseCode( QUrl("https://www.last.fm/404") ), 404 ); + } + }; +