TTKMusicPlayer  4.3.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicwyqueryalbumrequest.cpp
Go to the documentation of this file.
2 
3 static constexpr const char *WY_ALBUM_URL = "QzJrMDNKTGlpVHpvY2taYm5BSWZGVTZWM09xYW5STDdXRFE5eTEzczhLZHB1RWljWlIxOVhRUXVDcmpuVjJsQnhqcmZRZE9UU0JZPQ==";
4 static constexpr const char *WY_ARTIST_ALBUM_URL = "dEJpSTdiaUh3R1hnRGVDUlpCNzJKRnBqNWZHY2xLVmhUcWQ0WW1PUVY0NjlONmRvMmtGaWZiMDBscjAvd0dxZg==";
5 static constexpr const char *WY_ARTIST_ALBUM_DATA_URL = "Smx6dWVoWEJJOGEvdlZvRTNtcUFEVEJzWjI5NzB4bUM1anV4Z2lXa1N4RHRtTW5ZRllEeGpHSzN0VmxTTzJ4ZU93dW9Edz09";
6 static constexpr const char *WY_NEW_ALBUM_URL = "VC9sOTJXRzdLc0dYWWVtbmdsSUJnNFlYeDFqZ2gyd3Y5c1ZNdjBEeldpR25qSExSWWJqdVRkWmdoSmM9";
7 static constexpr const char *WY_NEW_ALBUM_DATA_URL = "N1VpQldOeUpVZFp3REZNczdrOHZXK0JpbjJkYjEveENIQmdaYlNhOWkyWUlrRWVYSnhCZTdBRS9SenFVVG11d0JHVXZ0NW1kTEdaeG4xeFc=";
8 
10  : MusicQueryAlbumRequest(parent)
11 {
14 }
15 
17 {
18  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__ << offset);
19 
20  deleteAll();
21  m_totalSize = 0;
23 
24  QNetworkRequest request;
25  const QByteArray &parameter = ReqWYInterface::makeTokenRequest(&request,
27  QString("{}"));
28 
29  m_reply = m_manager.post(request, parameter);
30  connect(m_reply, SIGNAL(finished()), SLOT(downloadFinished()));
32 }
33 
35 {
36  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__ << info->m_songId << bitrate << "kbps");
37 
42 
45 }
46 
48 {
49  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__);
50 
52  if(m_reply && m_reply->error() == QNetworkReply::NoError)
53  {
54  QJsonParseError ok;
55  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll(), &ok);
57  {
58  QVariantMap value = json.toVariant().toMap();
59  if(value["code"].toInt() == 200 && value.contains("album"))
60  {
62  const QVariantMap &albumValue = value["album"].toMap();
63  item.m_coverUrl = albumValue["picUrl"].toString();
64  item.m_count = albumValue["name"].toString();
65  item.m_description = albumValue["company"].toString();
66  item.m_time = TTKDateTime::format(albumValue["publishTime"].toULongLong(), TTK_DATE_FORMAT);
67  item.m_category = albumValue["language"].toString();
68 
69  const QString &time = TTKDateTime::format(albumValue["publishTime"].toULongLong(), TTK_YEAR_FORMAT);
70  const QVariantList &datas = value["songs"].toList();
71  for(const QVariant &var : qAsConst(datas))
72  {
73  if(var.isNull())
74  {
75  continue;
76  }
77 
78  value = var.toMap();
80 
82  info.m_songId = value["id"].toString();
83  info.m_songName = TTK::String::charactersReplace(value["name"].toString());
84 
85  const QVariantList &artistsArray = value["ar"].toList();
86  for(const QVariant &artistValue : qAsConst(artistsArray))
87  {
88  if(artistValue.isNull())
89  {
90  continue;
91  }
92 
93  const QVariantMap &artistObject = artistValue.toMap();
94  if(info.m_artistId.isEmpty())
95  {
96  info.m_artistId = artistObject["id"].toString();
97  }
98 
99  info.m_artistName = ReqWYInterface::makeSongArtist(info.m_artistName, artistObject["name"].toString());
100  }
101 
102  const QVariantMap &albumObject = value["al"].toMap();
103  info.m_albumId = albumObject["id"].toString();
104  info.m_albumName = TTK::String::charactersReplace(albumObject["name"].toString());
105 
106  info.m_coverUrl = item.m_coverUrl;
108  info.m_duration = TTKTime::formatDuration(value["dt"].toInt());
109  info.m_year = time;
110  info.m_trackNumber = value["no"].toString();
111 
115 
116  if(!m_albumFound)
117  {
118  m_albumFound = true;
119  item.m_id = info.m_albumId;
120  item.m_name = info.m_artistName;
121  Q_EMIT createAlbumItem(item);
122  }
123 
124  Q_EMIT createResultItem({info, serverToString()});
125  m_items << info;
126  }
127  }
128  }
129  }
130 
131  Q_EMIT downloadDataChanged({});
132  deleteAll();
133 }
134 
135 
136 
138  : MusicQueryAlbumRequest(parent)
139 {
142 }
143 
145 {
146  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__ << offset);
147 
148  deleteAll();
149  m_totalSize = 0;
151 
152  QNetworkRequest request;
153  const QByteArray &parameter = ReqWYInterface::makeTokenRequest(&request,
156 
157  m_reply = m_manager.post(request, parameter);
158  connect(m_reply, SIGNAL(finished()), SLOT(downloadFinished()));
160 }
161 
163 {
164  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__);
165 
167  if(m_reply && m_reply->error() == QNetworkReply::NoError)
168  {
169  QJsonParseError ok;
170  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll(), &ok);
172  {
173  QVariantMap value = json.toVariant().toMap();
174  if(value["code"].toInt() == 200 && value.contains("hotAlbums"))
175  {
176  const QVariantMap &artistValue = value["artist"].toMap();
177  m_totalSize = artistValue["albumSize"].toInt();
178 
179  const QVariantList &datas = value["hotAlbums"].toList();
180  for(const QVariant &var : qAsConst(datas))
181  {
182  if(var.isNull())
183  {
184  continue;
185  }
186 
187  value = var.toMap();
189 
190  MusicResultDataItem item;
191  item.m_id = value["id"].toString();
192  item.m_name = value["name"].toString();
193  item.m_coverUrl = value["picUrl"].toString();
194  item.m_time = TTKDateTime::format(value["publishTime"].toULongLong(), TTK_DATE2_FORMAT);
195  Q_EMIT createAlbumItem(item);
196  }
197  }
198  }
199  }
200 
201  Q_EMIT downloadDataChanged({});
202  deleteAll();
203 }
204 
205 
206 
208  : MusicQueryAlbumRequest(parent)
209 {
212 }
213 
215 {
216  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__ << offset);
217 
218  deleteAll();
220 
221  QNetworkRequest request;
222  const QByteArray &parameter = ReqWYInterface::makeTokenRequest(&request,
224  TTK::Algorithm::mdII(WY_NEW_ALBUM_DATA_URL, false).arg(m_queryValue).arg(offset).arg(m_pageSize));
225 
226  m_reply = m_manager.post(request, parameter);
227  connect(m_reply, SIGNAL(finished()), SLOT(downloadFinished()));
229 }
230 
232 {
233  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__);
234 
236  if(m_reply && m_reply->error() == QNetworkReply::NoError)
237  {
238  QJsonParseError ok;
239  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll(), &ok);
241  {
242  QVariantMap value = json.toVariant().toMap();
243  if(value["code"].toInt() == 200 && value.contains("albums"))
244  {
245  m_totalSize = value["total"].toInt();
246 
247  const QVariantList &datas = value["albums"].toList();
248  for(const QVariant &var : qAsConst(datas))
249  {
250  if(var.isNull())
251  {
252  continue;
253  }
254 
255  value = var.toMap();
257 
258  MusicResultDataItem item;
259  item.m_id = value["id"].toString();
260  item.m_name = TTK::String::charactersReplace(value["name"].toString());
261  item.m_coverUrl = value["picUrl"].toString();
262  item.m_nickName.clear();
263 
264  const QVariantList &artistsArray = value["artists"].toList();
265  for(const QVariant &artistValue : qAsConst(artistsArray))
266  {
267  if(artistValue.isNull())
268  {
269  continue;
270  }
271 
272  const QVariantMap &artistObject = artistValue.toMap();
273  item.m_nickName = ReqWYInterface::makeSongArtist(item.m_nickName, artistObject["name"].toString());
274  }
275  Q_EMIT createAlbumItem(item);
276  }
277  }
278  }
279  }
280 
281  Q_EMIT downloadDataChanged({});
282  deleteAll();
283 }
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()
virtual void downloadFinished() overridefinal
QNetworkReply * m_reply
virtual void startToPage(int offset) overridefinal
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate) overridefinal
void downloadDataChanged(const QString &bytes)
MusicWYQueryAlbumRequest(QObject *parent=nullptr)
QVariant toVariant() const
static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error=0)
static constexpr const char * WY_ARTIST_ALBUM_URL
#define TTK_PAGE_SIZE_30
QString makeSongArtist(const QString &in, const QString &name)
MusicSongPropertyList m_songProps
Definition: musicobject.h:314
void createResultItem(const MusicResultInfoItem &result)
MusicWYQueryNewAlbumRequest(QObject *parent=nullptr)
virtual void downloadFinished() overridefinal
The class of the query album data from net.
#define TTK_YEAR_FORMAT
Definition: ttkglobal.h:305
virtual void startToPage(int offset) overridefinal
voidpf uLong offset
Definition: ioapi.h:142
static constexpr const char * WY_NEW_ALBUM_DATA_URL
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate)
ParseError error
TTK::MusicSongInformationList m_items
#define qAsConst
Definition: ttkqtglobal.h:57
static constexpr const char * QUERY_WY_INTERFACE
#define TTK_DATE2_FORMAT
Definition: ttkglobal.h:310
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:74
static constexpr const char * WY_NEW_ALBUM_URL
static constexpr const char * WY_SONG_LRC_OLD_URL
QNetworkAccessManager m_manager
bool fetchUrlPathSize(TTK::MusicSongProperty *prop, const QString &duration) const
virtual void downloadFinished() overridefinal
void createAlbumItem(const MusicResultDataItem &item)
virtual void replyError(QNetworkReply::NetworkError error) override
#define TTK_SLOT
Definition: ttkqtglobal.h:177
static constexpr const char * WY_ARTIST_ALBUM_DATA_URL
#define TTK_DATE_FORMAT
Definition: ttkglobal.h:309
static constexpr const char * WY_ALBUM_URL
void parseFromSongProperty(TTK::MusicSongInformation *info, int bitrate)
TTK_MODULE_EXPORT QString toString(Record type) noexcept
virtual void downloadFinished()
virtual void startToPage(int offset) overridefinal
#define TTK_PAGE_SIZE_12
MusicWYQueryArtistAlbumRequest(QObject *parent=nullptr)
virtual void downloadFinished() override
static QString format(const QString &time, const QString &format)
Definition: ttktime.cpp:254
QByteArray makeTokenRequest(QNetworkRequest *request, const QString &query, const QString &data)
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
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