--- 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;