restore file state when restart (Modified patch from Phenom)

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@6807 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
csoler 2013-10-06 12:56:37 +00:00
parent e9ccc323a2
commit 67517ad074
2 changed files with 14 additions and 9 deletions

View file

@ -1017,7 +1017,7 @@ bool ftController::handleAPendingRequest()
std::cerr << "Requesting pending hash " << req.mHash << std::endl ; std::cerr << "Requesting pending hash " << req.mHash << std::endl ;
#endif #endif
FileRequest(req.mName, req.mHash, req.mSize, req.mDest, TransferRequestFlags(req.mFlags), req.mSrcIds); FileRequest(req.mName, req.mHash, req.mSize, req.mDest, TransferRequestFlags(req.mFlags), req.mSrcIds, req.mState);
{ {
// See whether there is a pendign chunk map recorded for this hash. // See whether there is a pendign chunk map recorded for this hash.
@ -1045,6 +1045,7 @@ bool ftController::handleAPendingRequest()
#endif #endif
(fit->second)->mCreator->setAvailabilityMap(rsft->compressed_chunk_map) ; (fit->second)->mCreator->setAvailabilityMap(rsft->compressed_chunk_map) ;
(fit->second)->mCreator->setChunkStrategy((FileChunksInfo::ChunkStrategy)(rsft->chunk_strategy)) ; (fit->second)->mCreator->setChunkStrategy((FileChunksInfo::ChunkStrategy)(rsft->chunk_strategy)) ;
(fit->second)->mState=rsft->state;
} }
delete rsft ; delete rsft ;
@ -1074,7 +1075,7 @@ bool ftController::alreadyHaveFile(const std::string& hash, FileInfo &info)
bool ftController::FileRequest(const std::string& fname, const std::string& hash, bool ftController::FileRequest(const std::string& fname, const std::string& hash,
uint64_t size, const std::string& dest, TransferRequestFlags flags, uint64_t size, const std::string& dest, TransferRequestFlags flags,
const std::list<std::string> &_srcIds) const std::list<std::string> &_srcIds, uint16_t state)
{ {
std::list<std::string> srcIds(_srcIds) ; std::list<std::string> srcIds(_srcIds) ;
@ -1129,7 +1130,7 @@ bool ftController::FileRequest(const std::string& fname, const std::string& has
if (!mFtActive) if (!mFtActive)
{ {
/* store in pending queue */ /* store in pending queue */
ftPendingRequest req(fname, hash, size, dest, flags, srcIds); ftPendingRequest req(fname, hash, size, dest, flags, srcIds,state);
mPendingRequests.push_back(req); mPendingRequests.push_back(req);
return true; return true;
} }
@ -1488,6 +1489,8 @@ bool ftController::FileControl(const std::string& hash, uint32_t flags)
default: default:
return false; return false;
} }
IndicateConfigChanged() ;
return true; return true;
} }
@ -2109,6 +2112,7 @@ bool ftController::saveList(bool &cleanup, std::list<RsItem *>& saveData)
rft->file.filesize = pit->mSize; rft->file.filesize = pit->mSize;
RsDirUtil::removeTopDir(pit->mDest, rft->file.path); /* remove fname */ RsDirUtil::removeTopDir(pit->mDest, rft->file.path); /* remove fname */
rft->flags = pit->mFlags.toUInt32(); rft->flags = pit->mFlags.toUInt32();
rft->state = pit->mState;
rft->allPeerIds.ids = pit->mSrcIds; rft->allPeerIds.ids = pit->mSrcIds;
} }
@ -2178,7 +2182,7 @@ bool ftController::loadList(std::list<RsItem *>& load)
#ifdef CONTROL_DEBUG #ifdef CONTROL_DEBUG
std::cerr << "ftController::loadList(): requesting " << rsft->file.name << ", " << rsft->file.hash << ", " << rsft->file.filesize << std::endl ; std::cerr << "ftController::loadList(): requesting " << rsft->file.name << ", " << rsft->file.hash << ", " << rsft->file.filesize << std::endl ;
#endif #endif
FileRequest(rsft->file.name, rsft->file.hash, rsft->file.filesize, rsft->file.path, TransferRequestFlags(rsft->flags), rsft->allPeerIds.ids); FileRequest(rsft->file.name, rsft->file.hash, rsft->file.filesize, rsft->file.path, TransferRequestFlags(rsft->flags), rsft->allPeerIds.ids, rsft->state);
{ {
RsStackMutex mtx(ctrlMutex) ; RsStackMutex mtx(ctrlMutex) ;

View file

@ -96,11 +96,11 @@ class ftPendingRequest
public: public:
ftPendingRequest(const std::string& fname, const std::string& hash, ftPendingRequest(const std::string& fname, const std::string& hash,
uint64_t size, const std::string& dest, TransferRequestFlags flags, uint64_t size, const std::string& dest, TransferRequestFlags flags,
const std::list<std::string> &srcIds) const std::list<std::string> &srcIds, uint16_t state)
: mName(fname), mHash(hash), mSize(size), : mName(fname), mHash(hash), mSize(size),
mDest(dest), mFlags(flags),mSrcIds(srcIds) { return; } mDest(dest), mFlags(flags), mSrcIds(srcIds), mState(state) { return; }
ftPendingRequest() : mSize(0), mFlags(0) { return; } ftPendingRequest() : mSize(0), mFlags(0), mState(0) { return; }
std::string mName; std::string mName;
std::string mHash; std::string mHash;
@ -108,6 +108,7 @@ class ftPendingRequest
std::string mDest; std::string mDest;
TransferRequestFlags mFlags; TransferRequestFlags mFlags;
std::list<std::string> mSrcIds; std::list<std::string> mSrcIds;
uint16_t mState;
}; };
@ -132,7 +133,7 @@ class ftController: public CacheTransfer, public RsThread, public pqiMonitor, pu
bool FileRequest(const std::string& fname, const std::string& hash, bool FileRequest(const std::string& fname, const std::string& hash,
uint64_t size, const std::string& dest, TransferRequestFlags flags, uint64_t size, const std::string& dest, TransferRequestFlags flags,
const std::list<std::string> &sourceIds); const std::list<std::string> &sourceIds, uint16_t state = ftFileControl::DOWNLOADING);
/// Do we already have this file, either in download or in file lists ? /// Do we already have this file, either in download or in file lists ?
bool alreadyHaveFile(const std::string& hash, FileInfo &info); bool alreadyHaveFile(const std::string& hash, FileInfo &info);