TTKMusicPlayer  4.2.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
qsyncuploaddata.cpp
Go to the documentation of this file.
1 #include "qsyncuploaddata.h"
2 #include "qsyncdatainterface_p.h"
3 
4 #include <QFile>
5 
10 {
11 public:
14  {
15  }
16 
17  QString m_uploadTime;
18 };
19 
20 
21 
22 QSyncUploadData::QSyncUploadData(QNetworkAccessManager *networkManager, QObject *parent)
23  : QSyncDataInterface(TTK_CREATE_PRIVATE(QSyncUploadData), networkManager, parent)
24 {
26  d->m_manager = networkManager;
27 }
28 
29 void QSyncUploadData::request(const QString &time, const QString &bucket, const QString &fileName, const QString &filePath)
30 {
32  d->m_uploadTime = time;
33 
34  const QString &method = "PUT";
35  const QString &url = TTK_SEPARATOR + fileName;
36  const QString &resource = TTK_SEPARATOR + bucket + url;
37  const QString &host = bucket + TTK_DOT + QSyncConfig::HOST;
38 
39  TTKStringMap headers;
40  headers.insert("Host", host);
41  headers.insert("Date", QSyncUtils::GMT());
42  headers.insert("Content-Type", "charset=utf-8");
43 
44  d->insertAuthorization(method, headers, resource);
45 
46  QNetworkRequest request;
47  request.setUrl(HTTP_PROTOCOL + host + url);
48 
49  for(auto it = headers.constBegin(); it != headers.constEnd(); ++it)
50  {
51  request.setRawHeader(it.key().toUtf8(), it.value().toUtf8());
52  }
53 
54  QFile file(filePath);
55  if(!file.open(QIODevice::ReadOnly))
56  {
57  return;
58  }
59 
60  const QByteArray &fileData = file.readAll();
61  file.close();
62 
63  QNetworkReply *reply = d->m_manager->put(request, fileData);
64  connect(reply, SIGNAL(finished()), SLOT(receiveDataFromServer()));
66 
67  if(parent()->metaObject()->indexOfSlot("uploadProgress(QString,qint64,qint64)") != -1)
68  {
69  connect(reply, SIGNAL(uploadProgress(qint64,qint64)), SLOT(uploadProgress(qint64,qint64)));
70  connect(this, SIGNAL(uploadProgressChanged(QString,qint64,qint64)), parent(), SLOT(uploadProgress(QString,qint64,qint64)));
71  }
72 }
73 
75 {
76  TTK_D(const QSyncUploadData);
77  QNetworkReply *reply = TTKObjectCast(QNetworkReply*, sender());
78  if(reply)
79  {
80  if(reply->error() == QNetworkReply::NoError)
81  {
82  Q_EMIT uploadFileFinished(d->m_uploadTime);
83  }
84  else
85  {
87  }
88  reply->deleteLater();
89  }
90  else
91  {
93  }
94 }
95 
96 void QSyncUploadData::uploadProgress(qint64 percent, qint64 total)
97 {
98  TTK_D(const QSyncUploadData);
99  Q_EMIT uploadProgressChanged(d->m_uploadTime, percent, total);
100 }
The class of the sync cloud upload data private.
static QString GMT()
Definition: qsyncutils.cpp:83
The class of the sync cloud data interface private.
#define HTTP_PROTOCOL
Definition: ttkglobal.h:285
void replyError(QNetworkReply::NetworkError error)
static QString HOST
Definition: qsyncconfig.h:32
void uploadFileFinished(const QString &time)
The class of the sync cloud data interface.
#define TTK_DOT
Definition: ttkglobal.h:266
virtual void receiveDataFromServer() overridefinal
void uploadProgressChanged(const QString &time, qint64 bytesSent, qint64 bytesTotal)
#define TTK_NAN_STR
Definition: ttkglobal.h:277
The class of the sync cloud upload data.
QSyncUploadData(QNetworkAccessManager *networkManager, QObject *parent=nullptr)
#define TTK_SEPARATOR
Definition: ttkglobal.h:269
#define TTK_SLOT
Definition: ttkqtglobal.h:177
#define TTK_CREATE_PRIVATE(Class)
Definition: ttkprivate.h:24
void uploadProgress(qint64 percent, qint64 total)
void request(const QString &time, const QString &bucket, const QString &fileName, const QString &filePath)
QMap< QString, QString > TTKStringMap
Definition: ttkqtglobal.h:202
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.
Definition: ttkqtcompat.h:59
#define TTK_D(Class)
Definition: ttkprivate.h:41
#define TTKObjectCast(x, y)
Definition: ttkqtglobal.h:82