diff options
Diffstat (limited to 'lib/libUPnP/patches/0009-platinum-add-support-for-upnp-lastPlaybackPosition-u.patch')
-rw-r--r-- | lib/libUPnP/patches/0009-platinum-add-support-for-upnp-lastPlaybackPosition-u.patch | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/lib/libUPnP/patches/0009-platinum-add-support-for-upnp-lastPlaybackPosition-u.patch b/lib/libUPnP/patches/0009-platinum-add-support-for-upnp-lastPlaybackPosition-u.patch new file mode 100644 index 0000000..4a8efb1 --- /dev/null +++ b/lib/libUPnP/patches/0009-platinum-add-support-for-upnp-lastPlaybackPosition-u.patch @@ -0,0 +1,96 @@ +From 5f4aa26956ebc15e774186955e49cc7c77896f0e Mon Sep 17 00:00:00 2001 +From: Alasdair Campbell <alcoheca@gmail.com> +Date: Mon, 30 Jul 2012 13:02:34 +0100 +Subject: [PATCH 09/24] platinum: add support for upnp:lastPlaybackPosition, + upnp:lastPlaybackTime and upnp:playbackCount + +--- + .../Source/Devices/MediaServer/PltMediaItem.cpp | 43 ++++++++++++++++++++++ + .../Source/Devices/MediaServer/PltMediaItem.h | 3 ++ + 2 files changed, 46 insertions(+) + +diff --git a/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.cpp b/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.cpp +index 62e0ba9..3ec7696 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 = ""; +@@ -316,6 +319,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>"; +@@ -510,6 +534,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 81f3dc8..cc3bdf9 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 { +-- +1.7.11.msysgit.0 + |