TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicdownloadqueuerequest.cpp
Go to the documentation of this file.
2 
3 #include <QStringList>
4 
7 {
8 
9 }
10 
12  : MusicAbstractDownLoadRequest(data.m_url, data.m_path, type, parent),
13  m_isDownload(false),
14  m_isAbort(false)
15 {
16  m_request = new QNetworkRequest;
19 }
20 
21 MusicDownloadQueueRequest::MusicDownloadQueueRequest(const MusicDownloadQueueDataList &datas, TTK::Download type, QObject *parent)
23 {
24  addQueue(datas);
25 }
26 
28 {
29  delete m_request;
30  m_request = nullptr;
31  deleteAll();
32 }
33 
35 {
36  if(!m_queue.isEmpty())
37  {
39  }
40 }
41 
43 {
44  clear();
45  if(m_isDownload && m_reply)
46  {
47  m_isAbort = true;
48  m_reply->abort();
49  m_file->close();
50  m_file->remove();
51  delete m_reply;
52  m_reply = nullptr;
53  m_isAbort = false;
54  }
55 }
56 
58 {
59  m_queue.clear();
60 }
61 
62 void MusicDownloadQueueRequest::addQueue(const MusicDownloadQueueDataList &datas)
63 {
64  m_queue = datas;
65 }
66 
68 {
69  if(m_queue.isEmpty())
70  {
71  return;
72  }
73 
74  if(QFile::exists(m_queue.front().m_path))
75  {
76  Q_EMIT downLoadDataChanged(m_queue.takeFirst().m_path);
78  }
79  else if(G_NETWORK_PTR->isOnline())
80  {
81  startDownload(m_queue.front().m_url);
82  }
83 }
84 
86 {
87  m_isDownload = true;
88  delete m_file;
89  m_file = new QFile(m_queue.front().m_path, this);
90 
91  if(!m_file->open(QIODevice::WriteOnly))
92  {
93  m_file->close();
94  delete m_file;
95  m_file = nullptr;
96  return;
97  }
98 
99  if(!m_request || url.isEmpty())
100  {
101  return;
102  }
103 
104  m_speedTimer.start();
105  m_request->setUrl(url);
106  m_reply = m_manager.get(*m_request);
107  connect(m_reply, SIGNAL(finished()), SLOT(downLoadFinished()));
108  connect(m_reply, SIGNAL(readyRead()), SLOT(handleReadyRead()));
110 }
111 
113 {
114  if(m_isAbort || !m_request || !m_reply || !m_file)
115  {
116  return;
117  }
118 
120  m_file->flush();
121  m_file->close();
122  m_isDownload = false;
123 
125  Q_EMIT downLoadDataChanged(m_queue.takeFirst().m_path);
126 
127  startOrderQueue();
128 }
129 
131 {
132  if(!m_file || !m_reply)
133  {
134  return;
135  }
136 
137  m_file->write(m_reply->readAll());
138  m_file->flush();
139 }
140 
141 void MusicDownloadQueueRequest::handleError(QNetworkReply::NetworkError code)
142 {
143  if(!m_file || !m_reply)
144  {
145  return;
146  }
147 
148 #ifndef TTK_DEBUG
149  Q_UNUSED(code);
150 #endif
151  TTK_ERROR_STREAM("QNetworkReply::NetworkError:" << code << m_reply->errorString());
152  m_file->flush();
153 
154  if(!m_isAbort)
155  {
157  }
158 
159  startToRequest();
160 }
virtual void deleteAll()
void downLoadDataChanged(const QString &bytes)
The class of the abstract download data.
QNetworkReply * m_reply
TTK_MODULE_EXPORT void setSslConfiguration(QNetworkRequest *request, QSslSocket::PeerVerifyMode mode=QSslSocket::VerifyNone)
The class of the download data from queue request.
void startDownload(const QString &url)
void addQueue(const MusicDownloadQueueDataList &datas)
QNetworkAccessManager m_manager
void handleError(QNetworkReply::NetworkError code)
#define TTK_SLOT
Definition: ttkqtglobal.h:165
virtual void startToRequest() overridefinal
The class of the download queue data.
Definition: inftrees.h:24
TTK_MODULE_EXPORT void makeContentTypeHeader(QNetworkRequest *request, const QByteArray &data={})
virtual void deleteAll() overridefinal
#define G_NETWORK_PTR
MusicDownloadQueueDataList m_queue
#define TTK_ERROR_STREAM(msg)
Definition: ttklogger.h:69
MusicDownloadQueueRequest(TTK::Download type, QObject *parent=nullptr)
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.
Definition: ttkqtcompat.h:59
virtual void downLoadFinished() overridefinal