Quark  0.1
GCloudStorage.h++
Go to the documentation of this file.
1 #ifndef __libquark_gcloud_GCloudStorage_hxx
2 #define __libquark_gcloud_GCloudStorage_hxx
3 
4 #include <QByteArray>
5 #include <QFile>
6 #include <QHttpMultiPart>
7 #include <QList>
8 #include <QNetworkAccessManager>
9 #include <QNetworkReply>
10 #include <QObject>
11 #include <QString>
12 
13 #include <quark/GCloudBucket.h++>
14 #include <quark/GCloudCommon.h++>
15 #include <quark/GCloudObject.h++>
17 
18 namespace quark {
19 namespace gcloud {
20 
21 class GCloudStorage : public QObject
22 {
23  Q_OBJECT;
24 
25  public:
26 
27  GCloudStorage(QNetworkAccessManager *networkAccess, QObject *parent = NULL);
28  virtual ~GCloudStorage();
29 
30  void setAccessToken(const oauth2::OAuth2AccessToken &token);
31 
32  bool isRequestInProgress() const;
33  void cancelRequest();
34 
35  // Bucket operations.
36  bool listBuckets(const QString &projectID, QString prefix = QString::null);
37 
38  bool createBucket(const QString &projectID, const QString &name,
39  AccessMode bucketAccessMode = AccessModeDefault,
40  AccessMode defaultObjectAccessMode = AccessModeDefault);
41 
42  bool deleteBucket(const QString &name);
43 
44  // Object operations.
45  bool listObjects(const QString &bucketName, QString prefix = QString::null);
46 
47  bool createObject(const QString &bucketName, const QString &name,
48  const QString &contentType, const QString &localPath,
49  AccessMode accessMode = AccessModeDefault);
50 
51  bool deleteObject(const QString &bucketName, const QString &name);
52 
53  bool downloadObject(const QString &bucketName, const QString &name,
54  const QString &localPath);
55 
56  signals:
57 
59  void bucketDeleted(const QString &name);
60  void bucketListAvailable(QList<quark::gcloud::GCloudBucket> buckets);
61 
62  void objectCreated(const QString &bucketName,
64  void objectDeleted(const QString &bucketName, const QString &name);
65  void objectListAvailable(const QString &bucketName,
66  QList<quark::gcloud::GCloudObject> objects);
67 
68  void objectTransferProgress(qint64 bytesTransferred, qint64 bytesTotal);
69  void objectDownloaded(const QString &bucketName, const QString &objectName,
70  const QString &localPath);
71  void objectUploaded(const QString &bucketName, const QString &objectName,
72  const QString &localPath);
73  void requestFailed();
74  void requestCancelled();
75 
76  private slots:
77 
78  void handleError(QNetworkReply::NetworkError error);
79  void handleReply();
80  void handleTransferProgress(qint64 bytesTransferred, qint64 bytesTotal);
81  void handleDownloadFinished();
82 
83  private:
84 
85  enum RequestType { REQ_NONE = 0, REQ_LIST_BUCKETS, REQ_CREATE_BUCKET,
86  REQ_DELETE_BUCKET, REQ_LIST_OBJECTS, REQ_CREATE_OBJECT,
87  REQ_DELETE_OBJECT, REQ_DOWNLOAD_OBJECT };
88 
89  bool parseBucketMetadata(const QJsonObject &json, GCloudBucket &bucket);
90  bool parseBucketList(const QJsonObject &object,
91  QList<GCloudBucket> &buckets);
92  bool parseObjectMetadata(const QJsonObject &json, GCloudObject &object);
93  bool parseObjectList(const QJsonObject &json,
94  QList<GCloudObject> &objects);
95  qint64 parseTime(const QString &value);
96  QString tokenForAccessMode(AccessMode accessMode);
97  void startGetRequest(const QUrl &url);
98  void startPostRequest(const QUrl &url, const QByteArray &requestBody);
99  void startPostRequest(const QUrl &url, QHttpMultiPart *requestBody);
100  void startDeleteRequest(const QUrl &url);
101  QHttpMultiPart *buildMultiPartForUpload(const QString &contentType,
102  const QString &localPath);
103 
104  QNetworkAccessManager *_networkAccess;
106  RequestType _requestType;
107  QNetworkReply *_networkReply;
108  QString _currentBucketName;
109  QString _currentObjectName;
110  QScopedPointer<QFile> _localFile;
111 };
112 
113 } // namespace gcloud
114 } // namespace quark
115 
116 #endif // __libquark_gcloud_GCloudStorage_hxx
void bucketDeleted(const QString &name)
void objectCreated(const QString &bucketName, quark::gcloud::GCloudObject object)
void bucketCreated(quark::gcloud::GCloudBucket bucket)
void objectUploaded(const QString &bucketName, const QString &objectName, const QString &localPath)
AccessMode
Definition: GCloudCommon.h++:7
GCloudStorage(QNetworkAccessManager *networkAccess, QObject *parent=NULL)
Definition: GCloudBucket.h++:15
bool deleteObject(const QString &bucketName, const QString &name)
bool listObjects(const QString &bucketName, QString prefix=QString::null)
Definition: BarChartView.h++:6
void objectListAvailable(const QString &bucketName, QList< quark::gcloud::GCloudObject > objects)
A representation of an OAuth2 access token.
Definition: OAuth2AccessToken.h++:17
void setAccessToken(const oauth2::OAuth2AccessToken &token)
Definition: GCloudObject.h++:15
void bucketListAvailable(QList< quark::gcloud::GCloudBucket > buckets)
void objectDownloaded(const QString &bucketName, const QString &objectName, const QString &localPath)
Definition: GCloudStorage.h++:21
bool deleteBucket(const QString &name)
void objectTransferProgress(qint64 bytesTransferred, qint64 bytesTotal)
bool createObject(const QString &bucketName, const QString &name, const QString &contentType, const QString &localPath, AccessMode accessMode=AccessModeDefault)
bool createBucket(const QString &projectID, const QString &name, AccessMode bucketAccessMode=AccessModeDefault, AccessMode defaultObjectAccessMode=AccessModeDefault)
Definition: GCloudCommon.h++:8
bool downloadObject(const QString &bucketName, const QString &name, const QString &localPath)
void objectDeleted(const QString &bucketName, const QString &name)
bool listBuckets(const QString &projectID, QString prefix=QString::null)