Parent: [0e4ea6] (diff)

Download this file

upmpd.hxx    148 lines (132 with data), 4.6 kB

  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
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/* 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 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.
*/
#ifndef _UPMPD_H_X_INCLUDED_
#define _UPMPD_H_X_INCLUDED_
#include <string>
#include <unordered_map>
#include <vector>
#include "libupnpp/device/device.hxx"
#include "main.hxx"
class MPDCli;
class MpdStatus;
using namespace UPnPProvider;
class UpSong;
class UpMpdRenderCtl;
class UpMpdAVTransport;
class OHInfo;
class OHPlaylist;
class OHProduct;
class OHReceiver;
class SenderReceiver;
class OHRadio;
// The UPnP MPD frontend device with its services
class UpMpd : public UpnpDevice {
public:
friend class UpMpdRenderCtl;
friend class UpMpdAVTransport;
friend class OHInfo;
friend class OHPlaylist;
friend class OHProduct;
friend class OHReceiver;
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,
// Export OpenHome services
upmpdDoOH = 2,
// Save queue metadata to disk for persistence across restarts
// (mpd does it)
upmpdOhMetaPersist = 4,
// sc2mpd was found: advertise songcast receiver
upmpdOhReceiver = 8,
// Do not publish UPnP AV services (avtransport and renderer).
upmpdNoAV = 16,
// mpd2sc et al were found: advertise songcast sender/receiver mode
upmpdOhSenderReceiver = 32,
// Do not check content format from input metadata against protocol info
upmpdNoContentFormatCheck = 64,
// Do not add the "PL-to-Songcast" (playlist) and "RD-to-Songcast"
// (radio) sources to the source XML.
upmpdNoSongcastSource = 128,
};
struct Options {
Options() : options(upmpdNone), ohmetasleep(0), schttpport(0),
sendermpdport(0) {}
unsigned int options;
std::string cachedir;
std::string cachefn;
std::string radioconf;
unsigned int ohmetasleep;
int schttpport;
std::string scplaymethod;
std::string sc2mpdpath;
std::string screceiverstatefile;
std::string senderpath;
int sendermpdport;
};
UpMpd(const std::string& deviceid, const std::string& friendlyname,
ohProductDesc_t& ohProductDesc,
const std::unordered_map<std::string, VDirContent>& files,
MPDCli *mpdcli, Options opts);
~UpMpd();
const MpdStatus& getMpdStatus();
const MpdStatus& getMpdStatusNoUpdate() {
if (m_mpds == 0) {
return getMpdStatus();
} else {
return *m_mpds;
}
}
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, bool nocheck = false);
// Help avtransport report correct metadata for radios (for which
// the uri, normally used to detect track transitions, does not
// change). This is called by ohproduct when setting the source.
void setRadio(bool on) {
m_radio = on;
}
bool radioPlaying() {
return m_radio;
}
private:
MPDCli *m_mpdcli;
const MpdStatus *m_mpds;
unsigned int m_options;
std::string m_mcachefn;
UpMpdRenderCtl *m_rdctl;
UpMpdAVTransport *m_avt;
OHProduct *m_ohpr;
OHPlaylist *m_ohpl;
OHRadio *m_ohrd;
OHInfo *m_ohif;
OHReceiver *m_ohrcv;
SenderReceiver *m_sndrcv;
std::vector<UpnpService*> m_services;
std::string m_friendlyname;
bool m_radio{false};
};
#endif /* _UPMPD_H_X_INCLUDED_ */