diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
commit | c04dcc2e7d834218ef2d4194331e383402495ae1 (patch) | |
tree | 7333e38d10d75386e60f336b80c2443c1166031d /xbmc/TextureDatabase.h | |
parent | Initial commit. (diff) | |
download | kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip |
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'xbmc/TextureDatabase.h')
-rw-r--r-- | xbmc/TextureDatabase.h | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/xbmc/TextureDatabase.h b/xbmc/TextureDatabase.h new file mode 100644 index 0000000..4965b9d --- /dev/null +++ b/xbmc/TextureDatabase.h @@ -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. + */ + +#pragma once + +#include "TextureCacheJob.h" +#include "dbwrappers/Database.h" +#include "dbwrappers/DatabaseQuery.h" + +#include <string> +#include <vector> + +class CVariant; + +class CTextureRule : public CDatabaseQueryRule +{ +public: + CTextureRule() = default; + ~CTextureRule() override = default; + + static void GetAvailableFields(std::vector<std::string> &fieldList); +protected: + int TranslateField(const char *field) const override; + std::string TranslateField(int field) const override; + std::string GetField(int field, const std::string& type) const override; + FIELD_TYPE GetFieldType(int field) const override; + std::string FormatParameter(const std::string &negate, + const std::string &oper, + const CDatabase &db, + const std::string &type) const override; +}; + +class CTextureUtils +{ +public: + /*! \brief retrieve a wrapped URL for a image file + \param image name of the file + \param type signifies a special type of image (eg embedded video thumb, picture folder thumb) + \param options which options we need (eg size=thumb) + \return full wrapped URL of the image file + */ + static std::string GetWrappedImageURL(const std::string &image, const std::string &type = "", const std::string &options = ""); + static std::string GetWrappedThumbURL(const std::string &image); + + /*! \brief Unwrap an image://<url_encoded_path> style URL + Such urls are used for art over the webserver or other users of the VFS + \param image url of the image + \return the unwrapped URL, or the original URL if unwrapping is inappropriate. + */ + static std::string UnwrapImageURL(const std::string &image); +}; + +class CTextureDatabase : public CDatabase, public IDatabaseQueryRuleFactory +{ +public: + CTextureDatabase(); + ~CTextureDatabase() override; + bool Open() override; + + bool GetCachedTexture(const std::string &originalURL, CTextureDetails &details); + bool AddCachedTexture(const std::string &originalURL, const CTextureDetails &details); + bool SetCachedTextureValid(const std::string &originalURL, bool updateable); + bool ClearCachedTexture(const std::string &originalURL, std::string &cacheFile); + bool ClearCachedTexture(int textureID, std::string &cacheFile); + bool IncrementUseCount(const CTextureDetails &details); + + /*! \brief Invalidate a previously cached texture + Invalidates the texture hash, and sets the texture update time to the current time so that + next texture load it will be re-cached. + \param url texture path + */ + bool InvalidateCachedTexture(const std::string &originalURL); + + /*! \brief Get a texture associated with the given path + Used for retrieval of previously discovered images to save + stat() on the filesystem all the time + \param url path that may be associated with a texture + \param type type of image to look for + \return URL of the texture associated with the given path + */ + std::string GetTextureForPath(const std::string &url, const std::string &type); + + /*! \brief Set a texture associated with the given path + Used for setting of previously discovered images to save + stat() on the filesystem all the time. Should be used to set + the actual image path, not the cached image path (the image will be + cached at load time.) + \param url path that was used to find the texture + \param type type of image to associate + \param texture URL of the texture to associate with the path + */ + void SetTextureForPath(const std::string &url, const std::string &type, const std::string &texture); + + /*! \brief Clear a texture associated with the given path + \param url path that was used to find the texture + \param type type of image to associate + \param texture URL of the texture to associate with the path + \sa GetTextureForPath, SetTextureForPath + */ + void ClearTextureForPath(const std::string &url, const std::string &type); + + bool GetTextures(CVariant &items, const Filter &filter); + + // rule creation + CDatabaseQueryRule *CreateRule() const override; + CDatabaseQueryRuleCombination *CreateCombination() const override; +protected: + /*! \brief retrieve a hash for the given url + Computes a hash of the current url to use for lookups in the database + \param url url to hash + \return a hash for this url + */ + unsigned int GetURLHash(const std::string &url) const; + + void CreateTables() override; + void CreateAnalytics() override; + void UpdateTables(int version) override; + int GetSchemaVersion() const override { return 13; } + const char* GetBaseDBName() const override { return "Textures"; } +}; |