diff options
Diffstat (limited to 'xbmc/utils/ScraperUrl.h')
-rw-r--r-- | xbmc/utils/ScraperUrl.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/xbmc/utils/ScraperUrl.h b/xbmc/utils/ScraperUrl.h new file mode 100644 index 0000000..9ff416a --- /dev/null +++ b/xbmc/utils/ScraperUrl.h @@ -0,0 +1,123 @@ +/* + * 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 <map> +#include <string> +#include <vector> + +class TiXmlElement; +namespace XFILE +{ +class CCurlFile; +} + +class CScraperUrl +{ +public: + enum class UrlType + { + General = 1, + Season = 2 + }; + + struct SUrlEntry + { + explicit SUrlEntry(std::string url = "") + : m_url(std::move(url)), m_type(UrlType::General), m_post(false), m_isgz(false), m_season(-1) + { + } + + std::string m_spoof; + std::string m_url; + std::string m_cache; + std::string m_aspect; + std::string m_preview; + UrlType m_type; + bool m_post; + bool m_isgz; + int m_season; + }; + + CScraperUrl(); + explicit CScraperUrl(const std::string& strUrl); + explicit CScraperUrl(const TiXmlElement* element); + ~CScraperUrl(); + + void Clear(); + + bool HasData() const { return !m_data.empty(); } + const std::string& GetData() const { return m_data; } + void SetData(std::string data); + + const std::string& GetTitle() const { return m_title; } + void SetTitle(std::string title) { m_title = std::move(title); } + + const std::string& GetId() const { return m_id; } + void SetId(std::string id) { m_id = std::move(id); } + + double GetRelevance() const { return m_relevance; } + void SetRelevance(double relevance) { m_relevance = relevance; } + + bool HasUrls() const { return !m_urls.empty(); } + const std::vector<SUrlEntry>& GetUrls() const { return m_urls; } + void SetUrls(std::vector<SUrlEntry> urls) { m_urls = std::move(urls); } + void AppendUrl(SUrlEntry url) { m_urls.push_back(std::move(url)); } + + const SUrlEntry GetFirstUrlByType(const std::string& type = "") const; + const SUrlEntry GetSeasonUrl(int season, const std::string& type = "") const; + unsigned int GetMaxSeasonUrl() const; + + std::string GetFirstThumbUrl() const; + + /*! \brief fetch the full URLs (including referrer) of thumbs + \param thumbs [out] vector of thumb URLs to fill + \param type the type of thumb URLs to fetch, if empty (the default) picks any + \param season number of season that we want thumbs for, -1 indicates no season (the default) + \param unique avoid adding duplicate URLs when adding to a thumbs vector with existing items + */ + void GetThumbUrls(std::vector<std::string>& thumbs, + const std::string& type = "", + int season = -1, + bool unique = false) const; + + bool Parse(); + bool ParseFromData(const std::string& data); // copies by intention + bool ParseAndAppendUrl(const TiXmlElement* element); + bool ParseAndAppendUrlsFromEpisodeGuide(const std::string& episodeGuide); // copies by intention + void AddParsedUrl(const std::string& url, + const std::string& aspect = "", + const std::string& preview = "", + const std::string& referrer = "", + const std::string& cache = "", + bool post = false, + bool isgz = false, + int season = -1); + + /*! \brief fetch the full URL (including referrer) of a thumb + \param URL entry to use to create the full URL + \return the full URL, including referrer + */ + static std::string GetThumbUrl(const CScraperUrl::SUrlEntry& entry); + + static bool Get(const SUrlEntry& scrURL, + std::string& strHTML, + XFILE::CCurlFile& http, + const std::string& cacheContext); + + // ATTENTION: this member MUST NOT be used directly except from databases + std::string m_data; + +private: + std::string m_title; + std::string m_id; + double m_relevance; + std::vector<SUrlEntry> m_urls; + bool m_parsed; +}; |