TTKMusicPlayer  4.3.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musickwdownloadtextrequest.cpp
Go to the documentation of this file.
2 
3 MusicKWDownloadTextRequest::MusicKWDownloadTextRequest(const QString &url, const QString &path, QObject *parent)
4  : MusicAbstractDownloadRequest(url, path, TTK::Download::Lrc, parent)
5 {
6 
7 }
8 
10 {
11  if(!m_file || (m_file->exists() && m_file->size() >= 4) || !m_file->open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text) || m_url.isEmpty())
12  {
13  Q_EMIT downloadDataChanged("The kuwo text file create failed");
14  TTK_ERROR_STREAM(metaObject()->className() << "file create failed");
15  deleteAll();
16  return;
17  }
18 
19  m_speedTimer.start();
20 
21  QNetworkRequest request;
22  request.setUrl(m_url);
23  TTK::setSslConfiguration(&request);
24  TTK::setContentTypeHeader(&request);
25 
26  m_reply = m_manager.get(request);
27  connect(m_reply, SIGNAL(finished()), SLOT(downloadFinished()));
28  connect(m_reply, SIGNAL(downloadProgress(qint64, qint64)), SLOT(downloadProgress(qint64, qint64)));
30 }
31 
33 {
35  if(m_reply && m_file && m_reply->error() == QNetworkReply::NoError)
36  {
37  QJsonParseError ok;
38  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll(), &ok);
40  {
41  QString lrcData;
42  QVariantMap value = json.toVariant().toMap();
43  if(value.contains("data"))
44  {
45  value = value["data"].toMap();
46 
47  const QVariantList &datas = value["lrclist"].toList();
48  for(const QVariant &var : qAsConst(datas))
49  {
50  value = var.toMap();
52 
53  lrcData.append(TTKTime(value["time"].toDouble() * 1000).toString("[mm:ss.zzz]"))
54  .append(value["lineLyric"].toByteArray()).append(TTK_LINEFEED);
55  }
56  }
57 
58  QTextStream outstream(m_file);
59 #if TTK_QT_VERSION_CHECK(6,0,0)
60  outstream.setEncoding(QStringConverter::Utf8);
61 #else
62  outstream.setCodec("UTF-8");
63 #endif
64  outstream << lrcData;
65  outstream << QtNamespace(endl);
66  m_file->close();
67  TTK_INFO_STREAM(metaObject()->className() << "download has finished");
68  }
69  else
70  {
71  TTK_ERROR_STREAM(metaObject()->className() << "download file error");
72  m_file->remove();
73  m_file->close();
74  }
75  }
76 
78  deleteAll();
79 }
MusicKWDownloadTextRequest(const QString &url, const QString &path, QObject *parent=nullptr)
#define TTK_NETWORK_QUERY_CHECK(VALUE)
TTK_MODULE_EXPORT void setSslConfiguration(QNetworkRequest *request, QSslSocket::PeerVerifyMode mode=QSslSocket::VerifyNone) noexcept
QNetworkReply * m_reply
void downloadDataChanged(const QString &bytes)
QVariant toVariant() const
static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error=0)
ParseError error
#define qAsConst
Definition: ttkqtglobal.h:57
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:74
The namespace of the application object.
Definition: ttkcompat.h:24
QNetworkAccessManager m_manager
virtual void downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
TTK_MODULE_EXPORT void setContentTypeHeader(QNetworkRequest *request, const QByteArray &data={}) noexcept
virtual void replyError(QNetworkReply::NetworkError error) override
#define TTK_SLOT
Definition: ttkqtglobal.h:177
#define QtNamespace(p)
Qt use namespace.
Definition: ttkqtcompat.h:129
TTK_MODULE_EXPORT QString toString(Record type) noexcept
The class of the ttk time object.
Definition: ttktime.h:28
The class of the abstract download data.
#define TTK_LINEFEED
Definition: ttkglobal.h:271
virtual void downloadFinished() overridefinal
#define TTK_ERROR_STREAM(msg)
Definition: ttklogger.h:76
virtual void deleteAll() overridefinal
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.
Definition: ttkqtcompat.h:59
virtual void startToRequest() overridefinal