mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
auto download option:
ability to enable and disable channels auto dl added added gui update to channel feed msg download not enabled yet cache opt: added more enable cache opt #defines to disable cache opt code git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4132 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
d42d7cfc3e
commit
814c5d1619
@ -37,6 +37,8 @@
|
||||
#define CHANNEL_MSG_STATUS_MASK 0x000f
|
||||
#define CHANNEL_MSG_STATUS_READ 0x0001
|
||||
#define CHANNEL_MSG_STATUS_UNREAD_BY_USER 0x0002
|
||||
#define CHANNEL_MSG_STATUS_DOWLOADED 0x0004
|
||||
|
||||
|
||||
//! Stores information for a give channel id
|
||||
/*!
|
||||
@ -45,13 +47,15 @@
|
||||
class ChannelInfo
|
||||
{
|
||||
public:
|
||||
ChannelInfo() : pngChanImage(NULL), pngImageLen(0) {}
|
||||
ChannelInfo() : autoDownload(false), pngChanImage(NULL), pngImageLen(0)
|
||||
{}
|
||||
std::string channelId;
|
||||
std::wstring channelName;
|
||||
std::wstring channelDesc;
|
||||
|
||||
uint32_t channelFlags;
|
||||
uint32_t pop; /// popularity
|
||||
bool autoDownload;
|
||||
|
||||
unsigned char* pngChanImage;
|
||||
uint32_t pngImageLen;
|
||||
@ -205,8 +209,9 @@ virtual bool ChannelMessageSend(ChannelMsgInfo &info) = 0;
|
||||
/*!
|
||||
* @param cId the channel id
|
||||
* @param subscribe set to true if you want to subscribe and to false to unsubscribe
|
||||
* @param set true to allow autodownload of new content and false otherwise, ignored when second param is false
|
||||
*/
|
||||
virtual bool channelSubscribe(std::string cId, bool subscribe) = 0;
|
||||
virtual bool channelSubscribe(std::string cId, bool subscribe, bool autoDl) = 0;
|
||||
|
||||
/*!
|
||||
* This hashes a file which is not already shared by client or his peers,
|
||||
@ -252,11 +257,20 @@ virtual bool channelEditInfo(std::string chId, ChannelInfo &ci) = 0;
|
||||
virtual void getPubKeysAvailableGrpIds(std::list<std::string>& chanIds) = 0;
|
||||
|
||||
/*!
|
||||
*
|
||||
*
|
||||
*
|
||||
* set the channel so that it does not auto download any more
|
||||
* @param chId the channel id to set for
|
||||
* @param set to true to enable auto dl and false to disable
|
||||
*/
|
||||
//virtual void setPrivateChannelDir(const std::string&) = 0;
|
||||
virtual bool channelSetAutoDl(const std::string& chId, bool autoDl) = 0;
|
||||
|
||||
|
||||
/*!
|
||||
* get what autoDl is set to for the given channel id
|
||||
* @param chId id of channel to get autoDl status for
|
||||
* @param autoDl
|
||||
* @return false if channel cannot be found
|
||||
*/
|
||||
virtual bool channelGetAutoDl(const std::string& chId, bool& autoDl) = 0;
|
||||
|
||||
};
|
||||
|
||||
|
@ -541,20 +541,84 @@ bool p3Channels::locked_checkDistribMsg(RsDistribMsg *msg)
|
||||
|
||||
|
||||
|
||||
bool p3Channels::channelSubscribe(std::string cId, bool subscribe)
|
||||
bool p3Channels::channelSubscribe(std::string cId, bool subscribe, bool autoDl)
|
||||
{
|
||||
#ifdef CHANNEL_DEBUG
|
||||
std::cerr << "p3Channels::channelSubscribe() " << cId << std::endl;
|
||||
#endif
|
||||
|
||||
{
|
||||
RsStackMutex stack(distribMtx);
|
||||
|
||||
if(subscribe)
|
||||
mChannelStatus[cId] |= autoDl ?
|
||||
(RS_CHAN_STATUS_AUTO_DL & RS_CHAN_STATUS_MASK) : ~RS_CHAN_STATUS_MASK;
|
||||
}
|
||||
|
||||
bool ok = subscribeToGroup(cId, subscribe);
|
||||
|
||||
if(ok)
|
||||
mChannelStatus[cId] = RS_CHAN_STATUS_AUTO_DL;
|
||||
|
||||
// if subscribing set channel status bit field on whether
|
||||
// or not to auto download
|
||||
{
|
||||
RsStackMutex stack(distribMtx);
|
||||
|
||||
if(!ok || !subscribe){
|
||||
mChannelStatus.erase(cId);
|
||||
removeChannelReadStatusEntry(cId);
|
||||
}
|
||||
else{
|
||||
addChannelReadStatusEntry(cId);
|
||||
}
|
||||
|
||||
IndicateConfigChanged();
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
void p3Channels::addChannelReadStatusEntry(const std::string& cId)
|
||||
{
|
||||
std::list<RsChannelReadStatus*>::iterator lit = mReadStatus.begin();
|
||||
RsChannelReadStatus* rds = NULL;
|
||||
|
||||
// check to ensure an entry does not exist
|
||||
for(; lit != mReadStatus.end(); lit++){
|
||||
|
||||
if((*lit)->channelId == cId)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(lit == mReadStatus.end()){
|
||||
rds = new RsChannelReadStatus();
|
||||
rds->channelId = cId;
|
||||
mReadStatus.push_back(rds);
|
||||
saveList.push_back(rds);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//TODO: delete unsubscribed channels from entry
|
||||
void p3Channels::removeChannelReadStatusEntry(const std::string& cId)
|
||||
{
|
||||
std::list<RsChannelReadStatus*>::iterator lit = mReadStatus.begin();
|
||||
statMap::iterator mit;
|
||||
// check to ensure an entry does not exist
|
||||
for(; lit != mReadStatus.end(); lit++){
|
||||
|
||||
if((*lit)->channelId == cId)
|
||||
{
|
||||
if((mit = (*lit)->msgReadStatus.find(cId)) !=
|
||||
(*lit)->msgReadStatus.end()){
|
||||
(*lit)->msgReadStatus.erase(mit);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
bool p3Channels::channelShareKeys(std::string chId, std::list<std::string>& peers){
|
||||
|
||||
#ifdef CHANNEL_DEBUG
|
||||
@ -601,17 +665,37 @@ void p3Channels::getPubKeysAvailableGrpIds(std::list<std::string>& grpIds)
|
||||
|
||||
}
|
||||
|
||||
void p3Channels::channelSetAutoDl(const std::string& chId, bool autoDl)
|
||||
bool p3Channels::channelSetAutoDl(const std::string& chId, bool autoDl)
|
||||
{
|
||||
|
||||
RsStackMutex stack(distribMtx);
|
||||
|
||||
if(autoDl)
|
||||
mChannelStatus[chId] |= RS_CHAN_STATUS_AUTO_DL;
|
||||
else
|
||||
mChannelStatus[chId] = ~RS_CHAN_STATUS_AUTO_DL;
|
||||
statMap::iterator it = mChannelStatus.find(chId);
|
||||
bool changed = false;
|
||||
|
||||
return;
|
||||
if(it != mChannelStatus.end()){
|
||||
|
||||
if(autoDl)
|
||||
it->second |= RS_CHAN_STATUS_AUTO_DL;
|
||||
else
|
||||
it->second &= ~(RS_CHAN_STATUS_AUTO_DL & RS_CHAN_STATUS_MASK);
|
||||
|
||||
changed = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef CHANNEL_DEBUG
|
||||
std::cerr << "p3Channels::channelSetAutoDl(): " << "Channel does not exist"
|
||||
<< std::endl;
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
// save configuration
|
||||
if(changed)
|
||||
IndicateConfigChanged();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -623,7 +707,7 @@ bool p3Channels::channelGetAutoDl(const std::string& chId, bool& autoDl)
|
||||
|
||||
if(it != mChannelStatus.end())
|
||||
{
|
||||
autoDl = mChannelStatus[chId] & RS_CHAN_STATUS_AUTO_DL;
|
||||
autoDl = it->second & RS_CHAN_STATUS_AUTO_DL;
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -766,9 +850,12 @@ bool p3Channels::locked_eventDuplicateMsg(GroupInfo *grp, RsDistribMsg *msg, std
|
||||
localpath, flags, srcIds);
|
||||
}
|
||||
|
||||
if(cit != mMsgReadStatus.end()){
|
||||
|
||||
mit1->second |= (CHANNEL_MSG_STATUS_MASK &
|
||||
CHANNEL_MSG_STATUS_DOWLOADED);
|
||||
if(mit1 != cit->second.end())
|
||||
mit1->second |= (CHANNEL_MSG_STATUS_MASK &
|
||||
CHANNEL_MSG_STATUS_DOWLOADED);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -890,7 +977,9 @@ bool p3Channels::childLoadList(std::list<RsItem* >& configSaves)
|
||||
{
|
||||
std::cerr << "p3Channels::childLoadList(): Configs items loaded were incorrect!"
|
||||
<< std::endl;
|
||||
return false;
|
||||
|
||||
if(*it != NULL)
|
||||
delete *it;
|
||||
}
|
||||
}
|
||||
|
||||
@ -908,7 +997,8 @@ void p3Channels::processChanReadStatus(RsChannelReadStatus* drs)
|
||||
|
||||
if(sit != drs->msgReadStatus.end()){
|
||||
mChannelStatus[chId] = sit->second;
|
||||
drs->msgReadStatus.erase(sit);
|
||||
mChanReadStatus.insert(std::make_pair<std::string, RsChannelReadStatus*>
|
||||
(chId, drs));
|
||||
}
|
||||
|
||||
// first pull out the channel id status
|
||||
@ -920,8 +1010,30 @@ void p3Channels::processChanReadStatus(RsChannelReadStatus* drs)
|
||||
|
||||
|
||||
}
|
||||
|
||||
std::list<RsItem *> p3Channels::childSaveList()
|
||||
{
|
||||
|
||||
std::list<RsChannelReadStatus* >::iterator lit = mReadStatus.begin();
|
||||
statMap::iterator sit, mit;
|
||||
|
||||
// update or add current channel id status
|
||||
for(; lit != mReadStatus.end(); lit++)
|
||||
{
|
||||
if((sit = mChannelStatus.find((*lit)->channelId)) != mChannelStatus.end())
|
||||
{
|
||||
mit = (*lit)->msgReadStatus.find((*lit)->channelId);
|
||||
if(mit != (*lit)->msgReadStatus.end())
|
||||
{
|
||||
mit->second = sit->second;
|
||||
}
|
||||
else
|
||||
{
|
||||
(*lit)->msgReadStatus[(*lit)->channelId] = sit->second;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return saveList;
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,8 @@
|
||||
#include "serialiser/rstlvtypes.h"
|
||||
#include "serialiser/rschannelitems.h"
|
||||
|
||||
#define RS_CHAN_STATUS_AUTO_DL 0x0004
|
||||
#define RS_CHAN_STATUS_MASK 0x000f
|
||||
#define RS_CHAN_STATUS_AUTO_DL 0x0002
|
||||
|
||||
typedef std::map<std::string, uint32_t> statMap;
|
||||
typedef std::map<std::string, statMap> chanStatMap;
|
||||
@ -75,15 +76,14 @@ virtual bool setMessageStatus(const std::string& cId, const std::string& mId, co
|
||||
virtual bool getMessageStatus(const std::string& cId, const std::string& mId, uint32_t& status);
|
||||
|
||||
virtual bool getMessageCount(const std::string cId, unsigned int &newCount, unsigned int &unreadCount);
|
||||
|
||||
virtual bool channelSubscribe(std::string cId, bool subscribe);
|
||||
virtual bool channelSubscribe(std::string cId, bool subscribe, bool autoDl);
|
||||
virtual bool channelExtraFileHash(std::string path, std::string chId, FileInfo& fInfo);
|
||||
virtual bool channelExtraFileRemove(std::string hash, std::string chId);
|
||||
virtual bool channelRestoreKeys(std::string chId);
|
||||
virtual bool channelShareKeys(std::string chId, std::list<std::string>& peers);
|
||||
virtual bool channelEditInfo(std::string chId, ChannelInfo &ci);
|
||||
virtual void getPubKeysAvailableGrpIds(std::list<std::string>& grpIds);
|
||||
virtual void channelSetAutoDl(const std::string& chId, bool autoDl);
|
||||
virtual bool channelSetAutoDl(const std::string& chId, bool autoDl);
|
||||
virtual bool channelGetAutoDl(const std::string& chId, bool& autoDl);
|
||||
|
||||
/***************************************************************************************/
|
||||
@ -112,12 +112,15 @@ virtual std::list<RsItem *> childSaveList();
|
||||
private:
|
||||
|
||||
void processChanReadStatus(RsChannelReadStatus* drs);
|
||||
|
||||
void addChannelReadStatusEntry(const std::string& cId);
|
||||
void removeChannelReadStatusEntry(const std::string& cId);
|
||||
RsFiles *mRsFiles;
|
||||
std::string mChannelsDir;
|
||||
std::list<RsItem *> saveList;
|
||||
|
||||
std::list<RsChannelReadStatus *> mReadStatus;
|
||||
std::map<std::string, RsChannelReadStatus* > mChanReadStatus;
|
||||
|
||||
chanStatMap mMsgReadStatus;
|
||||
statMap mChannelStatus;
|
||||
};
|
||||
|
@ -61,7 +61,7 @@
|
||||
//#define DISTRIB_DEBUG 1
|
||||
//#define DISTRIB_THREAD_DEBUG 1
|
||||
//#define DISTRIB_DUMMYMSG_DEBUG 1
|
||||
//#define DISTRIB_HISTORY_DEBUG
|
||||
|
||||
|
||||
RSA *extractPublicKey(RsTlvSecurityKey &key);
|
||||
RSA *extractPrivateKey(RsTlvSecurityKey &key);
|
||||
@ -209,11 +209,13 @@ int p3GroupDistrib::tick()
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef ENABLE_CACHE_OPT
|
||||
if(updateCacheDoc){
|
||||
std::cerr << "count: " << mCount << std::endl;
|
||||
updateCacheDocument();
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1068,6 +1070,7 @@ void p3GroupDistrib::loadFileMsgs(const std::string &filename, uint16_t cacheSub
|
||||
time_t now = time(NULL);
|
||||
bool cache = false;
|
||||
|
||||
#ifdef ENABLE_CACHE_OPT
|
||||
// if cache id exists in cache table exit
|
||||
{
|
||||
RsStackMutex stack(distribMtx);
|
||||
@ -1080,6 +1083,7 @@ void p3GroupDistrib::loadFileMsgs(const std::string &filename, uint16_t cacheSub
|
||||
cache = true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// link grp to cache id (only one cache id, so doesn't matter if one grp comes out twice
|
||||
// with same cache id)
|
||||
@ -2617,8 +2621,9 @@ bool p3GroupDistrib::saveList(bool &cleanup, std::list<RsItem *>& saveData)
|
||||
delete childSer;
|
||||
|
||||
// now save hostory doc
|
||||
|
||||
#ifdef ENABLE_CACHE_OPT
|
||||
locked_saveHistoryCacheFile();
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -508,7 +508,7 @@ class p3GroupDistrib: public CacheSource, public CacheStore, public p3Config, pu
|
||||
std::string publishMsg(RsDistribMsg *msg, bool personalSign);
|
||||
|
||||
/*!
|
||||
*
|
||||
* note: call back to locked_eventDuplicateMSg is made on execution
|
||||
* @param grpId id of group to subscribe to
|
||||
* @param subscribe true to subscribe and vice versa
|
||||
* @return
|
||||
|
Loading…
Reference in New Issue
Block a user