summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/ImageResource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/addons/ImageResource.cpp')
-rw-r--r--xbmc/addons/ImageResource.cpp72
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 */