summaryrefslogtreecommitdiffstats
path: root/xbmc/ThumbLoader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/ThumbLoader.cpp')
-rw-r--r--xbmc/ThumbLoader.cpp125
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 "";
+}