TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musickwcoverrequest.cpp
Go to the documentation of this file.
1 #include "musickwcoverrequest.h"
4 
6  : MusicCoverRequest(parent),
7  m_decodeUrl(false)
8 {
9 
10 }
11 
13 {
14  if(url.isEmpty() || url == "NO_PIC")
15  {
16  deleteLater();
17  return;
18  }
19 
21 
23  connect(d, SIGNAL(downLoadRawDataChanged(QByteArray)), SLOT(downLoadFinished(QByteArray)));
24  d->startToRequest(url);
25 }
26 
28 {
30 }
31 
32 void MusicKWCoverSourceRequest::downLoadFinished(const QByteArray &bytes)
33 {
35 
36  if(m_decodeUrl)
37  {
38  startToRequest(bytes);
39  m_decodeUrl = false;
40  }
41  else
42  {
43  Q_EMIT downLoadRawDataChanged(bytes);
44  deleteLater();
45  }
46 }
47 
48 
49 MusicKWDownLoadCoverRequest::MusicKWDownLoadCoverRequest(const QString &url, const QString &path, QObject *parent)
50  : MusicAbstractDownLoadRequest(url, path, TTK::Download::Cover, parent)
51 {
52 
53 }
54 
56 {
57  if(!m_file || (m_file->exists() && m_file->size() >= 4) || !m_file->open(QIODevice::WriteOnly) || m_url.isEmpty())
58  {
59  Q_EMIT downLoadDataChanged("The kuwo cover file create failed");
60  TTK_ERROR_STREAM(className() << "file create failed");
61  deleteAll();
62  return;
63  }
64 
66  {
67  QNetworkRequest request;
68  request.setUrl(m_url);
70 
71  const QByteArray &bytes = TTK::syncNetworkQueryForGet(&request);
72  if(bytes.isEmpty())
73  {
74  Q_EMIT downLoadDataChanged("The kuwo cover url redirection failed");
75  TTK_ERROR_STREAM(className() << "url redirection failed");
76  deleteAll();
77  return;
78  }
79 
80  m_url = bytes;
81  }
82 
83  m_speedTimer.start();
84 
85  QNetworkRequest request;
86  request.setUrl(m_url);
87  TTK::setSslConfiguration(&request);
89 
90  m_reply = m_manager.get(request);
91  connect(m_reply, SIGNAL(finished()), SLOT(downLoadFinished()));
92  connect(m_reply, SIGNAL(downloadProgress(qint64, qint64)), SLOT(downloadProgress(qint64, qint64)));
94 }
95 
97 {
99  if(m_reply && m_file && m_reply->error() == QNetworkReply::NoError)
100  {
101  m_file->write(m_reply->readAll());
102  m_file->flush();
103  m_file->close();
104  TTK_INFO_STREAM(className() << "download has finished");
105  }
106 
108  deleteAll();
109 }
void downLoadDataChanged(const QString &bytes)
virtual void downLoadFinished() overridefinal
The class of the abstract download data.
QNetworkReply * m_reply
void downLoadRawDataChanged(const QByteArray &bytes)
virtual void downLoadFinished() overridefinal
virtual void startToRequest() overridefinal
TTK_MODULE_EXPORT void setSslConfiguration(QNetworkRequest *request, QSslSocket::PeerVerifyMode mode=QSslSocket::VerifyNone)
static constexpr const char * KW_ALBUM_COVER_INFO_URL
#define TTK_ITEM_SIZE_S
Definition: ttkglobal.h:241
TTK_MODULE_EXPORT QByteArray syncNetworkQueryForGet(QNetworkRequest *request)
void makeRequestRawHeader(QNetworkRequest *request)
virtual void downLoadFinished()
virtual void downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:67
The namespace of the process utils.
Definition: ttkcompat.h:24
The class of the data source download request.
QNetworkAccessManager m_manager
virtual void replyError(QNetworkReply::NetworkError error) override
#define TTK_SLOT
Definition: ttkqtglobal.h:165
void startToRequest(const QString &url)
TTK_MODULE_EXPORT void makeContentTypeHeader(QNetworkRequest *request, const QByteArray &data={})
MusicKWCoverSourceRequest(QObject *parent=nullptr)
virtual void deleteAll() overridefinal
The class of the cover data download request.
MusicKWDownLoadCoverRequest(const QString &url, const QString &path, QObject *parent=nullptr)
#define TTK_ERROR_STREAM(msg)
Definition: ttklogger.h:69
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.
Definition: ttkqtcompat.h:59
virtual void startToRequest(const QString &url) overridefinal