X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=src2%2FcreaImageIOSynchron.cpp;h=f7e1807b0908b5a0ff82324c3fef40004d0bc89e;hb=6685b940296e57d4e3803765b986a6fe18d9be41;hp=9ec4bae4d3fcf4b7b68469d0f88debe0158c16ec;hpb=7ae1412df3d682f639683e751f46a3f07be16d0b;p=creaImageIO.git diff --git a/src2/creaImageIOSynchron.cpp b/src2/creaImageIOSynchron.cpp index 9ec4bae..f7e1807 100644 --- a/src2/creaImageIOSynchron.cpp +++ b/src2/creaImageIOSynchron.cpp @@ -1,8 +1,9 @@ #include #include #include +#include +//namespace fs = boost::filesystem; -namespace fs = boost::filesystem; //===================================================================== @@ -10,41 +11,41 @@ namespace fs = boost::filesystem; namespace creaImageIO { - //===================================================================== - #define QUERYSYNCDB(QUER,RES) \ + //===================================================================== + #define QUERYSYNCDB(QUER,RES) \ try \ - { \ + { \ RES = mDB->execQuery(QUER.c_str()); \ - } \ + } \ catch (CppSQLite3Exception& e) \ { \ GimmickError("SQLite query '"<execDML(UP.c_str()); \ } \ - catch (CppSQLite3Exception& e) \ + catch (CppSQLite3Exception& e) \ { \ GimmickError("SQLite update '"<open(pathDB.c_str()); // CREATING TABLES std::string command; - command = "CREATE TABLE "; - command += "ADD_OPS"; - command += "\n(\nADD_KEY INTEGER PRIMARY KEY"; - command += ",\nPATH text"; - command += ",\nRECURSIVE boolean"; - command += ",\nFILES_ADDED int"; - command += "\n)"; - UPDATESYNCDB(command); + command = "CREATE TABLE "; + command += "ADD_OPS"; + command += "\n(\nADD_KEY INTEGER PRIMARY KEY"; + command += ",\nPATH text"; + command += ",\nRECURSIVE boolean"; + command += ",\nFILES_ADDED int"; + command += ",\nREFERENCEDDB text"; + command += "\n)"; + UPDATESYNCDB(command); - command = "CREATE TABLE "; - command += "IGNORED_FILES"; - command += "\n(\nID INTEGER PRIMARY KEY"; - command += ",\nADD_KEY integer"; - command += ",\nPATH text"; - command += ",\nREMOVE boolean"; - command += ",\nTIME datetext"; - command += "\n)"; - UPDATESYNCDB(command); + command = "CREATE TABLE "; + command += "IGNORED_FILES"; + command += "\n(\nID INTEGER PRIMARY KEY"; + command += ",\nADD_KEY integer"; + command += ",\nPATH text"; + command += ",\nREMOVE boolean"; + command += ",\nTIME datetext"; + command += "\n)"; + UPDATESYNCDB(command); } //===================================================================== @@ -117,35 +119,35 @@ namespace creaImageIO } //===================================================================== - void Synchronizer::GetFileList(std::vector & list) + void Synchronizer::GetFileList(std::vector & list, const std::string& refdb) { - CleanList(); - list=mAddList; + CleanList(refdb); + list=mAddList; } //===================================================================== - void Synchronizer::GetIgnoredFiles(const std::string& key, std::vector &ignoreList) - { + void Synchronizer::GetIgnoredFiles(const std::string& key, std::vector &ignoreList) + { ignoreList=GetIgnoreList(key); - } + } - //===================================================================== - void Synchronizer::UpdateAddList() +//===================================================================== + void Synchronizer::UpdateAddList(const std::string& refdb) { - std::string query = "SELECT * FROM ADD_OPS"; + std::string query = "SELECT * FROM ADD_OPS WHERE REFERENCEDDB = '"+refdb+"';"; CppSQLite3Query res; QUERYSYNCDB(query, res); - while (!res.eof()) + while (!res.eof()) { - AddList temp = AddList(res); + AddList temp = AddList(res); mAddList.push_back(temp); - res.nextRow(); + res.nextRow(); } - } + } ///////////////////////////////////////////////////////////////////////////////////////////////// // remove an entry of the DB - //@param i_table : table where do the remove + //@param i_table : table where to do the remove // @param i_key : the add_key reference (one entry to remove for ADD_OP table, many for IGNORED_FILES table //@result : - ///////////////////////////////////////////////////////////////////////////////////////////////// @@ -153,46 +155,67 @@ namespace creaImageIO { std::string query = "DELETE FROM " + i_table + " WHERE ADD_KEY = '" + i_key +"'"; UPDATESYNCDB(query); + } + + ///////////////////////////////////////////////////////////////////////////////////////////////// + // remove several entries of the DB + // @param i_table : table where to do the remove + // @param i_attribute: attribute to match + // @param i_operand : operand to use + // @param i_val : the reference + //@result : - + ///////////////////////////////////////////////////////////////////////////////////////////////// + void Synchronizer::RemoveEntries(const std::string i_table, + const std::string i_attribute, + const std::string i_operand, + const std::string i_val) + { + std::stringstream query; + query<<"DELETE FROM "<::iterator it_add = mAddList.begin(); for(;it_add nbFiles == "0") { - RemoveEntry("ADD_OPS", it_add->key); - RemoveEntry("IGNORED_FILES", it_add->key); - + RemoveEntry("ADD_OPS", it_add->key); + RemoveEntry("IGNORED_FILES", it_add->key); + } } mAddList.clear(); - UpdateAddList(); + UpdateAddList(refdb); } - ///////////////////////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////////////////////// // Inserts a new add operation in the database // @param path: the path of the directory that was added - // @param recursive: shows if the action was called recursively or not - // @param nChildren: the number of files affected by the operation + // @param recursive: shows if the action was called recursively or not + // @param nChildren: the number of files affected by the operation + // @param refdb: the referenced database // @result : The operation has been added ///////////////////////////////////////////////////////////////////////////////////////////////// - void Synchronizer::InsertAddOp(const std::string& path, const std::string& recursive, const std::string& nChildren) + void Synchronizer::InsertAddOp(const std::string& path, const std::string& recursive, const std::string& nChildren, const std::string& refdb) { std::string insert; std::string pat=path.c_str(); CleanName(pat); - insert="INSERT INTO ADD_OPS (PATH,RECURSIVE,FILES_ADDED) VALUES('"; + insert="INSERT INTO ADD_OPS (PATH,RECURSIVE,FILES_ADDED,REFERENCEDDB) VALUES('"; insert+=pat+"','"; insert+=recursive+"',"; - insert+=nChildren+");"; + insert+=nChildren+",'"; + insert+=refdb+"');"; UPDATESYNCDB(insert); } @@ -205,11 +228,11 @@ namespace creaImageIO // @result : The file has been inserted ///////////////////////////////////////////////////////////////////////////////////////////////// - void Synchronizer::InsertIgnoreFile(const std::string& addKey, const std::string& path, const std::string& remove, const std::string& time) + void Synchronizer::InsertIgnoreFile(const std::string& addKey, const std::string& path, const std::string& remove, const std::string& time, const std::string& refdb ) { std::string pat=path.c_str(); CleanName(pat); - std::string id=GetAttribute("ID","IGNORED_FILES","PATH",pat); + std::string id=GetAttribute("ID","IGNORED_FILES","PATH",pat,refdb); if(id.compare("")==0) { std::string insert; @@ -217,19 +240,35 @@ namespace creaImageIO insert+=addKey+"','"; insert+=pat+"','"; insert+=remove+"',"; - insert+=time+");"; + insert+=time+");"; UPDATESYNCDB(insert); } - else + else { //Gets the add key - std::string ak=GetAttribute("ADD_KEY","IGNORED_FILES","ID",id); - //Sets the new add key attribute for the file - SetAttribute("ADD_KEY","IGNORED_FILES",addKey,"ID", id); - //Sets the new remove attribute for the file - SetAttribute("REMOVE","IGNORED_FILES",remove,"ID", id); - //Sets the new time attribute for the file - SetAttribute("TIME","IGNORED_FILES",time,"ID", id); + std::string ak=GetAttribute("ADD_KEY","IGNORED_FILES","ID",id,refdb); + //gets the parent database to check if the file has been added to the current database + std::string parentDB=GetAttribute("*","ADD_OPS","ADD_KEY",ak,refdb); + //If there is no such entry, add it + if(parentDB.compare("")==0) + { + std::string insert; + insert="INSERT INTO IGNORED_FILES (ADD_KEY,PATH,REMOVE,TIME) VALUES('"; + insert+=addKey+"','"; + insert+=pat+"','"; + insert+=remove+"',"; + insert+=time+");"; + UPDATESYNCDB(insert); + } + else + { + //Sets the new add key attribute for the file + SetAttribute("ADD_KEY","IGNORED_FILES",addKey,"ID", id,refdb); + //Sets the new remove attribute for the file + SetAttribute("REMOVE","IGNORED_FILES",remove,"ID", id,refdb); + //Sets the new time attribute for the file + SetAttribute("TIME","IGNORED_FILES",time,"ID", id,refdb); + } } } @@ -240,20 +279,20 @@ namespace creaImageIO ///////////////////////////////////////////////////////////////////////////////////////////////// std::vector Synchronizer::GetIgnoreList(const std::string &i_key) { - mIgnoreList.clear(); + mIgnoreList.clear(); std::vector i_names; - std::string query = "SELECT * FROM IGNORED_FILES WHERE ADD_KEY = "; - query+=i_key; + std::string query = "SELECT * FROM IGNORED_FILES WHERE ADD_KEY = "; + query+=i_key; CppSQLite3Query res; QUERYSYNCDB(query, res); - while (!res.eof()) + while (!res.eof()) { - RemoveList temp = RemoveList(res); - if(temp.remove.compare("0")==0) - { - mIgnoreList.push_back(temp); - } - res.nextRow(); + RemoveList temp = RemoveList(res); + if(temp.remove.compare("0")==0) + { + mIgnoreList.push_back(temp); + } + res.nextRow(); } std::vector::iterator it; @@ -261,10 +300,10 @@ namespace creaImageIO { i_names.push_back((*it).path); } - return i_names; + return i_names; } - ///////////////////////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////////////////////// // Gets the required attribute in the required table // @param attribute: the attribute to look for // @param table: the table to look in @@ -273,55 +312,112 @@ namespace creaImageIO // @result : required attribute ///////////////////////////////////////////////////////////////////////////////////////////////// std::string Synchronizer::GetAttribute(const std::string& attribute, - const std::string& table, - const std::string& searchParam, - const std::string& searchValue) + const std::string& table, + const std::string& searchParam, + const std::string& searchValue, + const std::string& refdb) { std::stringstream query; - std::string result; - std::string sVal=searchValue.c_str(); - CleanName(sVal); - query<<"SELECT "< i_names; + std::string query = "SELECT PATH, REMOVE FROM IGNORED_FILES"; + CppSQLite3Query res; + QUERYSYNCDB(query, res); + while (!res.eof()) + { + std::string file(res.getStringField(0)); + std::string ignore(res.getStringField(1)); + mList[file] = ignore == "0"? true : false; + res.nextRow(); + } + } + + bool Synchronizer::isIndexed(const std::string filename) + { + bool valid = true; + std::string name(filename); + boost::algorithm::replace_all( name,"\\" , "/"); + std::map ::iterator it_list = mList.begin(); + for(;it_list != mList.end(); it_list++) + { + if(it_list->first == name) + { + valid = false; + break; + } + } + return valid; + } +} + +