TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musictxdownloadimagerequest.cpp
Go to the documentation of this file.
3 
4 static constexpr const char *ART_BACKGROUND_URL = "dGJmTlZOK1QvMDJENUxjMDk5UVhBWHVCb001eWtnQ1hKSnhsRWxLczNvRm9FV0kwbHhocTk4aml5SCs1Ym5mQU44SU05c1VZYVFzR2hLTEpGQ0hCNmM1ZUlZVnhnMm92QXNGMFN3PT0=";
5 static constexpr const char *TX_SEARCH_URL = "RVNEYVc1Z1l4Wk9Ma2QxMEl3bnNnNEJaS0hiZVlZNnBQZXlQTUIzZGFjMksyVkNPMkxaeXBnPT0=";
6 static constexpr const char *TX_SEARCH_DATA_URL = "bW8ybE03WEw1WmNmYzBuSTJWeTdPMFZNY0U2RDRYcjZla1djWmU2eU5ld2lZbytpaExzaG1MaDZ6U1FKTzVuWkZqZHJaL0gxN3ZiOTBIaFZwcmdpeU5NQllkQ1RaUzdVVmZ2UjFuWkF5SzlZSHYwajRKWEFXTUNBaGNab0V6U0UzOVdkMlpqM25CS212dEI2aU5KSUtLanJrcE5jU3JJUEEwSjhuVzFJV2xrM0FaWnFrUmladWxIUTlKUzF3RE5NR1RnUzJMNzRBTWF3Q0lLRmltZWc4QUh3b0dlZ1lxMTNXSXJLOGlWTlBEMmV4TkdlL2NzT0lqRW5UMHc9";
7 
10 {
11 
12 }
13 
14 bool MusicTXImageConfigManager::readBuffer(QStringList &items)
15 {
16  const QDomNodeList &nodes = m_document->elementsByTagName("url");
17  for(int i = 0; i < nodes.count(); ++i)
18  {
19  items << nodes.item(i).toElement().text();
20  }
21 
22  return true;
23 }
24 
25 
26 MusicTXDownloadBackgroundRequest::MusicTXDownloadBackgroundRequest(const QString &name, const QString &path, QObject *parent)
27  : MusicAbstractDownloadImageRequest(name, path, parent)
28 {
29 
30 }
31 
33 {
34  TTK_INFO_STREAM(className() << "startToRequest");
35 
37 
38  QNetworkRequest request;
39  request.setUrl(TTK::Algorithm::mdII(TX_SEARCH_URL, false));
40  TTK::setSslConfiguration(&request);
42 
43  m_reply = m_manager.post(request, TTK::Algorithm::mdII(TX_SEARCH_DATA_URL, false).arg(m_name).toUtf8());
44  connect(m_reply, SIGNAL(finished()), SLOT(downLoadFinished()));
46 }
47 
49 {
50  TTK_INFO_STREAM(className() << "downLoadFinished");
51 
53  QString id;
54  if(m_reply && m_reply->error() == QNetworkReply::NoError)
55  {
56  QJson::Parser json;
57  bool ok = false;
58  const QVariant &data = json.parse(m_reply->readAll(), &ok);
59  if(ok)
60  {
61  QVariantMap value = data.toMap();
62  value = value["music.search.SearchCgiService"].toMap();
63 
64  if(value.contains("code") && value["code"].toInt() == 0)
65  {
66  value = value["data"].toMap();
67  value = value["body"].toMap();
68  value = value["song"].toMap();
69 
70  const QVariantList &datas = value["list"].toList();
71  for(const QVariant &var : qAsConst(datas))
72  {
73  if(var.isNull())
74  {
75  continue;
76  }
77 
78  value = var.toMap();
80 
81  id = value["id"].toString();
82  break;
83  }
84  }
85  }
86  }
87 
88  if(id.isEmpty())
89  {
90  TTK_INFO_STREAM(className() << "downLoadFinished");
91  Q_EMIT downLoadDataChanged({});
92  deleteAll();
93  return;
94  }
95 
96  downLoadUrl(id);
97 }
98 
100 {
101  TTK_INFO_STREAM(className() << "downLoadUrlFinished");
102 
104  if(m_reply && m_reply->error() == QNetworkReply::NoError)
105  {
106  QStringList items;
108  if(manager.fromByteArray(m_reply->readAll()))
109  {
110  manager.readBuffer(items);
111  }
112 
113  for(const QString &url : qAsConst(items))
114  {
115  if(m_counter < m_remainCount && !url.isEmpty())
116  {
118  connect(d, SIGNAL(downLoadDataChanged(QString)), SLOT(downLoadDataFinished()));
119  d->startToRequest();
120  }
121  }
122  }
123 
124  TTK_INFO_STREAM(className() << "download image size" << m_counter);
125  Q_EMIT downLoadDataChanged(QString::number(m_counter));
126  //
127  if(m_counter == 0)
128  {
129  deleteAll();
130  }
131 }
132 
134 {
135  TTK_INFO_STREAM(className() << "downLoadUrl" << id);
136 
138 
139  QNetworkRequest request;
140  request.setUrl(TTK::Algorithm::mdII(ART_BACKGROUND_URL, false).arg(id));
141  TTK::setSslConfiguration(&request);
142  TTK::makeContentTypeHeader(&request);
143 
144  m_reply = m_manager.get(request);
145  connect(m_reply, SIGNAL(finished()), SLOT(downLoadUrlFinished()));
147 }
#define TTK_NETWORK_QUERY_CHECK(VALUE)
virtual void deleteAll()
void downLoadDataChanged(const QString &bytes)
The class of the ttk xml interface.
QDomDocument * m_document
QNetworkReply * m_reply
The class of the tencent query info xml data from net.
The class of the download the type of data.
static constexpr const char * ART_BACKGROUND_URL
TTK_MODULE_EXPORT void setSslConfiguration(QNetworkRequest *request, QSslSocket::PeerVerifyMode mode=QSslSocket::VerifyNone)
virtual void downLoadFinished()
static constexpr const char * TX_SEARCH_URL
#define qAsConst
Definition: ttkqtglobal.h:53
const char * name
Definition: http_parser.c:458
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:67
QNetworkAccessManager m_manager
bool fromByteArray(const QByteArray &data)
#define BACKGROUND_DIR_FULL
Definition: musicobject.h:129
virtual void replyError(QNetworkReply::NetworkError error) override
QVariant parse(QIODevice *io, bool *ok=0)
Read JSON string from the I/O Device and converts it to a QVariant object.
Definition: parser.cpp:69
#define TTK_SLOT
Definition: ttkqtglobal.h:165
static constexpr const char * TX_SEARCH_DATA_URL
virtual void downLoadFinished() overridefinal
The class of the download art background image.
TTK_MODULE_EXPORT void makeContentTypeHeader(QNetworkRequest *request, const QByteArray &data={})
virtual bool readBuffer(QStringList &items) overridefinal
Main class used to convert JSON data to QVariant objects.
Definition: parser.h:40
#define SKN_FILE
Definition: musicobject.h:61
virtual void startToRequest() override
MusicTXDownloadBackgroundRequest(const QString &name, const QString &path, QObject *parent=nullptr)
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.
Definition: ttkqtcompat.h:59
virtual void startToRequest() overridefinal