00001 #ifndef FILETRANSFER_H
00002 #define FILETRANSFER_H
00003
00004 #include <iostream>
00005 #include <string>
00006
00007 #include "arc-gui-config.h"
00008 #include <arc/Thread.h>
00009
00010 #include <arc/ArcLocation.h>
00011 #include <arc/GUID.h>
00012 #include <arc/Logger.h>
00013 #include <arc/StringConv.h>
00014 #include <arc/URL.h>
00015 #include <arc/User.h>
00016 #include <arc/UserConfig.h>
00017 #include <arc/credential/Credential.h>
00018 #include <arc/data/FileCache.h>
00019 #include <arc/data/DataHandle.h>
00020 #include <arc/data/DataMover.h>
00021 #include <arc/data/URLMap.h>
00022 #include <arc/OptionParser.h>
00023
00024 #include <QObject>
00025 #include <QString>
00026
00028 enum TTransferState { TS_IDLE,
00029 TS_EXECUTED,
00030 TS_FAILED,
00031 TS_COMPLETED
00032 };
00033
00035 class FileTransfer : public QObject
00036 {
00037 Q_OBJECT
00038 private:
00039 std::string m_id;
00040 TTransferState m_transferState;
00041 int m_timeout;
00042 int m_retries;
00043 bool m_secure;
00044 bool m_passive;
00045 bool m_notpassive;
00046 bool m_force;
00047 bool m_verbose;
00048 bool m_nocopy;
00049 int m_recursion;
00050 bool m_completed;
00051 unsigned long m_transferred;
00052 unsigned long m_totalSize;
00053
00054 Arc::URL m_sourceUrl;
00055 Arc::URL m_destUrl;
00056 Arc::DataHandle m_sourceHandle;
00057 Arc::DataHandle m_destHandle;
00058 Arc::DataMover* m_mover;
00059 Arc::FileCache* m_cache;
00060 Arc::URLMap* m_urlMap;
00061 Arc::UserConfig* m_config;
00062 Arc::DataStatus m_status;
00063 Arc::SimpleCondition m_cond;
00064 public:
00066
00074 FileTransfer(const std::string& source_str, const std::string& destination_str, Arc::UserConfig& usercfg);
00075 virtual ~FileTransfer();
00076
00078 TTransferState transferState();
00079
00081 bool execute();
00082
00084 void wait();
00085
00087 Arc::DataStatus status();
00088
00090
00094 void completed(Arc::DataStatus res, std::string error);
00095
00097
00101 void cancel();
00102
00104 bool isCompleted();
00105
00107 QString id();
00108
00110 QString sourceUrl();
00111
00113 QString destUrl();
00114
00116
00120 void updateTransferStatus(unsigned long transferred, unsigned long totalSize);
00121
00123 void getTransferStatus(unsigned long& transferred, unsigned long& totalSize);
00124
00125 Q_SIGNALS:
00126
00128
00135 void onProgress(FileTransfer* fileTransfer, unsigned long long bytesTransferred, unsigned long long bytesTotal);
00136 void onCompleted(FileTransfer* fileTransfer, bool success, QString error);
00137 };
00138
00139 #endif // FILETRANSFER_H