1 #ifndef SEAFILE_CLIENT_FILE_BROWSER_REQUESTS_H
2 #define SEAFILE_CLIENT_FILE_BROWSER_REQUESTS_H
3 
4 #include <QList>
5 #include <QStringList>
6 #include <QTimer>
7 
8 #include "api/api-request.h"
9 #include "seaf-dirent.h"
10 
11 class SeafDirent;
12 class Account;
13 class QDir;
14 
15 class GetDirentsRequest : public SeafileApiRequest {
16     Q_OBJECT
17 public:
18     GetDirentsRequest(const Account& account,
19                       const QString& repo_id,
20                       const QString& path);
21 
repoId()22     const QString& repoId() const { return repo_id_; }
path()23     const QString& path() const { return path_; }
24 
25 signals:
26     void success(bool current_readonly, const QList<SeafDirent> &dirents, const QString& repo_id);
27     void failed(const ApiError& error, const QString& repo_id);
28 
29 protected slots:
30     void requestSuccess(QNetworkReply& reply);
31 
32 private:
33     Q_DISABLE_COPY(GetDirentsRequest)
34 
35     const QString repo_id_;
36     const QString path_;
37     bool readonly_;
38 };
39 
40 class GetFileDownloadLinkRequest : public SeafileApiRequest {
41     Q_OBJECT
42 public:
43     GetFileDownloadLinkRequest(const Account &account,
44                                const QString &repo_id,
45                                const QString &path);
46 
fileId()47     QString fileId() const { return file_id_; }
48 signals:
49     void success(const QString& url);
50 
51 protected slots:
52     void requestSuccess(QNetworkReply& reply);
53 
54 private:
55     Q_DISABLE_COPY(GetFileDownloadLinkRequest)
56 
57     QString file_id_;
58 };
59 
60 // TODO:
61 // intergrate file creation into this class
62 class CreateDirectoryRequest : public SeafileApiRequest {
63     Q_OBJECT
64 public:
65     CreateDirectoryRequest(const Account &account, const QString &repo_id,
66                            const QString &path, bool create_parents = false);
67     const QString &repoId() { return repo_id_; }
68     const QString &path() { return path_; }
69 
70 signals:
71     void success(const QString& repo_id);
72 
73 protected slots:
74     void requestSuccess(QNetworkReply& reply);
75 
76 private:
77     Q_DISABLE_COPY(CreateDirectoryRequest)
78     const QString repo_id_;
79     const QString path_;
80     bool create_parents_;
81 };
82 
83 class RenameDirentRequest : public SeafileApiRequest {
84     Q_OBJECT
85 public:
86     RenameDirentRequest(const Account &account, const QString &repo_id,
87                         const QString &path, const QString &new_path,
88                         bool is_file = true);
89 
90     const bool& isFile() const { return is_file_; }
91     const QString& repoId() const { return repo_id_; }
92     const QString& path() const { return path_; }
93     const QString& newName() const { return new_name_; }
94 
95 signals:
96     void success(const QString& repo_id);
97 
98 protected slots:
99     void requestSuccess(QNetworkReply& reply);
100 
101 private:
102     Q_DISABLE_COPY(RenameDirentRequest)
103 
104     const bool is_file_;
105     const QString repo_id_;
106     const QString path_;
107     const QString new_name_;
108 };
109 
110 class RemoveDirentRequest : public SeafileApiRequest {
111     Q_OBJECT
112 public:
113     RemoveDirentRequest(const Account &account, const QString &repo_id,
114                         const QString &path, bool is_file = true);
115 
116     const bool& isFile() const { return is_file_; }
117     const QString& repoId() const { return repo_id_; }
118     const QString& path() const { return path_; }
119 
120 signals:
121     void success(const QString& repo_id);
122 
123 protected slots:
124     void requestSuccess(QNetworkReply& reply);
125 
126 private:
127     Q_DISABLE_COPY(RemoveDirentRequest)
128 
129     const bool is_file_;
130     const QString repo_id_;
131     const QString path_;
132 };
133 
134 class RemoveDirentsRequest : public SeafileApiRequest {
135     Q_OBJECT
136 public:
137     RemoveDirentsRequest(const Account &account,
138                          const QString &repo_id,
139                          const QString &parent_path,
140                          const QStringList& filenames);
141 
142     const QString& repoId() const { return repo_id_; }
143     const QString& parentPath() const { return parent_path_; }
144     const QStringList& filenames() const { return filenames_; }
145 
146 signals:
147     void success(const QString& repo_id);
148 
149 protected slots:
150     void requestSuccess(QNetworkReply& reply);
151 
152 private:
153     Q_DISABLE_COPY(RemoveDirentsRequest)
154 
155     const QString repo_id_;
156     const QString parent_path_;
157     const QStringList filenames_;
158 };
159 
160 
161 class GetSharedLinkRequest : public SeafileApiRequest {
162     Q_OBJECT
163 public:
164     GetSharedLinkRequest(const Account &account, const QString &repo_id,
165                              const QString &path, bool is_file);
166 
167 signals:
168     void success(const QString& url, const QString& repo_id);
169 
170 protected slots:
171     void requestSuccess(QNetworkReply& reply);
172 
173 private:
174     Q_DISABLE_COPY(GetSharedLinkRequest)
175     const QString repo_id_;
176 };
177 
178 class GetFileUploadLinkRequest : public SeafileApiRequest {
179     Q_OBJECT
180 public:
181     GetFileUploadLinkRequest(const Account &account,
182                              const QString &repo_id,
183                              const QString &path,
184                              bool use_upload = true);
185 
186 signals:
187     void success(const QString& url);
188 
189 protected slots:
190     void requestSuccess(QNetworkReply& reply);
191 
192 private:
193     Q_DISABLE_COPY(GetFileUploadLinkRequest)
194 };
195 
196 // Single File only
197 class MoveFileRequest : public SeafileApiRequest {
198     Q_OBJECT
199 public:
200     MoveFileRequest(const Account &account,
201                     const QString &repo_id,
202                     const QString &path,
203                     const QString &dst_repo_id,
204                     const QString &dst_dir_path);
205 
206 signals:
207     void success();
208 
209 protected slots:
210     void requestSuccess(QNetworkReply& reply);
211 
212 private:
213     Q_DISABLE_COPY(MoveFileRequest)
214 };
215 
216 class CopyMultipleFilesRequest : public SeafileApiRequest {
217     Q_OBJECT
218 public:
219     CopyMultipleFilesRequest(const Account &account,
220                              const QString &repo_id,
221                              const QString &src_dir_path,
222                              const QStringList &src_file_names,
223                              const QString &dst_repo_id,
224                              const QString &dst_dir_path);
225     const QString& repoId() { return repo_id_; }
226     const QString& srcPath() { return src_dir_path_; }
227     const QStringList& srcFileNames() { return src_file_names_; }
228 
229 signals:
230     void success(const QString& dst_repo_id);
231 
232 protected slots:
233     void requestSuccess(QNetworkReply& reply);
234 
235 private:
236     Q_DISABLE_COPY(CopyMultipleFilesRequest)
237     const QString repo_id_;
238     const QString src_dir_path_;
239     const QStringList src_file_names_;
240     const QString dst_repo_id_;
241 };
242 
243 class MoveMultipleFilesRequest : public SeafileApiRequest {
244     Q_OBJECT
245 public:
246     MoveMultipleFilesRequest(const Account &account,
247                              const QString &repo_id,
248                              const QString &src_dir_path,
249                              const QStringList &src_file_names,
250                              const QString &dst_repo_id,
251                              const QString &dst_dir_path);
252     const QString& srcRepoId() { return repo_id_; }
253     const QString& srcPath() { return src_dir_path_; }
254     const QStringList& srcFileNames() { return src_file_names_; }
255 
256 signals:
257     void success(const QString& dst_repo_id);
258 
259 protected slots:
260     void requestSuccess(QNetworkReply& reply);
261 
262 private:
263     Q_DISABLE_COPY(MoveMultipleFilesRequest)
264     const QString repo_id_;
265     const QString src_dir_path_;
266     const QStringList src_file_names_;
267     const QString dst_repo_id_;
268 };
269 
270 
271 // Query asynchronous operation progress
272 class QueryAsyncOperationProgress : public SeafileApiRequest {
273 Q_OBJECT
274 public:
275     QueryAsyncOperationProgress(const Account &account,
276                                 const QString &task_id);
277 signals:
278     void success();
279 
280 private slots:
281     void requestSuccess(QNetworkReply& reply);
282 
283 };
284 
285 // Async copy and move a single item
286 class AsyncCopyAndMoveOneItemRequest : public SeafileApiRequest {
287 Q_OBJECT
288 public:
289     AsyncCopyAndMoveOneItemRequest(const Account &account,
290                                    const QString &src_repo_id,
291                                    const QString &src_parent_dir,
292                                    const QString &src_dirent_name,
293                                    const QString &dst_repo_id,
294                                    const QString &dst_parent_dir,
295                                    const QString &operation,
296                                    const QString &dirent_type);
297 
298 signals:
299     void success(const QString& task_id);
300 
301 protected slots:
302     void requestSuccess(QNetworkReply& reply);
303 
304 private:
305     const Account& account_;
306     const QString repo_id_;
307     const QString src_dir_path_;
308     const QString src_dirent_name_;
309     const QString dst_repo_id_;
310     const QString dst_repo_path_;
311     const QString operation_;
312     const QString dirent_type_;
313     Q_DISABLE_COPY(AsyncCopyAndMoveOneItemRequest)
314 };
315 
316 
317 // Batch copy items asynchronously
318 class AsyncCopyMultipleItemsRequest : public SeafileApiRequest {
319 Q_OBJECT
320 public:
321 
322     AsyncCopyMultipleItemsRequest (const Account &account, const QString &repo_id,
323                                    const QString &src_dir_path,
324                                    const QMap<QString, int>&src_dirents,
325                                    const QString &dst_repo_id,
326                                    const QString &dst_dir_path);
327 signals:
328     void success(const QString& task_id);
329 
330 protected slots:
331     void requestSuccess(QNetworkReply& reply);
332 
333 private:
334     const Account& account_;
335     const QString repo_id_;
336     const QString src_dir_path_;
337     QMap<QString, int> src_dirents_;
338     const QString dst_repo_id_;
339     const QString dst_repo_path_;
340     Q_DISABLE_COPY(AsyncCopyMultipleItemsRequest)
341 };
342 
343 // Batch move items asynchronously
344 class AsyncMoveMultipleItemsRequest : public SeafileApiRequest {
345 Q_OBJECT
346 public:
347     AsyncMoveMultipleItemsRequest(const Account &account,
348                                   const QString &repo_id,
349                                   const QString &src_dir_path,
350                                   const QMap<QString, int> &src_dirents,
351                                   const QString &dst_repo_id,
352                                   const QString &dst_dir_path);
353 signals:
354     void success(const QString& task_id);
355 
356 protected slots:
357     void requestSuccess(QNetworkReply& reply);
358 
359 private:
360     const Account& account_;
361     const QString repo_id_;
362     const QString src_dir_path_;
363     QMap<QString, int> src_dirents_;
364     const QString dst_repo_id_;
365     const QString dst_repo_path_;
366     Q_DISABLE_COPY(AsyncMoveMultipleItemsRequest)
367 };
368 
369 class StarFileRequest : public SeafileApiRequest {
370     Q_OBJECT
371 public:
372     StarFileRequest(const Account &account, const QString &repo_id,
373                     const QString &path);
374 
375 signals:
376     void success();
377 
378 protected slots:
379     void requestSuccess(QNetworkReply& reply);
380 
381 private:
382     Q_DISABLE_COPY(StarFileRequest)
383 };
384 
385 class UnstarFileRequest : public SeafileApiRequest {
386     Q_OBJECT
387 public:
388     UnstarFileRequest(const Account &account, const QString &repo_id,
389                       const QString &path);
390 
391 signals:
392     void success();
393 
394 protected slots:
395     void requestSuccess(QNetworkReply& reply);
396 
397 private:
398     Q_DISABLE_COPY(UnstarFileRequest)
399 };
400 
401 class LockFileRequest : public SeafileApiRequest {
402     Q_OBJECT
403 public:
404     LockFileRequest(const Account& account,
405                     const QString& repo_id,
406                     const QString& path,
407                     bool lock);
408 
409     bool lock() const { return lock_; }
410     const QString & repoId() const { return repo_id_; }
411     const QString & path() const { return path_; }
412 
413 signals:
414     void success(const QString& repo_id);
415 
416 protected slots:
417     void requestSuccess(QNetworkReply& reply);
418 
419 private:
420     Q_DISABLE_COPY(LockFileRequest);
421     const bool lock_;
422     const QString repo_id_;
423     const QString path_;
424 };
425 
426 class GetFileUploadedBytesRequest : public SeafileApiRequest {
427     Q_OBJECT
428 public:
429     GetFileUploadedBytesRequest(const Account& account,
430                                 const QString& repo_id,
431                                 const QString& parent_dir,
432                                 const QString& file_name);
433 
434     const QString & repoId() const { return repo_id_; }
435     const QString & parentDir() const { return parent_dir_; }
436     const QString & fileName() const { return file_name_; }
437 
438 signals:
439     void success(bool support_chunked_uploading, quint64 uploaded_bytes);
440 
441 protected slots:
442     void requestSuccess(QNetworkReply& reply);
443 
444 private:
445     Q_DISABLE_COPY(GetFileUploadedBytesRequest);
446     const QString repo_id_;
447     const QString parent_dir_;
448     const QString file_name_;
449 };
450 
451 struct ServerIndexProgress {
452     qint64 total;
453     qint64 indexed;
454     qint64 status;
455 };
456 
457 class GetIndexProgressRequest : public SeafileApiRequest {
458     Q_OBJECT
459 public:
460     GetIndexProgressRequest(const QUrl &url, const QString &task_id);
461 signals:
462     void success(const ServerIndexProgress& result);
463 
464 protected slots:
465     void requestSuccess(QNetworkReply& reply);
466 
467 private:
468     Q_DISABLE_COPY(GetIndexProgressRequest);
469 };
470 
471 class GetSmartLinkRequest : public SeafileApiRequest
472 {
473     Q_OBJECT
474 public:
475     GetSmartLinkRequest(const Account& account,
476                         const QString& repo_id,
477                         const QString& path,
478                         bool is_dir);
479 
480 signals:
481     void success(const QString &smart_link, const QString &protocol_link);
482 
483 protected slots:
484     void requestSuccess(QNetworkReply& reply);
485 
486 private:
487     Q_DISABLE_COPY(GetSmartLinkRequest);
488     QString repo_id_;
489     QString path_;
490     QString protocol_link_;
491     bool is_dir_;
492 };
493 
494 class GetFileLockInfoRequest : public SeafileApiRequest
495 {
496     Q_OBJECT
497 public:
498     GetFileLockInfoRequest(const Account& account,
499                            const QString& repo_id,
500                            const QString& path);
501 
502     virtual void send() Q_DECL_OVERRIDE;
503 
504     const QString& path() const { return path_; }
505 
506 signals:
507     void success(bool found, const QString& lock_owner);
508 
509 protected slots:
510     void requestSuccess(QNetworkReply& reply);
511     void onGetDirentsSuccess(bool current_readonly, const QList<SeafDirent> &dirents);
512 
513 private:
514     Q_DISABLE_COPY(GetFileLockInfoRequest);
515 
516     const QString path_;
517     QScopedPointer<GetDirentsRequest, QScopedPointerDeleteLater> dirents_req_;
518 };
519 
520 class GetUploadLinkRequest : public SeafileApiRequest
521 {
522 Q_OBJECT
523 public:
524     GetUploadLinkRequest(const Account& account,
525                          const QString& repo_id,
526                          const QString& path);
527     const QString& path() const { return path_; }
528 signals:
529     void success(const QString& upload_link);
530 
531 protected slots:
532     void requestSuccess(QNetworkReply& reply);
533 
534 private:
535     Q_DISABLE_COPY(GetUploadLinkRequest);
536     QString path_;
537 };
538 
539 #endif  // SEAFILE_CLIENT_FILE_BROWSER_REQUESTS_H
540