void Dispatcher::Did_LocalFile_AddOrModify_Execute(filesystem::path relativeFilePath) { _LOG_DEBUG(m_localUserName << " calls LocalFile_AddOrModify_Execute"); filesystem::path absolutePath = m_rootDir / relativeFilePath; if (!filesystem::exists(absolutePath)) { //BOOST_THROW_EXCEPTION (Error::Dispatcher() << error_info_str("Update non exist file: " + absolutePath.string() )); _LOG_DEBUG("Update non exist file: " << absolutePath.string()); return; } FileItemPtr currentFile = m_fileState->LookupFile(relativeFilePath.generic_string()); if (currentFile && *Hash::FromFileContent(absolutePath) == Hash(currentFile->file_hash().c_str(), currentFile->file_hash().size()) // The following two are commented out to prevent front end from reporting intermediate files // should enable it if there is other way to prevent this // && last_write_time (absolutePath) == currentFile->mtime () // && status (absolutePath).permissions () == static_cast<filesystem::perms> (currentFile->mode ()) ) { _LOG_ERROR("Got notification about the same file [" << relativeFilePath << "]"); return; } if (currentFile && !currentFile->is_complete()) { _LOG_ERROR("Got notification about incomplete file [" << relativeFilePath << "]"); return; } int seg_num; HashPtr hash; tie(hash, seg_num) = m_objectManager.localFileToObjects(absolutePath, m_localUserName); try { m_actionLog->AddLocalActionUpdate(relativeFilePath.generic_string(), *hash, last_write_time(absolutePath), #if BOOST_VERSION >= 104900 status(absolutePath).permissions(), #else 0, #endif seg_num); // notify SyncCore to propagate the change m_core->localStateChangedDelayed(); } catch (filesystem::filesystem_error& error) { _LOG_ERROR("File operations failed on [" << relativeFilePath << "] (ignoring)"); } }
string Utils::osPath(const filesystem::path &path) { #ifdef __WIN32__ return nowide::narrow(path.generic_wstring()); #else return path.generic_string(); #endif }
void Dispatcher::Did_LocalFile_Delete_Execute(filesystem::path relativeFilePath) { filesystem::path absolutePath = m_rootDir / relativeFilePath; if (filesystem::exists(absolutePath)) { //BOOST_THROW_EXCEPTION (Error::Dispatcher() << error_info_str("Delete notification but file exists: " + absolutePath.string() )); _LOG_ERROR("DELETE command, but file still exists: " << absolutePath.string()); return; } m_actionLog->AddLocalActionDelete(relativeFilePath.generic_string()); // notify SyncCore to propagate the change m_core->localStateChangedDelayed(); }