1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
/*
* 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
// Fanart.h
//////////////////////////////////////////////////////////////////////
#include <string>
#include <vector>
///
/// /brief CFanart is the core of fanart support and contains all fanart data for a specific show
///
/// CFanart stores all data related to all available fanarts for a given TV show and provides
/// functions required to manipulate and access that data.
/// In order to provide an interface between the fanart data and the XBMC database, all data
/// is stored internally it its own form, as well as packed into an XML formatted string
/// stored in the member variable m_xml.
/// Information on multiple fanarts for a given show is stored, but XBMC only cares about the
/// very first fanart stored. These interfaces provide a means to access the data in that first
/// fanart record, as well as to set which fanart is the first record. Externally, all XBMC needs
/// to care about is getting and setting that first record. Everything else is maintained internally
/// by CFanart. This point is key to using the interface properly.
class CFanart
{
public:
///
/// Standard constructor doesn't need to do anything
CFanart();
///
/// Takes the internal fanart data and packs it into an XML formatted string in m_xml
/// \sa m_xml
void Pack();
///
/// Takes the XML formatted string m_xml and unpacks the fanart data contained into the internal data
/// \return A boolean indicating success or failure
/// \sa m_xml
bool Unpack();
///
/// Retrieves the fanart full res image URL
/// \param index - index of image to retrieve (defaults to 0)
/// \return A string containing the full URL to the full resolution fanart image
std::string GetImageURL(unsigned int index = 0) const;
///
/// Retrieves the fanart preview image URL, or full res image URL if that doesn't exist
/// \param index - index of image to retrieve (defaults to 0)
/// \return A string containing the full URL to the full resolution fanart image
std::string GetPreviewURL(unsigned int index = 0) const;
///
/// Used to return a specified fanart theme color value
/// \param index: 0 based index of the color to retrieve. A fanart theme contains 3 colors, indices 0-2, arranged from darkest to lightest.
const std::string GetColor(unsigned int index) const;
///
/// Sets a particular fanart to be the "primary" fanart, or in other words, sets which fanart is actually used by XBMC
///
/// This is the one of the only instances in the public interface where there is any hint that more than one fanart exists, but its by necessity.
/// \param index: 0 based index of which fanart to set as the primary fanart
/// \return A boolean value indicating success or failure. This should only return false if the specified index is not a valid fanart
bool SetPrimaryFanart(unsigned int index);
///
/// Returns how many fanarts are stored
/// \return An integer indicating how many fanarts are stored in the class. Fanart indices are 0 to (GetNumFanarts() - 1)
unsigned int GetNumFanarts() const;
/// Adds an image to internal fanart data
void AddFanart(const std::string& image, const std::string& preview, const std::string& colors);
/// Clear all internal fanart data
void Clear();
///
/// m_xml contains an XML formatted string which is all fanart packed into one string.
///
/// This string is the "interface" as it were to the XBMC database, and MUST be kept in sync with the rest of the class. Therefore
/// anytime this string is changed, the change should be followed up by a call to CFanart::UnPack(). This XML formatted string is
/// also the interface used to pass the fanart data from the scraper to CFanart.
std::string m_xml;
private:
static const unsigned int max_fanart_colors;
///
/// Parse various color formats as returned by the sites scraped into a format we recognize
///
/// Supported Formats:
///
/// * The TVDB RGB Int Triplets, pipe separate with leading/trailing pipes "|68,69,59|69,70,58|78,78,68|"
/// * XBMC ARGB Hexadecimal string comma separated "FFFFFFFF,DDDDDDDD,AAAAAAAA"
///
/// \param colorsIn: string containing colors in some format to be converted
/// \param colorsOut: XBMC ARGB Hexadecimal string comma separated "FFFFFFFF,DDDDDDDD,AAAAAAAA"
/// \return boolean indicating success or failure.
static bool ParseColors(const std::string&colorsIn, std::string&colorsOut);
struct SFanartData
{
std::string strImage;
std::string strColors;
std::string strPreview;
};
///
/// std::vector that stores all our fanart data
std::vector<SFanartData> m_fanart;
};
|