TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musickwqueryinterface.cpp
Go to the documentation of this file.
2 #include "musicabstractnetwork.h"
3 
5 
6 void ReqKWInterface::makeRequestRawHeader(QNetworkRequest *request)
7 {
11 }
12 
13 QString ReqKWInterface::makeSongArtist(const QString &name)
14 {
15  return TTK::String::charactersReplace(name).replace("&", ";").replace("+", ";");
16 }
17 
18 QString ReqKWInterface::makeCoverPixmapUrl(const QString &url, const QString &id)
19 {
20  if(url.isEmpty() && !id.isEmpty())
21  {
22  return TTK::Algorithm::mdII(KW_ALBUM_COVER_INFO_URL, false).arg(id);
23  }
24  else if(!TTK::String::isNetworkUrl(url))
25  {
26  return TTK::Algorithm::mdII(KW_ALBUM_COVER_URL, false) + url.section('/', 1);
27  }
28  else
29  {
30  return url;
31  }
32 }
33 
35 {
36  for(const TTK::MusicSongProperty &prop : qAsConst(info->m_songProps))
37  {
38  if(prop.m_bitrate == TTK_BN_128)
39  {
40  return;
41  }
42  }
43 
44  QNetworkRequest request;
45  request.setUrl(TTK::Algorithm::mdII(KW_SONG_DETAIL_CGG_URL, false).arg(info->m_songId));
47 
48  const QByteArray &bytes = TTK::syncNetworkQueryForGet(&request);
49  if(bytes.isEmpty())
50  {
51  return;
52  }
53 
55  prop.m_bitrate = TTK_BN_128;
57  prop.m_size = TTK_DEFAULT_STR;
58  prop.m_url = bytes;
59  info->m_songProps.append(prop);
60 }
61 
62 static void parseSongProperty(TTK::MusicSongInformation *info, const QString &suffix, const QString &bitrate, QString &url)
63 {
64  QNetworkRequest request;
65  request.setUrl(TTK::Algorithm::mdII(KW_SONG_DETAIL_URL, false).arg(info->m_songId, bitrate));
67 
68  const QByteArray &bytes = TTK::syncNetworkQueryForGet(&request);
69  if(bytes.isEmpty())
70  {
71  return;
72  }
73 
74  QJson::Parser json;
75  bool ok = false;
76  const QVariant &data = json.parse(bytes, &ok);
77  if(ok)
78  {
79  QVariantMap value = data.toMap();
80  if(value["code"].toInt() == 200 && value.contains("data"))
81  {
82  value = value["data"].toMap();
83  if(value.isEmpty())
84  {
85  return;
86  }
87 
88  const QString &format = value["format"].toString();
89  if(format == suffix)
90  {
91  url = value["url"].toString();
92  }
93  }
94  }
95 }
96 
97 static void parseSongProperty(TTK::MusicSongInformation *info, const QString &suffix, const QString &format, int bitrate)
98 {
99  for(const TTK::MusicSongProperty &prop : qAsConst(info->m_songProps))
100  {
101  if(prop.m_bitrate == bitrate)
102  {
103  return;
104  }
105  }
106 
108  prop.m_bitrate = bitrate;
109  prop.m_format = suffix;
110  prop.m_size = TTK_DEFAULT_STR;
111 
112  if((format.contains("MP3128") || format.contains("128kmp3")) && bitrate == TTK_BN_128)
113  {
114  parseSongProperty(info, suffix, "128kmp3", prop.m_url);
115  }
116  else if((format.contains("MP3192") || format.contains("192kmp3")) && bitrate == TTK_BN_192)
117  {
118  parseSongProperty(info, suffix, "192kmp3", prop.m_url);
119  }
120  else if((format.contains("MP3H") || format.contains("320kmp3")) && bitrate == TTK_BN_320 )
121  {
122  parseSongProperty(info, suffix, "320kmp3", prop.m_url);
123  }
124  else if((format.contains("FLAC") || format.contains("2000kflac")) && bitrate == TTK_BN_1000)
125  {
126  parseSongProperty(info, suffix, "2000kflac", prop.m_url);
127  }
128 
129  if(!prop.isEmpty())
130  {
131  info->m_songProps.append(prop);
132  }
133 }
134 
136 {
137  if(info->m_songId.isEmpty())
138  {
139  return;
140  }
141 
142  if(info->m_formatProps.isEmpty())
143  {
144  parseSongProperty(info); //find 128kmp3 first
145  parseSongProperty(info, MP3_FILE_SUFFIX, "128kmp3", TTK_BN_128);
146  return;
147  }
148 
149  if(bitrate == TTK_BN_0)
150  {
151  parseSongProperty(info); //find 128kmp3 first
156  }
157  else
158  {
159  if(bitrate == TTK_BN_128)
160  {
161  parseSongProperty(info); //find 128kmp3 first
162  }
163  parseSongProperty(info, bitrate > TTK_BN_320 ? FLAC_FILE_SUFFIX : MP3_FILE_SUFFIX, info->m_formatProps, bitrate);
164  }
165 }
166 
168 {
169  info->m_formatProps = format;
170 }
TTK_MODULE_EXPORT QString charactersReplace(const QString &value)
#define TTK_DEFAULT_STR
Definition: ttkglobal.h:200
TTK_MODULE_EXPORT void makeUserAgentHeader(QNetworkRequest *request, const QByteArray &data={})
The class of the music song property.
Definition: musicobject.h:223
static constexpr const char * KW_ALBUM_COVER_URL
TTK_MODULE_EXPORT void setSslConfiguration(QNetworkRequest *request, QSslSocket::PeerVerifyMode mode=QSslSocket::VerifyNone)
static constexpr const char * KW_ALBUM_COVER_INFO_URL
MusicSongPropertyList m_songProps
Definition: musicobject.h:295
QString makeCoverPixmapUrl(const QString &url, const QString &id)
TTK_MODULE_EXPORT QByteArray syncNetworkQueryForGet(QNetworkRequest *request)
#define TTK_BN_1000
Definition: ttkglobal.h:354
void makeRequestRawHeader(QNetworkRequest *request)
#define MP3_FILE_SUFFIX
Definition: musicobject.h:50
#define qAsConst
Definition: ttkqtglobal.h:53
const char * name
Definition: http_parser.c:458
TTK_MODULE_EXPORT QString suffix(const QString &name)
static void parseSongProperty(TTK::MusicSongInformation *info)
bool isEmpty() const noexcept
Definition: musicobject.h:236
#define TTK_BN_0
Definition: ttkglobal.h:344
#define TTK_BN_320
Definition: ttkglobal.h:351
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
QString makeSongArtist(const QString &name)
TTK_MODULE_EXPORT void makeContentTypeHeader(QNetworkRequest *request, const QByteArray &data={})
static constexpr const char * KW_SONG_DETAIL_CGG_URL
static constexpr const char * KW_SONG_DETAIL_URL
Main class used to convert JSON data to QVariant objects.
Definition: parser.h:40
#define TTK_BN_192
Definition: ttkglobal.h:349
#define FLAC_FILE_SUFFIX
Definition: musicobject.h:52
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:281
TTK_MODULE_EXPORT bool isNetworkUrl(const QString &path)
#define TTK_BN_128
Definition: ttkglobal.h:348