diff --git a/libretroshare/src/dbase/fistore.cc b/libretroshare/src/dbase/fistore.cc index dfe651f68..29e7a7a89 100644 --- a/libretroshare/src/dbase/fistore.cc +++ b/libretroshare/src/dbase/fistore.cc @@ -24,11 +24,12 @@ #include "dbase/fistore.h" #include "rsiface/rsexpr.h" #include "serialiser/rsserviceids.h" +#include "pqi/p3connmgr.h" FileIndexStore::FileIndexStore(CacheStrapper *cs, CacheTransfer *cft, - NotifyBase *cb_in, RsPeerId ownid, std::string cachedir) + NotifyBase *cb_in,p3ConnectMgr *cnmgr, RsPeerId ownid, std::string cachedir) :CacheStore(RS_SERVICE_TYPE_FILE_INDEX, false, cs, cft, cachedir), - localId(ownid), localindex(NULL), cb(cb_in) + localId(ownid), localindex(NULL), cb(cb_in),mConnMgr(cnmgr) { return; } @@ -79,47 +80,60 @@ int FileIndexStore::loadCache(const CacheData &data) } /* load Cache */ + FileIndex *finew = new FileIndex(data.pid); - if (finew->loadIndex(data.path + '/' + data.name, data.hash, data.size)) + if(mConnMgr->isFriend(data.pid)) { + // We discard file lists from non friends. This is the place to remove file lists of deleted friends + // 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. + // + if (finew->loadIndex(data.path + '/' + data.name, data.hash, data.size)) + { #ifdef FIS_DEBUG2 - std::cerr << "FileIndexStore::loadCache() Succeeded!" << std::endl; + std::cerr << "FileIndexStore::loadCache() Succeeded!" << std::endl; #endif - /* set the name */ - finew->root->name = data.pname; - if (local) - { - localindex = finew; - } - else - { - indices[data.pid] = finew; - } - delete fiold; + /* set the name */ + finew->root->name = data.pname; - /* store in tale */ - locked_storeCacheEntry(data); - } - else - { -#ifdef FIS_DEBUG2 - std::cerr << "FileIndexStore::loadCache() Failed!" << std::endl; -#endif - /* reinstall the old one! */ - delete finew; - if (fiold) - { if (local) { - localindex = fiold; + localindex = finew; } else { - indices[data.pid] = fiold; + indices[data.pid] = finew; + } + delete fiold; + + /* store in tale */ + locked_storeCacheEntry(data); + } + else + { +#ifdef FIS_DEBUG2 + std::cerr << "FileIndexStore::loadCache() Failed!" << std::endl; +#endif + /* reinstall the old one! */ + delete finew; + if (fiold) + { + if (local) + { + localindex = fiold; + } + else + { + indices[data.pid] = fiold; + } } } } +#ifdef FIS_DEBUG + else + std::cerr << "Discarding file list from deleted peer " << data.pid << std::endl ; +#endif /* need to correct indices(row) for the roots of the FileIndex */ int i = 0; diff --git a/libretroshare/src/dbase/fistore.h b/libretroshare/src/dbase/fistore.h index d0dadd24d..88cb803e1 100644 --- a/libretroshare/src/dbase/fistore.h +++ b/libretroshare/src/dbase/fistore.h @@ -34,6 +34,8 @@ * */ +class p3ConnectMgr ; + #include "dbase/findex.h" #include "dbase/cachestrapper.h" #include "rsiface/rsiface.h" @@ -63,8 +65,7 @@ class FileIndexStore: public CacheStore { public: - FileIndexStore(CacheStrapper *cs, CacheTransfer *cft, NotifyBase *cb_in, - RsPeerId ownid, std::string cachedir); + FileIndexStore(CacheStrapper *cs, CacheTransfer *cft, NotifyBase *cb_in,p3ConnectMgr *cmgr, RsPeerId ownid, std::string cachedir); virtual ~FileIndexStore(); /* virtual functions overloaded by cache implementor */ @@ -94,6 +95,7 @@ virtual int loadCache(const CacheData &data); /* actual load, once data availa FileIndex *localindex; NotifyBase *cb; + p3ConnectMgr *mConnMgr ; }; diff --git a/libretroshare/src/ft/ftdbase.cc b/libretroshare/src/ft/ftdbase.cc index ffd591f97..deda985dc 100644 --- a/libretroshare/src/ft/ftdbase.cc +++ b/libretroshare/src/ft/ftdbase.cc @@ -30,9 +30,9 @@ //#define DB_DEBUG 1 -ftFiStore::ftFiStore(CacheStrapper *cs, CacheTransfer *cft, NotifyBase *cb_in, +ftFiStore::ftFiStore(CacheStrapper *cs, CacheTransfer *cft, NotifyBase *cb_in,p3ConnectMgr *cnmgr, RsPeerId ownid, std::string cachedir) - :FileIndexStore(cs, cft, cb_in, ownid, cachedir) + :FileIndexStore(cs, cft, cb_in,cnmgr, ownid, cachedir) { return; } diff --git a/libretroshare/src/ft/ftdbase.h b/libretroshare/src/ft/ftdbase.h index e30294ed3..02f283e7a 100644 --- a/libretroshare/src/ft/ftdbase.h +++ b/libretroshare/src/ft/ftdbase.h @@ -33,6 +33,8 @@ * So they work in the ft world. */ +class p3ConnectMgr ; + #include "ft/ftsearch.h" #include "pqi/p3cfgmgr.h" @@ -45,6 +47,7 @@ class ftFiStore: public FileIndexStore, public ftSearch { public: ftFiStore(CacheStrapper *cs, CacheTransfer *cft, NotifyBase *cb_in, + p3ConnectMgr *, RsPeerId ownid, std::string cachedir); /* overloaded search function */ diff --git a/libretroshare/src/ft/ftserver.cc b/libretroshare/src/ft/ftserver.cc index 05235dcae..99226648e 100644 --- a/libretroshare/src/ft/ftserver.cc +++ b/libretroshare/src/ft/ftserver.cc @@ -135,7 +135,7 @@ void ftServer::SetupFtServer(NotifyBase *cb) /* Make Cache Source/Store */ - mFiStore = new ftFiStore(mCacheStrapper, mFtController, cb, ownId, remotecachedir); + mFiStore = new ftFiStore(mCacheStrapper, mFtController, cb,mConnMgr, ownId, remotecachedir); mFiMon = new ftFiMonitor(mCacheStrapper,cb, localcachedir, ownId); /* now add the set to the cachestrapper */