std::vector<std::string>::const_iterator i;
for (i=filenames.begin();i!=filenames.end();++i)
{
- mTimestampHandler->AddFile((*i), fs::last_write_time(*i), time(0),mCurrentDB);
+
mProgress.IncNumberScannedFiles();
if (IsHandledFile(*i))
{
rec<<recurse;
mSynchronizer->InsertAddOp(directory,rec.str(),"0",mCurrentDB);
std::string addKey=mSynchronizer->GetAttribute("ADD_KEY","ADD_OPS","PATH",directory,mCurrentDB);
+ mTreeHandler->BeginTransaction();
+ mSynchronizer->GetList();
AddDirectoryRecursor( directory, recurse, addKey );
int nFiles=GetProgress().GetNumberAddedFiles();
files<<nFiles;
mSynchronizer->SetAttribute("FILES_ADDED","ADD_OPS",files.str(),"ADD_KEY",addKey,mCurrentDB);
+ mTreeHandler->EndTransaction();
GimmickDebugMessage(3,mProgress<<std::endl);
}
}
}
+
//=====================================================================
void TreeHandlerImageAdder::AddDirectoryRecursor(const std::string &dirpath,
bool recursive,
if ( !fs::exists( dirpath ) ) return;
time_t lastModif=fs::last_write_time(dirpath);
+
fs::directory_iterator end_itr; // default construction yields past-the-end
for ( fs::directory_iterator itr( dirpath );
itr != end_itr;
++itr )
- {
+ {
// If is directory & recurse : do recurse
if ( fs::is_directory(itr->status()) )
{
else
{
std::string parent_id;
- bool valid=mTimestampHandler->AddDirectory(dirpath, itr->string(), lastModif, time(0),mCurrentDB);
+ // tTest if directory (and only it) exists or not.
+ bool valid = mSynchronizer->isIndexed(itr->string());//true;//=mTimestampHandler->AddDirectory(dirpath, itr->string(), lastModif, time(0),mCurrentDB);
if(valid)
{
mProgress.IncNumberScannedFiles();
mProgress.IncNumberHandledFiles();
AddFile( itr->string() );
mTreeHandler->GetTopLevelNodeId("FullFileName",itr->string(),parent_id);
- mTimestampHandler->SetAttribute("TopLevelNodeId",parent_id,"PATH",itr->string());
std::stringstream removedOn;
removedOn<<time(0);
mSynchronizer->InsertIgnoreFile(addKey, itr->string(),"0",removedOn.str(),mCurrentDB);
}
+
mProgressSignal(mProgress);
if (mProgress.GetStop())
{
//itr = end_itr;
break;
}
+
}
- mTimestampHandler->SetAttribute("TopLevelNodeId",parent_id,"PATH",dirpath);
}
}
//For the new files, add them
for (i=newFiles.begin();i!=newFiles.end();++i)
{
- mTimestampHandler->AddFile((*i), fs::last_write_time(*i), time(0),mCurrentDB);
if (IsHandledFile(*i))
{
std::stringstream removedOn;
std::string databaseVal;
mTreeHandler->GetAttribute("Image","FullFileName",file,a->GetKey(),databaseVal);
std::string fileVal=attr.find(a->GetKey())->second;
- if ( a->GetFlags()==0 && databaseVal.compare(fileVal)!=0 )
+ if ( a->GetFlags()==0 && databaseVal == fileVal)
{
if(repair)
{
}
}
+ void TreeHandlerImageAdder::SaveAs(const std::vector<std::string>& filenames, std::vector<vtkImageData *> i_images)
+ {
+ std::vector<std::string>::const_iterator it_file = filenames.begin();
+ std::vector<vtkImageData *>::iterator it_image = i_images.begin();
+ /* mWriter.CanWrite(".jpeg");
+ for(; it_file != filenames.end(); ++it_file, ++it_image)
+ mWriter.WriteImage(it_file->c_str(), (vtkImageData &)it_image);*/
+ }
+
+ //=======================================================================
+ void TreeHandlerImageAdder::FindNodePartial(tree::Node* parent, int level, const std::string& searchParam, const std::string& searchVal, tree::Node*& node)
+ {
+ if(level>1)
+ {
+ std::vector<tree::Node*>::iterator iter;
+ for(iter=parent->GetChildrenList().begin();iter!=parent->GetChildrenList().end() && node==0 ;++iter)
+ {
+ FindNodePartial(*iter,level-1,searchParam,searchVal,node);
+ }
+ }
+ else
+ {
+ if(parent->GetAttribute(searchParam).find(searchVal)<9000)
+ {
+ node=parent;
+ return;
+ }
+
+ }
+ }
+
//=======================================================================
+ void TreeHandlerImageAdder::CopyFiles(const std::vector<std::string>& filenames, const std::string directory )
+ {
+ std::vector<std::string>::const_iterator i;
+ if(!boost::filesystem::exists(directory))
+ {
+ boost::filesystem::create_directory(boost::filesystem::path(directory));
+ mSynchronizer->InsertAddOp(directory,"0","0",mCurrentDB);
+ }
+ std::string addKey=mSynchronizer->GetAttribute("ADD_KEY","ADD_OPS","PATH",directory,mCurrentDB);
+ size_t last;
+ std::vector<std::string> newNames;
+ for(i=filenames.begin();i!=filenames.end();++i)
+ {
+ std::string dir=directory.c_str();
+ if(boost::filesystem::exists(*i) && (*i).find(dir)==std::string::npos)
+ {
+ std::string path=*i;
+ last=(*i).find_last_of('/');
+ std::string f="\\"+(*i).substr(last+1);
+
+ int p=1;
+ std::stringstream out;
+ out<<directory<<f;
+ while(boost::filesystem::exists(out.str()))
+ {
+ out.str("");
+ out<<directory<<f.substr(0,f.size()-4)<<"("<<p<<")"<<f.substr(f.size()-4);
+ p++;
+ }
+ std::string result=out.str();
+ boost::filesystem::copy_file((*i),result);
+
+ //To update image database
+ mTreeHandler->SetAttribute("Image","FullFileName",result,"FullFileName", (*i));
+
+ //To update maintenance database
+ //1.Add the new path and increase number of children on new operation.
+ std::stringstream removedOn;
+ removedOn<<time(0);
+ //Inserts the file
+ mSynchronizer->InsertIgnoreFile(addKey, result,"0",removedOn.str(),mCurrentDB);
+ //Gets the number of files added
+ int files=atoi((mSynchronizer->GetAttribute("FILES_ADDED","ADD_OPS","ADD_KEY",addKey,mCurrentDB)).c_str());
+ files=files+1;
+ std::stringstream fil;
+ fil<<files;
+ //Sets the new number of files
+ mSynchronizer->SetAttribute("FILES_ADDED","ADD_OPS",fil.str(),"ADD_KEY",addKey,mCurrentDB);
+ fil.str("");
+
+ //2.Set the old path as removed and decrease number of children on old operation.
+ //Gets the old add key
+ std::string oldAddKey=mSynchronizer->GetAttribute("ADD_KEY","IGNORED_FILES","PATH",path,mCurrentDB);
+ //Sets the file as removed
+ mSynchronizer->SetAttribute("REMOVE","IGNORED_FILES","1","PATH = '"+path+"' AND ADD_KEY",oldAddKey,mCurrentDB);
+ //Gets the number of files added
+ files=atoi((mSynchronizer->GetAttribute("FILES_ADDED","ADD_OPS","ADD_KEY",oldAddKey,mCurrentDB)).c_str());
+ files=files-1;
+ fil<<files;
+ //Sets the new number of files
+ mSynchronizer->SetAttribute("FILES_ADDED","ADD_OPS",fil.str(),"ADD_KEY",oldAddKey,mCurrentDB);
+
+ }
+
+ }
+ }
+
+ //=======================================================================
+
+ void TreeHandlerImageAdder::DeleteDriveFromMainDB(const std::string& drive)
+ {
+ //Delete from local database and others
+ tree::Node* node=0;
+ mTreeHandler->LoadChildren(NULL,4);
+ FindNodePartial(mTreeHandler->GetTree().GetChildrenList()[0],3,"FullFileName",drive,node);
+ while(node!=0)
+ {
+ mTreeHandler->Remove(node);
+ node=0;
+ mTreeHandler->LoadChildren(NULL,4);
+ FindNodePartial(mTreeHandler->GetTree().GetChildrenList()[0],3,"FullFileName",drive,node);
+ }
+ }
+
+ //=======================================================================
+
+ void TreeHandlerImageAdder::DeleteDriveFromOtherDB(const std::string& drive)
+ {
+ //Delete from maintenance
+ mSynchronizer->RemoveEntries("ADD_OPS", "PATH", "LIKE", drive+"%");
+ mSynchronizer->RemoveEntries("IGNORED_FILES", "PATH", "LIKE", drive+"%");
+ }
+
+ //=======================================================================
+ void TreeHandlerImageAdder::EditField(tree::Node* node, const std::string& name, const std::string& key, const std::string& val)
+ {
+ node->SetAttribute(key,val);
+ mTreeHandler->SetAttribute(node,key,val);
+ }
+
+ //=======================================================================
+ void TreeHandlerImageAdder::GetAttributes(const std::vector<std::string>& params,
+ const std::string& filename,
+ std::vector<std::string>& results)
+ {
+ std::vector<std::string>::const_iterator i;
+ std::string result;
+ for(i=params.begin();i!=params.end();i++)
+ {
+ mTreeHandler->GetAttribute("Image","FullFileName",filename,*i,result);
+ results.push_back(result);
+ }
+ }
}