#ifndef _PLT_MEDIA_ITEM_H_
#define _PLT_MEDIA_ITEM_H_
#include "Neptune.h"
#include "PltHttp.h"
#include "PltProtocolInfo.h"
typedef struct {
NPT_String type;
NPT_String friendly_name;
} PLT_ObjectClass;
typedef struct {
NPT_String type;
NPT_String friendly_name;
bool include_derived;
} PLT_SearchClass;
typedef struct {
NPT_String name;
NPT_String role;
} PLT_PersonRole;
class PLT_PersonRoles : public NPT_List<PLT_PersonRole>
{
public:
NPT_Result Add(const NPT_String& name, const NPT_String& role = "");
NPT_Result ToDidl(NPT_String& didl, const NPT_String& tag);
NPT_Result FromDidl(const NPT_Array<NPT_XmlElementNode*>& nodes);
};
typedef struct {
NPT_String allowed_use;
NPT_String validity_start;
NPT_String validity_end;
NPT_String remaining_time;
NPT_String usage_info;
NPT_String rights_info_uri;
NPT_String content_info_uri;
} PLT_Constraint;
typedef struct {
PLT_PersonRoles artists;
PLT_PersonRoles actors;
PLT_PersonRoles authors;
NPT_String producer;
NPT_String director;
NPT_String publisher;
NPT_String contributor;
} PLT_PeopleInfo;
typedef struct {
NPT_List<NPT_String> genres;
NPT_String album;
NPT_String playlist;
} PLT_AffiliationInfo;
typedef struct {
NPT_String description;
NPT_String long_description;
NPT_String icon_uri;
NPT_String region;
NPT_String rating;
NPT_String rights;
NPT_String date;
NPT_String language;
} PLT_Description;
typedef struct {
NPT_String uri;
NPT_String dlna_profile;
} PLT_AlbumArtInfo;
typedef struct {
NPT_List<PLT_AlbumArtInfo> album_arts;
NPT_String artist_discography_uri;
NPT_String lyrics_uri;
NPT_List<NPT_String> relations;
} PLT_ExtraInfo;
typedef struct {
NPT_UInt32 dvdregioncode;
NPT_UInt32 original_track_number;
NPT_String toc;
NPT_String user_annotation;
} PLT_MiscInfo;
typedef struct {
NPT_UInt64 total;
NPT_UInt64 used;
NPT_UInt64 free;
NPT_UInt64 max_partition;
NPT_UInt64 medium;
} PLT_StorageInfo;
typedef struct {
NPT_String program_title;
NPT_String series_title;
NPT_UInt32 episode_number;
} PLT_RecordedInfo;
class PLT_MediaItemResource
{
public:
PLT_MediaItemResource();
~PLT_MediaItemResource() {}
NPT_String m_Uri;
PLT_ProtocolInfo m_ProtocolInfo;
NPT_UInt32 m_Duration;
NPT_LargeSize m_Size;
NPT_String m_Protection;
NPT_UInt32 m_Bitrate;
NPT_UInt32 m_BitsPerSample;
NPT_UInt32 m_SampleFrequency;
NPT_UInt32 m_NbAudioChannels;
NPT_String m_Resolution;
NPT_UInt32 m_ColorDepth;
};
class PLT_MediaObject
{
protected:
NPT_IMPLEMENT_DYNAMIC_CAST(PLT_MediaObject)
PLT_MediaObject() {}
public:
virtual ~PLT_MediaObject() {}
bool IsContainer() { return m_ObjectClass.type.StartsWith("object.container"); }
static const char* GetUPnPClass(const char* filename,
const PLT_HttpRequestContext* context = NULL);
virtual NPT_Result Reset();
virtual NPT_Result ToDidl(const NPT_String& filter, NPT_String& didl);
virtual NPT_Result ToDidl(NPT_UInt32 mask, NPT_String& didl);
virtual NPT_Result FromDidl(NPT_XmlElementNode* entry);
public:
PLT_ObjectClass m_ObjectClass;
NPT_String m_ObjectID;
NPT_String m_ParentID;
NPT_String m_ReferenceID;
NPT_String m_Title;
NPT_String m_Creator;
NPT_String m_Date;
PLT_PeopleInfo m_People;
PLT_AffiliationInfo m_Affiliation;
PLT_Description m_Description;
PLT_RecordedInfo m_Recorded;
bool m_Restricted;
PLT_ExtraInfo m_ExtraInfo;
PLT_MiscInfo m_MiscInfo;
NPT_Array<PLT_MediaItemResource> m_Resources;
NPT_String m_Didl;
};
class PLT_MediaItem : public PLT_MediaObject
{
public:
NPT_IMPLEMENT_DYNAMIC_CAST_D(PLT_MediaItem, PLT_MediaObject)
PLT_MediaItem();
virtual ~PLT_MediaItem();
NPT_Result ToDidl(const NPT_String& filter, NPT_String& didl);
NPT_Result ToDidl(NPT_UInt32 mask, NPT_String& didl);
NPT_Result FromDidl(NPT_XmlElementNode* entry);
};
class PLT_MediaContainer : public PLT_MediaObject
{
public:
NPT_IMPLEMENT_DYNAMIC_CAST_D(PLT_MediaContainer, PLT_MediaObject)
PLT_MediaContainer();
virtual ~PLT_MediaContainer();
NPT_Result Reset();
NPT_Result ToDidl(const NPT_String& filter, NPT_String& didl);
NPT_Result ToDidl(NPT_UInt32 mask, NPT_String& didl);
NPT_Result FromDidl(NPT_XmlElementNode* entry);
public:
NPT_List<PLT_SearchClass> m_SearchClasses;
bool m_Searchable;
NPT_Int32 m_ChildrenCount;
NPT_UInt32 m_ContainerUpdateID;
};
class PLT_MediaObjectList : public NPT_List<PLT_MediaObject*>
{
public:
PLT_MediaObjectList();
protected:
virtual ~PLT_MediaObjectList(void);
friend class NPT_Reference<PLT_MediaObjectList>;
};
typedef NPT_Reference<PLT_MediaObjectList> PLT_MediaObjectListReference;
typedef NPT_Reference<PLT_MediaObject> PLT_MediaObjectReference;
#endif