X-Git-Url: https://www.flypig.org.uk/git/?p=openvpnui.git;a=blobdiff_plain;f=src%2Ffilebrowse%2Ffileworker.h;fp=src%2Ffilebrowse%2Ffileworker.h;h=7b1ce5c542565f18cf867f773d980ae29920e5b4;hp=0000000000000000000000000000000000000000;hb=e24363e314aca32e7bee952f02f517a04a8dc5f2;hpb=ee3968ffa08d4e0fcbad87765efa3aeb32ff0554 diff --git a/src/filebrowse/fileworker.h b/src/filebrowse/fileworker.h new file mode 100644 index 0000000..7b1ce5c --- /dev/null +++ b/src/filebrowse/fileworker.h @@ -0,0 +1,58 @@ +#ifndef FILEWORKER_H +#define FILEWORKER_H + +#include +#include + +/** + * @brief FileWorker does delete, copy and move files in the background. + */ +class FileWorker : public QThread +{ + Q_OBJECT + +public: + explicit FileWorker(QObject *parent = 0); + ~FileWorker(); + + // call these to start the thread, returns false if start failed + void startDeleteFiles(QStringList filenames); + void startCopyFiles(QStringList filenames, QString destDirectory); + void startMoveFiles(QStringList filenames, QString destDirectory); + + void cancel(); + +signals: // signals, can be connected from a thread to another + void progressChanged(int progress, QString filename); + + // one of these is emitted when thread ends + void done(); + void errorOccurred(QString message, QString filename); + + void fileDeleted(QString fullname); + +protected: + void run(); + +private: + enum Mode { + DeleteMode, CopyMode, MoveMode + }; + enum CancelStatus { + Cancelled = 0, KeepRunning = 1 + }; + + QString deleteFile(QString filenames); + void deleteFiles(); + void copyOrMoveFiles(); + QString copyDirRecursively(QString srcDirectory, QString destDirectory); + QString copyOverwrite(QString src, QString dest); + + FileWorker::Mode m_mode; + QStringList m_filenames; + QString m_destDirectory; + QAtomicInt m_cancelled; // atomic so no locks needed + int m_progress; +}; + +#endif // FILEWORKER_H