TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicwyqueryplaylistrequest.cpp
Go to the documentation of this file.
2 
5 {
8 }
9 
11 {
12  TTK_INFO_STREAM(className() << "startToPage" << offset);
13 
14  deleteAll();
15  m_totalSize = 0;
17 
18  QNetworkRequest request;
19  const QByteArray &parameter = ReqWYInterface::makeTokenRequest(&request,
22 
23  m_reply = m_manager.post(request, parameter);
24  connect(m_reply, SIGNAL(finished()), SLOT(downLoadFinished()));
26 }
27 
29 {
30  TTK_INFO_STREAM(className() << "startToSearch" << value);
31 
32  deleteAll();
33 
34  QNetworkRequest request;
35  const QByteArray &parameter = ReqWYInterface::makeTokenRequest(&request,
38 
39  QNetworkReply *reply = m_manager.post(request, parameter);
40  connect(reply, SIGNAL(finished()), SLOT(downloadDetailsFinished()));
42 }
43 
45 {
46  MusicQueryPlaylistRequest::startToSearchByID(value.isEmpty() ? "all" : value);
47 }
48 
50 {
51  TTK_INFO_STREAM(className() << "startToQueryResult" << info->m_songId << bitrate << "kbps");
52 
58 }
59 
61 {
62  TTK_INFO_STREAM(className() << "startToQueryInfo" << item.m_id);
63 
65 
66  QNetworkRequest request;
67  const QByteArray &parameter = ReqWYInterface::makeTokenRequest(&request,
70 
71  const QByteArray &bytes = TTK::syncNetworkQueryForPost(&request, parameter);
72  if(bytes.isEmpty())
73  {
74  return;
75  }
76 
77  QJson::Parser json;
78  bool ok = false;
79  const QVariant &data = json.parse(bytes, &ok);
80  if(ok)
81  {
82  QVariantMap value = data.toMap();
83  if(value["code"].toInt() == 200 && value.contains("playlist"))
84  {
85  value = value["playlist"].toMap();
86  item.m_coverUrl = value["coverImgUrl"].toString();
87  item.m_name = value["name"].toString();
88  item.m_count = value["playCount"].toString();
89  item.m_description = value["description"].toString();
90  item.m_updateTime = TTKDateTime::format(value["updateTime"].toULongLong(), TTK_DATE_FORMAT);
91  item.m_category.clear();
92 
93  const QVariantList &tags = value["tags"].toList();
94  for(const QVariant &var : qAsConst(tags))
95  {
96  if(var.isNull())
97  {
98  continue;
99  }
100 
101  item.m_category.append(var.toString() + "|");
102  }
103 
104  if(!item.m_category.isEmpty())
105  {
106  item.m_category.insert(0, "|");
107  }
108 
109  value = value["creator"].toMap();
110  item.m_nickName = value["nickname"].toString();
111  }
112  }
113 }
114 
116 {
117  TTK_INFO_STREAM(className() << "downLoadFinished");
118 
120  if(m_reply && m_reply->error() == QNetworkReply::NoError)
121  {
122  QJson::Parser json;
123  bool ok = false;
124  const QVariant &data = json.parse(m_reply->readAll(), &ok);
125  if(ok)
126  {
127  QVariantMap value = data.toMap();
128  if(value["code"].toInt() == 200 && value.contains("playlists"))
129  {
130  m_totalSize = value["total"].toInt();
131 
132  const QVariantList &datas = value["playlists"].toList();
133  for(const QVariant &var : qAsConst(datas))
134  {
135  if(var.isNull())
136  {
137  continue;
138  }
139 
140  value = var.toMap();
142 
143  MusicResultDataItem item;
144  item.m_coverUrl = value["coverImgUrl"].toString();
145  item.m_id = value["id"].toString();
146  item.m_name = value["name"].toString();
147  item.m_count = value["playCount"].toString();
148  item.m_description = value["description"].toString();
149  item.m_updateTime = TTKDateTime::format(value["updateTime"].toULongLong(), TTK_DATE_FORMAT);
150  item.m_category.clear();
151 
152  const QVariantList &tags = value["tags"].toList();
153  for(const QVariant &var : qAsConst(tags))
154  {
155  if(var.isNull())
156  {
157  continue;
158  }
159 
160  item.m_category.append(var.toString() + "|");
161  }
162 
163  if(!item.m_category.isEmpty())
164  {
165  item.m_category.insert(0, "|");
166  }
167 
168  value = value["creator"].toMap();
169  item.m_nickName = value["nickname"].toString();
170  Q_EMIT createPlaylistItem(item);
171  }
172  }
173  }
174  }
175 
176 // Q_EMIT downLoadDataChanged({});
177  deleteAll();
178 }
179 
181 {
182  TTK_INFO_STREAM(className() << "downloadDetailsFinished");
183 
185  QNetworkReply *reply = TTKObjectCast(QNetworkReply*, sender());
186  if(reply && reply->error() == QNetworkReply::NoError)
187  {
188  QJson::Parser json;
189  bool ok = false;
190  const QVariant &data = json.parse(reply->readAll(), &ok);
191  if(ok)
192  {
193  QVariantMap value = data.toMap();
194  if(value["code"].toInt() == 200 && value.contains("playlist"))
195  {
196  value = value["playlist"].toMap();
197 
198  const QVariantList &datas = value["tracks"].toList();
199  for(const QVariant &var : qAsConst(datas))
200  {
201  if(var.isNull())
202  {
203  continue;
204  }
205 
206  value = var.toMap();
208 
210  info.m_songId = value["id"].toString();
211  info.m_songName = TTK::String::charactersReplace(value["name"].toString());
212 
213  const QVariantList &artistsArray = value["ar"].toList();
214  for(const QVariant &artistValue : qAsConst(artistsArray))
215  {
216  if(artistValue.isNull())
217  {
218  continue;
219  }
220 
221  const QVariantMap &artistObject = artistValue.toMap();
222  if(info.m_artistId.isEmpty())
223  {
224  info.m_artistId = artistObject["id"].toString();
225  }
226 
227  info.m_artistName = ReqWYInterface::makeSongArtist(info.m_artistName, artistObject["name"].toString());
228  }
229 
230  const QVariantMap &albumObject = value["al"].toMap();
231  info.m_albumId = albumObject["id"].toString();
232  info.m_albumName = TTK::String::charactersReplace(albumObject["name"].toString());
233 
234  info.m_coverUrl = albumObject["picUrl"].toString();
236  info.m_duration = TTKTime::formatDuration(value["dt"].toInt());
237  info.m_year.clear();
238  info.m_trackNumber = value["no"].toString();
239 
243 
244  Q_EMIT createResultItem({info, serverToString()});
245  m_items << info;
246  }
247  }
248  }
249  }
250 
251  Q_EMIT downLoadDataChanged({});
252 }
TTK_MODULE_EXPORT QByteArray syncNetworkQueryForPost(QNetworkRequest *request, const QByteArray &data)
TTK_MODULE_EXPORT QString charactersReplace(const QString &value)
#define TTK_NETWORK_QUERY_CHECK(VALUE)
The class of the search result data item.
virtual void deleteAll()
void downLoadDataChanged(const QString &bytes)
QNetworkReply * m_reply
virtual void downLoadFinished() overridefinal
virtual void startToSearchByID(const QString &value) override
QString makeSongArtist(const QString &in, const QString &name)
The class of the query playlist download data from net.
virtual void downLoadFinished()
void createPlaylistItem(const MusicResultDataItem &item)
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate) overridefinal
voidpf uLong offset
Definition: ioapi.h:142
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate)
TTK::MusicSongInformationList m_items
MusicWYQueryPlaylistRequest(QObject *parent=nullptr)
#define qAsConst
Definition: ttkqtglobal.h:53
static constexpr const char * QUERY_WY_INTERFACE
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:67
static constexpr const char * WY_SONG_LRC_OLD_URL
QNetworkAccessManager m_manager
void createResultItem(const MusicResultInfoItem &songItem)
static constexpr const char * WY_PLAYLIST_DATA_URL
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 * WY_PLAYLIST_URL
playlist url
#define TTK_DATE_FORMAT
Definition: ttkglobal.h:231
virtual void startToPage(int offset) overridefinal
virtual void downLoadFinished() override
virtual void startToQueryInfo(MusicResultDataItem &item) overridefinal
void parseFromSongProperty(TTK::MusicSongInformation *info, int bitrate)
static constexpr const char * WY_PLAYLIST_INFO_URL
#define SONG_PAGE_SIZE
QByteArray makeTokenRequest(QNetworkRequest *request, const QString &query, const QString &type)
TTK_MODULE_EXPORT QString toString(Record type)
virtual void startToSearchByID(const QString &value) overridefinal
virtual void startToSearch(const QString &value) overridefinal
Main class used to convert JSON data to QVariant objects.
Definition: parser.h:40
static QString format(const QString &time, const QString &format)
Definition: ttktime.cpp:254
static constexpr const char * WY_PLAYLIST_INFO_DATA_URL
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
The class of the music song information.
Definition: musicobject.h:281
#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:60