diff options
Diffstat (limited to 'lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.h')
-rw-r--r-- | lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.h | 348 |
1 files changed, 348 insertions, 0 deletions
diff --git a/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.h b/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.h new file mode 100644 index 0000000..3a13967 --- /dev/null +++ b/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.h @@ -0,0 +1,348 @@ +/***************************************************************** +| +| Platinum - AV Media Item +| +| Copyright (c) 2004-2010, Plutinosoft, LLC. +| All rights reserved. +| http://www.plutinosoft.com +| +| This program is free software; you can redistribute it and/or +| modify it under the terms of the GNU General Public License +| as published by the Free Software Foundation; either version 2 +| of the License, or (at your option) any later version. +| +| OEMs, ISVs, VARs and other distributors that combine and +| distribute commercially licensed software with Platinum software +| and do not wish to distribute the source code for the commercially +| licensed software under version 2, or (at your option) any later +| version, of the GNU General Public License (the "GPL") must enter +| into a commercial license agreement with Plutinosoft, LLC. +| licensing@plutinosoft.com +| +| This program is distributed in the hope that it will be useful, +| but WITHOUT ANY WARRANTY; without even the implied warranty of +| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +| GNU General Public License for more details. +| +| You should have received a copy of the GNU General Public License +| along with this program; see the file LICENSE.txt. If not, write to +| the Free Software Foundation, Inc., +| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +| http://www.gnu.org/licenses/gpl-2.0.html +| +****************************************************************/ + +/** @file + UPnP AV Media Object reprensentation. + */ + +#ifndef _PLT_MEDIA_ITEM_H_ +#define _PLT_MEDIA_ITEM_H_ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include "Neptune.h" +#include "PltHttp.h" +#include "PltProtocolInfo.h" + +/*---------------------------------------------------------------------- +| typedefs ++---------------------------------------------------------------------*/ +/** + The PLT_ObjectClass struct is used to assign a type to a PLT_MediaObject. + */ +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; // (CSV) + 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; //TODO: can be multiple + PLT_PersonRoles directors; + NPT_List<NPT_String> publisher; + NPT_String contributor; // should match m_Creator (dc:creator) //TODO: can be multiple +} PLT_PeopleInfo; + +typedef struct { + NPT_List<NPT_String> genres; + NPT_String album; //TODO: can be multiple + NPT_String playlist; // dc:title of the playlist item the content belongs too //TODO: can be multiple +} PLT_AffiliationInfo; + +typedef struct { + NPT_String description; + NPT_String long_description; + NPT_String icon_uri; + NPT_String region; + NPT_String rating; + NPT_String rights; //TODO: can be multiple + 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; // dc:relation +} PLT_ExtraInfo; + +typedef struct { + NPT_UInt32 dvdregioncode; + NPT_UInt32 original_track_number; + NPT_String toc; + NPT_String user_annotation; //TODO: can be multiple + NPT_UInt32 last_position; + NPT_String last_time; + NPT_Int32 play_count; +} 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; + NPT_UInt32 episode_count; + NPT_UInt32 episode_season; +} PLT_RecordedInfo; + +typedef struct { + NPT_String type; + NPT_String url; +} PLT_Artwork; + +class PLT_Artworks : public NPT_List<PLT_Artwork> +{ +public: + NPT_Result Add(const NPT_String& type, const NPT_String& url); + NPT_Result ToDidl(NPT_String& didl, const NPT_String& tag); + NPT_Result FromDidl(const NPT_Array<NPT_XmlElementNode*>& nodes); +}; + +typedef struct { + NPT_String last_playerstate; + NPT_String date_added; + NPT_Float rating; + NPT_Int32 votes; + PLT_Artworks artwork; + NPT_String unique_identifier; + NPT_List<NPT_String> countries; + NPT_Int32 user_rating; +} PLT_XbmcInfo; + +typedef struct { + NPT_String name; + NPT_Map<NPT_String, NPT_String> attributes; + NPT_String value; +} PLT_SecResource; + +/*---------------------------------------------------------------------- +| PLT_MediaItemResource ++---------------------------------------------------------------------*/ +class PLT_MediaItemResource +{ +public: + PLT_MediaItemResource(); + ~PLT_MediaItemResource() {} + + NPT_String m_Uri; + PLT_ProtocolInfo m_ProtocolInfo; + NPT_UInt32 m_Duration; /* seconds */ + NPT_LargeSize m_Size; + NPT_String m_Protection; + NPT_UInt32 m_Bitrate; /* bytes/seconds */ + NPT_UInt32 m_BitsPerSample; + NPT_UInt32 m_SampleFrequency; + NPT_UInt32 m_NbAudioChannels; + NPT_String m_Resolution; + NPT_UInt32 m_ColorDepth; + /* to add custom data to resource, that are not standard one, or are only + proper for some type of devices (UPnP)*/ + NPT_Map<NPT_String, NPT_String> m_CustomData; +}; + +/*---------------------------------------------------------------------- +| PLT_MediaObject ++---------------------------------------------------------------------*/ +/** + The PLT_MediaObject class is any data entity that can be returned by a + ContentDirectory Service from a browsing or searching action. This is the + base class from which PLT_MediaItem and PLT_MediaContainer derive. + */ +class PLT_MediaObject +{ +protected: + NPT_IMPLEMENT_DYNAMIC_CAST(PLT_MediaObject) + + PLT_MediaObject() : m_Restricted(true) {} + +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_UInt64 mask, NPT_String& didl); + virtual NPT_Result FromDidl(NPT_XmlElementNode* entry); + +public: + /* common properties */ + PLT_ObjectClass m_ObjectClass; + NPT_String m_ObjectID; + NPT_String m_ParentID; + NPT_String m_ReferenceID; + + /* metadata */ + 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; + + /* properties */ + bool m_Restricted; + + /* extras */ + PLT_ExtraInfo m_ExtraInfo; + + /* miscellaneous info */ + PLT_MiscInfo m_MiscInfo; + + /* resources related */ + NPT_Array<PLT_MediaItemResource> m_Resources; + + /* sec resources related */ + NPT_Array<PLT_SecResource> m_SecResources; + + /* XBMC specific */ + PLT_XbmcInfo m_XbmcInfo; + + /* original DIDL for Control Points to pass to a renderer when invoking SetAVTransportURI */ + NPT_String m_Didl; +}; + +/*---------------------------------------------------------------------- +| PLT_MediaItem ++---------------------------------------------------------------------*/ +/** + The PLT_MediaItem class represents a first-level class derived directly from + PLT_MediaObject. It most often represents a single piece of AV data. + */ +class PLT_MediaItem : public PLT_MediaObject +{ +public: + NPT_IMPLEMENT_DYNAMIC_CAST_D(PLT_MediaItem, PLT_MediaObject) + + PLT_MediaItem(); + ~PLT_MediaItem() override; + + // PLT_MediaObject methods + NPT_Result ToDidl(const NPT_String& filter, NPT_String& didl) override; + NPT_Result ToDidl(NPT_UInt64 mask, NPT_String& didl) override; + NPT_Result FromDidl(NPT_XmlElementNode* entry) override; +}; + +/*---------------------------------------------------------------------- +| PLT_MediaContainer ++---------------------------------------------------------------------*/ +/** + The PLT_MediaContainer class represents a first-level class derived directly + from PLT_MediaObject. A PLT_MediaContainer represents a collection of + PLT_MediaObject instances. + */ +class PLT_MediaContainer : public PLT_MediaObject +{ +public: + NPT_IMPLEMENT_DYNAMIC_CAST_D(PLT_MediaContainer, PLT_MediaObject) + + PLT_MediaContainer(); + ~PLT_MediaContainer() override; + + // PLT_MediaObject methods + NPT_Result Reset() override; + NPT_Result ToDidl(const NPT_String& filter, NPT_String& didl) override; + NPT_Result ToDidl(NPT_UInt64 mask, NPT_String& didl) override; + NPT_Result FromDidl(NPT_XmlElementNode* entry) override; + +public: + NPT_List<PLT_SearchClass> m_SearchClasses; + + /* properties */ + bool m_Searchable; + + /* container info related */ + NPT_Int32 m_ChildrenCount; + NPT_UInt32 m_ContainerUpdateID; +}; + +/*---------------------------------------------------------------------- +| PLT_MediaObjectList ++---------------------------------------------------------------------*/ +/** + The PLT_MediaObjectList class is a list of PLT_MediaObject instances. + */ +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 /* _PLT_MEDIA_ITEM_H_ */ |