summaryrefslogtreecommitdiffstats
path: root/lib/libUPnP/patches/0009-platinum-add-support-for-upnp-lastPlaybackPosition-u.patch
blob: 4a8efb1ccbdb7c03df1da165e63e9b3bb2c26746 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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