-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflickrapi.h
144 lines (118 loc) · 4.22 KB
/
flickrapi.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#ifndef FLICKRAPI_H
#define FLICKRAPI_H
#include <QObject>
#include <QNetworkAccessManager>
#include <QMap>
#include <QList>
#include <QDateTime>
#include <QUrl>
#include <QIcon>
#if QT_VERSION >= 0x050000
#include <QtWebKitWidgets/QWebView>
#else
#include <QWebView>
#endif
struct FileDescription {
FileDescription() {}
QString getCroppedName() const {
return title.left(title.indexOf(QRegExp("\\.part\\d+\\.jp(e?)g\\b")));
// return title.left(title.lastIndexOf('.'));
}
bool operator<(const FileDescription &other) const {
return title < other.title;
}
QString id;
QString secret;
QString server;
QString title;
QString farm;
QString format;
QDateTime uploadDate;
QIcon icon;
};
typedef QList<FileDescription> BigFileDescription;
class FlickrAPI : public QObject {
Q_OBJECT
public:
FlickrAPI(QObject *parent);
void loginUser(const QString &token = "", const QString &tokenSecret = "");
void uploadFile(const QString &name, const QByteArray &data, const QString &sourceFileName);
void getFileList(int page = -1);
void getFile(const FileDescription &fd, const QString &id);
void getFileInfo(const QString &id, const QString &fileName);
void deleteFile(const FileDescription &fd, const QString &fileName);
bool isLoggedIn() const {
return !userID.isEmpty() && !userName.isEmpty();
}
QString getAuthToken() const {
return oauthToken;
}
QString getAuthSecret() const {
return oauthTokenSecret;
}
QString getUserID() const {
return userID;
}
QString getUsername() const {
return userName;
}
signals:
void authResult(bool);
void fileUploaded(FileDescription, QString);
void fileListLoaded(QList<BigFileDescription>);
void fileInfoLoaded(FileDescription);
void fileDownloaded(QByteArray, QString);
void fileDeleted(bool, QString);
void genericError(QString);
void downloadError(QString, QString);
void uploadError(QString, QString);
void deleteError(QString, QString);
void downloadProgress(qint64, qint64, QString);
void uploadProgress(qint64, qint64, QString);
private slots:
//QSignalMapper should be used, but I have no time for that
void replyUploadError();
void replyDownloadError();
void replyAuthError();
void replyDeleteError();
void replyGenericError();
void cancelLogin();
void replyRequestTokenFinished();
void replyAccessTokenFinished();
void replyTestLogin();
void replyUploadFinished();
void replyGetFileListFinished();
void replyGetFileFinished();
void replyGetFileInfoFinished();
void replyDeleteFileFinished();
void redirected(QUrl);
void emitDownloadProgress(qint64 bd, qint64 bt);
void emitUploadProgress(qint64 bd, qint64 bt);
private:
void getRequestToken();
void getAccessToken();
void showAuthDialog();
void testLogin();
QString baseStringFromURL(const QString &method, const QMap<QString, QString> ¶ms, const QString &httpMethod = "GET") const;
QString urlFromParams(const QString &url, const QMap<QString, QString> ¶ms) const;
void setDefaultOAuthParams(const QString &url, QMap<QString, QString> ¶ms, const QString &httpMethod = "GET") const;
QString oauthHeader(const QString &method,const QMap<QString, QString> ¶ms) const;
inline QString extractReplyID(QObject *rawReply, QMap<QNetworkReply*, QString> &fromMap);
QByteArray getReplyContent(QObject *rawReply) const;
QString getReplyError(QObject *rawReply) const;
QMap<QString, QString> parseReply(const QString &reply) const;
QString hmacSha1(QByteArray key, const QByteArray &baseString) const;
quint64 timestamp() const;
QString nonce() const;
QList<BigFileDescription> processFiles(QList<FileDescription> &flist);
QNetworkAccessManager *netManager;
QWebView *webView;
QString oauthToken, oauthTokenSecret, oauthVerifier;
QString consumerKey, consumerSecret;
QString userID, userName;
QList<FileDescription> fileList;
QMap<QNetworkReply*, QString> fileUploadReplyMap;
QMap<QNetworkReply*, QString> fileDownloadReplyMap;
QMap<QNetworkReply*, QString> fileDeleteReplyMap;
};
#endif // FLICKRAPI_H