From f5fa2f9a682a74f4fb10be4687abcd30471e0c06 Mon Sep 17 00:00:00 2001 From: drbob Date: Thu, 27 Nov 2008 21:23:46 +0000 Subject: [PATCH] Added Function to move an 'extraFile' to another location. This will be used to retrieve channel files. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@844 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- libretroshare/src/ft/ftextralist.cc | 24 ++++++++++++++++++++++++ libretroshare/src/ft/ftextralist.h | 3 +++ libretroshare/src/ft/ftserver.cc | 7 +++++++ libretroshare/src/ft/ftserver.h | 2 ++ libretroshare/src/rsiface/rsfiles.h | 3 +++ 5 files changed, 39 insertions(+) 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; + /***