TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
qsynclistdata.cpp
Go to the documentation of this file.
1 #include "qsynclistdata.h"
2 #include "qsyncdatainterface_p.h"
3 
4 #include <QDateTime>
5 #include <QtXml/QDomDocument>
6 
7 QSyncListData::QSyncListData(QNetworkAccessManager *networkManager, QObject *parent)
8  : QSyncDataInterface(networkManager, parent)
9 {
10 
11 }
12 
13 void QSyncListData::listDataOperator(const QString &bucket)
14 {
16  const QString &method = "GET";
17  const QString &url = TTK_SEPARATOR;
18  const QString &resource = TTK_SEPARATOR + bucket + url;
19  const QString &host = bucket + TTK_DOT + QSyncConfig::HOST;
20 
21  TTKStringMap headers;
22  headers.insert("Date", QSyncUtils::GMT());
23  headers.insert("Host", host);
24  headers.insert("Content-Type", "charset=utf-8");
25 
26  d->insertAuthorization(method, headers, resource);
27 
28  QNetworkRequest request;
29  request.setUrl("http://" + host + url);
30 
31  for(auto it = headers.constBegin(); it != headers.constEnd(); ++it)
32  {
33  request.setRawHeader(it.key().toUtf8(), it.value().toUtf8());
34  }
35 
36  QNetworkReply *reply = d->m_manager->get(request);
37  connect(reply, SIGNAL(finished()), SLOT(receiveDataFromServer()));
39 }
40 
42 {
43  QSyncDataItemList items;
44  QNetworkReply *reply = TTKObjectCast(QNetworkReply*, sender());
45  if(reply && reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 200)
46  {
47  QDomDocument docment;
48  if(docment.setContent(reply->readAll()))
49  {
50  const QDomNodeList &nodes = docment.elementsByTagName("Contents");
51  for(int i = 0; i < nodes.count(); ++i)
52  {
53  QSyncDataItem item;
54  const QDomNodeList &childList = nodes.item(i).childNodes();
55  for(int j = 0; j < childList.count(); ++j)
56  {
57  const QDomNode &node = childList.item(j);
58  const QString &name = node.nodeName();
59  const QString &text = node.toElement().text();
60 
61  if(name == "Key")
62  {
63  item.m_name = text;
64  }
65  else if(name == "LastModified")
66  {
67  QDateTime date = QDateTime::fromString(text, "yyyy-MM-ddThh:mm:ss.zzzZ");
68  date = date.addSecs(8 * 60 * 60);
69  item.m_putTime = date.toString("yyyy-MM-dd hh:mm");
70  }
71  else if(name == "ETag")
72  {
73  item.m_hash = text;
74  item.m_hash.remove(0, 1);
75  item.m_hash.chop(1);
76  }
77  else if(name == "Size")
78  {
79  item.m_size = text.toInt();
80  }
81  else if(name == "Type")
82  {
83  item.m_mimeType = text;
84  }
85  else if(name == "Owner")
86  {
87  items << item;
88  item.clear();
89  }
90  }
91  }
92  }
93  reply->deleteLater();
94  }
95  Q_EMIT receiveFinshed(items);
96 }
static QString GMT()
Definition: qsyncutils.cpp:84
void replyError(QNetworkReply::NetworkError error)
void receiveFinshed(const QSyncDataItemList &items)
static QString HOST
Definition: qsyncconfig.h:32
The class of the sync data item.
Definition: qsyncdataitem.h:27
The class of the sync cloud data interface.
QString m_name
Definition: qsyncdataitem.h:29
#define TTK_DOT
Definition: ttkglobal.h:193
const char * name
Definition: http_parser.c:458
void listDataOperator(const QString &bucket)
virtual void receiveDataFromServer() overridefinal
#define TTK_SEPARATOR
Definition: ttkglobal.h:195
#define TTK_SLOT
Definition: ttkqtglobal.h:165
QString m_hash
Definition: qsyncdataitem.h:30
QString m_putTime
Definition: qsyncdataitem.h:32
QSyncListData(QNetworkAccessManager *networkManager, QObject *parent=nullptr)
QMap< QString, QString > TTKStringMap
Definition: ttkqtglobal.h:190
QString m_mimeType
Definition: qsyncdataitem.h:31
#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:60