This adds a background job to search for missing channel icons, which is exectued on every PVR manager start.
msgid "Browse for icon"
msgstr ""
-#empty strings from id 19286 to 19498
+#. Notification message if process starts searching for missing channel icons
+#: xbmc/pvr/PVRManager.cpp
+msgctxt "#19286"
+msgid "Searching for channel icons"
+msgstr ""
+
+#empty strings from id 19287 to 19498
#: xbmc/epg/Epg.cpp
msgctxt "#19499"
if (settingId == "pvrmenu.searchicons")
{
if (IsStarted())
- SearchMissingChannelIcons();
+ TriggerSearchMissingChannelIcons();
}
else if (settingId == "pvrmanager.resetdb")
{
bool bRestart(false);
while (IsStarted() && m_addons && m_addons->HasConnectedClients() && !bRestart)
{
- /* continue last watched channel after first startup */
+ /* first startup */
if (m_bFirstStart)
{
{
CSingleLock lock(m_critSection);
m_bFirstStart = false;
}
+
+ /* start job to search for missing channel icons */
+ TriggerSearchMissingChannelIcons();
+
+ /* continue last watched channel */
ContinueLastChannel();
}
/* execute the next pending jobs if there are any */
QueueJob(new CPVRChannelSettingsSaveJob());
}
+void CPVRManager::TriggerSearchMissingChannelIcons(void)
+{
+ CJobManager::GetInstance().AddJob(new CPVRSearchMissingChannelIconsJob(), NULL);
+}
+
void CPVRManager::ExecutePendingJobs(void)
{
CSingleLock lock(m_critSectionTriggers);
return true;
}
+bool CPVRSearchMissingChannelIconsJob::DoWork(void)
+{
+ g_PVRManager.SearchMissingChannelIcons();
+ return true;
+}
+
bool CPVRManager::CreateChannelEpgs(void)
{
if (EpgsCreated())
void TriggerSaveChannelSettings(void);
/*!
+ * @brief Let the background thread search for missing channel icons.
+ */
+ void TriggerSearchMissingChannelIcons(void);
+
+ /*!
* @brief Update the channel that is currently active.
* @param item The new channel.
* @return True if it was updated correctly, false otherwise.
CFileItem* m_previous;
CFileItem* m_next;
};
+
+ class CPVRSearchMissingChannelIconsJob : public CJob
+ {
+ public:
+ CPVRSearchMissingChannelIconsJob(void) {}
+ virtual ~CPVRSearchMissingChannelIconsJob() {}
+ virtual const char *GetType() const { return "pvr-search-missing-channel-icons"; }
+
+ bool DoWork();
+ };
}
#include "guilib/GUIWindowManager.h"
#include "dialogs/GUIDialogYesNo.h"
#include "dialogs/GUIDialogOK.h"
+#include "dialogs/GUIDialogExtendedProgressBar.h"
#include "music/tags/MusicInfoTag.h"
#include "utils/log.h"
#include "Util.h"
if (fileItemList.IsEmpty())
return;
-
+
+ CGUIDialogExtendedProgressBar* dlgProgress = (CGUIDialogExtendedProgressBar*)g_windowManager.GetWindow(WINDOW_DIALOG_EXT_PROGRESS);
+ CGUIDialogProgressBarHandle* dlgProgressHandle = dlgProgress ? dlgProgress->GetHandle(g_localizeStrings.Get(19286)) : NULL;
+
CSingleLock lock(m_critSection);
/* create a map for fast lookup of normalized file base name */
fileItemMap.insert(std::make_pair(baseName, (*it)->GetPath()));
}
+ int channelIndex = 0;
for(std::vector<PVRChannelGroupMember>::const_iterator it = m_members.begin(); it != m_members.end(); ++it)
{
CPVRChannelPtr channel = (*it).channel;
+ /* update progress dialog */
+ if (dlgProgressHandle)
+ {
+ dlgProgressHandle->SetProgress(channelIndex++, m_members.size());
+ dlgProgressHandle->SetText(channel->ChannelName());
+ }
+
/* skip if an icon is already set and exists */
if (channel->IsIconExists())
continue;
/* TODO: start channel icon scraper here if nothing was found */
}
+
+ if (dlgProgressHandle)
+ dlgProgressHandle->MarkFinished();
}
/********** sort methods **********/
{
CLog::Log(LOGINFO, "PVRChannelGroupsContainer - %s - starting channel icon search", __FUNCTION__);
- // TODO: Add Process dialog here
CPVRChannelGroupPtr channelgrouptv = GetGroupAllTV();
CPVRChannelGroupPtr channelgroupradio = GetGroupAllRadio();
channelgrouptv->SearchAndSetChannelIcons(true);
if (channelgroupradio)
channelgroupradio->SearchAndSetChannelIcons(true);
-
- CGUIDialogOK::ShowAndGetInput(19167,0,20177,0);
}
CFileItemPtr CPVRChannelGroupsContainer::GetLastPlayedChannel(void) const