11 static const QString
AVTSCHEMA =
"urn:schemas-upnp-org:service:AVTransport:1";
13 static const QString
XML_HEAD =
"<?xml version='1.0' encoding='UTF-8'?>\n<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n<SOAP-ENV:Body>\n";
14 static const QString
XML_FOOT =
"</SOAP-ENV:Body>\n</SOAP-ENV:Envelope>\n";
15 static const QString
META_DATA =
"<DIDL-Lite xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\""
16 " xmlns:upnp=\"urn:schemas-upnp-org:metadata-1-0/upnp/\""
17 " xmlns:dc=\"http://purl.org/dc/elements/1.1/\""
18 " xmlns:sec=\"http://www.sec.co.kr/\"><item id=\"f-0\" parentID=\"0\" restricted=\"0\">"
19 "<dc:title>%1</dc:title>"
20 "<dc:creator>%2</dc:creator>"
21 "<upnp:class>object.item.%3Item</upnp:class>"
22 "<res protocolInfo=\"http-get:*:%4:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01700000000000000000000000000000\" >"
23 "%5</res></item></DIDL-Lite>";
24 static const QStringList
AVT_NAMES = {
"avtransport",
"AVTransport"};
25 static const QStringList
FRIENS_NAMES = {
"friendlyname",
"friendlyName",
"FriendlyName",
"FriendlyName"};
48 : m_isConnected(false)
58 QStringList locations;
59 if(str.contains(
"LOCATION:"))
61 locations = str.remove(
"LOCATION: http://").split(
":");
63 else if(str.contains(
"Location:"))
65 locations = str.remove(
"Location: http://").split(
":");
67 else if(str.contains(
"location:"))
69 locations = str.remove(
"location: http://").split(
":");
72 if(locations.count() >= 2)
77 if(infos.count() >= 2)
167 return d->m_friendlyName;
179 return d->m_isConnected;
186 const QFileInfo fin(url + name);
187 QString play_url = url + QUrl::toPercentEncoding(name);
190 body +=
"<u:SetAVTransportURI xmlns:u=\""+
AVTSCHEMA +
"\">\n";
191 body +=
"<InstanceID>" + QString::number(instance) +
"</InstanceID>\n";
192 body +=
"<CurrentURI>" + play_url +
"</CurrentURI>\n";
193 body +=
"<CurrentURIMetaData>" +
META_DATA.arg(fin.baseName(), fin.owner(),
"audio",
"audio/mp3", play_url) +
"</CurrentURIMetaData>\n";
194 body +=
"</u:SetAVTransportURI>\n";
197 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
AVTSCHEMA +
"#SetAVTransportURI", d->m_address,d->m_port) + body;
205 const QFileInfo fin(url + name);
206 QString play_url = url + QUrl::toPercentEncoding(name);
209 body +=
"<u:AddURIToQueue xmlns:u=\""+
AVTSCHEMA +
"\">\n";
210 body +=
"<InstanceID>" + QString::number(instance) +
"</InstanceID>\n";
211 body +=
"<EnqueuedURI>" + play_url +
"</EnqueuedURI>\n";
212 body +=
"<EnqueuedURIMetaData>" +
META_DATA.arg(fin.baseName(), fin.owner(),
"audio",
"audio/mp3", play_url) +
"</EnqueuedURIMetaData>\n";
213 body +=
"<DesiredFirstTrackNumberEnqueued>0</DesiredFirstTrackNumberEnqueued>\n";
214 body +=
"<EnqueueAsNext>1</EnqueueAsNext>\n";
215 body +=
"</u:AddURIToQueue>\n";
218 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
AVTSCHEMA +
"#AddURIToQueue", d->m_address,d->m_port) + body;
226 const QFileInfo fin(url + name);
227 QString play_url = url + QUrl::toPercentEncoding(name);
230 body +=
"<u:SetNextAVTransportURI xmlns:u=\""+
AVTSCHEMA +
"\">\n";
231 body +=
"<InstanceID>" + QString::number(instance) +
"</InstanceID>\n";
232 body +=
"<NextURI>" + play_url +
"</NextURI>\n";
233 body +=
"<NextURIMetaData>" +
META_DATA.arg(fin.baseName(), fin.owner(),
"audio",
"audio/mp3", play_url) +
"</NextURIMetaData>\n";
234 body +=
"</u:SetNextAVTransportURI>\n";
237 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
AVTSCHEMA +
"#SetNextAVTransportURI", d->m_address,d->m_port) + body;
243 return QDateTime::fromString(value,
TTK_TIMES_FORMAT).toMSecsSinceEpoch() / 1000;
251 body +=
"<u:GetPositionInfo xmlns:u=\""+
AVTSCHEMA +
"\">\n";
252 body +=
"<InstanceID>" + QString::number(instance) +
"</InstanceID>\n";
253 body +=
"</u:GetPositionInfo>\n";
256 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
AVTSCHEMA +
"#GetPositionInfo", d->m_address, d->m_port) + body;
279 body +=
"<u:GetTransportInfo xmlns:u=\""+
AVTSCHEMA +
"\">\n";
280 body +=
"<InstanceID>" + QString::number(instance) +
"</InstanceID>\n";
281 body +=
"</u:GetTransportInfo>\n";
284 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
AVTSCHEMA +
"#GetTransportInfo", d->m_address, d->m_port) + body;
308 body +=
"<u:GetMediaInfo xmlns:u=\""+
AVTSCHEMA +
"\">\n";
309 body +=
"<InstanceID>" + QString::number(instance) +
"</InstanceID>\n";
310 body +=
"</u:GetMediaInfo>\n";
313 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
AVTSCHEMA +
"#GetMediaInfo", d->m_address, d->m_port) + body;
337 body +=
"<u:Play xmlns:u=\""+
AVTSCHEMA +
"\">\n";
338 body +=
"<InstanceID>" + QString::number(instance) +
"</InstanceID>\n";
339 body +=
"<Speed>1</Speed>\n";
340 body +=
"</u:Play>\n";
343 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
AVTSCHEMA +
"#Play", d->m_address, d->m_port) + body;
352 body +=
"<u:Pause xmlns:u=\""+
AVTSCHEMA +
"\">\n";
353 body +=
"<InstanceID>" + QString::number(instance) +
"</InstanceID>\n";
354 body +=
"</u:Pause>\n";
357 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
AVTSCHEMA +
"#Pause", d->m_address, d->m_port) + body;
366 body +=
"<u:Stop xmlns:u=\""+
AVTSCHEMA +
"\">\n";
367 body +=
"<InstanceID>" + QString::number(instance) +
"</InstanceID>\n";
368 body +=
"</u:Stop>\n";
371 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
AVTSCHEMA +
"#Stop", d->m_address, d->m_port) + body;
380 body +=
"<u:RemoveAllTracksFromQueue xmlns:u=\""+
AVTSCHEMA +
"\">\n";
381 body +=
"<InstanceID>" + QString::number(instance) +
"</InstanceID>\n";
382 body +=
"</u:RemoveAllTracksFromQueue>\n";
385 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
AVTSCHEMA +
"#RemoveAllTracksFromQueue", d->m_address, d->m_port) + body;
394 body +=
"<u:Previous xmlns:u=\""+
AVTSCHEMA +
"\">\n";
395 body +=
"<InstanceID>" + QString::number(instance) +
"</InstanceID>\n";
396 body +=
"</u:Previous>\n";
399 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
AVTSCHEMA +
"#Previous", d->m_address, d->m_port) + body;
408 body +=
"<u:Next xmlns:u=\""+
AVTSCHEMA +
"\">\n";
409 body +=
"<InstanceID>" + QString::number(instance) +
"</InstanceID>\n";
410 body +=
"</u:Next>\n";
413 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
AVTSCHEMA +
"#Next", d->m_address, d->m_port) + body;
423 body +=
"<u:SetPlayMode xmlns:u=\""+
AVTSCHEMA +
"\">\n";
424 body +=
"<InstanceID>" + QString::number(instance) +
"</InstanceID>\n";
425 body +=
"<NewPlayMode>" + mode +
"</NewPlayMode>\n";
426 body +=
"</u:SetPlayMode>\n";
429 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
AVTSCHEMA +
"#SetPlayMode", d->m_address,d->m_port) + body;
bool isValid(const QString &data)
bool remove(int instance=0) const
QMap< QString, QDlnaService > m_services
bool pause(int instance=0) const
QString makeRequest(const QString &methord, const QString &url, int length, const QString &soapAction, const QString &ip, const QString &port)
QString removeHttpHeader(const QString &data)
The class of the dlna client.
static const QStringList AVT_NAMES
bool next(int instance=0) const
QString tagNameToLower(const QString &data) const
The class of the dlna xml.
QString readTagNameValue(const QString &tagName) const
QString makeSocketGetReply(const QString &ip, const QString &port, const QString &data)
bool openUri(const QString &url, const QString &name, int instance=0) const
bool nextUri(const QString &url, const QString &name, int instance=0) const
bool openUris(const QString &url, const QString &name, int instance=0) const
bool play(int instance=0) const
#define TTK_INFO_STREAM(msg)
static const QString XML_FOOT
bool transportInfo(QDlna::TransportInfo &info, int instance=0) const
bool mediaInfo(QDlna::MediaInfo &info, int instance=0) const
static qint64 valueToSecond(const QString &value)
QDlnaClientPrivate() noexcept
static const QString AVTSCHEMA
The class of the dlna service.
static const QStringList FRIENS_NAMES
void initialize(const QString &data)
The class of the dlna client private.
static const QString XML_HEAD
static const QString META_DATA
bool isEmpty() const noexcept
QDlnaService readServiceTag(const QString &type, const QString &tagName) const
bool previous(int instance=0) const
bool stop(int instance=0) const
#define TTK_INIT_PRIVATE(Class)
bool setPlayMode(const QString &mode, int instance) const
The class of the ttk private base.
bool positionInfo(QDlna::PositionInfo &info, int instance=0) const
static constexpr const char * AVTRANSPORT
QDlnaClient(const QString &data)
QString serverName() const
bool fromString(const QString &data)