All pastes #1421792 Raw Edit

Miscellany

public diff v1 · immutable
#1421792 ·published 2009-05-13 18:12 UTC
rendered paste body
Index: 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;   }