summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuli Suominen <ssuominen@gentoo.org>2012-07-07 08:03:03 +0000
committerSamuli Suominen <ssuominen@gentoo.org>2012-07-07 08:03:03 +0000
commit74e40f2dbf1e2cc1f3479fa855eb793c139e143c (patch)
treef710e4ed176814a1de5a24c7c06ef5d823f6232e /media-sound/clementine
parentFix typo (bug #425136). Minor ebuild cleanup. (diff)
downloadhistorical-74e40f2dbf1e2cc1f3479fa855eb793c139e143c.tar.gz
historical-74e40f2dbf1e2cc1f3479fa855eb793c139e143c.tar.bz2
historical-74e40f2dbf1e2cc1f3479fa855eb793c139e143c.zip
Import Fedora patch for compability with media-libs/liblastfm >= 1 wrt #423241 by Ryan Hill
Package-Manager: portage-2.2.0_alpha116/cvs/Linux x86_64
Diffstat (limited to 'media-sound/clementine')
-rw-r--r--media-sound/clementine/ChangeLog9
-rw-r--r--media-sound/clementine/Manifest18
-rw-r--r--media-sound/clementine/clementine-1.0.1-r2.ebuild136
-rw-r--r--media-sound/clementine/files/clementine-1.0.1-liblastfm-1.patch475
4 files changed, 629 insertions, 9 deletions
diff --git a/media-sound/clementine/ChangeLog b/media-sound/clementine/ChangeLog
index ba7a1ef494b4..ca762ac2de31 100644
--- a/media-sound/clementine/ChangeLog
+++ b/media-sound/clementine/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for media-sound/clementine
# Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/media-sound/clementine/ChangeLog,v 1.63 2012/07/06 03:29:00 jdhore Exp $
+# $Header: /var/cvsroot/gentoo-x86/media-sound/clementine/ChangeLog,v 1.64 2012/07/07 08:03:03 ssuominen Exp $
+
+*clementine-1.0.1-r2 (07 Jul 2012)
+
+ 07 Jul 2012; Samuli Suominen <ssuominen@gentoo.org>
+ +clementine-1.0.1-r2.ebuild, +files/clementine-1.0.1-liblastfm-1.patch:
+ Import Fedora patch for compability with media-libs/liblastfm >= 1 wrt
+ #423241 by Ryan Hill
06 Jul 2012; Jeff Horelick <jdhore@gentoo.org> clementine-1.0.1-r1.ebuild:
marked x86 per bug 419945
diff --git a/media-sound/clementine/Manifest b/media-sound/clementine/Manifest
index 17d648cb8e40..b999a80bd9e9 100644
--- a/media-sound/clementine/Manifest
+++ b/media-sound/clementine/Manifest
@@ -3,21 +3,23 @@ Hash: SHA1
AUX clementine-0.7.1-fix-devicekit.patch 698 SHA256 3b31927a82e571d93eecbf32f9ba8cc0d23cb30c83e31077837f5f9fcd96b277 SHA512 c3c10795e1d2d0760166d5167b0666c87d6e998240257c7dca7294535d1a1ec6f9f59eca811d2925ae2b3e8c72c63e7efa624369cebc3d0a3077eb887965814d WHIRLPOOL 028f9806674ff0d32ab73d1603c420bf856ccc3bcd9e9f7fedb32fb0c4ce037d72f5c20e7032b3895557c1ab0d31559ad31cfac0a92a70dcd74d4edb55e2c405
AUX clementine-1.0.1-fresh-start.patch 418 SHA256 8bc9d43cb36d707d6a32c19c02f76ce93d9cd457f247ba4b2bfa5052206a3c8d SHA512 badba7977490e856ded83812905989c229bd91abdbbcbe199b4658c8764ec7377b1dea39afea461a709b6eb1ea77cb570a25a2dea71784396799b35b64c4469e WHIRLPOOL f74b5621144c8af4dbc4cf441fb2e3b52c7af889b105f4cccc09a0d5d703a2bf463a90e4effc2e0f42a806fcf7cd3bf048dde12aee8fb691b931d541ba636fa1
+AUX clementine-1.0.1-liblastfm-1.patch 15900 SHA256 f11c11d9c3918e89531897dd2ab20af2f98d354386d662b879d83ed04b11b6ab SHA512 59c763a6f3689216bab452867fd9c017635a13a274b2051e0e8fbe5c5ea014f0c432de399847ce3d277e15e9ad63e53d3c4073d57558ac4873666e2ecbee9c21 WHIRLPOOL 36ea3bdc904562fa57ae9f6d84a75825740b0a9c6afaeedc45ca95f8e20dcfc5a5a5f44d23e35ddd8c249a34eabdd9d947564f1f366dd94676769ea53c1e1a4e
AUX clementine-1.0.1-linguas.patch 500 SHA256 e23a2b7c70816e1dcebe9e9629568255d6051674676b91e4c6509dad08ca1a0b SHA512 eaa69553b73a500214f2f20fa952aebdbc83ca7c6ec55927678f6f0ca583ce7312fb4688f9b5ce1df561751436e9fbb4688b32c86d2c62fa19f8d02682aa7946 WHIRLPOOL b020c75d31e07d0fa68a7b1104f57aa455324b7adca3504139367d90c32b4980321d31f69361889b3d096eac3e184cd60d9519a187d938d43be75642b78a3a4d
DIST clementine-0.7.1.tar.gz 5967162 SHA256 246e56f9283384b354bd43d5ec9937ceb93889f680f7bf45bd1ab00db36d61bc SHA512 199271da318a4139149ca24f97110a7b7da7790e9b2ae4b5e132a67c5cc5d220b95fc35deef07d442fd4c99449cfc3c27a723f5aa276b7fbf97b31ad7f8cc783 WHIRLPOOL b9e1a8e88c526d0f493e25f12e2163ccd5c69c2ee406366a4d56f5e9c654515e0ad1a813b9df94c50a6e666cf1a1fd2d7d575f315dabc7351339208b2f55c640
DIST clementine-1.0.1.tar.gz 8267876 SHA256 bf28c6584e280f58e8ebf7ba33cee1f926c0b8f1857ae605164ecbb2ff096e7d SHA512 7657d8f906a349f2085a5bda410c1af093626b4839424136dcb277bb775dad1cb91dce6138035d0c9f83a8a1079a58c01a7f7fd3bd63f7e2fbd5c8bff387437c WHIRLPOOL eebeb245d12ad871b0e2fbc1b4bd33c5ce31ff03f98536bcd9197084cd7dd5c7dfce1cb9169b585a60901845351ae8626ca689d80b15fa0dddaca68e4c9f6556
EBUILD clementine-0.7.1-r2.ebuild 3476 SHA256 7a3b51f3668ae19050a56b99549ff4c2bb90f70fc78f8acadadbf117c1622834 SHA512 6e960a14ef7b8d2a9cf3a3724c48e78320bed8e6153df107316da2631480b9a106574965cf90a541b7ed12e090e1253e42c343dfa659c8320473e32625706198 WHIRLPOOL 8f69b6c40ab1e376264a593ee9e266b15b77dce3bb5d8c9c76e45fee4f0b8bc313b7dd739278275b558abc6750f6108125c8397477c5c89465439ecf35909593
EBUILD clementine-1.0.1-r1.ebuild 3967 SHA256 904ab39c7efefe7c19447e9d5c4b36ac2a170d6545389a0314f98d92a7502564 SHA512 d989f83ec572ef849f0fbf1282e7d969c8073dabdef2cba174d062f4d0edd26fb7d292683c1b6aea6605aa08b4685ee87b9e4dad247103f36b9d7bbf2f5bbb76 WHIRLPOOL f565910525ab1d9874c35e0f5c6f245754d39f50d37209a2b813463127537422a497c24894ad13cfed8efaa7bca90292335b0327d99de87eced34e7bdbc57aca
-MISC ChangeLog 9818 SHA256 b82cfe1a85ce23dbd0add54d6f1cbbd1c81736f65bc8d8ad4d01a7cf4d76aebf SHA512 d6a88d432b5e1e1a0154a1e3799320d80ce72e4fb35b162bc88a2c454d663ca17b751f3b47aa7c06d94adb0a88e3614df7a95d859bc59a811ec0f27ce2766ed9 WHIRLPOOL d687ce885b2b7c3c687a67d88877e6ab83a7b72fd7c8605e77c548542e29e4302cd275afd814d004d32654d3798178d02487e616010189505d39258a37eb050e
+EBUILD clementine-1.0.1-r2.ebuild 4009 SHA256 1f9136d2cbf6482a3619f428bdc87e3b54ab0fccc5ecfc4865711d5ce3d87561 SHA512 1f03b55f9da52838866e14c740ffaaa36945d2c601b3f8d3a81f64154367ab3cc94fb55d6d40a63ed7e654eef6854663e3d44b6146e6cf4f8e9179b32801f89f WHIRLPOOL d22ce2e779b357b63be99bedc589d7eccb01cac69157426fa3ce778ac4ba8d91981bf2fd81abecfbf12050cd0da23ca153fd6746422af3561838227ce01a0e44
+MISC ChangeLog 10082 SHA256 36994e5f14416f86344ea608765395e8afc8600e3afe96be03dc680fbdcf632b SHA512 333680c46838676ea9ee1ca46eef0fbd17c8df48a31370e94507ef88caa054b5ec6f9d7c0d8387e62934fceae5418a5204c8809240eb19340aaec24287cf09b6 WHIRLPOOL 4b8fccce239603d92240d1d567247f0e649f3034f9fcda16676a4bff8f0afdfb0f731728e8c7610698ad84de6eb361f10d44172d9967bde193669bf6e889c00c
MISC metadata.xml 708 SHA256 05a4e0404281b8cd3efc26ab5ef1c79b312575d28edcd1dcef3e8df603173a80 SHA512 bd335c94bf4cde52d26d9be8f97836a7713c3da434cbca6390b5909691d33e1613262db61fca4842d91031f45b6b1ea7b0184e768d717c6ea69459eb18b7267e WHIRLPOOL 28e94d4634bdc74d9fedd01d6f1a649581cf49ac19d18c0f89d9bf8b91d783da4018e4b81102f3085268772ad9e80d6180346f78f766dd3176ed4aec78df6843
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (GNU/Linux)
-iQEcBAEBAgAGBQJP9luCAAoJEPUd7O0j6ekACEoIAKBDEO2/LOQ+GvlwpYFdcMx0
-7d8XByjxoVD4bk4bOACfMk8ZV9366E0zw4tdZprAd93KKmLhsCo7VTyQ/6YKdXY3
-z0zjCRxwBuixdsDY9EAd7ZSH5tyz1Hwf9O1OQlMXGYfxU8GdT9KRtGgd9CJiFmVy
-QhpRPoA77SkKg/romJvT6s2U62/S+MbKkJqy4ciAsqK7cMrwdmxkSBDVAtVZHT3U
-2YgioUVcfOargdjlxfGFl4ko8cvO/tUOYHm8mPoxX3PUa8sspOnr+7RoupqPMhGc
-/VrKTv2uvVYKFHrb6WkqFowO1oAkqcxWtAMmURyPkoEfNt2RU3bFtejbvtSvrhs=
-=sHxM
+iQEcBAEBAgAGBQJP9+vjAAoJEEdUh39IaPFNHyUIAKAguhpT1zVMQHgCVuDeBr5H
+S5iWCEOX5LwRGXR0Oo/Z1VaHxFS0WPBJNg4nB2Qhnv89jObqOAnYBGYmF9BU6hiS
+HflKjxsg/ixXz/fvz3ntbNEPeWlzQjWdLAvmTHpgjRHWsohBBw9Ax15OrbO4PGRi
+Au8W5C3uvbYBUpvQowYjV3o4IG1cerS7Z6O5Q+G4rMVoveufuXlkeKismdux/w82
+SFyun52VZuobSuymrLIyD71KCBcifzQvVnj6mzrJ8O6xVkfcMhVBMFP4yJWuTNXi
+wYCqEr5W6mbbWJkttQeg81aS+OLztJm9qWFTKdkMPXUX1BhBc5trHzkYcDGgOTc=
+=yiWC
-----END PGP SIGNATURE-----
diff --git a/media-sound/clementine/clementine-1.0.1-r2.ebuild b/media-sound/clementine/clementine-1.0.1-r2.ebuild
new file mode 100644
index 000000000000..36b544fbaef9
--- /dev/null
+++ b/media-sound/clementine/clementine-1.0.1-r2.ebuild
@@ -0,0 +1,136 @@
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-sound/clementine/clementine-1.0.1-r2.ebuild,v 1.1 2012/07/07 08:03:03 ssuominen Exp $
+
+EAPI=4
+
+LANGS=" ar be bg bn br bs ca cs cy da de el en_CA en_GB eo es et eu fa fi fr gl he hi hr hu hy ia id is it ja ka kk ko lt lv mr ms nb nl oc pa pl pt_BR pt ro ru sk sl sr@latin sr sv tr uk vi zh_CN zh_TW"
+
+inherit cmake-utils eutils gnome2-utils virtualx
+
+DESCRIPTION="A modern music player and library organizer based on Amarok 1.4 and Qt4"
+HOMEPAGE="http://www.clementine-player.org/ http://code.google.com/p/clementine-player/"
+SRC_URI="http://clementine-player.googlecode.com/files/${P}.tar.gz"
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="ayatana cdda +dbus ios ipod kde lastfm mms mtp projectm test +udev wiimote"
+IUSE+="${LANGS// / linguas_}"
+
+REQUIRED_USE="
+ ios? ( ipod )
+ udev? ( dbus )
+ wiimote? ( dbus )
+"
+
+COMMON_DEPEND="
+ >=x11-libs/qt-gui-4.5:4[dbus?]
+ >=x11-libs/qt-opengl-4.5:4
+ >=x11-libs/qt-sql-4.5:4[sqlite]
+ dev-db/sqlite[fts3]
+ >=media-libs/taglib-1.7[mp4]
+ >=dev-libs/glib-2.24.1-r1
+ dev-libs/libxml2
+ dev-libs/qjson
+ media-libs/libechonest
+ >=media-libs/chromaprint-0.6
+ media-libs/gstreamer:0.10
+ media-libs/gst-plugins-base:0.10
+ ayatana? ( dev-libs/libindicate-qt )
+ cdda? ( dev-libs/libcdio )
+ ipod? (
+ >=media-libs/libgpod-0.8.0[ios?]
+ ios? (
+ app-pda/libplist
+ >=app-pda/libimobiledevice-1.0
+ app-pda/usbmuxd
+ )
+ )
+ kde? ( >=kde-base/kdelibs-4.4 )
+ lastfm? ( >=media-libs/liblastfm-1 )
+ mtp? ( >=media-libs/libmtp-1.0.0 )
+ projectm? ( media-libs/glew )
+"
+# now only presets are used, libprojectm is internal
+# http://code.google.com/p/clementine-player/source/browse/#svn/trunk/3rdparty/libprojectm/patches
+# r1966 "Compile with a static sqlite by default, since Qt 4.7 doesn't seem to expose the symbols we need to use FTS"
+RDEPEND="${COMMON_DEPEND}
+ dbus? ( udev? ( sys-fs/udisks:0 ) )
+ mms? ( media-plugins/gst-plugins-libmms:0.10 )
+ mtp? ( gnome-base/gvfs )
+ projectm? ( >=media-libs/libprojectm-1.2.0 )
+ media-plugins/gst-plugins-meta:0.10
+ media-plugins/gst-plugins-gio:0.10
+ media-plugins/gst-plugins-soup:0.10
+ media-plugins/gst-plugins-taglib:0.10
+"
+DEPEND="${COMMON_DEPEND}
+ >=dev-libs/boost-1.39
+ virtual/pkgconfig
+ sys-devel/gettext
+ x11-libs/qt-test:4
+ kde? ( dev-util/automoc )
+ dev-cpp/gmock
+ test? ( gnome-base/gsettings-desktop-schemas )
+"
+DOCS="Changelog"
+
+src_prepare() {
+ # some tests fail or hang
+ sed -i \
+ -e '/add_test_file(translations_test.cpp/d' \
+ tests/CMakeLists.txt || die
+
+ # API changed, see http://bugs.gentoo.org/410933
+ has_version '>=app-pda/libimobiledevice-1.1.2' && \
+ sed -i -e 's:event->uuid:event->udid:' src/devices/ilister.cpp
+
+ epatch "${FILESDIR}"/${P}-fresh-start.patch \
+ "${FILESDIR}"/${P}-linguas.patch \
+ "${FILESDIR}"/${P}-liblastfm-1.patch
+}
+
+src_configure() {
+ local langs x
+ for x in ${LANGS}; do
+ use linguas_${x} && langs+=" ${x}"
+ done
+
+ # spotify is not in portage
+ # REMOTE is unstable
+ local mycmakeargs=(
+ -DBUILD_WERROR=OFF
+ -DLINGUAS="${langs}"
+ -DBUNDLE_PROJECTM_PRESETS=OFF
+ $(cmake-utils_use cdda ENABLE_AUDIOCD)
+ $(cmake-utils_use dbus ENABLE_DBUS)
+ $(cmake-utils_use udev ENABLE_DEVICEKIT)
+ $(cmake-utils_use ipod ENABLE_LIBGPOD)
+ $(cmake-utils_use ios ENABLE_IMOBILEDEVICE)
+ $(cmake-utils_use kde ENABLE_PLASMARUNNER)
+ $(cmake-utils_use lastfm ENABLE_LIBLASTFM)
+ $(cmake-utils_use mtp ENABLE_LIBMTP)
+ -DENABLE_GIO=ON
+ $(cmake-utils_use wiimote ENABLE_WIIMOTEDEV)
+ $(cmake-utils_use projectm ENABLE_VISUALISATIONS)
+ $(cmake-utils_use ayatana ENABLE_SOUNDMENU)
+ -DENABLE_SPOTIFY=OFF
+ -DENABLE_SPOTIFY_BLOB=OFF
+ -DENABLE_REMOTE=OFF
+ -DENABLE_BREAKPAD=OFF
+ -DSTATIC_SQLITE=OFF
+ -DUSE_SYSTEM_GMOCK=ON
+ )
+
+ cmake-utils_src_configure
+}
+
+src_test() {
+ cd "${CMAKE_BUILD_DIR}" || die
+ Xemake test
+}
+
+pkg_preinst() { gnome2_icon_savelist; }
+pkg_postinst() { gnome2_icon_cache_update; }
+pkg_postrm() { gnome2_icon_cache_update; }
diff --git a/media-sound/clementine/files/clementine-1.0.1-liblastfm-1.patch b/media-sound/clementine/files/clementine-1.0.1-liblastfm-1.patch
new file mode 100644
index 000000000000..7ab1c29e73e8
--- /dev/null
+++ b/media-sound/clementine/files/clementine-1.0.1-liblastfm-1.patch
@@ -0,0 +1,475 @@
+--- src/core/song.cpp
++++ src/core/song.cpp
+@@ -49,7 +49,7 @@
+
+ #ifdef HAVE_LIBLASTFM
+ #include "internet/fixlastfm.h"
+- #include <lastfm/Track>
++ #include <lastfm/Track.h>
+ #endif
+
+ #include <QFile>
+--- src/covers/lastfmcoverprovider.cpp
++++ src/covers/lastfmcoverprovider.cpp
+@@ -19,8 +19,8 @@
+ #include "coverprovider.h"
+ #include "lastfmcoverprovider.h"
+
+-#include <lastfm/Artist>
+-#include <lastfm/XmlQuery>
++#include <lastfm/Artist.h>
++#include <lastfm/XmlQuery.h>
+ #include <lastfm/ws.h>
+
+ #include <QNetworkReply>
+@@ -52,14 +52,8 @@ void LastFmCoverProvider::QueryFinished(
+
+ CoverSearchResults results;
+
+- try {
+- lastfm::XmlQuery query(lastfm::ws::parse(reply));
+-#ifdef Q_OS_WIN32
+- if (lastfm::ws::last_parse_error != lastfm::ws::NoError) {
+- throw std::runtime_error("");
+- }
+-#endif
+-
++ lastfm::XmlQuery query;
++ if (query.parse(reply->readAll())) {
+ // parse the list of search results
+ QList<lastfm::XmlQuery> elements = query["results"]["albummatches"].children("album");
+
+@@ -69,7 +63,7 @@ void LastFmCoverProvider::QueryFinished(
+ result.image_url = element["image size=extralarge"].text();
+ results << result;
+ }
+- } catch(std::runtime_error&) {
++ } else {
+ // Drop through and emit an empty list of results.
+ }
+
+--- src/internet/lastfmservice.cpp
++++ src/internet/lastfmservice.cpp
+@@ -33,20 +33,18 @@
+
+ #include <boost/scoped_ptr.hpp>
+
+-#include <lastfm/Audioscrobbler>
++#include <lastfm/Audioscrobbler.h>
+ #include <lastfm/misc.h>
+-#include <lastfm/RadioStation>
+-#include <lastfm/Scrobble>
+-#include <lastfm/ScrobbleCache>
+-#include <lastfm/ScrobblePoint>
++#include <lastfm/RadioStation.h>
++#include <lastfm/ScrobbleCache.h>
++#include <lastfm/ScrobblePoint.h>
+ #include <lastfm/ws.h>
+-#include <lastfm/XmlQuery>
++#include <lastfm/XmlQuery.h>
+
+ #include <QMenu>
+ #include <QSettings>
+
+ using boost::scoped_ptr;
+-using lastfm::Scrobble;
+ using lastfm::XmlQuery;
+
+ uint qHash(const lastfm::Track& track) {
+@@ -300,13 +298,8 @@ void LastFMService::AuthenticateReplyFin
+ reply->deleteLater();
+
+ // Parse the reply
+- try {
+- lastfm::XmlQuery const lfm = lastfm::ws::parse(reply);
+-#ifdef Q_OS_WIN32
+- if (lastfm::ws::last_parse_error != lastfm::ws::NoError)
+- throw std::runtime_error("");
+-#endif
+-
++ lastfm::XmlQuery lfm;
++ if (lfm.parse(reply->readAll())) {
+ lastfm::ws::Username = lfm["session"]["name"].text();
+ lastfm::ws::SessionKey = lfm["session"]["key"].text();
+ QString subscribed = lfm["session"]["subscriber"].text();
+@@ -318,8 +311,8 @@ void LastFMService::AuthenticateReplyFin
+ settings.setValue("Username", lastfm::ws::Username);
+ settings.setValue("Session", lastfm::ws::SessionKey);
+ settings.setValue("Subscriber", is_subscriber);
+- } catch (std::runtime_error& e) {
+- qLog(Error) << e.what();
++ } else {
++ qLog(Error) << lfm.parseError().message();
+ emit AuthenticationComplete(false);
+ return;
+ }
+@@ -347,13 +340,8 @@ void LastFMService::UpdateSubscriberStat
+
+ bool is_subscriber = false;
+
+- try {
+- const lastfm::XmlQuery lfm = lastfm::ws::parse(reply);
+-#ifdef Q_OS_WIN32
+- if (lastfm::ws::last_parse_error != lastfm::ws::NoError)
+- throw std::runtime_error("");
+-#endif
+-
++ lastfm::XmlQuery lfm;
++ if (lfm.parse(reply->readAll())) {
+ connection_problems_ = false;
+ QString subscriber = lfm["user"]["subscriber"].text();
+ is_subscriber = (subscriber.toInt() == 1);
+@@ -362,11 +350,9 @@ void LastFMService::UpdateSubscriberStat
+ settings.beginGroup(kSettingsGroup);
+ settings.setValue("Subscriber", is_subscriber);
+ qLog(Info) << lastfm::ws::Username << "Subscriber status:" << is_subscriber;
+- } catch (lastfm::ws::ParseError e) {
+- qLog(Error) << "Last.fm parse error: " << e.enumValue();
+- connection_problems_ = e.enumValue() == lastfm::ws::MalformedResponse;
+- } catch (std::runtime_error& e) {
+- qLog(Error) << e.what();
++ } else {
++ qLog(Error) << "Last.fm parse error: " << lfm.parseError().message();
++ connection_problems_ = lfm.parseError().enumValue() == lastfm::ws::MalformedResponse;
+ }
+
+ emit UpdatedSubscriberStatus(is_subscriber);
+@@ -469,7 +455,8 @@ bool LastFMService::InitScrobbler() {
+ scrobbler_ = new lastfm::Audioscrobbler(kAudioscrobblerClientId);
+
+ //reemit the signal since the sender is private
+- connect(scrobbler_, SIGNAL(status(int)), SIGNAL(ScrobblerStatus(int)));
++ connect(scrobbler_, SIGNAL(scrobblesSubmitted(QList<lastfm::Track>)), SIGNAL(ScrobbleSubmitted()));
++ connect(scrobbler_, SIGNAL(nowPlayingError(int,QString)), SIGNAL(ScrobbleError(int)));
+ return true;
+ }
+
+@@ -497,7 +484,7 @@ void LastFMService::NowPlaying(const Son
+ if (!last_track_.isNull() &&
+ last_track_.source() == lastfm::Track::NonPersonalisedBroadcast) {
+ const int duration_secs = last_track_.timestamp().secsTo(QDateTime::currentDateTime());
+- if (duration_secs >= ScrobblePoint::kScrobbleMinLength) {
++ if (duration_secs >= lastfm::ScrobblePoint::scrobbleTimeMin()) {
+ lastfm::MutableTrack mtrack(last_track_);
+ mtrack.setDuration(duration_secs);
+
+@@ -514,14 +501,16 @@ void LastFMService::NowPlaying(const Son
+ already_scrobbled_ = false;
+ last_track_ = mtrack;
+
+- //check immediately if the song is valid
+- Scrobble::Invalidity invalidity;
+-
+- if (!lastfm::Scrobble(last_track_).isValid( &invalidity )) {
+- //for now just notify this, we can also see the cause
+- emit ScrobblerStatus(-1);
+- return;
+- }
++// TODO: validity was removed from liblastfm1 but might reappear, it should have
++// no impact as we get a different error when actually trying to scrobble.
++// //check immediately if the song is valid
++// Scrobble::Invalidity invalidity;
++//
++// if (!lastfm::Scrobble(last_track_).isValid( &invalidity )) {
++// //for now just notify this, we can also see the cause
++// emit ScrobbleError(-1);
++// return;
++// }
+
+ scrobbler_->nowPlaying(mtrack);
+ }
+@@ -530,12 +519,12 @@ void LastFMService::Scrobble() {
+ if (!InitScrobbler())
+ return;
+
+- ScrobbleCache cache(lastfm::ws::Username);
++ lastfm::ScrobbleCache cache(lastfm::ws::Username);
+ qLog(Debug) << "There are" << cache.tracks().count() << "tracks in the last.fm cache.";
+ scrobbler_->cache(last_track_);
+
+ // Let's mark a track as cached, useful when the connection is down
+- emit ScrobblerStatus(30);
++ emit ScrobbleError(30);
+ scrobbler_->submit();
+
+ already_scrobbled_ = true;
+@@ -640,7 +629,7 @@ void LastFMService::RefreshFriends(bool
+ return;
+ }
+
+- lastfm::AuthenticatedUser user;
++ lastfm::User user;
+ QNetworkReply* reply = user.getFriends();
+ connect(reply, SIGNAL(finished()), SLOT(RefreshFriendsFinished()));
+ }
+@@ -649,7 +638,7 @@ void LastFMService::RefreshNeighbours()
+ if (!neighbours_list_ || !IsAuthenticated())
+ return;
+
+- lastfm::AuthenticatedUser user;
++ lastfm::User user;
+ QNetworkReply* reply = user.getNeighbours();
+ connect(reply, SIGNAL(finished()), SLOT(RefreshNeighboursFinished()));
+ }
+@@ -661,14 +650,11 @@ void LastFMService::RefreshFriendsFinish
+
+ QList<lastfm::User> friends;
+
+- try {
+- friends = lastfm::User::list(reply);
+-#ifdef Q_OS_WIN32
+- if (lastfm::ws::last_parse_error != lastfm::ws::NoError)
+- throw std::runtime_error("");
+-#endif
+- } catch (std::runtime_error& e) {
+- qLog(Error) << e.what();
++ lastfm::XmlQuery lfm;
++ if (lfm.parse(reply->readAll())) {
++ friends = lastfm::UserList(lfm).users();
++ } else {
++ qLog(Error) << lfm.parseError().message();
+ return;
+ }
+
+@@ -708,14 +694,11 @@ void LastFMService::RefreshNeighboursFin
+
+ QList<lastfm::User> neighbours;
+
+- try {
+- neighbours = lastfm::User::list(reply);
+-#ifdef Q_OS_WIN32
+- if (lastfm::ws::last_parse_error != lastfm::ws::NoError)
+- throw std::runtime_error("");
+-#endif
+- } catch (std::runtime_error& e) {
+- qLog(Error) << e.what();
++ lastfm::XmlQuery lfm;
++ if (lfm.parse(reply->readAll())) {
++ neighbours = lastfm::UserList(lfm).users();
++ } else {
++ qLog(Error) << lfm.parseError().message();
+ return;
+ }
+
+@@ -869,13 +852,8 @@ void LastFMService::FetchMoreTracksFinis
+ model()->task_manager()->SetTaskFinished(tune_task_id_);
+ tune_task_id_ = 0;
+
+- try {
+- const XmlQuery& query = lastfm::ws::parse(reply);
+-#ifdef Q_OS_WIN32
+- if (lastfm::ws::last_parse_error != lastfm::ws::NoError)
+- throw std::runtime_error("");
+-#endif
+-
++ XmlQuery query;
++ if (query.parse(reply->readAll())) {
+ const XmlQuery& playlist = query["playlist"];
+ foreach (const XmlQuery& q, playlist["trackList"].children("track")) {
+ lastfm::MutableTrack t;
+@@ -890,17 +868,9 @@ void LastFMService::FetchMoreTracksFinis
+ art_urls_[t] = q["image"].text();
+ playlist_ << t;
+ }
+- } catch (std::runtime_error& e) {
+- // For some reason a catch block that takes a lastfm::ws::ParseError&
+- // doesn't get called, even when a lastfm::ws::ParseError is thrown...
+- // Hacks like this remind me of Java...
+- if (QString(typeid(e).name()).contains("ParseError")) {
+- // dynamic_cast throws a std::bad_cast ... *boggle*
++ } else {
+ emit StreamError(tr("Couldn't load the last.fm radio station")
+- .arg(e.what()));
+- } else {
+- emit StreamError(tr("An unknown last.fm error occurred: %1").arg(e.what()));
+- }
++ .arg(query.parseError().message()));
+ return;
+ }
+
+@@ -913,7 +883,7 @@ void LastFMService::Tune(const QUrl& url
+
+ last_url_ = url;
+ initial_tune_ = true;
+- const lastfm::RadioStation station(FixupUrl(url));
++ const lastfm::RadioStation station(FixupUrl(url).toString());
+
+ playlist_.clear();
+
+--- src/internet/lastfmservice.h
++++ src/internet/lastfmservice.h
+@@ -27,7 +27,8 @@ class Track;
+ uint qHash(const lastfm::Track& track);
+
+ #include "fixlastfm.h"
+-#include <lastfm/Track>
++#include <lastfm/Audioscrobbler.h>
++#include <lastfm/Track.h>
+ #include <lastfm/ws.h>
+
+ #include "internetmodel.h"
+@@ -132,7 +133,8 @@ class LastFMService : public InternetSer
+ void ScrobblingEnabledChanged(bool value);
+ void ButtonVisibilityChanged(bool value);
+ void ScrobbleButtonVisibilityChanged(bool value);
+- void ScrobblerStatus(int value);
++ void ScrobbleSubmitted();
++ void ScrobbleError(int value);
+ void UpdatedSubscriberStatus(bool is_subscriber);
+ void ScrobbledRadioStream();
+
+--- src/songinfo/lastfmtrackinfoprovider.cpp
++++ src/songinfo/lastfmtrackinfoprovider.cpp
+@@ -22,7 +22,7 @@
+ #include "ui/iconloader.h"
+
+ #include <lastfm/ws.h>
+-#include <lastfm/XmlQuery>
++#include <lastfm/XmlQuery.h>
+
+ void LastfmTrackInfoProvider::FetchInfo(int id, const Song& metadata) {
+ QMap<QString, QString> params;
+@@ -50,18 +50,12 @@ void LastfmTrackInfoProvider::RequestFin
+ return;
+ }
+
+- try {
+- lastfm::XmlQuery query = lastfm::ws::parse(reply);
+-#ifdef Q_OS_WIN32
+- if (lastfm::ws::last_parse_error != lastfm::ws::NoError)
+- throw std::runtime_error("");
+-#endif
+-
++ lastfm::XmlQuery query;
++ if (query.parse(reply->readAll())) {
+ GetPlayCounts(id, query);
+ GetWiki(id, query);
+ GetTags(id, query);
+
+- } catch (std::runtime_error&) {
+ }
+ emit Finished(id);
+ }
+--- src/suggesters/lastfmsuggester.cpp
++++ src/suggesters/lastfmsuggester.cpp
+@@ -1,6 +1,6 @@
+ #include "lastfmsuggester.h"
+
+-#include <lastfm/XmlQuery>
++#include <lastfm/XmlQuery.h>
+
+ #include "core/logging.h"
+ #include "core/timeconstants.h"
+@@ -39,13 +39,8 @@ void LastFMSuggester::RequestFinished()
+ int id = it.value();
+ replies_.erase(it);
+
+- try {
+- lastfm::XmlQuery const lfm = lastfm::ws::parse(reply);
+-#ifdef Q_OS_WIN32
+- if (lastfm::ws::last_parse_error != lastfm::ws::NoError)
+- throw std::runtime_error("");
+-#endif
+-
++ lastfm::XmlQuery lfm;
++ if (lfm.parse(reply->readAll())) {
+ const QList<XmlQuery> tracks = lfm["similartracks"].children("track");
+ SongList songs;
+ foreach (const XmlQuery& q, tracks) {
+@@ -59,8 +54,8 @@ void LastFMSuggester::RequestFinished()
+ }
+ qLog(Debug) << songs.length() << "suggested songs from Last.fm";
+ emit SuggestSongsFinished(id, songs);
+- } catch (std::runtime_error& e) {
+- qLog(Error) << e.what();
++ } else {
++ qLog(Error) << lfm.parseError().message();
+ emit SuggestSongsFinished(id, SongList());
+ }
+ }
+--- src/ui/mainwindow.cpp
++++ src/ui/mainwindow.cpp
+@@ -700,7 +700,8 @@ MainWindow::MainWindow(
+ connect(player_->playlists()->sequence(), SIGNAL(ShuffleModeChanged(PlaylistSequence::ShuffleMode)), osd_, SLOT(ShuffleModeChanged(PlaylistSequence::ShuffleMode)));
+
+ #ifdef HAVE_LIBLASTFM
+- connect(InternetModel::Service<LastFMService>(), SIGNAL(ScrobblerStatus(int)), SLOT(ScrobblerStatus(int)));
++ connect(InternetModel::Service<LastFMService>(), SIGNAL(ScrobbleSubmitted()), SLOT(ScrobbleSubmitted()));
++ connect(InternetModel::Service<LastFMService>(), SIGNAL(ScrobbleError(int)), SLOT(ScrobbleError(int)));
+
+ LastFMButtonVisibilityChanged(internet_model_->InternetModel::Service<LastFMService>()->AreButtonsVisible());
+ ScrobbleButtonVisibilityChanged(internet_model_->InternetModel::Service<LastFMService>()->IsScrobbleButtonVisible());
+@@ -2201,30 +2202,26 @@ void MainWindow::SetToggleScrobblingIcon
+ }
+
+ #ifdef HAVE_LIBLASTFM
+-void MainWindow::ScrobblerStatus(int value) {
++void MainWindow::ScrobbleSubmitted() {
+ const LastFMService* lastfm_service = InternetModel::Service<LastFMService>();
+ const bool last_fm_enabled = ui_->action_toggle_scrobbling->isVisible() &&
+ lastfm_service->IsScrobblingEnabled() &&
+ lastfm_service->IsAuthenticated();
+
++ playlists_->active()->set_lastfm_status(Playlist::LastFM_Scrobbled);
++ // update the button icon
++ if (last_fm_enabled)
++ ui_->action_toggle_scrobbling->setIcon(QIcon(":/last.fm/as.png"));
++}
++
++void MainWindow::ScrobbleError(int value) {
++
+ switch (value) {
+ case -1:
+ // custom error value got from initial validity check
+ playlists_->active()->set_lastfm_status(Playlist::LastFM_Invalid);
+ break;
+
+- case 2:
+- case 3:
+- // we should get 3 for a correct scrobbling, but I just get 2 for
+- // mysterious reasons
+- // seems to scrobble fine though, so for now we accept it as correct
+- playlists_->active()->set_lastfm_status(Playlist::LastFM_Scrobbled);
+-
+- // update the button icon
+- if (last_fm_enabled)
+- ui_->action_toggle_scrobbling->setIcon(QIcon(":/last.fm/as.png"));
+- break;
+-
+ case 30:
+ // Hack: when offline, liblastfm doesn't inform us, so set the status
+ // as queued; in this way we won't try to scrobble again, it will be done automatically
+--- src/ui/mainwindow.h
++++ src/ui/mainwindow.h
+@@ -224,7 +224,8 @@ class MainWindow : public QMainWindow, p
+
+ void ShowCoverManager();
+ #ifdef HAVE_LIBLASTFM
+- void ScrobblerStatus(int value);
++ void ScrobbleSubmitted();
++ void ScrobbleError(int value);
+ #endif
+ void ShowAboutDialog();
+ void ShowTranscodeDialog();
+--- tests/mpris1_test.cpp
++++ tests/mpris1_test.cpp
+@@ -22,7 +22,7 @@
+ #include "playlist/playlistsequence.h"
+ #ifdef HAVE_LIBLASTFM
+ #include "internet/fixlastfm.h"
+-#include <lastfm/Track>
++#include <lastfm/Track.h>
+ #endif
+
+ #include "gmock/gmock.h"
+--- tests/song_test.cpp
++++ tests/song_test.cpp
+@@ -20,7 +20,7 @@
+ #include "core/song.h"
+ #ifdef HAVE_LIBLASTFM
+ #include "internet/fixlastfm.h"
+-#include <lastfm/Track>
++#include <lastfm/Track.h>
+ #endif
+
+ #include "gmock/gmock.h"