MythTV  master
upnpcdsobjects.h
Go to the documentation of this file.
1 // Program Name: UPnpCDSObjects.h
3 // Created : Oct. 24, 2005
4 //
5 // Purpose : uPnp Content Directory Service Object Definitions
6 //
7 // Copyright (c) 2005 David Blain <dblain@mythtv.org>
8 //
9 // Licensed under the GPL v2 or later, see LICENSE for details
10 //
12 
13 #ifndef UPNPCDSOBJECTS_H
14 #define UPNPCDSOBJECTS_H
15 
16 #include <utility>
17 
18 #include <QDateTime>
19 #include <QList>
20 #include <QMap>
21 #include <QString>
22 
24 
25 #include "upnpexp.h"
26 #include "httprequest.h"
27 
28 class CDSObject;
29 class QTextStream;
30 
32 //
34 
35 enum ObjectTypes : std::uint8_t
36 {
39  OT_Item = 2,
40  OT_Res = 3
41 };
42 
44 //
46 
47 class Property
48 {
49  public:
50 
51  QString m_sName;
52  QString m_sNameSpace;
53  bool m_bRequired {false};
54  bool m_bMultiValue {false};
56 
57  public:
58 
59  explicit Property( QString sName,
60  QString sNameSpace = "",
61  bool bRequired = false,
62  const QString &sValue = "",
63  bool bMultiValue = false
64  )
65  : m_sName(std::move(sName)),
66  m_sNameSpace(std::move(sNameSpace)),
67  m_bRequired(bRequired),
68  m_bMultiValue(bMultiValue)
69  {
70  m_sValue = HTTPRequest::Encode(sValue);
71  }
72 
73  void SetValue(const QString &value)
74  {
75  m_sValue = value;
76  }
77 
78  QString GetValue(void) const
79  {
80  return m_sValue;
81  }
82 
83  QString GetEncodedValue(void) const
84  {
86  }
87 
88  void AddAttribute( const QString &sName,
89  const QString &sValue )
90  {
91  m_lstAttributes.push_back(NameValue(sName, HTTPRequest::Encode(sValue)));
92  }
93 
94  protected:
95  QString m_sValue;
96 };
97 
98 using Properties = QMultiMap<QString,Property*>;
99 using CDSObjects = QList<CDSObject*>;
100 
102 //
104 
105 class Resource
106 {
107  public:
108 
110  QString m_sURI;
111 
113 
114  public:
115 
116  Resource( QString sProtocolInfo,
117  const QString &sURI )
118  : m_sProtocolInfo(std::move(sProtocolInfo))
119  {
120  m_sURI = HTTPRequest::Encode(sURI);
121  }
122 
123  void AddAttribute( const QString &sName,
124  const QString &sValue )
125  {
126  m_lstAttributes.push_back(NameValue(sName, HTTPRequest::Encode(sValue)));
127  }
128 };
129 
130 using Resources = QList<Resource*>;
131 
133 //
135 
137 {
138  public:
139 
140  QString m_sClass;
141  QString m_sName;
143 
144  public:
145 
146  ContainerClass( QString sClass,
147  QString sName,
148  bool bIncludeDerived )
149  : m_sClass(std::move(sClass)),
150  m_sName(std::move(sName)),
151  m_bIncludeDerived(bIncludeDerived)
152  {
153  }
154 };
155 
156 using Classes = QList<ContainerClass*>;
157 
182 using FilterMap = QStringList;
183 
185 
187 {
188  public:
189  short m_nUpdateId {1};
190 
192 
193  // Required
194 
195  QString m_sId;
196  QString m_sParentId;
197  QString m_sTitle;
198  QString m_sClass;
199  bool m_bRestricted {true};
200  bool m_bSearchable {false};
201 
202  // Optional
203 
204  QString m_sCreator;
205  QString m_sWriteStatus {"PROTECTED"};
206 
207  // Only appropriate for Container Classes
208 
211 
212  //
213 
216  uint32_t m_nChildCount {0};
217  uint32_t m_nChildContainerCount {0};
218 
220 
221 
222  public:
223 
224  explicit CDSObject( const QString &sId = "-1",
225  const QString &sTitle = "",
226  const QString &sParentId = "-1" );
227  ~CDSObject() override;
228 
229  Property *AddProperty( Property *pProp );
230  QList<Property*> GetProperties( const QString &sName );
231  CDSObject *AddChild ( CDSObject *pChild );
232  CDSObjects GetChildren( void ) const { return m_children; }
233  CDSObject *GetChild ( const QString &sID );
234 
235  ContainerClass *AddSearchClass( ContainerClass *pClass );
236  ContainerClass *AddCreateClass( ContainerClass *pClass );
237 
238  void SetPropValue( const QString &sName, const QString &sValue,
239  const QString &type = "" );
240  QString GetPropValue( const QString &sName ) const;
241  QString toXml ( FilterMap &filter,
242  bool ignoreChildren = false ) const;
243  void toXml ( QTextStream &os, FilterMap &filter,
244  bool ignoreChildren = false ) const;
245 
246  uint32_t GetChildCount( void ) const;
247  void SetChildCount( uint32_t nCount );
248 
249  uint32_t GetChildContainerCount( void ) const;
250  void SetChildContainerCount( uint32_t nCount );
251 
252  Resource *AddResource( const QString& sProtocol, const QString& sURI );
253 
254  public:
255 
256  static CDSObject *CreateItem ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
257  static CDSObject *CreateContainer ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
258  static CDSObject *CreateAudioItem ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
259  static CDSObject *CreateMusicTrack ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
260  static CDSObject *CreateAudioBroadcast ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
261  static CDSObject *CreateAudioBook ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
262  static CDSObject *CreateVideoItem ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
263  static CDSObject *CreateMovie ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
264  static CDSObject *CreateVideoBroadcast ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
265  static CDSObject *CreateMusicVideoClip ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
266  static CDSObject *CreateImageItem ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
267  static CDSObject *CreatePhoto ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
268  static CDSObject *CreatePlaylistItem ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
269  static CDSObject *CreateTextItem ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
270  static CDSObject *CreateAlbum ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
271  static CDSObject *CreateMusicAlbum ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
272  static CDSObject *CreatePhotoAlbum ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
273  static CDSObject *CreateGenre ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
274  static CDSObject *CreateMusicGenre ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
275  static CDSObject *CreateMovieGenre ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
276  static CDSObject *CreatePlaylistContainer( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
277  static CDSObject *CreatePerson ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
278  static CDSObject *CreateMusicArtist ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
279  static CDSObject *CreateStorageSystem ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
280  static CDSObject *CreateStorageVolume ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
281  static CDSObject *CreateStorageFolder ( const QString& sId, const QString& sTitle, const QString& sParentId, CDSObject *pObject = nullptr );
282 
283  private:
284  static bool FilterContains( const FilterMap &filter, const QString &name ) ;
285 
286 };
287 
288 #endif // UPNPCDSOBJECTS_H
NameValue
Definition: upnputil.h:40
Property::m_sName
QString m_sName
Definition: upnpcdsobjects.h:51
CDSObject::GetChildren
CDSObjects GetChildren(void) const
Definition: upnpcdsobjects.h:232
CDSObject::m_children
CDSObjects m_children
Definition: upnpcdsobjects.h:215
Resource::m_sURI
QString m_sURI
Definition: upnpcdsobjects.h:110
OT_Container
@ OT_Container
Definition: upnpcdsobjects.h:38
Property::GetEncodedValue
QString GetEncodedValue(void) const
Definition: upnpcdsobjects.h:83
CDSObject::m_sTitle
QString m_sTitle
Definition: upnpcdsobjects.h:197
CDSObject
Definition: upnpcdsobjects.h:186
Resource::Resource
Resource(QString sProtocolInfo, const QString &sURI)
Definition: upnpcdsobjects.h:116
OT_Res
@ OT_Res
Definition: upnpcdsobjects.h:40
Resource::m_lstAttributes
NameValues m_lstAttributes
Definition: upnpcdsobjects.h:112
Resource
Definition: upnpcdsobjects.h:105
ContainerClass
Definition: upnpcdsobjects.h:136
Property::GetValue
QString GetValue(void) const
Definition: upnpcdsobjects.h:78
Resource::AddAttribute
void AddAttribute(const QString &sName, const QString &sValue)
Definition: upnpcdsobjects.h:123
Property::Property
Property(QString sName, QString sNameSpace="", bool bRequired=false, const QString &sValue="", bool bMultiValue=false)
Definition: upnpcdsobjects.h:59
CDSObject::m_sCreator
QString m_sCreator
Definition: upnpcdsobjects.h:204
HTTPRequest::Encode
static QString Encode(const QString &sIn)
Definition: httprequest.cpp:1746
CDSObject::m_sParentId
QString m_sParentId
Definition: upnpcdsobjects.h:196
Property
Definition: upnpcdsobjects.h:47
ContainerClass::m_sName
QString m_sName
Definition: upnpcdsobjects.h:141
Property::m_sNameSpace
QString m_sNameSpace
Definition: upnpcdsobjects.h:52
ContainerClass::m_bIncludeDerived
bool m_bIncludeDerived
Definition: upnpcdsobjects.h:142
Property::AddAttribute
void AddAttribute(const QString &sName, const QString &sValue)
Definition: upnpcdsobjects.h:88
NameValues
Definition: upnputil.h:77
FilterMap
QMap< uint, int > FilterMap
Definition: ExternalSignalMonitor.h:17
Property::m_bMultiValue
bool m_bMultiValue
Definition: upnpcdsobjects.h:54
Property::m_sValue
QString m_sValue
Definition: upnpcdsobjects.h:95
Property::SetValue
void SetValue(const QString &value)
Definition: upnpcdsobjects.h:73
ObjectTypes
ObjectTypes
Definition: upnpcdsobjects.h:35
Properties
QMultiMap< QString, Property * > Properties
Definition: upnpcdsobjects.h:98
Resource::m_sProtocolInfo
QString m_sProtocolInfo
Definition: upnpcdsobjects.h:109
CDSObjects
QList< CDSObject * > CDSObjects
Definition: upnpcdsobjects.h:99
ContainerClass::ContainerClass
ContainerClass(QString sClass, QString sName, bool bIncludeDerived)
Definition: upnpcdsobjects.h:146
ContainerClass::m_sClass
QString m_sClass
Definition: upnpcdsobjects.h:140
Property::m_bRequired
bool m_bRequired
Definition: upnpcdsobjects.h:53
referencecounter.h
CDSObject::m_sId
QString m_sId
Definition: upnpcdsobjects.h:195
Classes
QList< ContainerClass * > Classes
Definition: upnpcdsobjects.h:156
OT_Undefined
@ OT_Undefined
Definition: upnpcdsobjects.h:37
CDSObject::m_properties
Properties m_properties
Definition: upnpcdsobjects.h:214
CDSObject::m_sClass
QString m_sClass
Definition: upnpcdsobjects.h:198
UPNP_PUBLIC
#define UPNP_PUBLIC
Definition: upnpexp.h:9
Property::m_lstAttributes
NameValues m_lstAttributes
Definition: upnpcdsobjects.h:55
CDSObject::m_resources
Resources m_resources
Definition: upnpcdsobjects.h:219
OT_Item
@ OT_Item
Definition: upnpcdsobjects.h:39
CDSObject::m_SearchClass
Classes m_SearchClass
Definition: upnpcdsobjects.h:209
httprequest.h
ReferenceCounter
General purpose reference counter.
Definition: referencecounter.h:26
Resources
QList< Resource * > Resources
Definition: upnpcdsobjects.h:130
upnpexp.h
CDSObject::m_CreateClass
Classes m_CreateClass
Definition: upnpcdsobjects.h:210