diff options
author | Alasdair Campbell <alcoheca@gmail.com> | 2012-07-30 13:02:34 +0100 |
---|---|---|
committer | Alasdair Campbell <alcoheca@gmail.com> | 2012-10-11 01:38:05 +0100 |
commit | ffeee70558aef4ae7889fe3b9d5c720ae4480b2c (patch) | |
tree | 8a5572c5bef96a9929cf1d036d7f5e7bdedffb8e /lib | |
parent | bcc0bb6cd401f3c82adba353272f8ed168ef6cfb (diff) |
[UPnP] add support for upnp:lastPlaybackPosition, upnp:lastPlaybackTime and upnp:playbackCount
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.cpp | 43 | ||||
-rw-r--r-- | lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.h | 3 |
2 files changed, 46 insertions, 0 deletions
diff --git a/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.cpp b/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.cpp index 5b974e88a4..214f13d00d 100644 --- a/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.cpp +++ b/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.cpp @@ -183,6 +183,9 @@ PLT_MediaObject::Reset() m_ExtraInfo.artist_discography_uri = ""; m_MiscInfo.original_track_number = 0; + m_MiscInfo.last_position = 0; + m_MiscInfo.last_time = ""; + m_MiscInfo.play_count = -1; m_MiscInfo.dvdregioncode = 0; m_MiscInfo.toc = ""; m_MiscInfo.user_annotation = ""; @@ -317,6 +320,27 @@ PLT_MediaObject::ToDidl(NPT_UInt32 mask, NPT_String& didl) didl += "</upnp:originalTrackNumber>"; } + // last playback position + if (m_MiscInfo.last_position > 0) { + didl += "<upnp:lastPlaybackPosition>"; + didl += NPT_String::FromInteger(m_MiscInfo.last_position); + didl += "</upnp:lastPlaybackPosition>"; + } + + // last playback datetime + if (!m_MiscInfo.last_time.IsEmpty()) { + didl += "<upnp:lastPlaybackTime>"; + PLT_Didl::AppendXmlEscape(didl, m_MiscInfo.last_time); + didl += "</upnp:lastPlaybackTime>"; + } + + // playcount + if (m_MiscInfo.play_count > -1) { + didl += "<upnp:playbackCount>"; + didl += NPT_String::FromInteger(m_MiscInfo.play_count); + didl += "</upnp:playbackCount>"; + } + // program title if (mask & PLT_FILTER_MASK_PROGRAMTITLE && !m_Recorded.program_title.IsEmpty()) { didl += "<upnp:programTitle>"; @@ -511,6 +535,25 @@ PLT_MediaObject::FromDidl(NPT_XmlElementNode* entry) if (NPT_FAILED(str.ToInteger(value))) value = 0; m_MiscInfo.original_track_number = value; + PLT_XmlHelper::GetChildText(entry, "lastPlaybackPosition", str, didl_namespace_upnp); + if (NPT_FAILED(str.ToInteger(value))) value = 0; + m_MiscInfo.last_position = value; + + PLT_XmlHelper::GetChildText(entry, "lastPlaybackTime", m_MiscInfo.last_time, didl_namespace_dc, 256); + NPT_String parsed_last_time; + for (int format=0; format<=NPT_DateTime::FORMAT_RFC_1036; format++) { + NPT_DateTime date; + if (NPT_SUCCEEDED(date.FromString(m_MiscInfo.last_time, (NPT_DateTime::Format)format))) { + parsed_last_time = date.ToString((NPT_DateTime::Format)format); + break; + } + } + m_MiscInfo.last_time = parsed_last_time; + + PLT_XmlHelper::GetChildText(entry, "playbackCount", str, didl_namespace_upnp); + if (NPT_FAILED(str.ToInteger(value))) value = -1; + m_MiscInfo.play_count = value; + children.Clear(); PLT_XmlHelper::GetChildren(entry, children, "res"); for (NPT_Cardinal i=0; i<children.GetItemCount(); i++) { diff --git a/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.h b/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.h index 3ebc3b09ae..8261244b81 100644 --- a/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.h +++ b/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.h @@ -130,6 +130,9 @@ typedef struct { 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 { |