rendered paste bodyIndex: xbmc/Application.cpp===================================================================--- xbmc/Application.cpp (revision 20211)+++ xbmc/Application.cpp (working copy)@@ -49,7 +49,7 @@ #endif #include "ButtonTranslator.h" #include "GUIAudioManager.h"-#include "lib/libscrobbler/scrobbler.h"+#include "lib/libscrobbler/lastfmscrobbler.h" #include "GUIPassword.h" #include "ApplicationMessenger.h" #include "SectionLoader.h"@@ -3864,7 +3864,7 @@ g_charsetConverter.clear(); g_directoryCache.Clear(); g_buttonTranslator.Clear();- CScrobbler::RemoveInstance();+ CLastfmScrobbler::RemoveInstance(); CLastFmManager::RemoveInstance(); #ifdef HAS_EVENT_SERVER CEventServer::RemoveInstance();@@ -4397,7 +4397,7 @@ getApplicationMessenger().HttpApi("broadcastlevel; OnPlayBackEnded;1"); #endif if (IsPlayingAudio())- CScrobbler::GetInstance()->SubmitQueue();+ CLastfmScrobbler::GetInstance()->SubmitQueue(); CLog::Log(LOGDEBUG, "Playback has finished"); @@ -4444,7 +4444,7 @@ CLog::Log(LOGDEBUG, "Player has asked for the next item"); if(IsPlayingAudio())- CScrobbler::GetInstance()->SubmitQueue();+ CLastfmScrobbler::GetInstance()->SubmitQueue(); CGUIMessage msg(GUI_MSG_QUEUE_NEXT_ITEM, 0, 0); m_gWindowManager.SendThreadMessage(msg);@@ -4466,7 +4466,7 @@ if (m_pXbmcHttp && g_stSettings.m_HttpApiBroadcastLevel>=1) getApplicationMessenger().HttpApi("broadcastlevel; OnPlayBackStopped;1"); #endif- CScrobbler::GetInstance()->SubmitQueue();+ CLastfmScrobbler::GetInstance()->SubmitQueue(); CLog::Log(LOGDEBUG, "Playback was stopped\n"); @@ -4919,7 +4919,7 @@ // Let scrobbler know about the track const CMusicInfoTag* tag=g_infoManager.GetCurrentSongTag(); if (tag)- CScrobbler::GetInstance()->AddSong(*tag);+ CLastfmScrobbler::GetInstance()->AddSong(*tag); } return true; }@@ -5165,7 +5165,7 @@ if (IsPlayingAudio()) {- CScrobbler::GetInstance()->UpdateStatus();+ CLastfmScrobbler::GetInstance()->UpdateStatus(); // Update audio file state every 0.5 second UpdateAudioFileState(); }Index: xbmc/GUIWindowSettingsCategory.cpp===================================================================--- xbmc/GUIWindowSettingsCategory.cpp (revision 20211)+++ xbmc/GUIWindowSettingsCategory.cpp (working copy)@@ -46,7 +46,7 @@ #include "SkinInfo.h" #include "GUIAudioManager.h" #include "AudioContext.h"-#include "lib/libscrobbler/scrobbler.h"+#include "lib/libscrobbler/lastfmscrobbler.h" #include "GUIPassword.h" #include "utils/GUIInfoManager.h" #include "GUIDialogGamepad.h"@@ -1713,11 +1713,11 @@ g_guiSettings.GetBool("lastfm.submitradio")) && !strUserName.IsEmpty() && !strPassword.IsEmpty()) {- CScrobbler::GetInstance()->Init();+ CLastfmScrobbler::GetInstance()->Init(); } else {- CScrobbler::GetInstance()->Term();+ CLastfmScrobbler::GetInstance()->Term(); } } else if (strSetting.Equals("musicplayer.outputtoallspeakers"))Index: xbmc/xbox/Network.cpp===================================================================--- xbmc/xbox/Network.cpp (revision 20210)+++ xbmc/xbox/Network.cpp (working copy)@@ -27,7 +27,7 @@ #endif #include "Application.h" #include "FileSystem/FileSmb.h"-#include "lib/libscrobbler/scrobbler.h"+#include "lib/libscrobbler/lastfmscrobbler.h" #include "Settings.h" #include "GUIWindowManager.h" #include "RssReader.h"@@ -571,7 +571,7 @@ #ifdef HAS_UPNP g_application.StartUPnP(); #endif- CScrobbler::GetInstance()->Init();+ CLastfmScrobbler::GetInstance()->Init(); g_application.StartEventServer(); } break;@@ -593,7 +593,7 @@ #ifdef HAS_UPNP g_application.StopUPnP(); #endif- CScrobbler::GetInstance()->Term();+ CLastfmScrobbler::GetInstance()->Term(); g_application.StopEventServer(); // smb.Deinit(); if any file is open over samba this will break. Index: xbmc/lib/libscrobbler/scrobbler.h===================================================================--- xbmc/lib/libscrobbler/scrobbler.h (revision 20211)+++ xbmc/lib/libscrobbler/scrobbler.h (working copy)@@ -28,6 +28,9 @@ #include "FileSystem/FileCurl.h" #include "CriticalSection.h" +#define SCROBBLER_USER_ERROR_BADAUTH 1+#define SCROBBLER_USER_ERROR_BANNED 2+ namespace MUSIC_INFO { class CMusicInfoTag;@@ -105,9 +108,7 @@ class CScrobbler : public CThread {-private:- static long m_instanceLock;- static CScrobbler *m_pInstance;+protected: bool m_bRunThread; bool m_bNotified; bool m_bSubmitting;@@ -119,9 +120,11 @@ int m_failedHandshakeDelay; int m_action; time_t m_lastFailedHandshake;+ CStdString m_strLogPrefix; CStdString m_strUsername; CStdString m_strPasswordHash; CStdString m_strSessionID;+ CStdString m_strHandshakeURL; CStdString m_strNowPlayingURL; CStdString m_strSubmissionURL; CStdString m_strHandshakeTimeStamp;@@ -132,13 +135,15 @@ CCriticalSection m_actionLock; std::vector<SubmissionJournalEntry> m_vecSubmissionQueue; -private:+protected: void ResetState();+ virtual void LoadCredentials() = 0; void ClearErrorState(); void ClearSubmissionState(); void ClearSession(); void HandleHardError();- bool CanScrobble();+ virtual void NotifyUser(int error) = 0;+ virtual bool CanScrobble() = 0; bool LoadJournal(); bool SaveJournal(); bool DoHandshake(time_t now);@@ -147,14 +152,13 @@ bool HandleNowPlayingNotification(CStdString &strResponse); bool DoSubmission(); bool HandleSubmission(CStdString &strResponse);- CStdString GetJournalFileName();- virtual void Process();+ virtual CStdString GetJournalFileName() = 0;+ virtual void Process(); // Shouldn't need over ridden by inheriting CScrobblers public: CScrobbler();+ CScrobbler(const CStdString &strHandshakeURL, const CStdString &strLogPrefix = "CScrobbler"); virtual ~CScrobbler();- static CScrobbler *GetInstance();- static void RemoveInstance(); void Init(); void Term(); void AddSong(const MUSIC_INFO::CMusicInfoTag &tag);@@ -162,10 +166,10 @@ void SubmitQueue(); void SetUsername(const CStdString &strUser); void SetPassword(const CStdString &strPass);- CStdString GetConnectionState();- CStdString GetSubmitInterval();- CStdString GetFilesCached();- CStdString GetSubmitState();+ virtual CStdString GetConnectionState() = 0;+ virtual CStdString GetSubmitInterval() = 0;+ virtual CStdString GetFilesCached() = 0;+ virtual CStdString GetSubmitState() = 0; }; #endif // LIBSCROBBLER_H__Index: xbmc/lib/libscrobbler/Makefile===================================================================--- xbmc/lib/libscrobbler/Makefile (revision 20210)+++ xbmc/lib/libscrobbler/Makefile (working copy)@@ -1,5 +1,5 @@ INCLUDES=-I. -I../../ -I../../linux -I../../../guilib -I../../utils-SRCS=scrobbler.cpp+SRCS=scrobbler.cpp lastfmscrobbler.cpp LIB=scrobbler.a Index: xbmc/lib/libscrobbler/scrobbler.cpp===================================================================--- xbmc/lib/libscrobbler/scrobbler.cpp (revision 20211)+++ xbmc/lib/libscrobbler/scrobbler.cpp (working copy)@@ -43,18 +43,32 @@ #define SCROBBLER_MIN_DURATION 30 // seconds. API rule #define SCROBBLER_ACTION_SUBMIT 1 #define SCROBBLER_ACTION_NOWPLAYING 2-#define SCROBBLER_HANDSHAKE_URL "post.audioscrobbler.com"+//#define SCROBBLER_HANDSHAKE_URL "post.audioscrobbler.com" //#define SCROBBLER_HANDSHAKE_URL "89.16.177.55" // libre.fm -long CScrobbler::m_instanceLock = 0;-CScrobbler *CScrobbler::m_pInstance = NULL;+CScrobbler::CScrobbler()+ : CThread()+{ + m_bRunThread = false;+ m_bBanned = false;+ m_bBadAuth = false;+ m_pHttp = NULL;+ m_strHandshakeURL = "";+ m_strLogPrefix = "CScrobbler";+ ResetState(); -CScrobbler::CScrobbler() : CThread()+ if (!(m_hEvent = CreateEvent(NULL, false, false, NULL)))+ throw EOutOfMemory();+}+CScrobbler::CScrobbler(const CStdString &strHandshakeURL, const CStdString &strLogPrefix)+ : CThread() { - m_bRunThread = false;- m_bBanned = false;- m_bBadAuth = false;- m_pHttp = NULL;+ m_bRunThread = false;+ m_bBanned = false;+ m_bBadAuth = false;+ m_pHttp = NULL;+ m_strHandshakeURL = strHandshakeURL;+ m_strLogPrefix = strLogPrefix; ResetState(); if (!(m_hEvent = CreateEvent(NULL, false, false, NULL)))@@ -67,36 +81,12 @@ CloseHandle(m_hEvent); } -CScrobbler *CScrobbler::GetInstance()-{- if (!m_pInstance) // Avoid spinning aimlessly- {- CAtomicSpinLock lock(m_instanceLock);- if (!m_pInstance)- {- m_pInstance = new CScrobbler;- }- }- return m_pInstance;-}--void CScrobbler::RemoveInstance()-{- if (m_pInstance)- {- CAtomicSpinLock lock(m_instanceLock);- delete m_pInstance;- m_pInstance = NULL;- }-}- void CScrobbler::Init() { if (!CanScrobble()) return; ResetState();- SetUsername(g_guiSettings.GetString("lastfm.username"));- SetPassword(g_guiSettings.GetString("lastfm.password"));+ LoadCredentials(); LoadJournal(); if (!m_bRunThread) Create();@@ -176,7 +166,7 @@ m_bSubmitted = true; m_vecSubmissionQueue.push_back(m_CurrentTrack); SaveJournal();- CLog::Log(LOGDEBUG, "CScrobbler: Queued track for submission");+ CLog::Log(LOGDEBUG, "%s: Queued track for submission", m_strLogPrefix.c_str()); } } @@ -212,55 +202,6 @@ m_bBadAuth = false; } -CStdString CScrobbler::GetConnectionState()-{- if (!CanScrobble())- return "";- return (m_strSessionID.IsEmpty()) ?- g_localizeStrings.Get(15208) : g_localizeStrings.Get(15207);-}--CStdString CScrobbler::GetSubmitInterval()-{- CStdString strInterval;- if (!CanScrobble())- return strInterval;- CStdString strFormat = g_localizeStrings.Get(15209);- strInterval.Format(strFormat, m_failedHandshakeDelay);- return strInterval;-}--CStdString CScrobbler::GetFilesCached()-{- CStdString strCachedTracks;- if (!CanScrobble())- return strCachedTracks;- CSingleLock lock(m_queueLock);- CStdString strFormat = g_localizeStrings.Get(15210);- strCachedTracks.Format(strFormat, m_vecSubmissionQueue.size());-}--CStdString CScrobbler::GetSubmitState()-{- CStdString strState;- CStdString strFormat = g_localizeStrings.Get(15212);- if (!CanScrobble())- return strState;- if (m_bSubmitting)- strState = g_localizeStrings.Get(15211);- else if (m_bBadAuth || m_bBanned)- strState.Format(strFormat, 0);- else if (m_strSessionID.IsEmpty())- strState.Format(strFormat, m_failedHandshakeDelay);- else- {- int seconds = m_CurrentTrack.length;- seconds -= time(NULL) - atoi(m_CurrentTrack.strStartTime.c_str());- strState.Format(strFormat, std::min(0, seconds));- }- return strState;-}- void CScrobbler::ResetState() { ClearSession();@@ -287,29 +228,21 @@ void CScrobbler::ClearSession() {- CLog::Log(LOGDEBUG, "CScrobbler: Clearing session.");+ CLog::Log(LOGDEBUG, "%s: Clearing session.", m_strLogPrefix.c_str()); m_strSessionID.clear(); } void CScrobbler::HandleHardError() {- CLog::Log(LOGDEBUG, "CScrobbler: A hard error has occurred.");+ CLog::Log(LOGDEBUG, "%s: A hard error has occurred.", m_strLogPrefix.c_str()); if (++m_hardErrorCount == 3) {- CLog::Log(LOGDEBUG, "CScrobbler: Three consecuetive hard errors have "\- "occured. Forcing new handshake.");+ CLog::Log(LOGDEBUG, "%s: Three consecuetive hard errors have "\+ "occured. Forcing new handshake.", m_strLogPrefix.c_str()); ClearSession(); } } -bool CScrobbler::CanScrobble()-{- return (!g_guiSettings.GetString("lastfm.username").IsEmpty() &&- !g_guiSettings.GetString("lastfm.password").IsEmpty() &&- (g_guiSettings.GetBool("lastfm.submit") ||- g_guiSettings.GetBool("lastfm.submitradio")));-}- bool CScrobbler::LoadJournal() { int journalVersion = 0;@@ -322,7 +255,7 @@ if (!xmlDoc.LoadFile(JournalFileName)) {- CLog::Log(LOGDEBUG, "CScrobbler: %s, Line %d (%s)", + CLog::Log(LOGDEBUG, "%s: %s, Line %d (%s)", m_strLogPrefix.c_str(), JournalFileName.c_str(), xmlDoc.ErrorRow(), xmlDoc.ErrorDesc()); return false; }@@ -330,7 +263,7 @@ TiXmlElement *pRoot = xmlDoc.RootElement(); if (strcmpi(pRoot->Value(), "asjournal") != 0) {- CLog::Log(LOGDEBUG, "CScrobbler: %s missing <asjournal>",+ CLog::Log(LOGDEBUG, "%s: %s missing <asjournal>", m_strLogPrefix.c_str(), JournalFileName.c_str()); return false; }@@ -376,7 +309,7 @@ m_vecSubmissionQueue.push_back(entry); } - CLog::Log(LOGDEBUG, "CScrobbler: Journal loaded with %d entries.",+ CLog::Log(LOGDEBUG, "%s: Journal loaded with %d entries.", m_strLogPrefix.c_str(), m_vecSubmissionQueue.size()); return !m_vecSubmissionQueue.empty(); }@@ -416,8 +349,8 @@ } CStdString FileName = GetJournalFileName();- CLog::Log(LOGDEBUG, "CScrobbler: Journal with %d entries saved to %s", i,- FileName.c_str());+ CLog::Log(LOGDEBUG, "%s: Journal with %d entries saved to %s",+ m_strLogPrefix.c_str(), i, FileName.c_str()); return xmlDoc.SaveFile(FileName); } @@ -436,7 +369,7 @@ // Construct handshake URL. strHandshakeRequest.Format("http://%s/?hs=true"\- "&p=%s&c=%s&v=%s&u=%s&t=%d&a=%s", SCROBBLER_HANDSHAKE_URL,+ "&p=%s&c=%s&v=%s&u=%s&t=%d&a=%s", m_strHandshakeURL.c_str(), SCROBBLER_PROTOCOL, SCROBBLER_CLIENT, SCROBBLER_CLIENT_VERSION, m_strUsername.c_str(), now, strAuthToken.c_str()); @@ -449,15 +382,15 @@ (m_failedHandshakeDelay) ? std::min(2*m_failedHandshakeDelay, 7200) : 60; m_lastFailedHandshake = now; if (!m_bBanned && !m_bBadAuth)- CLog::Log(LOGDEBUG, "CScrobbler: A hard error has occurred during "\- "handshake. Sleeping for %d minutes.", m_failedHandshakeDelay/60);+ CLog::Log(LOGDEBUG, "%s: A hard error has occurred during "\+ "handshake. Sleeping for %d minutes.",+ m_strLogPrefix.c_str(), m_failedHandshakeDelay/60); return false; } bool CScrobbler::HandleHandshake(CStdString &strResponse) {- // TODO toast messages if (strResponse.IsEmpty()) return false; @@ -471,58 +404,54 @@ m_strSessionID = vecTokens[1]; m_strNowPlayingURL = vecTokens[2]; m_strSubmissionURL = vecTokens[3];- CLog::Log(LOGDEBUG, "CScrobbler: Handshake succeeded!");- CLog::Log(LOGDEBUG, "CScrobbler: SessionID is %s",+ CLog::Log(LOGDEBUG, "%s: Handshake succeeded!", m_strLogPrefix.c_str());+ CLog::Log(LOGDEBUG, "%s: SessionID is %s", m_strLogPrefix.c_str(), m_strSessionID.c_str());- CLog::Log(LOGDEBUG, "CScrobbler: NP URL is %s",+ CLog::Log(LOGDEBUG, "%s: NP URL is %s", m_strLogPrefix.c_str(), m_strNowPlayingURL.c_str());- CLog::Log(LOGDEBUG, "CScrobbler: Submit URL is %s",+ CLog::Log(LOGDEBUG, "%s: Submit URL is %s", m_strLogPrefix.c_str(), m_strSubmissionURL.c_str()); ClearErrorState(); return true; }- CLog::Log(LOGERROR, "CScrobbler: Handshake failed! Received malformed "\- "reply.");+ CLog::Log(LOGERROR, "%s: Handshake failed! Received malformed "\+ "reply.", m_strLogPrefix.c_str()); } else if (vecTokens[0] == "BANNED") {- CLog::Log(LOGERROR, "CScrobbler: Handshake failed! Client is banned! "\+ CLog::Log(LOGERROR, "%s: Handshake failed! Client is banned! "\ "Disabling submissions. Subsequent scrobbles will be cached. "\- "Please update your client to the newest version. ");+ "Please update your client to the newest version. ", m_strLogPrefix.c_str()); if (m_failedHandshakeDelay == 0) {- CStdString strText = g_localizeStrings.Get(15205);- m_bBanned = true;- CStdString strAudioScrobbler=g_localizeStrings.Get(15200); // AudioScrobbler- g_application.m_guiDialogKaiToast.QueueNotification("", strAudioScrobbler, strText, 10000);+ NotifyUser(SCROBBLER_USER_ERROR_BANNED); } } else if (vecTokens[0] == "BADAUTH") {- CLog::Log(LOGERROR, "CScrobbler: Handshake failed! Authentication failed! "\+ CLog::Log(LOGERROR, "%s: Handshake failed! Authentication failed! "\ "Disabling submissions. Subsequent scrobbles will be cached. "\- "Please enter the correct credentials to re-enable scrobbling. ");+ "Please enter the correct credentials to re-enable scrobbling. ",+ m_strLogPrefix.c_str()); if (m_failedHandshakeDelay == 0) {- CStdString strText = g_localizeStrings.Get(15206);- m_bBadAuth = true;- CStdString strAudioScrobbler=g_localizeStrings.Get(15200); // AudioScrobbler- g_application.m_guiDialogKaiToast.QueueNotification("", strAudioScrobbler, strText, 10000);+ NotifyUser(SCROBBLER_USER_ERROR_BADAUTH); } } else if (vecTokens[0] == "BADTIME") {- CLog::Log(LOGDEBUG, "CScrobbler: Handshake failed! Timestamp is invalid! "\+ CLog::Log(LOGDEBUG, "%s: Handshake failed! Timestamp is invalid! "\ "Disabling submissions. Subsequent scrobbles will be cached. "\- "Please correct the system time and restart the application. ");+ "Please correct the system time and restart the application. ",+ m_strLogPrefix.c_str()); } else if (vecTokens[0] == "FAILED") {- CLog::Log(LOGDEBUG, "CScrobbler: Handshake failed! REASON: %s! ", + CLog::Log(LOGDEBUG, "%s: Handshake failed! REASON: %s! ", m_strLogPrefix.c_str(), strResponse.c_str()); } else- CLog::Log(LOGDEBUG, "CScrobbler: Handshake failed! REASON: Unspecified!");+ CLog::Log(LOGDEBUG, "%s: Handshake failed! REASON: Unspecified!", m_strLogPrefix.c_str()); return false; }@@ -558,19 +487,19 @@ if (vecTokens[0] == "OK") {- CLog::Log(LOGDEBUG, "CScrobbler: Now playing notification succeeded!");+ CLog::Log(LOGDEBUG, "%s: Now playing notification succeeded!", m_strLogPrefix.c_str()); ClearErrorState(); return true; } else if (vecTokens[0] == "BADSESSION") {- CLog::Log(LOGDEBUG, "CScrobbler: Now playing notification failed! "\- "REASON: Bad session ID. Forcing new handshake.");+ CLog::Log(LOGDEBUG, "%s: Now playing notification failed! "\+ "REASON: Bad session ID. Forcing new handshake.", m_strLogPrefix.c_str()); ClearSession(); } else- CLog::Log(LOGDEBUG, "CScrobbler: Now playing notification failed! "\- "REASON: Unspecified.");+ CLog::Log(LOGDEBUG, "%s: Now playing notification failed! "\+ "REASON: Unspecified.", m_strLogPrefix.c_str()); return false; }@@ -629,37 +558,31 @@ if (vecTokens[0] == "OK") {- CLog::Log(LOGDEBUG, "CScrobbler: Submission succeeded!");+ CLog::Log(LOGDEBUG, "%s: Submission succeeded!", m_strLogPrefix.c_str()); ClearErrorState(); return true; } else if (vecTokens[0] == "BADSESSION") {- CLog::Log(LOGDEBUG, "CScrobbler: Submission failed! "\- "REASON: Bad session. Forcing new handshake.");+ CLog::Log(LOGDEBUG, "%s: Submission failed! "\+ "REASON: Bad session. Forcing new handshake.", m_strLogPrefix.c_str()); ClearSession(); } else if (vecTokens[0] == "FAILED") {- CLog::Log(LOGDEBUG, "CScrobbler: Submission failed! "\- "REASON: %s", strResponse.c_str());+ CLog::Log(LOGDEBUG, "%s: Submission failed! "\+ "REASON: %s", m_strLogPrefix.c_str(), strResponse.c_str()); } else- CLog::Log(LOGDEBUG, "CScrobbler: Submission failed! "\- "REASON: Unspecified.");+ CLog::Log(LOGDEBUG, "%s: Submission failed! "\+ "REASON: Unspecified.", m_strLogPrefix.c_str()); return false; } -CStdString CScrobbler::GetJournalFileName()-{- CStdString strFileName = g_settings.GetProfileUserDataFolder();- return CUtil::AddFileToFolder(strFileName, "Scrobbler.xml");-}- void CScrobbler::Process() {- CLog::Log(LOGDEBUG, "CScrobbler: Thread started.");+ CLog::Log(LOGDEBUG, "%s: Thread started.", m_strLogPrefix.c_str()); if (!m_pHttp) { // Hack since CFileCurl isn't threadsafe@@ -701,6 +624,6 @@ } delete m_pHttp; // More of aforementioned hack m_pHttp = NULL;- CLog::Log(LOGDEBUG, "CScrobbler: Thread ended.");+ CLog::Log(LOGDEBUG, "%s: Thread ended.", m_strLogPrefix.c_str()); } Index: xbmc/utils/Network.cpp===================================================================--- xbmc/utils/Network.cpp (revision 20210)+++ xbmc/utils/Network.cpp (working copy)@@ -22,7 +22,7 @@ #include "stdafx.h" #include "Network.h" #include "../Application.h"-#include "../lib/libscrobbler/scrobbler.h"+#include "../lib/libscrobbler/lastfmscrobbler.h" #include "RssReader.h" using namespace std;@@ -132,7 +132,7 @@ #ifdef HAS_ZEROCONF g_application.StartZeroconf(); #endif- CScrobbler::GetInstance()->Init();+ CLastfmScrobbler::GetInstance()->Init(); g_rssManager.Start(); } break;@@ -160,7 +160,7 @@ #ifdef HAS_ZEROCONF g_application.StopZeroconf(); #endif - CScrobbler::GetInstance()->Term();+ CLastfmScrobbler::GetInstance()->Term(); // smb.Deinit(); if any file is open over samba this will break. g_rssManager.Stop();Index: xbmc/utils/GUIInfoManager.cpp===================================================================--- xbmc/utils/GUIInfoManager.cpp (revision 20210)+++ xbmc/utils/GUIInfoManager.cpp (working copy)@@ -27,7 +27,7 @@ #include "GUIDialogProgress.h" #include "Application.h" #include "Util.h"-#include "lib/libscrobbler/scrobbler.h"+#include "lib/libscrobbler/lastfmscrobbler.h" #include "Weather.h" #include "PlayListPlayer.h" #include "PartyModeManager.h"@@ -3284,16 +3284,16 @@ switch (item) { case AUDIOSCROBBLER_CONN_STATE:- return CScrobbler::GetInstance()->GetConnectionState();+ return CLastfmScrobbler::GetInstance()->GetConnectionState(); break; case AUDIOSCROBBLER_SUBMIT_INT:- return CScrobbler::GetInstance()->GetSubmitInterval();+ return CLastfmScrobbler::GetInstance()->GetSubmitInterval(); break; case AUDIOSCROBBLER_FILES_CACHED:- return CScrobbler::GetInstance()->GetFilesCached();+ return CLastfmScrobbler::GetInstance()->GetFilesCached(); break; case AUDIOSCROBBLER_SUBMIT_STATE:- return CScrobbler::GetInstance()->GetSubmitState();+ return CLastfmScrobbler::GetInstance()->GetSubmitState(); break; }