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