TTKMusicPlayer  4.3.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musickwqueryalbumrequest.cpp
Go to the documentation of this file.
2 
3 static constexpr const char *KW_ALBUM_URL = "Nk5uY2lGelFqNHpteXVuekpQdFhpcWkvUnVRUWdZc1FOdUpXQkdYSWs3VmtDZU1PN29ZcUQ4dTNvczBhSmFMdkRLOGFJNnljSWJNc1QreU1TSU1SRldnN0RnRzlzWFBrUlNIbGlJUzFFelRsNzFoRUJEVkNLbHRzUnAwSzdtdEc2UFRmZEhSV0lvNVVSVXdjamhLT1dvTWxyZEE3aXlvQWFtQTg3Wmtrb05pZ0RIbXU5V3dxeWZLL3hQaFM5WmdKekRaRVhDL3VISVk9";
4 static constexpr const char *KW_ARTIST_ALBUM_URL = "YXNXaDl6TXNjWHhxeG9UeG9aaWR4aUhQRmpBR25VZ1NFQkZPbGNkdndGT09TbjRYV2ZzTHJJbUtmQjVvRVphQmltaFVUaG50M1dWTXZlWVJUOVNZVkJiVzF0amNVT3FJR09BRUUvVTU2Y1E5QTRiQ1M2SU5ES2MvdWpMeDFiT0dxWDErMkZpVyt5ZnNOeTc1K2dyRG5QVS9NVTRyN0hpNUUyVWVjZz09";
5 static constexpr const char *KW_NEW_ALBUM_URL = "SU5LT3ZXSExhQ2FEWWpFRmJxa1k1cjB6WktRc2IrNENiclo3KzVqUlBaNVRORzVoNHhlU2VheVA4VFhlaGxWaVg3SFJLQ0FmNWQ0dFdIQVVUTUxIUmU4RkJyTDRxSC9DL3kvZ0crZmZYWTlOR21WRlU0WFZaa1BFN3NGcVlIcXlXamUyWmg0UjlnT2hLVVU2bzdTb0QxaGQ3QmhkNWJXMStTTlFJVmFQK1c5TDZnclU=";
6 
8  : MusicQueryAlbumRequest(parent)
9 {
12 }
13 
15 {
16  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__ << offset);
17 
18  deleteAll();
19  m_totalSize = 0;
21 
22  QNetworkRequest request;
23  request.setUrl(TTK::Algorithm::mdII(KW_ALBUM_URL, false).arg(m_queryValue));
25 
26  m_reply = m_manager.get(request);
27  connect(m_reply, SIGNAL(finished()), SLOT(downloadFinished()));
29 }
30 
32 {
33  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__ << info->m_songId << bitrate << "kbps");
34 
39 
42 }
43 
45 {
46  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__);
47 
49  if(m_reply && m_reply->error() == QNetworkReply::NoError)
50  {
51  QJsonParseError ok;
52  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll().replace("'", "\""), &ok);
54  {
55  QVariantMap value = json.toVariant().toMap();
56  if(value.contains("musiclist"))
57  {
59  item.m_id = value["albumid"].toString();
60  item.m_count = value["name"].toString();
61  item.m_description = value["company"].toString();
62  item.m_time = value["pub"].toString();
63  item.m_category = value["lang"].toString();
64  item.m_coverUrl = ReqKWInterface::makeCoverPixmapUrl(value["pic"].toString(), {});
65 
66  m_totalSize = value["songnum"].toInt();
67 
68  const QVariantList &datas = value["musiclist"].toList();
69  for(const QVariant &var : qAsConst(datas))
70  {
71  if(var.isNull())
72  {
73  continue;
74  }
75 
76  value = var.toMap();
78 
80  info.m_songId = value["id"].toString();
81  info.m_songName = TTK::String::charactersReplace(value["name"].toString());
82 
83  info.m_artistId = value["artistid"].toString();
84  info.m_artistName = ReqKWInterface::makeSongArtist(value["artist"].toString());
85 
86  info.m_albumId = item.m_id;
88 
89  info.m_coverUrl = item.m_coverUrl;
90  info.m_lrcUrl = TTK::Algorithm::mdII(KW_SONG_LRC_URL, false).arg(info.m_songId);
91  info.m_duration = TTKTime::formatDuration(value["duration"].toInt() * TTK_DN_S2MS);
92  info.m_year = value["releasedate"].toString().section(TTK_DEFAULT_STR, 0, 0);
93  info.m_trackNumber = "0";
94 
96  ReqKWInterface::parseFromSongProperty(&info, value["formats"].toString());
98 
99  if(!m_albumFound)
100  {
101  m_albumFound = true;
102  item.m_id = info.m_albumId;
103  item.m_name = info.m_artistName;
104  Q_EMIT createAlbumItem(item);
105  }
106 
107  Q_EMIT createResultItem({info, serverToString()});
108  m_items << info;
109  }
110  }
111  }
112  }
113 
114  Q_EMIT downloadDataChanged({});
115  deleteAll();
116 }
117 
118 
119 
121  : MusicQueryAlbumRequest(parent)
122 {
125 }
126 
128 {
129  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__ << offset);
130 
131  deleteAll();
132  m_totalSize = 0;
134 
135  QNetworkRequest request;
136  request.setUrl(TTK::Algorithm::mdII(KW_ARTIST_ALBUM_URL, false).arg(m_queryValue).arg(offset).arg(m_pageSize));
138 
139  m_reply = m_manager.get(request);
140  connect(m_reply, SIGNAL(finished()), SLOT(downloadFinished()));
142 }
143 
145 {
146  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__);
147 
149  if(m_reply && m_reply->error() == QNetworkReply::NoError)
150  {
151  QJsonParseError ok;
152  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll().replace("'", "\""), &ok);
154  {
155  QVariantMap value = json.toVariant().toMap();
156  if(value.contains("albumlist"))
157  {
158  m_totalSize = value["total"].toInt();
159 
160  const QVariantList &datas = value["albumlist"].toList();
161  for(const QVariant &var : qAsConst(datas))
162  {
163  if(var.isNull())
164  {
165  continue;
166  }
167 
168  value = var.toMap();
170 
171  MusicResultDataItem item;
172  item.m_id = value["albumid"].toString();
173  item.m_name = value["name"].toString();
174  item.m_time = value["pub"].toString().replace(TTK_DEFAULT_STR, TTK_DOT);
175  item.m_coverUrl = ReqKWInterface::makeCoverPixmapUrl(value["pic"].toString(), {});
176  Q_EMIT createAlbumItem(item);
177  }
178  }
179  }
180  }
181 
182  Q_EMIT downloadDataChanged({});
183  deleteAll();
184 }
185 
186 
187 
189  : MusicQueryAlbumRequest(parent)
190 {
193 }
194 
196 {
197  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__ << offset);
198 
199  deleteAll();
201 
202  QNetworkRequest request;
203  request.setUrl(TTK::Algorithm::mdII(KW_NEW_ALBUM_URL, false).arg(offset).arg(m_pageSize));
205 
206  m_reply = m_manager.get(request);
207  connect(m_reply, SIGNAL(finished()), SLOT(downloadFinished()));
209 }
210 
212 {
213  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__);
214 
216  if(m_reply && m_reply->error() == QNetworkReply::NoError)
217  {
218  QJsonParseError ok;
219  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll(), &ok);
221  {
222  QVariantMap value = json.toVariant().toMap();
223  if(value.contains("musiclist"))
224  {
225  m_totalSize = value["total"].toInt();
226 
227  const QVariantList &datas = value["musiclist"].toList();
228  for(const QVariant &var : qAsConst(datas))
229  {
230  if(var.isNull())
231  {
232  continue;
233  }
234 
235  value = var.toMap();
237 
238  MusicResultDataItem item;
239  item.m_id = value["albumid"].toString();
240  item.m_name = value["name"].toString();
241  item.m_nickName = value["artist"].toString();
242  item.m_coverUrl = value["albumpic"].toString().replace("/120/", "/500/");
243  Q_EMIT createAlbumItem(item);
244  }
245  }
246  }
247  }
248 
249  Q_EMIT downloadDataChanged({});
250  deleteAll();
251 }
TTK_MODULE_EXPORT QString charactersReplace(const QString &value)
virtual void downloadFinished() overridefinal
#define TTK_NETWORK_QUERY_CHECK(VALUE)
The class of the search result data item.
virtual void deleteAll()
QNetworkReply * m_reply
#define TTK_DEFAULT_STR
Definition: ttkglobal.h:276
MusicKWQueryAlbumRequest(QObject *parent=nullptr)
void downloadDataChanged(const QString &bytes)
QVariant toVariant() const
static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error=0)
#define TTK_PAGE_SIZE_30
virtual void downloadFinished() overridefinal
static constexpr const char * KW_ARTIST_ALBUM_URL
MusicKWQueryArtistAlbumRequest(QObject *parent=nullptr)
MusicSongPropertyList m_songProps
Definition: musicobject.h:314
QString makeCoverPixmapUrl(const QString &url, const QString &id)
void createResultItem(const MusicResultInfoItem &result)
#define TTK_DOT
Definition: ttkglobal.h:266
The class of the query album data from net.
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
virtual void startToPage(int offset) overridefinal
static constexpr const char * KW_SONG_LRC_URL
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:74
QNetworkAccessManager m_manager
virtual void startToPage(int offset) overridefinal
virtual void startToPage(int offset) overridefinal
bool fetchUrlPathSize(TTK::MusicSongProperty *prop, const QString &duration) const
void createAlbumItem(const MusicResultDataItem &item)
virtual void replyError(QNetworkReply::NetworkError error) override
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate) overridefinal
static constexpr const char * QUERY_KW_INTERFACE
#define TTK_SLOT
Definition: ttkqtglobal.h:177
static constexpr const char * KW_ALBUM_URL
QString makeSongArtist(const QString &name)
static constexpr const char * KW_NEW_ALBUM_URL
TTK_MODULE_EXPORT QString toString(Record type) noexcept
MusicKWQueryNewAlbumRequest(QObject *parent=nullptr)
#define TTK_DN_S2MS
Definition: ttkglobal.h:355
virtual void downloadFinished()
void makeRequestRawHeader(QNetworkRequest *request) noexcept
#define TTK_PAGE_SIZE_12
virtual void downloadFinished() overridefinal
virtual void downloadFinished() override
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:300
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.
Definition: ttkqtcompat.h:59
static qint64 formatDuration(const QString &time) noexcept
Definition: ttktime.cpp:123