TTKMusicPlayer  4.3.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musickgqueryalbumrequest.cpp
Go to the documentation of this file.
2 
3 static constexpr const char *KG_ALBUM_URL = "SnJGeC9vRFdybkgyQnNLMUpvaFN4c0hLMDhoVW9UVmRFNExWWW9ZMk1EaEw2cGFwend6eWJEMFgzdHkxYnRFNXVYUUhaVXp4bFE4UklTWVpNZ05CY29KYUVNYzU3S3M3T1NERFpjR0JMWURYNUpOMWJMTGZmRmh0NkdjVlNhS254YUp6eUE9PQ==";
4 static constexpr const char *KG_ARTIST_ALBUM_URL = "OWJUSnVoMWRJY0FONGRTVnRoSlJ1ZkNUQjNPZnBjKzgrQzg1K0RVczJsaWprZUpXMnk1U0Z4Vm5BcXNKVlR5K0U0aWptd0hUME41eXdPa0xPMGg4Z01HTTBGVWFmTFM4WUNQaFduU3FYUXM9";
5 static constexpr const char *KG_NEW_ALBUM_URL = "RTJzNjFFRkdzNjdKTy9XcHB2enJ5amFFMUpObXpyMG05R2EyeXRFczREUWlRR3RYL3p5T3BIejArTHJFQ0QyVEdhYkIwa09KalBBdHZaclczcWFqbElmM1Fjbz0=";
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(KG_ALBUM_URL, false).arg(m_queryValue).arg(offset + 1).arg(m_pageSize));
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(), &ok);
54  {
55  QVariantMap value = json.toVariant().toMap();
56  if(value.contains("data"))
57  {
58  QString year, albumName;
59  value = value["data"].toMap();
60  m_totalSize = value["total"].toInt();
61 
62  const QVariantList &datas = value["info"].toList();
63  for(const QVariant &var : qAsConst(datas))
64  {
65  if(var.isNull())
66  {
67  continue;
68  }
69 
70  value = var.toMap();
72 
74  info.m_songId = value["hash"].toString();
75 
76  info.m_albumId = value["album_id"].toString();
77 
78  info.m_duration = TTKTime::formatDuration(value["duration"].toInt() * TTK_DN_S2MS);
79  info.m_trackNumber = "0";
80 
86 
87  if(!m_albumFound)
88  {
89  m_albumFound = true;
92  ReqKGInterface::parseFromSongAlbumInfo(&item, info.m_songId, value["album_audio_id"].toString());
94 
95  albumName = item.m_name;
96  year = item.m_time.section(TTK_DEFAULT_STR, 0, 0);
97 
98  item.m_count = item.m_name;
99  item.m_id = info.m_albumId;
100  item.m_name = info.m_artistName;
101  item.m_coverUrl = info.m_coverUrl;
102  Q_EMIT createAlbumItem(item);
103  }
104 
105  if(info.m_songName.isEmpty())
106  {
107  continue;
108  }
109 
110  info.m_year = year;
111  info.m_albumName = albumName;
112  Q_EMIT createResultItem({info, serverToString()});
113  m_items << info;
114  }
115  }
116  }
117  }
118 
119  Q_EMIT downloadDataChanged({});
120  deleteAll();
121 }
122 
123 
124 
126  : MusicQueryAlbumRequest(parent)
127 {
130 }
131 
133 {
134  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__ << offset);
135 
136  deleteAll();
137  m_totalSize = 0;
139 
140  QNetworkRequest request;
141  request.setUrl(TTK::Algorithm::mdII(KG_ARTIST_ALBUM_URL, false).arg(m_queryValue).arg(offset + 1).arg(m_pageSize));
143 
144  m_reply = m_manager.get(request);
145  connect(m_reply, SIGNAL(finished()), SLOT(downloadFinished()));
147 }
148 
150 {
151  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__);
152 
154  if(m_reply && m_reply->error() == QNetworkReply::NoError)
155  {
156  QJsonParseError ok;
157  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll(), &ok);
159  {
160  QVariantMap value = json.toVariant().toMap();
161  if(value["errcode"].toInt() == 0 && value.contains("data"))
162  {
163  value = value["data"].toMap();
164  m_totalSize = value["total"].toInt();
165 
166  const QVariantList &datas = value["info"].toList();
167  for(const QVariant &var : qAsConst(datas))
168  {
169  if(var.isNull())
170  {
171  continue;
172  }
173 
174  value = var.toMap();
176 
177  MusicResultDataItem item;
178  item.m_id = value["albumid"].toString();
179  item.m_name = value["albumname"].toString();
180  item.m_coverUrl = value["imgurl"].toString().replace("{size}", "500");
181  item.m_time = value["publishtime"].toString().replace(TTK_DEFAULT_STR, TTK_DOT).section(TTK_SPACE, 0, 0);
182  Q_EMIT createAlbumItem(item);
183  }
184  }
185  }
186  }
187 
188  Q_EMIT downloadDataChanged({});
189  deleteAll();
190 }
191 
192 
193 
195  : MusicQueryAlbumRequest(parent)
196 {
199 }
200 
202 {
203  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__ << offset);
204 
205  deleteAll();
207 
208  QNetworkRequest request;
209  request.setUrl(TTK::Algorithm::mdII(KG_NEW_ALBUM_URL, false).arg(offset + 1).arg(m_pageSize));
211 
212  m_reply = m_manager.get(request);
213  connect(m_reply, SIGNAL(finished()), SLOT(downloadFinished()));
215 }
216 
218 {
219  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__);
220 
222  if(m_reply && m_reply->error() == QNetworkReply::NoError)
223  {
224  QJsonParseError ok;
225  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll(), &ok);
227  {
228  QVariantMap value = json.toVariant().toMap();
229  if(value["errcode"].toInt() == 0 && value.contains("data"))
230  {
231  value = value["data"].toMap();
232  m_totalSize = value["total"].toInt();
233 
234  const QVariantList &datas = value["info"].toList();
235  for(const QVariant &var : qAsConst(datas))
236  {
237  if(var.isNull())
238  {
239  continue;
240  }
241 
242  value = var.toMap();
244 
245  MusicResultDataItem item;
246  item.m_id = value["albumid"].toString();
247  item.m_name = value["albumname"].toString();
248  item.m_coverUrl = value["imgurl"].toString().replace("{size}", "500");
249  item.m_nickName = value["singername"].toString();
250  Q_EMIT createAlbumItem(item);
251  }
252  }
253  }
254  }
255 
256  Q_EMIT downloadDataChanged({});
257  deleteAll();
258 }
#define TTK_NETWORK_QUERY_CHECK(VALUE)
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate) overridefinal
The class of the search result data item.
virtual void deleteAll()
QNetworkReply * m_reply
#define TTK_DEFAULT_STR
Definition: ttkglobal.h:276
void downloadDataChanged(const QString &bytes)
QVariant toVariant() const
static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error=0)
static constexpr const char * QUERY_KG_INTERFACE
#define TTK_PAGE_SIZE_30
static constexpr const char * KG_NEW_ALBUM_URL
virtual void downloadFinished() overridefinal
MusicSongPropertyList m_songProps
Definition: musicobject.h:314
void createResultItem(const MusicResultInfoItem &result)
#define TTK_DOT
Definition: ttkglobal.h:266
The class of the query album data from net.
virtual void startToPage(int offset) overridefinal
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
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:74
MusicKGQueryAlbumRequest(QObject *parent=nullptr)
QNetworkAccessManager m_manager
virtual void startToPage(int offset) overridefinal
MusicKGQueryNewAlbumRequest(QObject *parent=nullptr)
bool fetchUrlPathSize(TTK::MusicSongProperty *prop, const QString &duration) const
void createAlbumItem(const MusicResultDataItem &item)
virtual void replyError(QNetworkReply::NetworkError error) override
#define TTK_SLOT
Definition: ttkqtglobal.h:177
MusicKGQueryArtistAlbumRequest(QObject *parent=nullptr)
#define TTK_DN_S2MS
Definition: ttkglobal.h:355
virtual void downloadFinished()
virtual void downloadFinished() overridefinal
void parseFromSongAlbumLrc(TTK::MusicSongInformation *info)
#define TTK_PAGE_SIZE_12
virtual void downloadFinished() override
virtual void downloadFinished() overridefinal
void parseFromSongAlbumInfo(TTK::MusicSongInformation *info, const QString &album)
static constexpr const char * KG_ALBUM_URL
void parseFromSongProperty(TTK::MusicSongInformation *info, int bitrate)
void makeRequestRawHeader(QNetworkRequest *request) noexcept
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
#define TTK_SPACE
Definition: ttkglobal.h:268
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 constexpr const char * KG_ARTIST_ALBUM_URL
static qint64 formatDuration(const QString &time) noexcept
Definition: ttktime.cpp:123