diff options
Diffstat (limited to 'xbmc/ThumbLoader.cpp')
-rw-r--r-- | xbmc/ThumbLoader.cpp | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/xbmc/ThumbLoader.cpp b/xbmc/ThumbLoader.cpp new file mode 100644 index 0000000..3e1508c --- /dev/null +++ b/xbmc/ThumbLoader.cpp @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "ThumbLoader.h" + +#include "FileItem.h" +#include "ServiceBroker.h" +#include "TextureCache.h" +#include "utils/FileUtils.h" + +CThumbLoader::CThumbLoader() : + CBackgroundInfoLoader() +{ + m_textureDatabase = new CTextureDatabase(); +} + +CThumbLoader::~CThumbLoader() +{ + delete m_textureDatabase; +} + +void CThumbLoader::OnLoaderStart() +{ + m_textureDatabase->Open(); +} + +void CThumbLoader::OnLoaderFinish() +{ + m_textureDatabase->Close(); +} + +std::string CThumbLoader::GetCachedImage(const CFileItem &item, const std::string &type) +{ + if (!item.GetPath().empty() && m_textureDatabase->Open()) + { + std::string image = m_textureDatabase->GetTextureForPath(item.GetPath(), type); + m_textureDatabase->Close(); + return image; + } + return ""; +} + +void CThumbLoader::SetCachedImage(const CFileItem &item, const std::string &type, const std::string &image) +{ + if (!item.GetPath().empty() && m_textureDatabase->Open()) + { + m_textureDatabase->SetTextureForPath(item.GetPath(), type, image); + m_textureDatabase->Close(); + } +} + +CProgramThumbLoader::CProgramThumbLoader() = default; + +CProgramThumbLoader::~CProgramThumbLoader() = default; + +bool CProgramThumbLoader::LoadItem(CFileItem *pItem) +{ + bool result = LoadItemCached(pItem); + result |= LoadItemLookup(pItem); + + return result; +} + +bool CProgramThumbLoader::LoadItemCached(CFileItem *pItem) +{ + if (pItem->IsParentFolder()) + return false; + + return FillThumb(*pItem); +} + +bool CProgramThumbLoader::LoadItemLookup(CFileItem *pItem) +{ + return false; +} + +bool CProgramThumbLoader::FillThumb(CFileItem &item) +{ + // no need to do anything if we already have a thumb set + std::string thumb = item.GetArt("thumb"); + + if (thumb.empty()) + { // see whether we have a cached image for this item + thumb = GetCachedImage(item, "thumb"); + if (thumb.empty()) + { + thumb = GetLocalThumb(item); + if (!thumb.empty()) + SetCachedImage(item, "thumb", thumb); + } + } + + if (!thumb.empty()) + { + CServiceBroker::GetTextureCache()->BackgroundCacheImage(thumb); + item.SetArt("thumb", thumb); + } + return true; +} + +std::string CProgramThumbLoader::GetLocalThumb(const CFileItem &item) +{ + if (item.IsAddonsPath()) + return ""; + + // look for the thumb + if (item.m_bIsFolder) + { + std::string folderThumb = item.GetFolderThumb(); + if (CFileUtils::Exists(folderThumb)) + return folderThumb; + } + else + { + std::string fileThumb(item.GetTBNFile()); + if (CFileUtils::Exists(fileThumb)) + return fileThumb; + } + return ""; +} |