TTKMusicPlayer  4.2.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musickwqueryplaylistrequest.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(KW_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(KW_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  MusicQueryPlaylistRequest::startToSearchByID(value.isEmpty() ? "393" : value);
45 }
46 
48 {
49  TTK_INFO_STREAM(className() << __FUNCTION__ << info->m_songId << bitrate << "kbps");
50 
55 
58 }
59 
61 {
62  TTK_INFO_STREAM(className() << __FUNCTION__ << item.m_id);
63 
65 
66  QNetworkRequest request;
67  request.setUrl(TTK::Algorithm::mdII(KW_PLAYLIST_INFO_URL, false).arg(item.m_id));
69 
70  const QByteArray &bytes = TTK::syncNetworkQueryForGet(&request);
71  if(bytes.isEmpty())
72  {
73  return;
74  }
75 
76  QJsonParseError ok;
77  const QJsonDocument &json = QJsonDocument::fromJson(bytes, &ok);
79  {
80  const QVariantMap &value = json.toVariant().toMap();
81  if(!value.isEmpty())
82  {
83  item.m_coverUrl = value["pic"].toString();
84  item.m_name = value["title"].toString();
85  item.m_count = value["playnum"].toString();
86  item.m_description = value["info"].toString();
87  item.m_time = TTKDateTime::format(value["ctime"].toULongLong() * TTK_DN_S2MS, TTK_DATE_FORMAT);
88  item.m_nickName = value["uname"].toString();
89  }
90  }
91 }
92 
94 {
95  TTK_INFO_STREAM(className() << __FUNCTION__);
96 
98  if(m_reply && m_reply->error() == QNetworkReply::NoError)
99  {
100  QJsonParseError ok;
101  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll(), &ok);
103  {
104  QVariantMap value = json.toVariant().toMap();
105  if(value["code"].toInt() == 200 && value.contains("data"))
106  {
107  value = value["data"].toMap();
108  m_totalSize = value["total"].toInt();
109 
110  const QVariantList &datas = value["data"].toList();
111  for(const QVariant &var : qAsConst(datas))
112  {
113  if(var.isNull())
114  {
115  continue;
116  }
117 
118  value = var.toMap();
120 
121  morePlaylistDetails(value["id"].toString());
123  }
124  }
125  }
126  }
127 
128 // Q_EMIT downLoadDataChanged({});
129  deleteAll();
130 }
131 
133 {
134  TTK_INFO_STREAM(className() << __FUNCTION__);
135 
137  QNetworkReply *reply = TTKObjectCast(QNetworkReply*, sender());
138  if(reply && reply->error() == QNetworkReply::NoError)
139  {
140  QJsonParseError ok;
141  const QJsonDocument &json = QJsonDocument::fromJson(reply->readAll(), &ok);
143  {
144  QVariantMap value = json.toVariant().toMap();
145  if(value.contains("musiclist"))
146  {
147  const QVariantList &datas = value["musiclist"].toList();
148  for(const QVariant &var : qAsConst(datas))
149  {
150  if(var.isNull())
151  {
152  continue;
153  }
154 
155  value = var.toMap();
157 
159  info.m_songId = value["id"].toString();
160  info.m_songName = TTK::String::charactersReplace(value["name"].toString());
161 
162  info.m_artistId = value["artistid"].toString();
163  info.m_artistName = ReqKWInterface::makeSongArtist(value["artist"].toString());
164 
165  info.m_albumId = value["albumid"].toString();
166  info.m_albumName = TTK::String::charactersReplace(value["album"].toString());
167 
168  info.m_coverUrl = ReqKWInterface::makeCoverPixmapUrl(value["web_albumpic_short"].toString(), info.m_songId);
169  info.m_lrcUrl = TTK::Algorithm::mdII(KW_SONG_LRC_URL, false).arg(info.m_songId);
170  info.m_duration = TTKTime::formatDuration(value["duration"].toInt() * TTK_DN_S2MS);
171  info.m_year.clear();
172  info.m_trackNumber = "0";
173 
175  ReqKWInterface::parseFromSongProperty(&info, value["formats"].toString());
177 
178  Q_EMIT createResultItem({info, serverToString()});
179  m_items << info;
180  }
181  }
182  }
183  }
184 
185  Q_EMIT downLoadDataChanged({});
186 }
187 
189 {
190  TTK_INFO_STREAM(className() << __FUNCTION__);
191 
192  QNetworkReply *reply = TTKObjectCast(QNetworkReply*, sender());
193  if(reply && reply->error() == QNetworkReply::NoError)
194  {
195  QJsonParseError ok;
196  const QJsonDocument &json = QJsonDocument::fromJson(reply->readAll(), &ok);
198  {
199  const QVariantMap &value = json.toVariant().toMap();
200  if(value["result"].toString() == "ok")
201  {
202  MusicResultDataItem item;
203  item.m_coverUrl = value["pic"].toString();
204  item.m_id = value["id"].toString();
205  item.m_name = value["title"].toString();
206  item.m_count = value["playnum"].toString();
207  item.m_description = value["info"].toString();
208  item.m_time = TTKDateTime::format(value["ctime"].toULongLong() * TTK_DN_S2MS, TTK_DATE_FORMAT);
209  item.m_nickName = value["uname"].toString();
210  item.m_category = value["tag"].toString();
211 
212  if(!item.m_category.isEmpty())
213  {
214  item.m_category.replace(",", "|");
215  item.m_category.insert(0, "|");
216  item.m_category.append("|");
217  }
218 
219  Q_EMIT createPlaylistItem(item);
220  }
221  }
222  }
223 }
224 
226 {
227  TTK_INFO_STREAM(className() << __FUNCTION__ << pid);
228 
229  QNetworkRequest request;
230  request.setUrl(TTK::Algorithm::mdII(KW_PLAYLIST_INFO_URL, false).arg(pid));
232 
233  QNetworkReply *reply = m_manager.get(request);
234  connect(reply, SIGNAL(finished()), SLOT(downloadMoreDetailsFinished()));
236 }
TTK_MODULE_EXPORT QString charactersReplace(const QString &value)
virtual void downLoadFinished() overridefinal
virtual void startToSearchByID(const QString &value) overridefinal
#define TTK_NETWORK_QUERY_CHECK(VALUE)
virtual void startToSearch(const QString &value) overridefinal
The class of the search result data item.
virtual void deleteAll()
void downLoadDataChanged(const QString &bytes)
QNetworkReply * m_reply
QVariant toVariant() const
static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error=0)
virtual void startToSearchByID(const QString &value) override
MusicSongPropertyList m_songProps
Definition: musicobject.h:309
QString makeCoverPixmapUrl(const QString &url, const QString &id)
void createResultItem(const MusicResultInfoItem &result)
TTK_MODULE_EXPORT QByteArray syncNetworkQueryForGet(QNetworkRequest *request)
The class of the query playlist download data from net.
virtual void downLoadFinished()
void createPlaylistItem(const MusicResultDataItem &item)
voidpf uLong offset
Definition: ioapi.h:142
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate)
ParseError error
TTK::MusicSongInformationList m_items
#define qAsConst
Definition: ttkqtglobal.h:57
static constexpr const char * KW_SONG_LRC_URL
static constexpr const char * KW_PLAYLIST_INFO_URL
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:74
virtual void startToPage(int offset) overridefinal
QNetworkAccessManager m_manager
MusicKWQueryPlaylistRequest(QObject *parent=nullptr)
bool fetchUrlPathSize(TTK::MusicSongProperty *prop, const QString &duration) const
virtual void replyError(QNetworkReply::NetworkError error) override
static constexpr const char * QUERY_KW_INTERFACE
#define TTK_SLOT
Definition: ttkqtglobal.h:177
#define TTK_DATE_FORMAT
Definition: ttkglobal.h:309
virtual void downLoadFinished() override
QString makeSongArtist(const QString &name)
virtual void startToQueryInfo(MusicResultDataItem &item) overridefinal
TTK_MODULE_EXPORT QString toString(Record type) noexcept
#define SONG_PAGE_SIZE
#define TTK_DN_S2MS
Definition: ttkglobal.h:355
void makeRequestRawHeader(QNetworkRequest *request) noexcept
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate) overridefinal
static QString format(const QString &time, const QString &format)
Definition: ttktime.cpp:254
void morePlaylistDetails(const QString &pid)
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
void parseFromSongProperty(TTK::MusicSongInformation *info, int bitrate)
The class of the music song information.
Definition: musicobject.h:295
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.
Definition: ttkqtcompat.h:59
static qint64 formatDuration(const QString &time) noexcept
Definition: ttktime.cpp:123
static constexpr const char * KW_PLAYLIST_URL
playlist url
#define TTKObjectCast(x, y)
Definition: ttkqtglobal.h:82