TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
qdlnaxml.cpp
Go to the documentation of this file.
1 #include "qdlnaxml.h"
2 
3 #include <QtXml/QDomDocument>
4 
8 class QDlnaXmlPrivate : public TTKPrivate<QDlnaXml>
9 {
10 public:
13 
14  QDomDocument *m_document;
15 
16 };
17 
19  : m_document(new QDomDocument)
20 {
21 
22 }
23 
25 {
26  delete m_document;
27 }
28 
29 
30 
32 {
34 }
35 
36 bool QDlnaXml::fromString(const QString &data)
37 {
38  TTK_D(QDlnaXml);
39  if(!d->m_document->setContent(data))
40  {
41  return false;
42  }
43  return true;
44 }
45 
46 QString QDlnaXml::toString() const
47 {
48  TTK_D(QDlnaXml);
49  if(!d->m_document)
50  {
51  return {};
52  }
53  return d->m_document->toString();
54 }
55 
56 QString QDlnaXml::tagNameToLower(const QString &data) const
57 {
58  QString body = data;
59  int left = body.indexOf("<");
60  while(left != -1)
61  {
62  const int right = body.indexOf(">", left + 1);
63  if(right == -1)
64  {
65  break;
66  }
67 
68  const QString &sub = body.mid(left + 1, right - left - 1);
69  body.replace(left + 1, right - left - 1, sub.toLower());
70  left = body.indexOf("<", left + 1);
71  }
72  return body;
73 }
74 
75 QString QDlnaXml::readTagNameValue(const QString &tagName) const
76 {
77  TTK_D(QDlnaXml);
78  const QDomNodeList &nodes = d->m_document->elementsByTagName(tagName);
79  return nodes.isEmpty() ? QString() : nodes.item(0).toElement().text();
80 }
81 
82 QDlnaService QDlnaXml::readServiceTag(const QString &type, const QString &tagName) const
83 {
84  TTK_D(QDlnaXml);
85  const QDomNodeList &nodes = d->m_document->elementsByTagName(tagName);
86  if(nodes.isEmpty())
87  {
88  return QDlnaService();
89  }
90 
91  QDlnaService service;
92  for(int i = 0; i < nodes.count(); ++i)
93  {
94  const QDomNodeList &paramNodes = nodes.item(i).childNodes();
95 
96  for(int j = 0; j < paramNodes.count(); ++j)
97  {
98  const QDomNode &paramNode = paramNodes.item(j);
99  QString text = paramNode.toElement().text();
100 
101  if(text.contains(type, Qt::CaseInsensitive))
102  {
103  const QString &nodeName = paramNode.nodeName();
104  if(text.startsWith(TTK_SEPARATOR))
105  {
106  text.remove(0, 1);
107  }
108 
109  if(nodeName.contains("servicetype", Qt::CaseInsensitive))
110  {
111  service.m_serviceType = text;
112  }
113  else if(nodeName.contains("serviceid", Qt::CaseInsensitive))
114  {
115  service.m_serviceID = text;
116  }
117  else if(nodeName.contains("scpdurl", Qt::CaseInsensitive))
118  {
119  service.m_scpdURL = text;
120  }
121  else if(nodeName.contains("controlurl", Qt::CaseInsensitive))
122  {
123  service.m_controlURL = text;
124  }
125  else if(nodeName.contains("eventsuburl", Qt::CaseInsensitive))
126  {
127  service.m_eventSubURL = text;
128  }
129  }
130  }
131  }
132  return service;
133 }
QString m_scpdURL
Definition: qdlnaservice.h:30
QString toString() const
Definition: qdlnaxml.cpp:46
QString m_serviceType
Definition: qdlnaservice.h:32
QString tagNameToLower(const QString &data) const
Definition: qdlnaxml.cpp:56
The class of the dlna xml.
Definition: qdlnaxml.h:29
QString readTagNameValue(const QString &tagName) const
Definition: qdlnaxml.cpp:75
QDomDocument * m_document
Definition: qdlnaxml.cpp:14
QString m_serviceID
Definition: qdlnaservice.h:33
QString m_controlURL
Definition: qdlnaservice.h:29
#define TTK_SEPARATOR
Definition: ttkglobal.h:195
The class of the dlna service.
Definition: qdlnaservice.h:27
QDlnaService readServiceTag(const QString &type, const QString &tagName) const
Definition: qdlnaxml.cpp:82
#define TTK_INIT_PRIVATE(Class)
Definition: ttkprivate.h:33
The class of the ttk private base.
Definition: ttkprivate.h:48
QString m_eventSubURL
Definition: qdlnaservice.h:31
bool fromString(const QString &data)
Definition: qdlnaxml.cpp:36
The class of the dlna xml private.
Definition: qdlnaxml.cpp:8
#define TTK_D(Class)
Definition: ttkprivate.h:41
QDlnaXml()
Definition: qdlnaxml.cpp:31