made contextual menus in FT more contextual, added info about transfer type and chunking strategy, load/save of transfer flags

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@2114 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
csoler 2010-01-22 23:23:37 +00:00
parent 9182091917
commit 0e7f9df638
9 changed files with 177 additions and 111 deletions

View file

@ -359,6 +359,7 @@ void ChunkMap::getChunksInfo(FileChunksInfo& info) const
info.file_size = _file_size ;
info.chunk_size = _chunk_size ;
info.chunks = _map ;
info.strategy = _strategy ;
info.active_chunks.clear() ;

View file

@ -112,6 +112,7 @@ bool ftController::getFileDownloadChunksDetails(const std::string& hash,FileChun
return false ;
it->second.mCreator->getChunkMap(info) ;
info.flags = it->second.mFlags ;
return true ;
}
@ -481,9 +482,11 @@ bool ftController::completeFile(std::string hash)
callbackCode = fc->mCallbackCode;
mDataplex->removeTransferModule(hash_to_suppress) ;
uint32_t flgs = fc->mFlags ;
mDownloads.erase(it);
mTurtle->stopMonitoringFileTunnels(hash_to_suppress) ;
if(flgs & RS_FILE_HINTS_NETWORK_WIDE)
mTurtle->stopMonitoringFileTunnels(hash_to_suppress) ;
} /******* UNLOCKED ********/
@ -773,7 +776,9 @@ bool ftController::FileRequest(std::string fname, std::string hash,
else
{
/* do a source search - for any extra sources */
if (mSearch->search(hash, RS_FILE_HINTS_REMOTE | RS_FILE_HINTS_SPEC_ONLY, info))
// add sources only in direct mode
//
if ((!(flags & RS_FILE_HINTS_NETWORK_WIDE)) && mSearch->search(hash, RS_FILE_HINTS_REMOTE | RS_FILE_HINTS_SPEC_ONLY, info))
{
/* do something with results */
#ifdef CONTROL_DEBUG
@ -840,7 +845,10 @@ bool ftController::FileRequest(std::string fname, std::string hash,
if(flags & RS_FILE_HINTS_NETWORK_WIDE)
mTurtle->monitorFileTunnels(fname,hash,size) ;
else
{
std::cerr << "Warning: no flags supplied. Assuming availability. This is probably a bug." << std::endl ;
flags |= RS_FILE_HINTS_ASSUME_AVAILABILITY ;
}
bool assume_source_availability = (flags & RS_FILE_HINTS_ASSUME_AVAILABILITY) > 0 ;
@ -1498,7 +1506,7 @@ std::list<RsItem *> ftController::saveList(bool &cleanup)
rft->file.hash = fit->second.mHash;
rft->file.filesize = fit->second.mSize;
rft->file.path = RsDirUtil::removeTopDir(fit->second.mDestination); /* remove fname */
//rft->flags = fit->second.mFlags;
rft->flags = fit->second.mFlags;
fit->second.mTransfer->getFileSources(rft->allPeerIds.ids);
@ -1560,7 +1568,7 @@ bool ftController::loadList(std::list<RsItem *> load)
/* This will get stored on a waiting list - until the
* config files are fully loaded
*/
FileRequest(rsft->file.name, rsft->file.hash, rsft->file.filesize, rsft->file.path, 0, rsft->allPeerIds.ids);
FileRequest(rsft->file.name, rsft->file.hash, rsft->file.filesize, rsft->file.path, rsft->flags, rsft->allPeerIds.ids);
{
RsStackMutex mtx(ctrlMutex) ;

View file

@ -264,6 +264,8 @@ class FileChunksInfo
uint64_t file_size ; // real size of the file
uint32_t chunk_size ; // size of chunks
uint32_t flags ;
uint32_t strategy ;
// dl state of chunks. Only the last chunk may have size < chunk_size
std::vector<ChunkState> chunks ;

View file

@ -197,6 +197,7 @@ uint32_t RsFileConfigSerialiser::sizeTransfer(RsFileTransfer *item)
s += 4; /* lrate */
s += 4; /* ltransfer */
s += 4; // chunk_strategy
s += 4; // flags
s += 4; // chunk map size
s += 4*item->compressed_chunk_map._map.size(); // compressed_chunk_map
@ -241,6 +242,7 @@ bool RsFileConfigSerialiser::serialiseTransfer(RsFileTransfer *item, void *d
ok &= setRawUInt32(data, tlvsize, &offset, item->lrate);
ok &= setRawUInt32(data, tlvsize, &offset, item->ltransfer);
ok &= setRawUInt32(data, tlvsize, &offset, item->flags);
ok &= setRawUInt32(data, tlvsize, &offset, item->chunk_strategy);
ok &= setRawUInt32(data, tlvsize, &offset, item->compressed_chunk_map._map.size());
@ -306,6 +308,7 @@ RsFileTransfer *RsFileConfigSerialiser::deserialiseTransfer(void *data, uint32_t
ok &= getRawUInt32(data, rssize, &offset, &(item->lrate));
ok &= getRawUInt32(data, rssize, &offset, &(item->ltransfer));
ok &= getRawUInt32(data, rssize, &offset, &(item->flags));
ok &= getRawUInt32(data, rssize, &offset, &(item->chunk_strategy));
uint32_t map_size = 0 ;
ok &= getRawUInt32(data, rssize, &offset, &map_size);

View file

@ -207,6 +207,7 @@ class RsFileTransfer: public RsItem
uint32_t ltransfer;
// chunk information
uint32_t flags ;
uint32_t chunk_strategy ; // strategy flags for chunks
CompressedChunkMap compressed_chunk_map ; // chunk availability (bitwise)
};