added: much better improved UPnP Renderer support. Now provides didl for currently...
[xbmc:xbmc-antiquated.git] / xbmc / lib / libUPnP / Platinum / Source / Devices / MediaServer / PltMediaItem.h
1 /*****************************************************************
2 |
3 |   Platinum - AV Media Item
4 |
5 |   Copyright (c) 2004-2008 Sylvain Rebaud
6 |   Author: Sylvain Rebaud (sylvain@rebaud.com)
7 |
8 ****************************************************************/
9
10 #ifndef _PLT_MEDIA_ITEM_H_
11 #define _PLT_MEDIA_ITEM_H_
12
13 /*----------------------------------------------------------------------
14 |   includes
15 +---------------------------------------------------------------------*/
16 #include "Neptune.h"
17
18 /*----------------------------------------------------------------------
19 |   forward declarations
20 +---------------------------------------------------------------------*/
21 class PLT_MediaServer;
22
23 /*----------------------------------------------------------------------
24 |   typedefs
25 +---------------------------------------------------------------------*/
26 typedef struct { 
27     NPT_String type;
28     NPT_String friendly_name;
29 } PLT_ObjectClass;
30
31 typedef struct { 
32     NPT_String type;
33     NPT_String friendly_name;
34     bool       include_derived;
35 } PLT_SearchClass;
36
37 typedef struct {
38     NPT_String name;
39     NPT_String role;
40 } PLT_PersonRole;
41
42 class PLT_PersonRoles  : public NPT_List<PLT_PersonRole>
43 {
44 public:
45     NPT_Result Add(const NPT_String& name, const NPT_String& role = "");
46     NPT_Result ToDidl(NPT_String& didl, const NPT_String& tag);
47     NPT_Result FromDidl(const NPT_Array<NPT_XmlElementNode*>& nodes);
48 };
49
50 typedef struct {
51     NPT_String allowed_use; // (CSV)
52     NPT_String validity_start;
53     NPT_String validity_end;
54     NPT_String remaining_time;
55     NPT_String usage_info;
56     NPT_String rights_info_uri;
57     NPT_String content_info_uri;
58 } PLT_Constraint;
59
60 typedef struct {
61     PLT_PersonRoles artists;
62     PLT_PersonRoles actors;
63     PLT_PersonRoles authors;
64     NPT_String      producer;
65     NPT_String      director;
66     NPT_String      publisher;
67     NPT_String      contributor; // should match m_Creator (dc:creator)
68 } PLT_PeopleInfo;
69
70 typedef struct {
71     NPT_List<NPT_String> genre;
72     NPT_String album;
73     NPT_String playlist; // dc:title of the playlist item the content belongs too
74 } PLT_AffiliationInfo;
75
76 typedef struct {
77     NPT_String description;
78     NPT_String long_description;
79     NPT_String icon_uri;
80     NPT_String region;
81     NPT_String rating;
82     NPT_String rights;
83     NPT_String date;
84     NPT_String language;
85 } PLT_Description;
86
87 typedef struct {
88     NPT_String album_art_uri;
89     NPT_String album_art_uri_dlna_profile;
90     NPT_String artist_discography_uri;
91     NPT_String lyrics_uri;
92     NPT_List<NPT_String> relation; // dc:relation
93 } PLT_ExtraInfo;
94
95 typedef struct {
96     NPT_UInt32 dvdregioncode;
97     NPT_UInt32 original_track_number;
98     NPT_String toc;
99     NPT_String user_annotation;
100 } PLT_MiscInfo;
101
102 typedef struct {
103     int         total;
104     int         used;
105     int         free;
106     int         max_partition;
107     NPT_String  medium;
108 } PLT_StorageInfo;
109
110 /*----------------------------------------------------------------------
111 |   PLT_MediaItemResource class
112 +---------------------------------------------------------------------*/
113 class PLT_MediaItemResource
114 {
115 public:
116     PLT_MediaItemResource();
117     ~PLT_MediaItemResource() {}
118
119     NPT_String    m_Uri;
120     NPT_String    m_ProtocolInfo;
121     NPT_UInt32    m_Duration; /* seconds */
122     NPT_LargeSize m_Size;
123     NPT_String    m_Protection;
124     NPT_UInt32    m_Bitrate; /* bytes/seconds */
125     NPT_UInt32    m_BitsPerSample;
126     NPT_UInt32    m_SampleFrequency;
127     NPT_UInt32    m_NbAudioChannels;
128     NPT_String    m_Resolution;
129     NPT_UInt32      m_ColorDepth;
130 };
131
132 /*----------------------------------------------------------------------
133 |   PLT_MediaObject class
134 +---------------------------------------------------------------------*/
135 class PLT_MediaObject
136 {
137 public:
138     PLT_MediaObject() {}
139     virtual ~PLT_MediaObject() {}
140
141     bool IsContainer() { return m_ObjectClass.type.StartsWith("object.container"); }
142
143     static const char* GetExtFromFilePath(const NPT_String filepath, const char* dir_delimiter);
144     static const char* GetProtInfoFromExt(const char* ext);
145     static const char* GetUPnPClassFromExt(const char* ext);
146
147     virtual NPT_Result Reset();
148     virtual NPT_Result ToDidl(NPT_UInt32 mask, NPT_String& didl);
149     virtual NPT_Result FromDidl(NPT_XmlElementNode* entry);
150
151 public:
152     /* common properties */
153     PLT_ObjectClass     m_ObjectClass;
154     NPT_String          m_ObjectID;
155     NPT_String          m_ParentID;
156
157     /* metadata */
158     NPT_String          m_Title;
159     NPT_String          m_Creator;
160     PLT_PeopleInfo      m_People;
161     PLT_AffiliationInfo m_Affiliation;
162     PLT_Description     m_Description;
163
164     /* properties */
165     bool m_Restricted;
166
167     /* extras */
168     PLT_ExtraInfo m_ExtraInfo;
169
170     /* miscellaneous info */
171     PLT_MiscInfo m_MiscInfo;
172
173     /* resources related */
174     NPT_Array<PLT_MediaItemResource> m_Resources;
175
176     /* original DIDL for Control Points to pass to a renderer when invoking SetAVTransportURI */
177     NPT_String m_Didl;    
178 };
179
180 /*----------------------------------------------------------------------
181 |   PLT_MediaItem class
182 +---------------------------------------------------------------------*/
183 class PLT_MediaItem : public PLT_MediaObject
184 {
185 public:
186     PLT_MediaItem();
187     virtual ~PLT_MediaItem();
188
189     // PLT_MediaObject methods
190     NPT_Result ToDidl(NPT_UInt32 mask, NPT_String& didl);
191     NPT_Result FromDidl(NPT_XmlElementNode* entry);
192 };
193
194 /*----------------------------------------------------------------------
195 |   PLT_MediaContainer class
196 +---------------------------------------------------------------------*/
197 class PLT_MediaContainer : public PLT_MediaObject
198 {
199 public:
200     PLT_MediaContainer();
201     virtual ~PLT_MediaContainer();
202
203     // PLT_MediaObject methods
204     NPT_Result Reset();
205     NPT_Result ToDidl(NPT_UInt32 mask, NPT_String& didl);
206     NPT_Result FromDidl(NPT_XmlElementNode* entry);
207
208 public:
209     NPT_List<PLT_SearchClass> m_SearchClasses;
210
211     /* properties */
212     bool m_Searchable;
213
214     /* container info related */
215     NPT_Int32 m_ChildrenCount;    
216 };
217
218 /*----------------------------------------------------------------------
219 |   PLT_MediaObjectList class
220 +---------------------------------------------------------------------*/
221 class PLT_MediaObjectList : public NPT_List<PLT_MediaObject*>
222 {
223 public:
224     PLT_MediaObjectList();
225
226 protected:
227     virtual ~PLT_MediaObjectList(void);
228     friend class NPT_Reference<PLT_MediaObjectList>;
229 };
230
231 typedef NPT_Reference<PLT_MediaObjectList> PLT_MediaObjectListReference;
232 typedef NPT_Reference<PLT_MediaObject> PLT_MediaObjectReference;
233
234
235 #endif /* _PLT_MEDIA_ITEM_H_ */