Switch to side-by-side view

--- a/src/upmpd.hxx
+++ b/src/upmpd.hxx
@@ -1,18 +1,18 @@
 /* Copyright (C) 2014 J.F.Dockes
- *	 This program is free software; you can redistribute it and/or modify
- *	 it under the terms of the GNU General Public License as published by
- *	 the Free Software Foundation; either version 2 of the License, or
- *	 (at your option) any later version.
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
  *
- *	 This program is distributed in the hope that it will be useful,
- *	 but WITHOUT ANY WARRANTY; without even the implied warranty of
- *	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *	 GNU General Public License for more details.
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
  *
- *	 You should have received a copy of the GNU General Public License
- *	 along with this program; if not, write to the
- *	 Free Software Foundation, Inc.,
- *	 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
 #ifndef _UPMPD_H_X_INCLUDED_
@@ -21,6 +21,7 @@
 #include <string>
 #include <unordered_map>
 #include <vector>
+#include <unordered_set>
 
 #include "libupnpp/device/device.hxx"
 #include "libupnpp/ptmutex.hxx"
@@ -34,23 +35,25 @@
 extern UPnPP::PTMutexInit g_configlock;
 extern ConfSimple *g_config;
 extern std::string g_protocolInfo;
+extern std::unordered_set<std::string> g_supportedFormats;
 
 typedef struct ohInfoDesc {
-  std::string name;
-  std::string info;
-  std::string url;
-  std::string imageUri;
+    std::string name;
+    std::string info;
+    std::string url;
+    std::string imageUri;
 } ohInfoDesc_t;
 
 typedef struct ohProductDesc {
-  ohInfoDesc_t manufacturer;
-  ohInfoDesc_t model;
-  ohInfoDesc_t product;
-  std::string room;
+    ohInfoDesc_t manufacturer;
+    ohInfoDesc_t model;
+    ohInfoDesc_t product;
+    std::string room;
 } ohProductDesc_t;
 
 using namespace UPnPProvider;
 
+class UpSong;
 class UpMpdRenderCtl;
 class UpMpdAVTransport;
 class OHInfo;
@@ -72,12 +75,12 @@
     friend class OHVolume;
     friend class SenderReceiver;
     friend class OHRadio;
-    
+
     enum OptFlags {
         upmpdNone = 0,
         // If set, the MPD queue belongs to us, we shall clear
         // it as we like.
-        upmpdOwnQueue = 1, 
+        upmpdOwnQueue = 1,
         // Export OpenHome services
         upmpdDoOH = 2,
         // Save queue metadata to disk for persistence across restarts
@@ -89,10 +92,12 @@
         upmpdNoAV = 16,
         // mpd2sc et al were found: advertise songcast sender/receiver mode
         upmpdOhSenderReceiver = 32,
+        // Do not check content format from input metadata against our protocolinfo
+        upmpdNoContentFormatCheck = 64,
     };
     struct Options {
         Options() : options(upmpdNone), ohmetasleep(0), schttpport(0),
-                    sendermpdport(0) {}
+            sendermpdport(0) {}
         unsigned int options;
         std::string  cachefn;
         std::string  radioconf;
@@ -109,20 +114,25 @@
           MPDCli *mpdcli, Options opts);
     ~UpMpd();
 
-    const MpdStatus &getMpdStatus();
-    const MpdStatus &getMpdStatusNoUpdate()
-        {
-            if (m_mpds == 0)
-                return getMpdStatus();
-            else
-                return *m_mpds;
+    const MpdStatus& getMpdStatus();
+    const MpdStatus& getMpdStatusNoUpdate() {
+        if (m_mpds == 0) {
+            return getMpdStatus();
+        } else {
+            return *m_mpds;
         }
+    }
 
-    const std::string& getMetaCacheFn()
-        {
-            return m_mcachefn;
-        }
+    const std::string& getMetaCacheFn() {
+        return m_mcachefn;
+    }
 
+    // Check that the metadata resource element matching the uri is
+    // present in the input set. Convert the metadata to an mpdcli song
+    // while we are at it.
+    bool checkContentFormat(const std::string& uri, const std::string& didl,
+                            UpSong *ups = 0);
+    
 private:
     MPDCli *m_mpdcli;
     const MpdStatus *m_mpds;