#ifndef _PLT_DIDL_H_
#define _PLT_DIDL_H_
#include "Neptune.h"
#include "PltMediaItem.h"
#define PLT_FILTER_MASK_ALL 0xFFFFFFFF
#define PLT_FILTER_MASK_CREATOR 0x00000001
#define PLT_FILTER_MASK_ARTIST 0x00000002
#define PLT_FILTER_MASK_ALBUM 0x00000004
#define PLT_FILTER_MASK_GENRE 0x00000008
#define PLT_FILTER_MASK_ALBUMARTURI 0x00000010
#define PLT_FILTER_MASK_DESCRIPTION 0x00000020
#define PLT_FILTER_MASK_SEARCHABLE 0x00000040
#define PLT_FILTER_MASK_CHILDCOUNT 0x00000080
#define PLT_FILTER_MASK_ORIGINALTRACK 0x00000100
#define PLT_FILTER_MASK_ACTOR 0x00000200
#define PLT_FILTER_MASK_AUTHOR 0x00000400
#define PLT_FILTER_MASK_DATE 0x00000800
#define PLT_FILTER_MASK_PROGRAMTITLE 0x00001000
#define PLT_FILTER_MASK_SERIESTITLE 0x00002000
#define PLT_FILTER_MASK_EPISODE 0x00004000
#define PLT_FILTER_MASK_TITLE 0x00008000
#define PLT_FILTER_MASK_RES 0x00010000
#define PLT_FILTER_MASK_RES_DURATION 0x00020000
#define PLT_FILTER_MASK_RES_SIZE 0x00040000
#define PLT_FILTER_MASK_RES_PROTECTION 0x00080000
#define PLT_FILTER_MASK_RES_RESOLUTION 0x00100000
#define PLT_FILTER_MASK_RES_BITRATE 0x00200000
#define PLT_FILTER_MASK_RES_BITSPERSAMPLE 0x00400000
#define PLT_FILTER_MASK_RES_NRAUDIOCHANNELS 0x00800000
#define PLT_FILTER_MASK_RES_SAMPLEFREQUENCY 0x01000000
#define PLT_FILTER_MASK_LONGDESCRIPTION 0x02000000
#define PLT_FILTER_MASK_ICON 0x04000000
#define PLT_FILTER_MASK_TOC 0x02000000
#define PLT_FILTER_MASK_SEARCHCLASS 0x04000000
#define PLT_FILTER_MASK_REFID 0x08000000
#define PLT_FILTER_FIELD_TITLE "dc:title"
#define PLT_FILTER_FIELD_CREATOR "dc:creator"
#define PLT_FILTER_FIELD_DATE "dc:date"
#define PLT_FILTER_FIELD_ARTIST "upnp:artist"
#define PLT_FILTER_FIELD_ACTOR "upnp:actor"
#define PLT_FILTER_FIELD_AUTHOR "upnp:author"
#define PLT_FILTER_FIELD_ALBUM "upnp:album"
#define PLT_FILTER_FIELD_GENRE "upnp:genre"
#define PLT_FILTER_FIELD_ALBUMARTURI "upnp:albumArtURI"
#define PLT_FILTER_FIELD_ALBUMARTURI_DLNAPROFILEID "upnp:albumArtURI@dlna:profileID"
#define PLT_FILTER_FIELD_DESCRIPTION "dc:description"
#define PLT_FILTER_FIELD_LONGDESCRIPTION "upnp:longDescription"
#define PLT_FILTER_FIELD_ICON "upnp:icon"
#define PLT_FILTER_FIELD_ORIGINALTRACK "upnp:originalTrackNumber"
#define PLT_FILTER_FIELD_PROGRAMTITLE "upnp:programTitle"
#define PLT_FILTER_FIELD_SERIESTITLE "upnp:seriesTitle"
#define PLT_FILTER_FIELD_EPISODE "upnp:episodeNumber"
#define PLT_FILTER_FIELD_SEARCHCLASS "upnp:searchClass"
#define PLT_FILTER_FIELD_SEARCHABLE "@searchable"
#define PLT_FILTER_FIELD_CHILDCOUNT "@childcount"
#define PLT_FILTER_FIELD_CONTAINER_CHILDCOUNT "container@childCount"
#define PLT_FILTER_FIELD_CONTAINER_SEARCHABLE "container@searchable"
#define PLT_FILTER_FIELD_REFID "@refID"
#define PLT_FILTER_FIELD_RES "res"
#define PLT_FILTER_FIELD_RES_DURATION "res@duration"
#define PLT_FILTER_FIELD_RES_DURATION_SHORT "@duration"
#define PLT_FILTER_FIELD_RES_SIZE "res@size"
#define PLT_FILTER_FIELD_RES_PROTECTION "res@protection"
#define PLT_FILTER_FIELD_RES_RESOLUTION "res@resolution"
#define PLT_FILTER_FIELD_RES_BITRATE "res@bitrate"
#define PLT_FILTER_FIELD_RES_BITSPERSAMPLE "res@bitsPerSample"
#define PLT_FILTER_FIELD_RES_NRAUDIOCHANNELS "res@nrAudioChannels"
#define PLT_FILTER_FIELD_RES_SAMPLEFREQUENCY "res@sampleFrequency"
extern const char* didl_header;
extern const char* didl_footer;
extern const char* didl_namespace_dc;
extern const char* didl_namespace_upnp;
extern const char* didl_namespace_dlna;
class PLT_Didl
{
public:
static NPT_Result ToDidl(PLT_MediaObject& object,
const NPT_String& filter,
NPT_String& didl);
static NPT_Result FromDidl(const char* didl,
PLT_MediaObjectListReference& objects);
static void AppendXmlEscape(NPT_String& out, const char* in);
static void AppendXmlUnEscape(NPT_String& out, const char* in);
static NPT_Result ParseTimeStamp(const NPT_String& timestamp, NPT_UInt32& seconds);
static NPT_String FormatTimeStamp(NPT_UInt32 seconds);
static NPT_Result ParseTimeStamp(const NPT_String& in, NPT_TimeStamp& timestamp) {
NPT_UInt32 seconds;
NPT_Result res = ParseTimeStamp(in, seconds);
timestamp = NPT_TimeStamp((double)seconds);
return res;
}
static NPT_UInt32 ConvertFilterToMask(const NPT_String& filter);
};
#endif