diff --git a/libretroshare/src/ft/ftextralist.cc b/libretroshare/src/ft/ftextralist.cc index 0c44eb38e..01d1d4acc 100644 --- a/libretroshare/src/ft/ftextralist.cc +++ b/libretroshare/src/ft/ftextralist.cc @@ -197,6 +197,30 @@ bool ftExtraList::removeExtraFile(std::string hash, uint32_t flags) return true; } +bool ftExtraList::moveExtraFile(std::string fname, std::string hash, uint64_t size, + std::string destpath) +{ + RsStackMutex stack(extMutex); + + std::map::iterator it; + it = mFiles.find(hash); + if (it == mFiles.end()) + { + return false; + } + + std::string path = destpath + '/' + fname; + if (0 == rename(it->second.info.path.c_str(), path.c_str())) + { + /* rename */ + it->second.info.path = path; + it->second.info.fname = fname; + IndicateConfigChanged(); + } + + return true; +} + bool ftExtraList::cleanupOldFiles() diff --git a/libretroshare/src/ft/ftextralist.h b/libretroshare/src/ft/ftextralist.h index 48321fa58..e09eb1087 100644 --- a/libretroshare/src/ft/ftextralist.h +++ b/libretroshare/src/ft/ftextralist.h @@ -121,6 +121,9 @@ bool addExtraFile(std::string path, std::string hash, uint64_t size, uint32_t period, uint32_t flags); bool removeExtraFile(std::string hash, uint32_t flags); +bool moveExtraFile(std::string fname, std::string hash, uint64_t size, + std::string destpath); + /*** * Hash file, and add to the files, diff --git a/libretroshare/src/ft/ftserver.cc b/libretroshare/src/ft/ftserver.cc index abd35c9da..5e2144d05 100644 --- a/libretroshare/src/ft/ftserver.cc +++ b/libretroshare/src/ft/ftserver.cc @@ -301,6 +301,13 @@ bool ftServer::ExtraFileStatus(std::string localpath, FileInfo &info) return mFtExtra->hashExtraFileDone(localpath, info); } +bool ftServer::ExtraFileMove(std::string fname, std::string hash, uint64_t size, + std::string destpath) +{ + return mFtExtra->moveExtraFile(fname, hash, size, destpath); +} + + /***************************************************************/ /******************** Directory Listing ************************/ /***************************************************************/ diff --git a/libretroshare/src/ft/ftserver.h b/libretroshare/src/ft/ftserver.h index cfad5e77b..3957e5754 100644 --- a/libretroshare/src/ft/ftserver.h +++ b/libretroshare/src/ft/ftserver.h @@ -130,6 +130,8 @@ virtual bool ExtraFileRemove(std::string hash, uint32_t flags); virtual bool ExtraFileHash(std::string localpath, uint32_t period, uint32_t flags); virtual bool ExtraFileStatus(std::string localpath, FileInfo &info); +virtual bool ExtraFileMove(std::string fname, std::string hash, uint64_t size, + std::string destpath); /*** diff --git a/libretroshare/src/rsiface/rsfiles.h b/libretroshare/src/rsiface/rsfiles.h index 511db19fd..3f8575035 100644 --- a/libretroshare/src/rsiface/rsfiles.h +++ b/libretroshare/src/rsiface/rsfiles.h @@ -119,6 +119,9 @@ virtual bool ExtraFileRemove(std::string hash, uint32_t flags) = 0; virtual bool ExtraFileHash(std::string localpath, uint32_t period, uint32_t flags) = 0; virtual bool ExtraFileStatus(std::string localpath, FileInfo &info) = 0; +virtual bool ExtraFileMove(std::string fname, std::string hash, uint64_t size, + std::string destpath) = 0; + /***