diff --git a/xbmc/listproviders/DirectoryProvider.cpp b/xbmc/listproviders/DirectoryProvider.cpp index 9191e47f8e3e6..9eddf7b62ec9d 100644 --- a/xbmc/listproviders/DirectoryProvider.cpp +++ b/xbmc/listproviders/DirectoryProvider.cpp @@ -29,6 +29,10 @@ #include "threads/SingleLock.h" #include "ApplicationMessenger.h" #include "FileItem.h" +#include "video/VideoThumbLoader.h" +#include "music/MusicThumbLoader.h" +#include "pictures/PictureThumbLoader.h" +#include "boost/make_shared.hpp" using namespace std; using namespace XFILE; @@ -36,6 +40,14 @@ using namespace XFILE; class CDirectoryJob : public CJob { public: + typedef enum + { + VIDEO, + AUDIO, + PICTURE, + PROGRAM + } InfoTagType; + CDirectoryJob(const std::string &url, int parentID) : m_url(url), m_parentID(parentID) { }; virtual ~CDirectoryJob() {}; @@ -63,6 +75,9 @@ class CDirectoryJob : public CJob CGUIStaticItemPtr item(new CGUIStaticItem(*items[i])); if (item->HasProperty("node.visible")) item->SetVisibleCondition(item->GetProperty("node.visible").asString(), m_parentID); + + getThumbLoader(item)->LoadItem(item.get()); + m_items.push_back(item); } m_target = items.GetProperty("node.target").asString(); @@ -70,6 +85,38 @@ class CDirectoryJob : public CJob return true; } + boost::shared_ptr getThumbLoader(CGUIStaticItemPtr &item) + { + if (item->IsVideo()) + { + initThumbLoader(VIDEO); + return m_thumbloaders[VIDEO]; + } + if (item->IsAudio()) + { + initThumbLoader(AUDIO); + return m_thumbloaders[AUDIO]; + } + if (item->IsPicture()) + { + initThumbLoader(PICTURE); + return m_thumbloaders[PICTURE]; + } + initThumbLoader(PROGRAM); + return m_thumbloaders[PROGRAM]; + } + + template + void initThumbLoader(InfoTagType type) + { + if (!m_thumbloaders.count(type)) + { + boost::shared_ptr thumbLoader = boost::make_shared(); + thumbLoader->OnLoaderStart(); + m_thumbloaders.insert(make_pair(type, thumbLoader)); + } + } + const std::vector &GetItems() const { return m_items; } const std::string &GetTarget() const { return m_target; } private: @@ -77,6 +124,7 @@ class CDirectoryJob : public CJob std::string m_target; int m_parentID; std::vector m_items; + std::map > m_thumbloaders; }; CDirectoryProvider::CDirectoryProvider(const TiXmlElement *element, int parentID)