platinum: fix missing filtering for extra metadata
authorAlasdair Campbell <alcoheca@gmail.com>
Fri, 26 Oct 2012 11:57:58 +0000 (12:57 +0100)
committermontellese <montellese@xbmc.org>
Sat, 17 May 2014 07:53:12 +0000 (09:53 +0200)
lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.cpp
lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h
lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.cpp

index 6f72dda..73f9ed2 100644 (file)
@@ -111,6 +111,12 @@ PLT_Didl::ConvertFilterToMask(const NPT_String& filter)
             mask |= PLT_FILTER_MASK_LONGDESCRIPTION;
         } else if (NPT_String::CompareN(s+i, PLT_FILTER_FIELD_ORIGINALTRACK, len, true) == 0) {
             mask |= PLT_FILTER_MASK_ORIGINALTRACK;
+        } else if (NPT_String::CompareN(s+i, PLT_FILTER_FIELD_LASTPOSITION, len, true) == 0) {
+            mask |= PLT_FILTER_MASK_LASTPOSITION;
+        } else if (NPT_String::CompareN(s+i, PLT_FILTER_FIELD_LASTPLAYBACK, len, true) == 0) {
+            mask |= PLT_FILTER_MASK_LASTPLAYBACK;
+        } else if (NPT_String::CompareN(s+i, PLT_FILTER_FIELD_PLAYCOUNT, len, true) == 0) {
+            mask |= PLT_FILTER_MASK_PLAYCOUNT;
         } else if (NPT_String::CompareN(s+i, PLT_FILTER_FIELD_SEARCHABLE, len, true) == 0) {
             mask |= PLT_FILTER_MASK_SEARCHABLE;
         } else if (NPT_String::CompareN(s+i, PLT_FILTER_FIELD_SEARCHCLASS, len, true) == 0) {
index 29ce9ca..9af9725 100644 (file)
 #define PLT_FILTER_MASK_SEARCHCLASS                 0x0000000040000000
 #define PLT_FILTER_MASK_REFID                       0x0000000080000000
 
+#define PLT_FILTER_MASK_LASTPOSITION                0x0000000100000000
+#define PLT_FILTER_MASK_LASTPLAYBACK                0x0000000200000000
+#define PLT_FILTER_MASK_PLAYCOUNT                   0x0000000400000000
+
 #define PLT_FILTER_FIELD_TITLE                      "dc:title"
 #define PLT_FILTER_FIELD_CREATOR                    "dc:creator"
 #define PLT_FILTER_FIELD_DATE                       "dc:date"
 #define PLT_FILTER_FIELD_PROGRAMTITLE               "upnp:programTitle"
 #define PLT_FILTER_FIELD_SERIESTITLE                "upnp:seriesTitle"
 #define PLT_FILTER_FIELD_EPISODE                    "upnp:episodeNumber"
+#define PLT_FILTER_FIELD_LASTPOSITION               "upnp:lastPlaybackPosition"
+#define PLT_FILTER_FIELD_LASTPLAYBACK               "upnp:lastPlaybackTime"
+#define PLT_FILTER_FIELD_PLAYCOUNT                  "upnp:playbackCount"
 #define PLT_FILTER_FIELD_SEARCHCLASS                           "upnp:searchClass"
 #define PLT_FILTER_FIELD_SEARCHABLE                 "@searchable"
 #define PLT_FILTER_FIELD_CHILDCOUNT                 "@childcount"
index 31bc16c..af6bc3b 100644 (file)
@@ -333,21 +333,21 @@ PLT_MediaObject::ToDidl(NPT_UInt64 mask, NPT_String& didl)
     }
 
     // last playback position
-    if (m_MiscInfo.last_position > 0) {
+    if (mask & PLT_FILTER_MASK_LASTPOSITION && 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()) {
+    if (mask & PLT_FILTER_MASK_LASTPLAYBACK && !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) {
+    if (mask & PLT_FILTER_MASK_PLAYCOUNT && m_MiscInfo.play_count > -1) {
         didl += "<upnp:playbackCount>";
         didl += NPT_String::FromInteger(m_MiscInfo.play_count);
         didl += "</upnp:playbackCount>";