bool Filemanager::update(std::string file_path) { Updater *updater = new Updater(); std::pair<std::map<int, int>, std::vector<std::pair<long, long> > > updater_result = updater->get_similar(file_path); std::map<int, int> similar_chunk = updater_result.first; std::vector<std::pair<long, long> > diff = updater_result.second; // std::cout << "similar:" << std::endl; // updater->show_similar(similar_chunk); // std::cout << "diff bytes:" << std::endl; updater->show_diff(diff); this->mworker = new Metaworker(); this->mworker->load(file_path); std::vector<int> chunk_to_del; this->mworker->show(); for(int i = 0; i < mworker->mdata_size(); i++) { if(similar_chunk.find(i) == similar_chunk.end()) { // std::cout << i << " "; chunk_to_del.push_back(i); } else { mworker->mdata[i].start += ( *(similar_chunk.find(i))).second - 1; mworker->mdata[i].finish += ( *(similar_chunk.find(i))).second - 1; } } // std::cout << std::endl << "old mdata: " << std::endl;; for(int i = chunk_to_del.size() - 1;i >= 0; i--) { // std::cout << "num: " << i << " chunk:" << chunk_to_del[i] << std::endl; this->rm_file(this->mworker->get(chunk_to_del[i]).cipher_hash); this->mworker->remove(chunk_to_del[i]); } for(int i = 0; i < diff.size(); i++) { this->segmentate(file_path, diff[i].first, diff[i].second); } std::cout << std::endl << "new mdata: " << std::endl; this->mworker->sort(); this->mworker->save(); // this->mworker->save(); return true; }