diff options
Diffstat (limited to 'xbmc/addons/ImageResource.cpp')
-rw-r--r-- | xbmc/addons/ImageResource.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/xbmc/addons/ImageResource.cpp b/xbmc/addons/ImageResource.cpp new file mode 100644 index 0000000..06eada3 --- /dev/null +++ b/xbmc/addons/ImageResource.cpp @@ -0,0 +1,72 @@ +/* + * 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 "ImageResource.h" + +#include "URL.h" +#include "addons/addoninfo/AddonType.h" +#include "filesystem/XbtManager.h" +#include "utils/FileUtils.h" +#include "utils/StringUtils.h" +#include "utils/URIUtils.h" + +namespace ADDON +{ + +CImageResource::CImageResource(const AddonInfoPtr& addonInfo) + : CResource(addonInfo, AddonType::RESOURCE_IMAGES) +{ + m_type = Type(AddonType::RESOURCE_IMAGES)->GetValue("@type").asString(); +} + +void CImageResource::OnPreUnInstall() +{ + CURL xbtUrl; + if (!HasXbt(xbtUrl)) + return; + + // if there's an XBT we need to remove it from the XBT manager + XFILE::CXbtManager::GetInstance().Release(xbtUrl); +} + +bool CImageResource::IsAllowed(const std::string &file) const +{ + // check if the file path points to a directory + if (URIUtils::HasSlashAtEnd(file, true)) + return true; + + std::string ext = URIUtils::GetExtension(file); + return file.empty() || + StringUtils::EqualsNoCase(ext, ".png") || + StringUtils::EqualsNoCase(ext, ".jpg"); +} + +std::string CImageResource::GetFullPath(const std::string &filePath) const +{ + // check if there's an XBT file which might contain the file. if not just return the usual full path + CURL xbtUrl; + if (!HasXbt(xbtUrl)) + return CResource::GetFullPath(filePath); + + // append the file path to the xbt:// URL + return URIUtils::AddFileToFolder(xbtUrl.Get(), filePath); +} + +bool CImageResource::HasXbt(CURL& xbtUrl) const +{ + std::string resourcePath = GetResourcePath(); + std::string xbtPath = URIUtils::AddFileToFolder(resourcePath, "Textures.xbt"); + if (!CFileUtils::Exists(xbtPath)) + return false; + + // translate it into a xbt:// URL + xbtUrl = URIUtils::CreateArchivePath("xbt", CURL(xbtPath)); + + return true; +} + +} /* namespace ADDON */ |