1 #include <creaImageIOTreeHandlerImageAdder.h>
2 #include <creaImageIOSystem.h>
3 #include "boost/filesystem.hpp"
4 #include <boost/filesystem/operations.hpp>
5 #include <boost/utility.hpp>
8 namespace fs = boost::filesystem;
9 using boost::filesystem::path;
14 //using namespace crea;
18 //====================================================================
20 TreeHandlerImageAdder::TreeHandlerImageAdder(TreeHandler* tree)
25 TreeHandlerImageAdder::~TreeHandlerImageAdder()
28 //====================================================================
30 //====================================================================
31 void TreeHandlerImageAdder::ConnectProgressObserver(ProgressCallbackType callback)
33 mProgressSignal.connect(callback);
35 //====================================================================
37 //=====================================================================
38 bool TreeHandlerImageAdder::IsHandledFile( const std::string& filename)
40 return (mReader.CanRead(filename));
42 //=====================================================================
44 //=====================================================================
45 void TreeHandlerImageAdder::AddFiles( const std::vector<std::string>& filenames)
49 unsigned int nbf = filenames.size();
50 std::vector<std::string>::const_iterator i;
51 for (i=filenames.begin();i!=filenames.end();++i)
54 mProgress.IncNumberScannedFiles();
55 if (IsHandledFile(*i))
57 mProgress.IncNumberHandledFiles();
60 mProgressSignal(mProgress);
61 if (mProgress.GetStop()) break;
64 //=====================================================================
66 //=====================================================================
67 void TreeHandlerImageAdder::AddDirectory( const std::string& directory,
71 AddDirectoryRecursor( directory, recurse );
72 GimmickDebugMessage(3,mProgress<<std::endl);
75 //=====================================================================
76 void TreeHandlerImageAdder::AddFile( const std::string& filename )
78 GimmickDebugMessage(4,"Adding '"<<filename<<"'"<<std::endl);
79 std::map< std::string, std::string> attr;
80 mTreeHandler->GetTree().GetDescriptor().BuildAttributeMap(attr);
82 mReader.ReadAttributes(filename,attr);
84 int lev = mTreeHandler->AddBranch(attr);
86 // update the progress according to lev
87 if (lev<mTreeHandler->GetTree().GetNumberOfLevels())
88 mProgress.IncNumberAddedFiles();
90 //=====================================================================
92 //=====================================================================
93 void TreeHandlerImageAdder::AddDirectoryRecursor(const std::string &dirpath,
96 GimmickDebugMessage(4,"Scanning '"<<dirpath<<"'"<<std::endl);
97 mProgress.IncNumberScannedDirs();
99 if ( !fs::exists( dirpath ) ) return;
100 time_t lastModif=fs::last_write_time(dirpath);
102 fs::directory_iterator end_itr; // default construction yields past-the-end
103 for ( fs::directory_iterator itr( dirpath );
107 // If is directory & recurse : do recurse
108 if ( fs::is_directory(itr->status()) )
112 AddDirectoryRecursor( itr->string(), recursive);
117 bool valid=mTimestampHandler->AddDirectory(dirpath, itr->string(), lastModif, time(0));
120 mProgress.IncNumberScannedFiles();
121 if (IsHandledFile(itr->string()))
123 mProgress.IncNumberHandledFiles();
124 AddFile( itr->string() );
126 mProgressSignal(mProgress);
127 if (mProgress.GetStop())
137 //=======================================================================