summaryrefslogtreecommitdiffstats
path: root/lib/libUPnP/patches/0009-platinum-add-support-for-upnp-lastPlaybackPosition-u.patch
diff options
context:
space:
mode:
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.patch96
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
+