TTKMusicPlayer  4.1.3.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 
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(KG_ARTIST_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__ << info->m_songId << bitrate << "kbps");
30 
35 
38 }
39 
41 {
42  TTK_INFO_STREAM(className() << __FUNCTION__);
43 
45  if(m_reply && m_reply->error() == QNetworkReply::NoError)
46  {
47  QJson::Parser json;
48  bool ok = false;
49  const QVariant &data = json.parse(m_reply->readAll(), &ok);
50  if(ok)
51  {
52  QVariantMap value = data.toMap();
53  if(value.contains("data"))
54  {
55  value = value["data"].toMap();
56  m_totalSize = value["total"].toInt();
57 
58  const QVariantList &datas = value["info"].toList();
59  for(const QVariant &var : qAsConst(datas))
60  {
61  if(var.isNull())
62  {
63  continue;
64  }
65 
66  value = var.toMap();
68 
70  info.m_songId = value["hash"].toString();
71 
72  info.m_artistId = m_queryValue;
73 
74  info.m_albumId = value["album_id"].toString();
75  info.m_albumName = TTK::String::charactersReplace(value["album_name"].toString());
76 
77  info.m_duration = TTKTime::formatDuration(value["duration"].toInt() * TTK_DN_S2MS);
78  info.m_year.clear();
79  info.m_trackNumber = "0";
80 
86 
87  if(!m_artistFound)
88  {
89  m_artistFound = true;
92  queryArtistIntro(&item);
94 
95  item.m_id = info.m_artistId;
96  item.m_name = info.m_artistName;
97  item.m_coverUrl = info.m_coverUrl;
98  Q_EMIT createArtistItem(item);
99  }
100 
101  Q_EMIT createResultItem({info, serverToString()});
102  m_items << info;
103  }
104  }
105  }
106  }
107 
108  Q_EMIT downLoadDataChanged({});
109  deleteAll();
110 }
111 
113 {
114  QNetworkRequest request;
115  request.setUrl(TTK::Algorithm::mdII(KG_ARTIST_INFO_URL, false).arg(m_queryValue));
117 
118  const QByteArray &bytes = TTK::syncNetworkQueryForGet(&request);
119  if(bytes.isEmpty())
120  {
121  return;
122  }
123 
124  QJson::Parser json;
125  bool ok = false;
126  const QVariant &data = json.parse(bytes, &ok);
127  if(ok)
128  {
129  QVariantMap value = data.toMap();
130  if(value["errcode"].toInt() == 0)
131  {
132  value = value["data"].toMap();
133 
134  item->m_nickName = value["alias"].toString();
135  item->m_description = value["intro"].toString();
136 
137  if(item->m_nickName.isEmpty())
138  {
139  item->m_nickName = TTK_DEFAULT_STR;
140  }
141  }
142  }
143 }
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()
void downLoadDataChanged(const QString &bytes)
QNetworkReply * m_reply
#define TTK_DEFAULT_STR
Definition: ttkglobal.h:203
#define ARTIST_PAGE_SIZE
static constexpr const char * QUERY_KG_INTERFACE
MusicSongPropertyList m_songProps
Definition: musicobject.h:297
virtual void downLoadFinished() overridefinal
TTK_MODULE_EXPORT QByteArray syncNetworkQueryForGet(QNetworkRequest *request)
static constexpr const char * KG_ARTIST_INFO_URL
The class of the query artist download data from net.
virtual void downLoadFinished()
void makeRequestRawHeader(QNetworkRequest *request)
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate) overridefinal
voidpf uLong offset
Definition: ioapi.h:142
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate)
TTK::MusicSongInformationList m_items
#define qAsConst
Definition: ttkqtglobal.h:51
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:68
QNetworkAccessManager m_manager
void createResultItem(const MusicResultInfoItem &songItem)
bool fetchUrlPathSize(TTK::MusicSongProperty *prop, const QString &duration) const
virtual void replyError(QNetworkReply::NetworkError error) override
QVariant parse(QIODevice *io, bool *ok=0)
Read JSON string from the I/O Device and converts it to a QVariant object.
Definition: parser.cpp:69
#define TTK_SLOT
Definition: ttkqtglobal.h:181
virtual void startToPage(int offset) overridefinal
#define TTK_DN_S2MS
Definition: ttkglobal.h:281
static constexpr const char * KG_ARTIST_URL
artist url
MusicKGQueryArtistRequest(QObject *parent=nullptr)
TTK_MODULE_EXPORT QString toString(Record type)
void queryArtistIntro(MusicResultDataItem *item) const
void parseFromSongAlbumLrc(TTK::MusicSongInformation *info)
void createArtistItem(const MusicResultDataItem &item)
Main class used to convert JSON data to QVariant objects.
Definition: parser.h:40
void parseFromSongProperty(TTK::MusicSongInformation *info, int bitrate)
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
The class of the music song information.
Definition: musicobject.h:283
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.
Definition: ttkqtcompat.h:59
static qint64 formatDuration(const QString &time) noexcept
Definition: ttktime.cpp:123