00001 #ifndef __creaImageIOTreeHandlerImageAdder_h_INCLUDED__
00002 #define __creaImageIOTreeHandlerImageAdder_h_INCLUDED__
00003
00004 #include <creaImageIOTreeHandler.h>
00005 #include <creaImageIOTimestampDatabaseHandler.h>
00006 #include <creaImageIOSynchron.h>
00007 #include <creaImageIOImageReader.h>
00008 #include <wx/wx.h>
00009 #include <wx/progdlg.h>
00010 #include <creaWx.h>
00011
00012 #include <boost/signal.hpp>
00013 #include <boost/bind.hpp>
00014
00015
00016 namespace creaImageIO
00017 {
00022
00024
00025 class TreeHandlerImageAdder
00026 {
00027
00028 public:
00029
00031 TreeHandlerImageAdder(TreeHandler* tree);
00033 ~TreeHandlerImageAdder();
00035 void SetTreeHandler(TreeHandler* tree) { mTreeHandler = tree;}
00037 void SetTimestampHandler(TimestampDatabaseHandler* tdh) { mTimestampHandler = tdh;}
00039 void SetSynchronizer(Synchronizer* s){mSynchronizer=s;}
00041 void SetCurrentDatabase(std::string cur){mCurrentDB=cur;}
00042
00043
00044
00047 class Progress
00048 {
00049 public:
00050 Progress() { Reset(); }
00051 ~Progress() {}
00052
00053 void Reset()
00054 {
00055 mStop = false;
00056 mNumberScannedFiles = 0;
00057 mNumberScannedDirs = 0;
00058 mNumberHandledFiles = 0;
00059 mNumberAddedFiles = 0;
00060 }
00061
00062 int GetNumberScannedFiles() const { return mNumberScannedFiles; }
00063 int GetNumberScannedDirs() const { return mNumberScannedDirs; }
00064 int GetNumberHandledFiles() const { return mNumberHandledFiles; }
00065 int GetNumberAddedFiles() const { return mNumberAddedFiles; }
00066
00067 void IncNumberScannedFiles() { mNumberScannedFiles++; }
00068 void IncNumberScannedDirs() { mNumberScannedDirs++; }
00069 void IncNumberHandledFiles() { mNumberHandledFiles++; }
00070 void IncNumberAddedFiles() { mNumberAddedFiles++; }
00071
00072 void SetStop() { mStop = true; }
00073 bool GetStop() const { return mStop; }
00074
00075 private:
00076 bool mStop;
00077 int mNumberScannedFiles;
00078 int mNumberScannedDirs;
00079 int mNumberHandledFiles;
00080 int mNumberAddedFiles;
00081 };
00082
00083
00084
00085 const Progress& GetProgress() const { return mProgress; }
00086
00087
00088
00089 typedef boost::signal<void (Progress&)> ProgressSignalType;
00090 typedef ProgressSignalType::slot_function_type ProgressCallbackType;
00091
00092
00093
00101 void ConnectProgressObserver(ProgressCallbackType callback);
00102
00103
00104
00106 bool IsHandledFile( const std::string& filename);
00108 void AddFiles( const std::vector<std::string>& filename );
00110 void AddDirectory( const std::string& directory,
00111 bool recurse);
00113 void RemoveFile(tree::Node* node);
00115 void RemoveFiles(const std::vector<tree::Node*>& nodes);
00117 std::string Synchronize(bool repair, bool checkAttributes);
00119 void CheckSyncDirectory(const std::string &dirpath,
00120 bool recursive,
00121 bool repair,
00122 bool checkAttributes,
00123 std::vector<std::string> &i_ignorefiles,
00124 std::vector<std::string> & attsModified,
00125 std::vector<std::string> & newfiles);
00127 void CopyFiles(const std::vector<std::string>& filenames, const std::string directory );
00129 void FindNode(tree::Node* parent, int level,
00130 const std::string& searchParam,
00131 const std::string& searchVal,
00132 tree::Node*& node);
00133
00135 void FindNodePartial(tree::Node* parent, int level, const std::string& searchParam, const std::string& searchVal, tree::Node*& node);
00136
00138 void CheckAttributes(bool repair, std::string& file, std::vector<std::string>& attsModified);
00140 void DeleteDriveFromMainDB(const std::string& drive);
00142 void DeleteDriveFromOtherDB(const std::string& drive);
00144 void EditField(tree::Node* node, const std::string& name, const std::string& key, const std::string& val);
00146 void GetAttributes(const std::vector<std::string>& params,
00147 const std::string& filename,
00148 std::vector<std::string>& results);
00149
00150
00151
00152
00153
00154
00155 private:
00156
00160 void AddFile( const std::string& filename );
00161
00163 void AddDirectoryRecursor( const std::string& directory,
00164 bool recurse,
00165 const std::string &addKey);
00166
00167 TreeHandler* mTreeHandler;
00168 TimestampDatabaseHandler* mTimestampHandler;
00169 Synchronizer* mSynchronizer;
00170 ImageReader mReader;
00171 std::string mCurrentDB;
00172
00173 Progress mProgress;
00174 ProgressSignalType mProgressSignal;
00175
00176
00177 };
00178
00179
00180
00181
00182
00183
00184
00185 }
00186
00187 #include <iostream>
00188 inline std::ostream& operator << ( std::ostream& o,
00189 const creaImageIO::TreeHandlerImageAdder::Progress& p)
00190 {
00191 o << p.GetNumberScannedFiles() << " files - "
00192 << p.GetNumberScannedDirs() << " dirs - "
00193 << p.GetNumberHandledFiles() << " handled -"
00194 << p.GetNumberAddedFiles() << " added";
00195 return o;
00196 }
00197
00198
00199 #endif
00200