TTKMusicPlayer  4.2.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() << __FUNCTION__);
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() << __FUNCTION__);
51 
53  QString id;
54  if(m_reply && m_reply->error() == QNetworkReply::NoError)
55  {
56  QJsonParseError ok;
57  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll(), &ok);
59  {
60  QVariantMap value = json.toVariant().toMap();
61  value = value["music.search.SearchCgiService"].toMap();
62 
63  if(value["code"].toInt() == 0)
64  {
65  value = value["data"].toMap();
66  value = value["body"].toMap();
67  value = value["song"].toMap();
68 
69  const QVariantList &datas = value["list"].toList();
70  for(const QVariant &var : qAsConst(datas))
71  {
72  if(var.isNull())
73  {
74  continue;
75  }
76 
77  value = var.toMap();
79 
80  id = value["id"].toString();
81  break;
82  }
83  }
84  }
85  }
86 
87  if(id.isEmpty())
88  {
89  TTK_INFO_STREAM(className() << __FUNCTION__);
90  Q_EMIT downLoadDataChanged({});
91  deleteAll();
92  return;
93  }
94 
95  downLoadUrl(id);
96 }
97 
99 {
100  TTK_INFO_STREAM(className() << __FUNCTION__);
101 
103  if(m_reply && m_reply->error() == QNetworkReply::NoError)
104  {
105  QStringList items;
107  if(manager.fromByteArray(m_reply->readAll()))
108  {
109  manager.readBuffer(items);
110  }
111 
112  for(const QString &url : qAsConst(items))
113  {
114  if(m_counter < m_remainCount && !url.isEmpty())
115  {
117  connect(d, SIGNAL(downLoadDataChanged(QString)), SLOT(downLoadDataFinished()));
118  d->startToRequest();
119  }
120  }
121  }
122 
123  TTK_INFO_STREAM(className() << "download image size" << m_counter);
124  Q_EMIT downLoadDataChanged(QString::number(m_counter));
125  //
126  if(m_counter == 0)
127  {
128  deleteAll();
129  }
130 }
131 
133 {
134  TTK_INFO_STREAM(className() << __FUNCTION__ << id);
135 
137 
138  QNetworkRequest request;
139  request.setUrl(TTK::Algorithm::mdII(ART_BACKGROUND_URL, false).arg(id));
140  TTK::setSslConfiguration(&request);
141  TTK::makeContentTypeHeader(&request);
142 
143  m_reply = m_manager.get(request);
144  connect(m_reply, SIGNAL(finished()), SLOT(downLoadUrlFinished()));
146 }
#define TTK_NETWORK_QUERY_CHECK(VALUE)
virtual void deleteAll()
void downLoadDataChanged(const QString &bytes)
The class of the ttk xml interface.
QDomDocument * m_document
TTK_MODULE_EXPORT void setSslConfiguration(QNetworkRequest *request, QSslSocket::PeerVerifyMode mode=QSslSocket::VerifyNone) noexcept
QNetworkReply * m_reply
The class of the tencent query info xml data from net.
QVariant toVariant() const
static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error=0)
The class of the download the type of data.
static constexpr const char * ART_BACKGROUND_URL
virtual void downLoadFinished()
static constexpr const char * TX_SEARCH_URL
ParseError error
#define qAsConst
Definition: ttkqtglobal.h:57
const char * name
Definition: http_parser.c:458
TTK_MODULE_EXPORT void makeContentTypeHeader(QNetworkRequest *request, const QByteArray &data={}) noexcept
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:74
QNetworkAccessManager m_manager
bool fromByteArray(const QByteArray &data)
#define BACKGROUND_DIR_FULL
Definition: musicobject.h:143
virtual void replyError(QNetworkReply::NetworkError error) override
#define TTK_SLOT
Definition: ttkqtglobal.h:177
static constexpr const char * TX_SEARCH_DATA_URL
virtual void downLoadFinished() overridefinal
The class of the download art background image.
virtual bool readBuffer(QStringList &items) overridefinal
#define SKN_FILE
Definition: musicobject.h:69
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