diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-615e173-902-pvr-don-t-stop-the-pvrmanager-when-no-client.patch b/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-615e173-902-pvr-don-t-stop-the-pvrmanager-when-no-client.patch new file mode 100644 index 0000000000..204c07c426 --- /dev/null +++ b/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-615e173-902-pvr-don-t-stop-the-pvrmanager-when-no-client.patch @@ -0,0 +1,151 @@ +From 975406b7335fdaa51d5e4d216790ada467a69c2c Mon Sep 17 00:00:00 2001 +From: Lars Op den Kamp +Date: Sat, 18 Jun 2011 17:34:25 +0200 +Subject: [PATCH 2/3] pvr: don't stop the pvrmanager when no client could be loaded. just keep trying to load clients in the background + +--- + xbmc/pvr/PVRManager.cpp | 66 +++++++++++++--------------------------------- + xbmc/pvr/PVRManager.h | 6 ---- + 2 files changed, 19 insertions(+), 53 deletions(-) + +diff --git a/xbmc/pvr/PVRManager.cpp b/xbmc/pvr/PVRManager.cpp +index 7f03dc0..4e9ef20 100644 +--- a/xbmc/pvr/PVRManager.cpp ++++ b/xbmc/pvr/PVRManager.cpp +@@ -139,9 +139,6 @@ bool CPVRManager::StartUpdateThreads(void) + StopUpdateThreads(); + CLog::Log(LOGNOTICE, "PVRManager - starting up"); + +- /* show the busy dialog while loading */ +- ShowBusyDialog(true); +- + /* create the pvrmanager thread, which will ensure that all data will be loaded */ + Create(); + SetName("XBMC PVRManager"); +@@ -173,39 +170,32 @@ void CPVRManager::Cleanup(void) + + bool CPVRManager::Load(void) + { +- if (m_bLoaded) +- return true; +- + /* load at least one client */ +- while (!m_addons->HasActiveClients()) +- { ++ while (!m_addons->HasActiveClients() && !m_bStop) + m_addons->TryLoadClients(1); + +- if (m_addons->HasActiveClients()) +- { +- CLog::Log(LOGDEBUG, "PVRManager - %s - active clients found. continue to start", __FUNCTION__); ++ if (m_addons->HasActiveClients() && !m_bLoaded && !m_bStop) ++ { ++ CLog::Log(LOGDEBUG, "PVRManager - %s - active clients found. continue to start", __FUNCTION__); ++ ShowBusyDialog(true); + +- /* load all channels and groups */ ++ /* load all channels and groups */ ++ if (!m_bStop) + m_channelGroups->Load(); + +- /* get timers from the backends */ ++ /* get timers from the backends */ ++ if (!m_bStop) + m_timers->Load(); + +- /* get recordings from the backend */ ++ /* get recordings from the backend */ ++ if (!m_bStop) + m_recordings->Load(); +- } + +- /* check if there are (still) any enabled addons */ +- if (DisableIfNoClients()) +- { +- CLog::Log(LOGDEBUG, "PVRManager - %s - no clients could be found. aborting startup", __FUNCTION__); +- return false; +- } ++ ShowBusyDialog(false); ++ m_bLoaded = true; + } + +- m_bLoaded = true; +- +- return true; ++ return m_bLoaded; + } + + void CPVRManager::ShowBusyDialog(bool bShow) +@@ -230,8 +220,6 @@ void CPVRManager::Process(void) + /* load the pvr data from the db and clients if it's not already loaded */ + if (!Load()) + { +- /* close the busy dialog */ +- ShowBusyDialog(false); + CLog::Log(LOGERROR, "PVRManager - %s - failed to load PVR data", __FUNCTION__); + return; + } +@@ -272,13 +260,15 @@ void CPVRManager::Process(void) + m_addons->TryLoadClients(1); + + /* execute the next pending jobs if there are any */ +- ExecutePendingJobs(); ++ if (m_addons->HasActiveClients()) ++ ExecutePendingJobs(); + + /* check if the (still) are any enabled addons */ +- if (DisableIfNoClients()) ++ if (!m_addons->HasActiveClients()) + { +- CLog::Log(LOGNOTICE, "PVRManager - %s - no add-ons enabled. disabling PVR functionality", __FUNCTION__); ++ CLog::Log(LOGNOTICE, "PVRManager - %s - no add-ons enabled anymore. restarting the pvrmanager", __FUNCTION__); + Stop(); ++ Start(); + return; + } + +@@ -374,24 +364,6 @@ void CPVRManager::ResetProperties(void) + m_pendingUpdates.clear(); + } + +-bool CPVRManager::DisableIfNoClients(void) +-{ +- bool bReturn(false); +- +- if (!m_addons->HasClients()) +- { +- g_guiSettings.SetBool("pvrmanager.enabled", false); +- CLog::Log(LOGNOTICE,"PVRManager - no clients enabled. pvrmanager disabled."); +- +- CGUIDialogOK *dialog = (CGUIDialogOK *)g_windowManager.GetWindow(WINDOW_DIALOG_OK); +- if (dialog) +- dialog->ShowAndGetInput(257,0,19223,0); +- bReturn = true; +- } +- +- return bReturn; +-} +- + void CPVRManager::ResetDatabase(bool bShowProgress /* = true */) + { + CLog::Log(LOGNOTICE,"PVRManager - %s - clearing the PVR database", __FUNCTION__); +diff --git a/xbmc/pvr/PVRManager.h b/xbmc/pvr/PVRManager.h +index a2f378a..6fa6bca 100644 +--- a/xbmc/pvr/PVRManager.h ++++ b/xbmc/pvr/PVRManager.h +@@ -407,12 +407,6 @@ namespace PVR + */ + virtual void Process(void); + +- /*! +- * @brief Disable the pvrmanager if no clients are enabled or active. +- * @return True if no clients are enabled, false otherwise. +- */ +- bool DisableIfNoClients(void); +- + private: + + void Cleanup(void); +-- +1.7.4.1 +