mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-02 06:06:10 -04:00
- added some optimization to RequestDirDetails internal functions
- improved sorting/selection in shared files flat mode *W* Needs full recompilation. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4121 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
f9c896c3ac
commit
6c2bdbe214
12 changed files with 115 additions and 47 deletions
|
@ -1237,6 +1237,12 @@ int FileIndexMonitor::RequestDirDetails(std::string uid, std::string path, DirDe
|
|||
return (uid == fi.root->id) ;
|
||||
}
|
||||
|
||||
uint32_t FileIndexMonitor::getType(void *ref) const
|
||||
{
|
||||
RsStackMutex mutex(fiMutex) ;
|
||||
|
||||
return fi.getType(ref) ;
|
||||
}
|
||||
int FileIndexMonitor::RequestDirDetails(void *ref, DirDetails &details, uint32_t flags) const
|
||||
{
|
||||
RsStackMutex mutex(fiMutex) ;
|
||||
|
|
|
@ -135,6 +135,7 @@ class FileIndexMonitor: public CacheSource, public RsThread
|
|||
|
||||
// Interface for browsing dir hirarchy
|
||||
int RequestDirDetails(void*, DirDetails&, uint32_t) const ;
|
||||
uint32_t getType(void*) const ;
|
||||
int RequestDirDetails(std::string uid, std::string path, DirDetails &details) const ;
|
||||
|
||||
// set/update shared directories
|
||||
|
|
|
@ -1216,6 +1216,16 @@ int FileIndex::searchBoolExp(Expression * exp, std::list<FileEntry *> &results)
|
|||
return 0;
|
||||
}
|
||||
|
||||
uint32_t FileIndex::getType(void *ref)
|
||||
{
|
||||
if(ref == NULL)
|
||||
return DIR_TYPE_ROOT ;
|
||||
|
||||
if(!isValid(ref))
|
||||
return DIR_TYPE_ROOT ;
|
||||
|
||||
return static_cast<FileEntry*>(ref)->type() ;
|
||||
}
|
||||
bool FileIndex::extractData(void *ref,DirDetails& details)
|
||||
{
|
||||
if(!isValid(ref))
|
||||
|
@ -1227,7 +1237,7 @@ bool FileIndex::extractData(void *ref,DirDetails& details)
|
|||
}
|
||||
|
||||
FileEntry *file = static_cast<FileEntry *>(ref);
|
||||
DirEntry *dir = dynamic_cast<DirEntry *>(file);
|
||||
DirEntry *dir = (file->hash.empty())?static_cast<DirEntry *>(file):NULL ; // This is a hack to avoid doing a dynamic_cast
|
||||
|
||||
details.children = std::list<DirStub>() ;
|
||||
time_t now = time(NULL) ;
|
||||
|
@ -1304,7 +1314,7 @@ bool FileIndex::extractData(void *ref,DirDetails& details)
|
|||
FileEntry *f ;
|
||||
for(f=file;f->parent!=NULL;f=f->parent) ;
|
||||
|
||||
details.id = dynamic_cast<PersonEntry*>(f)->id;
|
||||
details.id = static_cast<PersonEntry*>(f)->id; // The topmost parent is necessarily a personEntrY, so we can avoid a dynamic_cast.
|
||||
|
||||
#ifdef FI_DEBUG
|
||||
assert(details.parent != details.ref) ;
|
||||
|
|
|
@ -83,7 +83,8 @@ class FileEntry
|
|||
: size(0), modtime(0), pop(0), updtime(0), parent(NULL), row(0)
|
||||
{ return; }
|
||||
|
||||
virtual ~FileEntry() { return; }
|
||||
virtual ~FileEntry() { return; }
|
||||
virtual uint32_t type() const { return DIR_TYPE_FILE ; }
|
||||
|
||||
virtual int print(std::ostream &out);
|
||||
|
||||
|
@ -118,6 +119,7 @@ DirEntry * updateDir(const FileEntry& fe, time_t updtime);
|
|||
FileEntry * updateFile(const FileEntry& fe, time_t updtime);
|
||||
|
||||
|
||||
virtual uint32_t type() const { return DIR_TYPE_DIR ; }
|
||||
int checkParentPointers();
|
||||
int updateChildRows();
|
||||
|
||||
|
@ -179,6 +181,7 @@ DirEntry &operator=(DirEntry &src)
|
|||
(*pdest) = src;
|
||||
return *this;
|
||||
}
|
||||
virtual uint32_t type() const { return DIR_TYPE_PERSON ; }
|
||||
|
||||
/* Data */
|
||||
std::string id;
|
||||
|
@ -248,6 +251,7 @@ class FileIndex
|
|||
/// Fills up details from the data contained in ref.
|
||||
//
|
||||
static bool extractData(void *ref,DirDetails& details) ;
|
||||
static uint32_t getType(void *ref) ;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -155,6 +155,7 @@ int FileIndexStore::loadCache(const CacheData &data)
|
|||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* Search Interface - For Directory Access */
|
||||
int FileIndexStore::RequestDirDetails(std::string uid, std::string path, DirDetails &details) const
|
||||
{
|
||||
|
@ -247,7 +248,14 @@ int FileIndexStore::RequestDirDetails(void *ref, DirDetails &details, uint32_t f
|
|||
unlockData();
|
||||
return b;
|
||||
}
|
||||
uint32_t FileIndexStore::getType(void *ref) const
|
||||
{
|
||||
lockData() ;
|
||||
uint32_t b = FileIndex::getType(ref) ;
|
||||
unlockData();
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
int FileIndexStore::SearchHash(std::string hash, std::list<FileDetail> &results) const
|
||||
{
|
||||
|
|
|
@ -84,6 +84,7 @@ virtual int loadCache(const CacheData &data); /* actual load, once data availa
|
|||
/* Search Interface - For Directory Access */
|
||||
int RequestDirDetails(std::string uid, std::string path, DirDetails &details) const;
|
||||
int RequestDirDetails(void *ref, DirDetails &details, uint32_t flags) const;
|
||||
uint32_t getType(void *ref) const ;
|
||||
|
||||
private:
|
||||
int AboutToModify();
|
||||
|
|
|
@ -502,7 +502,25 @@ int ftServer::RequestDirDetails(void *ref, DirDetails &details, uint32_t flags)
|
|||
else
|
||||
return mFiStore->RequestDirDetails(ref, details, flags);
|
||||
}
|
||||
uint32_t ftServer::getType(void *ref, uint32_t flags)
|
||||
{
|
||||
#ifdef SERVER_DEBUG
|
||||
std::cerr << "ftServer::RequestDirDetails(ref:" << ref;
|
||||
std::cerr << ", flags:" << flags << ", ...) -> mFiStore";
|
||||
std::cerr << std::endl;
|
||||
|
||||
if (!mFiStore)
|
||||
{
|
||||
std::cerr << "mFiStore not SET yet = FAIL";
|
||||
std::cerr << std::endl;
|
||||
}
|
||||
|
||||
#endif
|
||||
if(flags & DIR_FLAGS_LOCAL)
|
||||
return mFiMon->getType(ref);
|
||||
else
|
||||
return mFiStore->getType(ref);
|
||||
}
|
||||
/***************************************************************/
|
||||
/******************** Search Interface *************************/
|
||||
/***************************************************************/
|
||||
|
|
|
@ -171,6 +171,7 @@ virtual bool ExtraFileMove(std::string fname, std::string hash, uint64_t size,
|
|||
***/
|
||||
virtual int RequestDirDetails(std::string uid, std::string path, DirDetails &details);
|
||||
virtual int RequestDirDetails(void *ref, DirDetails &details, uint32_t flags);
|
||||
virtual uint32_t getType(void *ref,uint32_t flags) ;
|
||||
|
||||
virtual int SearchKeywords(std::list<std::string> keywords, std::list<DirDetails> &results,uint32_t flags);
|
||||
virtual int SearchBoolExp(Expression * exp, std::list<DirDetails> &results,uint32_t flags);
|
||||
|
|
|
@ -159,7 +159,9 @@ class RsFiles
|
|||
* Directory Listing / Search Interface
|
||||
*/
|
||||
virtual int RequestDirDetails(std::string uid, std::string path, DirDetails &details) = 0;
|
||||
|
||||
virtual int RequestDirDetails(void *ref, DirDetails &details, uint32_t flags) = 0;
|
||||
virtual uint32_t getType(void *ref,uint32_t flags) = 0;
|
||||
|
||||
virtual int SearchKeywords(std::list<std::string> keywords, std::list<DirDetails> &results,uint32_t flags) = 0;
|
||||
virtual int SearchBoolExp(Expression * exp, std::list<DirDetails> &results,uint32_t flags) = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue