TTKMusicPlayer  4.3.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musickgqueryartistlistrequest.cpp
Go to the documentation of this file.
2 
3 static constexpr const char *KG_ARTIST_LIST_URL = "ZCt5ZDJpbFdCZHNvUWVHZXJjMDl2L0FZd01mMVZSckkxaVJLcDJXYnZyT0FWNWQyWDByNkxZNXdDWm1yZ3BpNlg4MGtsTVpzTDZNWXdjRFU=";
4 static constexpr const char *KG_HOT_ARTIST_LIST_URL = "L1VhV3pYU0NUbVBWanR4bUZBMDc5QnNhK3p5bHJORHhOM3RXMlJ3eUVwQTR1MkZ5Yk05Tnh4OHRITjFhWUdDTy96UjBzbE8yMUVFQzJvZUVIQXVBZ1lNVFBEVlZ6bkV3SkdoK1NKUmZXZkE9";
5 
8 {
9  m_pageSize = TTK_HIGH_LEVEL; // TTK_PAGE_SIZE_100
11 }
12 
14 {
15  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__ << offset);
16 
17  deleteAll();
18  m_totalSize = m_pageSize; // 0
20 
21  QString catId = "type=1&sextype=1";
22  m_rawData["initial"] = "%E7%83%AD%E9%97%A8";
23  const QStringList &dds = m_queryValue.split(TTK_SPLITER);
24 
25  if(dds.count() == 2)
26  {
27  catId = dds[0];
28  if(catId.isEmpty())
29  {
30  catId = "area=1&sex=1";
31  }
32 
33  const int id = dds[1].toInt();
34  if(id > 0 && id <= 26)
35  {
36  m_rawData["initial"] = QString(TTKStaticCast(char, id + 65 - 1));
37  }
38  }
39 
40  QNetworkRequest request;
41  request.setUrl(TTK::Algorithm::mdII(KG_ARTIST_LIST_URL, false).arg(catId));
43 
44  m_reply = m_manager.get(request);
45  connect(m_reply, SIGNAL(finished()), SLOT(downloadFinished()));
47 }
48 
50 {
51  m_queryValue = value;
52  m_queryValue.replace("n", "&");
54 }
55 
57 {
58  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__);
59 
61  if(m_reply && m_reply->error() == QNetworkReply::NoError)
62  {
63  QJsonParseError ok;
64  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll(), &ok);
66  {
67  QVariantMap value = json.toVariant().toMap();
68  if(value["errcode"].toInt() == 0 && value.contains("data"))
69  {
70  value = value["data"].toMap();
71 
72  const QVariantList &datas = value["info"].toList();
73  for(const QVariant &var : qAsConst(datas))
74  {
75  if(var.isNull())
76  {
77  continue;
78  }
79 
80  value = var.toMap();
82 
83  if(m_rawData["initial"].toString() == QUrl(value["title"].toString()).toEncoded())
84  {
85  for(const QVariant &sg : value["singer"].toList())
86  {
87  if(sg.isNull())
88  {
89  continue;
90  }
91 
92  value = sg.toMap();
94 
96  item.m_id = value["singerid"].toString();
97  item.m_name = value["singername"].toString();
98  Q_EMIT createArtistListItem(item);
99  }
100  break;
101  }
102  }
103  }
104  }
105  }
106 
107 // Q_EMIT downloadDataChanged({});
108  deleteAll();
109 }
110 
111 
112 
115 {
118  m_totalSize = 100;
119 }
120 
122 {
123  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__ << offset);
124 
125  deleteAll();
127 
128  QNetworkRequest request;
129  request.setUrl(TTK::Algorithm::mdII(KG_HOT_ARTIST_LIST_URL, false).arg(offset + 1).arg(m_pageSize));
131 
132  m_reply = m_manager.get(request);
133  connect(m_reply, SIGNAL(finished()), SLOT(downloadFinished()));
135 }
136 
138 {
139  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__);
140 
142  if(m_reply && m_reply->error() == QNetworkReply::NoError)
143  {
144  QJsonParseError ok;
145  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll(), &ok);
147  {
148  QVariantMap value = json.toVariant().toMap();
149  if(value["errcode"].toInt() == 0 && value.contains("data"))
150  {
151  value = value["data"].toMap();
152  m_totalSize = value["total"].toInt();
153 
154  const QVariantList &datas = value["info"].toList();
155  for(const QVariant &var : qAsConst(datas))
156  {
157  if(var.isNull())
158  {
159  continue;
160  }
161 
162  value = var.toMap();
164 
165  MusicResultDataItem item;
166  item.m_id = value["singerid"].toString();
167  item.m_name = value["singername"].toString();
168  item.m_coverUrl = value["imgurl"].toString().replace("{size}", "500");
169  Q_EMIT createArtistListItem(item);
170  }
171  }
172  }
173  }
174 
175  Q_EMIT downloadDataChanged({});
176  deleteAll();
177 }
#define TTKStaticCast(x, y)
Definition: ttkglobal.h:231
#define TTK_NETWORK_QUERY_CHECK(VALUE)
The class of the search result data item.
virtual void deleteAll()
virtual void startToSearch(const QString &value) overridefinal
MusicKGQueryHotArtistListRequest(QObject *parent=nullptr)
QNetworkReply * m_reply
void downloadDataChanged(const QString &bytes)
MusicKGQueryArtistListRequest(QObject *parent=nullptr)
QVariant toVariant() const
static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error=0)
static constexpr const char * QUERY_KG_INTERFACE
#define TTK_PAGE_SIZE_30
#define TTK_SPLITER
Definition: ttkglobal.h:275
virtual void startToPage(int offset) overridefinal
The class of the query artist list data from net.
voidpf uLong offset
Definition: ioapi.h:142
ParseError error
#define qAsConst
Definition: ttkqtglobal.h:57
static constexpr const char * KG_HOT_ARTIST_LIST_URL
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:74
QNetworkAccessManager m_manager
virtual void replyError(QNetworkReply::NetworkError error) override
virtual void startToPage(int offset) overridefinal
#define TTK_SLOT
Definition: ttkqtglobal.h:177
static constexpr const char * KG_ARTIST_LIST_URL
TTK_MODULE_EXPORT QString toString(Record type) noexcept
#define TTK_HIGH_LEVEL
Definition: ttkglobal.h:334
virtual void startToSearch(const QString &value) override
virtual void downloadFinished() overridefinal
virtual void downloadFinished() override
void createArtistListItem(const MusicResultDataItem &item)
void makeRequestRawHeader(QNetworkRequest *request) noexcept
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.
Definition: ttkqtcompat.h:59