#include "ContinuousWatchEnqueue.h" #include "../../Interface/Server.h" #include #include "../../stringtools.h" #include "../ClientService.h" #include #include "../../Interface/SettingsReader.h" #include "../client.h" #include "../../urbackupserver/database.h" ContinuousWatchEnqueue::ContinuousWatchEnqueue() : update_patterns(true) { } void ContinuousWatchEnqueue::On_FileNameChanged( const std::string & strOldFileName, const std::string & strNewFileName, bool closed ) { if(!closed) return; std::vector > dirs = getWatchDirs(strOldFileName, strNewFileName); for(size_t i=0;i > dirs = getWatchDirs(strOldFileName, strNewFileName); for(size_t i=0;i dirs = getWatchDirs(strFileName); for(size_t i=0;i dirs = getWatchDirs(strFileName); for(size_t i=0;i dirs = getWatchDirs(strFileName); for(size_t i=0;i dirs = getWatchDirs(strFileName); for(size_t i=0;i dirs = getWatchDirs(strDirName); for(size_t i=0;i& sequences) { if(queue.getDataSize()==0) return; std::string data(queue.getDataPtr(), queue.getDataPtr()+queue.getDataSize()); CWData header; header.addChar(CHANGE_HEADER); header.addUInt(static_cast(sequences.size())); for(size_t i=0;i::iterator seq_start_it = sequences_start.find(sequences[i].id); if(seq_start_it!=sequences_start.end()) { header.addInt64(seq_start_it->second); } else { continue; } header.addInt64(sequences[i].stop); sequences_start[sequences[i].id]=sequences[i].stop; } data.insert(data.begin(), header.getDataPtr(), header.getDataPtr()+header.getDataSize()); if(ClientConnector::tochannelSendChanges(data.data(), data.size())) { queue.clear(); } } void ContinuousWatchEnqueue::addWatchdir( SWatchItem item ) { item.dir = strlower(item.dir); std::vector::iterator iter=std::find(watchdirs.begin(), watchdirs.end(), item); if(iter==watchdirs.end()) { watchdirs.push_back(item); On_ResetAllInt(item.dir); } } void ContinuousWatchEnqueue::removeWatchdir( SWatchItem item ) { item.dir = strlower(item.dir); std::vector::iterator iter=std::find(watchdirs.begin(), watchdirs.end(), item); if(iter!=watchdirs.end()) { watchdirs.erase(iter); On_ResetAllInt(item.dir); } } std::vector ContinuousWatchEnqueue::getWatchDirs( const std::string& fn ) { std::string fn_lower = strlower(fn); std::vector dirs; for(size_t i=0;i > ContinuousWatchEnqueue::getWatchDirs( const std::string& fn1, const std::string& fn2 ) { std::string fn1_lower = strlower(fn1); std::string fn2_lower = strlower(fn1); std::vector > dirs; for(size_t i=0;i curr_settings(Server->createFileSettingsReader("urbackup/data/settings.cfg")); if(curr_settings.get()) { std::string val; if(curr_settings->getValue("continuous_exclude_files", &val) || curr_settings->getValue("continuous_exclude_files_def", &val) ) { exlude_dirs = IndexThread::parseExcludePatterns(val); } else { exlude_dirs = IndexThread::parseExcludePatterns(std::string()); } if(curr_settings->getValue("continuous_include_files", &val) || curr_settings->getValue("continuous_include_files_def", &val) ) { include_dirs = IndexThread::parseIncludePatterns(val, include_depth, include_prefix); } } else { IndexThread::parseExcludePatterns(std::string()); } } bool ContinuousWatchEnqueue::pathIncluded( const std::string& path, const std::string& named_path ) { if( IndexThread::isExcluded(exlude_dirs, path) || IndexThread::isExcluded(exlude_dirs, named_path) ) { return false; } if( !IndexThread::isIncluded(include_dirs, include_depth, include_prefix, path, NULL) && !IndexThread::isIncluded(include_dirs, include_depth, include_prefix, named_path, NULL) ) { return false; } return true; } void ContinuousWatchEnqueue::setupDatabaseAccess() { if(journal_dao.get()==NULL) { journal_dao.reset(new JournalDAO(Server->getDatabase(Server->getThreadID(), URBACKUPDB_SERVER))); } } int64 ContinuousWatchEnqueue::getStartUsn( int64 sequence_id ) { return sequences_start[sequence_id]; } void ContinuousWatchEnqueue::setStartUsn( int64 sequence_id, int64 seq_start ) { sequences_start[sequence_id]=seq_start; } void ContinuousWatchEnqueue::On_FileOpen( const std::string & strFileName ) { }