Changes to make retroshare-nogui able to access file listings.

- made findDirectory() more liberal.
 - use PeerId for name of FileIndex.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-rpc-b1@6280 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
drbob 2013-03-25 19:00:04 +00:00
parent 350ab5fd94
commit c1f6bcd765
2 changed files with 22 additions and 7 deletions

View File

@ -50,6 +50,8 @@ static const char FILE_CACHE_SEPARATOR_CHAR = '|' ;
* #define FI_DEBUG_ALL 1
****/
#define FI_DEBUG 1
static RsMutex FIndexPtrMtx("FIndexPtrMtx") ;
std::tr1::unordered_set<void*> FileIndex::_pointers ;
@ -350,7 +352,14 @@ DirEntry *DirEntry::findDirectory(const std::string& fpath)
return it->second;
}
return (it->second)->findDirectory(rempath);
// Adding more lenient directory look up.
// returns lower directory to fpath is a FILE.
DirEntry *subdir = (it->second)->findDirectory(rempath);
if (subdir)
return subdir;
else
return it->second;
}
@ -780,7 +789,7 @@ int FileIndex::loadIndex(const std::string& filename, const std::string& expecte
#ifdef FI_DEBUG
std::cerr << "FileIndex::loadIndex expected hash does not match" << std::endl;
std::cerr << "Expected hash: " << expectedHash << std::endl;
std::cerr << "Hash found: " << tmpout.str() << std::endl;
std::cerr << "Hash found: " << tmpout << std::endl;
#endif
return 0;
}

View File

@ -90,17 +90,23 @@ int FileIndexStore::loadCache(const CacheData &data)
// from the cache. Doing this, the file list still shows in a session where we deleted a friend, but will be removed
// at next restart.
//
peerState ps;
mPeerMgr->getFriendNetStatus(data.pid, ps);
std::string peername = ps.name + " (" + ps.location + ")";
//peerState ps;
//mPeerMgr->getFriendNetStatus(data.pid, ps);
//std::string peername = ps.name + " (" + ps.location + ")";
if (finew->loadIndex(data.path + '/' + data.name, data.hash, data.size))
{
#ifdef FIS_DEBUG2
std::cerr << "FileIndexStore::loadCache() Succeeded!" << std::endl;
#endif
/* set the name */
finew->root->name = peername; // data.pid; // HACK HERE TODO XXX. name;
/* This is not the place to set the peername.
* It is a hack, which makes it programmatically impossible
* to get the file data out....
*
* peername should not be used in dbase.
*/
finew->root->name = data.pid;
if (local)
{