1 #ifndef FM2_COPYJOB_H 2 #define FM2_COPYJOB_H 3 4 #include "../libfmqtglobals.h" 5 #include "fileoperationjob.h" 6 #include "gioptrs.h" 7 8 namespace Fm { 9 10 class LIBFM_QT_API FileTransferJob : public Fm::FileOperationJob { 11 Q_OBJECT 12 public: 13 14 enum class Mode { 15 COPY, 16 MOVE, 17 LINK 18 }; 19 20 explicit FileTransferJob(FilePathList srcPaths, Mode mode = Mode::COPY); 21 explicit FileTransferJob(FilePathList srcPaths, FilePathList destPaths, Mode mode = Mode::COPY); 22 explicit FileTransferJob(FilePathList srcPaths, const FilePath &destDirPath, Mode mode = Mode::COPY); 23 24 void setSrcPaths(FilePathList srcPaths); 25 void setDestPaths(FilePathList destPaths); 26 void setDestDirPath(const FilePath &destDirPath); 27 28 protected: 29 void exec() override; 30 31 private: 32 bool processPath(const FilePath& srcPath, const FilePath& destPath, const char *destFileName); 33 bool moveFile(const FilePath &srcPath, const GFileInfoPtr &srcInfo, const FilePath &destDirPath, const char *destFileName); 34 bool copyFile(const FilePath &srcPath, const GFileInfoPtr &srcInfo, const FilePath &destDirPath, const char *destFileName, bool skip = false); 35 bool linkFile(const FilePath &srcPath, const GFileInfoPtr &srcInfo, const FilePath &destDirPath, const char *destFileName); 36 37 bool moveFileSameFs(const FilePath &srcPath, const GFileInfoPtr& srcInfo, FilePath &destPath); 38 bool copyRegularFile(const FilePath &srcPath, const GFileInfoPtr& srcInfo, FilePath &destPath); 39 bool copySpecialFile(const FilePath &srcPath, const GFileInfoPtr& srcInfo, FilePath& destPath); 40 bool copyDirContent(const FilePath &srcPath, GFileInfoPtr srcInfo, FilePath &destPath, bool skip = false); 41 bool makeDir(const FilePath &srcPath, GFileInfoPtr srcInfo, FilePath &destPath); 42 bool createSymlink(const FilePath &srcPath, const GFileInfoPtr& srcInfo, FilePath& destPath); 43 bool createShortcut(const FilePath &srcPath, const GFileInfoPtr& srcInfo, FilePath& destPath); 44 45 bool handleError(GErrorPtr& err, const FilePath &srcPath, const GFileInfoPtr &srcInfo, FilePath &destPath, int& flags); 46 47 static void gfileCopyProgressCallback(goffset current_num_bytes, goffset total_num_bytes, FileTransferJob* _this); 48 49 private: 50 FilePathList srcPaths_; 51 FilePathList destPaths_; 52 Mode mode_; 53 bool hasDestDirPath_; 54 }; 55 56 57 } // namespace Fm 58 59 #endif // FM2_COPYJOB_H 60