TTKMusicPlayer  4.3.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musickgqueryartistrequest.cpp
Go to the documentation of this file.
2 
3 static constexpr const char *KG_ARTIST_URL = "WnFuNGZxOVZEZEpYekZJOEhhZzFuOENvbURCMFlBNGFlbzJhMUxMY3hSQUg3S3VyMEJRQ1BkVEJqUmJVKytmaW9vTWFUeEtvZjkvVW9HeTZDdTBTanVKeDNNU1B4aC8zSGZaZXRsYnBhNGwyYkd0anFBc2JyRS9Ebks4NlZJRjJGSTBobnlMZklvT3pYVTBHNlhRdXNRPT0=";
4 static constexpr const char *KG_ARTIST_INFO_URL = "ZVl0R25mTkNsQUVIbnVKaXMzU3pvSXNFOVRqZWh2Nm5RSTFPMHNBTkpLYS9ldjVpRysyT3lYbEQ4bUtKUFNHWGZmVlJsZzBaZmMzTFJDUzdvMEhIQTF6cHVQblVNazNYUUpDN2xQbVpZZVU9";
5 
8 {
11 }
12 
14 {
15  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__ << offset);
16 
17  deleteAll();
18  m_totalSize = 0;
20 
21  QNetworkRequest request;
22  request.setUrl(TTK::Algorithm::mdII(KG_ARTIST_URL, false).arg(m_queryValue).arg(offset + 1).arg(m_pageSize));
24 
25  m_reply = m_manager.get(request);
26  connect(m_reply, SIGNAL(finished()), SLOT(downloadFinished()));
28 }
29 
31 {
32  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__ << info->m_songId << bitrate << "kbps");
33 
38 
41 }
42 
44 {
45  TTK_INFO_STREAM(metaObject()->className() << __FUNCTION__);
46 
48  if(m_reply && m_reply->error() == QNetworkReply::NoError)
49  {
50  QJsonParseError ok;
51  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll(), &ok);
53  {
54  QVariantMap value = json.toVariant().toMap();
55  if(value.contains("data"))
56  {
57  value = value["data"].toMap();
58  m_totalSize = value["total"].toInt();
59 
60  const QVariantList &datas = value["info"].toList();
61  for(const QVariant &var : qAsConst(datas))
62  {
63  if(var.isNull())
64  {
65  continue;
66  }
67 
68  value = var.toMap();
70 
72  info.m_songId = value["hash"].toString();
73 
74  info.m_artistId = m_queryValue;
75 
76  info.m_albumId = value["album_id"].toString();
77  info.m_albumName = TTK::String::charactersReplace(value["album_name"].toString());
78 
79  info.m_duration = TTKTime::formatDuration(value["duration"].toInt() * TTK_DN_S2MS);
80  info.m_year = value["publish_date"].toString().section(TTK_DEFAULT_STR, 0, 0);
81  info.m_trackNumber = "0";
82 
88 
89  if(!m_artistFound)
90  {
91  m_artistFound = true;
92 
94  item.m_id = info.m_artistId;
95  item.m_name = info.m_artistName;
96  item.m_coverUrl = info.m_coverUrl;
97 
99  queryArtistIntro(&item);
101  Q_EMIT createArtistItem(item);
102  }
103 
104  Q_EMIT createResultItem({info, serverToString()});
105  m_items << info;
106  }
107  }
108  }
109  }
110 
111  Q_EMIT downloadDataChanged({});
112  deleteAll();
113 }
114 
116 {
117  QNetworkRequest request;
118  request.setUrl(TTK::Algorithm::mdII(KG_ARTIST_INFO_URL, false).arg(m_queryValue));
120 
121  const QByteArray &bytes = TTK::syncNetworkQueryForGet(&request);
122  if(bytes.isEmpty())
123  {
124  return;
125  }
126 
127  QJsonParseError ok;
128  const QJsonDocument &json = QJsonDocument::fromJson(bytes, &ok);
130  {
131  QVariantMap value = json.toVariant().toMap();
132  if(value["errcode"].toInt() == 0)
133  {
134  value = value["data"].toMap();
135 
136  item->m_nickName = value["alias"].toString();
137  item->m_description = value["intro"].toString();
138 
139  if(item->m_nickName.isEmpty())
140  {
141  item->m_nickName = item->m_name;
142  }
143  }
144  }
145 }
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()
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
MusicSongPropertyList m_songProps
Definition: musicobject.h:314
void createResultItem(const MusicResultInfoItem &result)
TTK_MODULE_EXPORT QByteArray syncNetworkQueryForGet(QNetworkRequest *request)
The class of the query artist data from net.
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate) 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
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:74
QNetworkAccessManager m_manager
static constexpr const char * KG_ARTIST_INFO_URL
bool fetchUrlPathSize(TTK::MusicSongProperty *prop, const QString &duration) const
virtual void replyError(QNetworkReply::NetworkError error) override
#define TTK_SLOT
Definition: ttkqtglobal.h:177
virtual void startToPage(int offset) overridefinal
TTK_MODULE_EXPORT QString toString(Record type) noexcept
#define TTK_DN_S2MS
Definition: ttkglobal.h:355
#define TTK_PAGE_SIZE_50
virtual void downloadFinished()
MusicKGQueryArtistRequest(QObject *parent=nullptr)
static constexpr const char * KG_ARTIST_URL
void queryArtistIntro(MusicResultDataItem *item) const
void parseFromSongAlbumLrc(TTK::MusicSongInformation *info)
void createArtistItem(const MusicResultDataItem &item)
void parseFromSongProperty(TTK::MusicSongInformation *info, int bitrate)
void makeRequestRawHeader(QNetworkRequest *request) noexcept
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
The class of the music song information.
Definition: musicobject.h:300
virtual void downloadFinished() overridefinal
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.
Definition: ttkqtcompat.h:59
static qint64 formatDuration(const QString &time) noexcept
Definition: ttktime.cpp:123