TTKMusicPlayer  4.1.3.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musickgqueryplaylistrequest.cpp
Go to the documentation of this file.
2 
5 {
8 }
9 
11 {
12  TTK_INFO_STREAM(className() << __FUNCTION__ << offset);
13 
14  deleteAll();
15  m_totalSize = 0;
17 
18  QNetworkRequest request;
19  request.setUrl(TTK::Algorithm::mdII(KG_PLAYLIST_URL, false).arg(m_queryValue).arg(offset + 1).arg(m_pageSize));
21 
22  m_reply = m_manager.get(request);
23  connect(m_reply, SIGNAL(finished()), SLOT(downLoadFinished()));
25 }
26 
28 {
29  TTK_INFO_STREAM(className() << __FUNCTION__ << value);
30 
31  deleteAll();
32 
33  QNetworkRequest request;
34  request.setUrl(TTK::Algorithm::mdII(KG_PLAYLIST_INFO_URL, false).arg(value));
36 
37  QNetworkReply *reply = m_manager.get(request);
38  connect(reply, SIGNAL(finished()), SLOT(downloadDetailsFinished()));
40 }
41 
43 {
44  TTK_INFO_STREAM(className() << __FUNCTION__ << info->m_songId << bitrate << "kbps");
45 
50 
53 }
54 
56 {
57  TTK_INFO_STREAM(className() << __FUNCTION__ << item.m_id);
58 
60 
61  QNetworkRequest request;
62  request.setUrl(TTK::Algorithm::mdII(KG_PLAYLIST_DETAIL_URL, false).arg(item.m_id));
64 
65  const QByteArray &bytes = TTK::syncNetworkQueryForGet(&request);
66  if(bytes.isEmpty())
67  {
68  return;
69  }
70 
71  QJson::Parser json;
72  bool ok = false;
73  const QVariant &data = json.parse(bytes, &ok);
74  if(ok)
75  {
76  QVariantMap value = data.toMap();
77  if(value["errcode"].toInt() == 0 && value.contains("data"))
78  {
79  value = value["data"].toMap();
80  item.m_coverUrl = value["imgurl"].toString().replace("{size}", "400");
81  item.m_name = value["specialname"].toString();
82  item.m_count = value["playcount"].toString();
83  item.m_description = value["intro"].toString();
84  item.m_time = value["publishtime"].toString();
85  item.m_nickName = value["nickname"].toString();
86  item.m_category.clear();
87 
88  const QVariantList &tags = value["tags"].toList();
89  for(const QVariant &var : qAsConst(tags))
90  {
91  if(var.isNull())
92  {
93  continue;
94  }
95 
96  value = var.toMap();
97 
98  item.m_category.append(value["tagname"].toString() + "|");
99  }
100 
101  if(!item.m_category.isEmpty())
102  {
103  item.m_category.insert(0, "|");
104  }
105  }
106  }
107 }
108 
110 {
111  TTK_INFO_STREAM(className() << __FUNCTION__);
112 
114  if(m_reply && m_reply->error() == QNetworkReply::NoError)
115  {
116  QJson::Parser json;
117  bool ok = false;
118  const QVariant &data = json.parse(m_reply->readAll(), &ok);
119  if(ok)
120  {
121  QVariantMap value = data.toMap();
122  if(value["errcode"].toInt() == 0)
123  {
124  value = value["data"].toMap();
125  m_totalSize = value["total"].toInt();
126 
127  const QVariantList &datas = value["info"].toList();
128  for(const QVariant &var : qAsConst(datas))
129  {
130  if(var.isNull())
131  {
132  continue;
133  }
134 
135  value = var.toMap();
137 
138  MusicResultDataItem item;
139  item.m_coverUrl = value["imgurl"].toString().replace("{size}", "400");
140  item.m_id = value["specialid"].toString();
141  item.m_name = value["specialname"].toString();
142  item.m_count = value["playcount"].toString();
143  item.m_description = value["intro"].toString();
144  item.m_time = value["publishtime"].toString();
145  item.m_nickName = value["username"].toString();
146  Q_EMIT createPlaylistItem(item);
147  }
148  }
149  }
150  }
151 
152 // Q_EMIT downLoadDataChanged({});
153  deleteAll();
154 }
155 
157 {
158  TTK_INFO_STREAM(className() << __FUNCTION__);
159 
161  QNetworkReply *reply = TTKObjectCast(QNetworkReply*, sender());
162  if(reply && reply->error() == QNetworkReply::NoError)
163  {
164  QJson::Parser json;
165  bool ok = false;
166  const QVariant &data = json.parse(reply->readAll(), &ok);
167  if(ok)
168  {
169  QVariantMap value = data.toMap();
170  if(value["errcode"].toInt() == 0 && value.contains("data"))
171  {
172  value = value["data"].toMap();
173 
174  const QVariantList &datas = value["info"].toList();
175  for(const QVariant &var : qAsConst(datas))
176  {
177  if(var.isNull())
178  {
179  continue;
180  }
181 
182  value = var.toMap();
184 
186  info.m_songId = value["hash"].toString();
187 
188  info.m_albumId = value["album_id"].toString();
189 
190  info.m_duration = TTKTime::formatDuration(value["duration"].toInt() * TTK_DN_S2MS);
191  info.m_year.clear();
192  info.m_trackNumber = "0";
193 
197  ReqKGInterface::parseFromSongAlbumInfo(&info, value["album_audio_id"].toString());
201 
202  Q_EMIT createResultItem({info, serverToString()});
203  m_items << info;
204  }
205  }
206  }
207  }
208 
209  Q_EMIT downLoadDataChanged({});
210 }
#define TTK_NETWORK_QUERY_CHECK(VALUE)
virtual void startToPage(int offset) overridefinal
The class of the search result data item.
virtual void deleteAll()
void downLoadDataChanged(const QString &bytes)
QNetworkReply * m_reply
virtual void downLoadFinished() overridefinal
static constexpr const char * QUERY_KG_INTERFACE
static constexpr const char * KG_PLAYLIST_URL
playlist url
MusicSongPropertyList m_songProps
Definition: musicobject.h:297
TTK_MODULE_EXPORT QByteArray syncNetworkQueryForGet(QNetworkRequest *request)
The class of the query playlist download data from net.
virtual void downLoadFinished()
void makeRequestRawHeader(QNetworkRequest *request)
void createPlaylistItem(const MusicResultDataItem &item)
voidpf uLong offset
Definition: ioapi.h:142
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate)
TTK::MusicSongInformationList m_items
#define qAsConst
Definition: ttkqtglobal.h:51
virtual void startToSearch(const QString &value) overridefinal
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:68
virtual void startToQueryInfo(MusicResultDataItem &item) overridefinal
QNetworkAccessManager m_manager
void createResultItem(const MusicResultInfoItem &songItem)
bool fetchUrlPathSize(TTK::MusicSongProperty *prop, const QString &duration) const
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:181
virtual void downLoadFinished() override
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate) overridefinal
static constexpr const char * KG_PLAYLIST_INFO_URL
#define SONG_PAGE_SIZE
#define TTK_DN_S2MS
Definition: ttkglobal.h:281
static constexpr const char * KG_PLAYLIST_DETAIL_URL
MusicKGQueryPlaylistRequest(QObject *parent=nullptr)
TTK_MODULE_EXPORT QString toString(Record type)
void parseFromSongAlbumLrc(TTK::MusicSongInformation *info)
Main class used to convert JSON data to QVariant objects.
Definition: parser.h:40
void parseFromSongAlbumInfo(TTK::MusicSongInformation *info, const QString &album)
void parseFromSongProperty(TTK::MusicSongInformation *info, int bitrate)
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
The class of the music song information.
Definition: musicobject.h:283
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.
Definition: ttkqtcompat.h:59
static qint64 formatDuration(const QString &time) noexcept
Definition: ttktime.cpp:123
#define TTKObjectCast(x, y)
Definition: ttkqtglobal.h:76