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_MASK 0x000f
|
||||||
#define CHANNEL_MSG_STATUS_READ 0x0001
|
#define CHANNEL_MSG_STATUS_READ 0x0001
|
||||||
#define CHANNEL_MSG_STATUS_UNREAD_BY_USER 0x0002
|
#define CHANNEL_MSG_STATUS_UNREAD_BY_USER 0x0002
|
||||||
|
#define CHANNEL_MSG_STATUS_DOWLOADED 0x0004
|
||||||
|
|
||||||
|
|
||||||
//! Stores information for a give channel id
|
//! Stores information for a give channel id
|
||||||
/*!
|
/*!
|
||||||
@ -45,13 +47,15 @@
|
|||||||
class ChannelInfo
|
class ChannelInfo
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ChannelInfo() : pngChanImage(NULL), pngImageLen(0) {}
|
ChannelInfo() : autoDownload(false), pngChanImage(NULL), pngImageLen(0)
|
||||||
|
{}
|
||||||
std::string channelId;
|
std::string channelId;
|
||||||
std::wstring channelName;
|
std::wstring channelName;
|
||||||
std::wstring channelDesc;
|
std::wstring channelDesc;
|
||||||
|
|
||||||
uint32_t channelFlags;
|
uint32_t channelFlags;
|
||||||
uint32_t pop; /// popularity
|
uint32_t pop; /// popularity
|
||||||
|
bool autoDownload;
|
||||||
|
|
||||||
unsigned char* pngChanImage;
|
unsigned char* pngChanImage;
|
||||||
uint32_t pngImageLen;
|
uint32_t pngImageLen;
|
||||||
@ -205,8 +209,9 @@ virtual bool ChannelMessageSend(ChannelMsgInfo &info) = 0;
|
|||||||
/*!
|
/*!
|
||||||
* @param cId the channel id
|
* @param cId the channel id
|
||||||
* @param subscribe set to true if you want to subscribe and to false to unsubscribe
|
* @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,
|
* 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;
|
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
|
#ifdef CHANNEL_DEBUG
|
||||||
std::cerr << "p3Channels::channelSubscribe() " << cId << std::endl;
|
std::cerr << "p3Channels::channelSubscribe() " << cId << std::endl;
|
||||||
#endif
|
#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);
|
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;
|
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){
|
bool p3Channels::channelShareKeys(std::string chId, std::list<std::string>& peers){
|
||||||
|
|
||||||
#ifdef CHANNEL_DEBUG
|
#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);
|
RsStackMutex stack(distribMtx);
|
||||||
|
|
||||||
if(autoDl)
|
statMap::iterator it = mChannelStatus.find(chId);
|
||||||
mChannelStatus[chId] |= RS_CHAN_STATUS_AUTO_DL;
|
bool changed = false;
|
||||||
else
|
|
||||||
mChannelStatus[chId] = ~RS_CHAN_STATUS_AUTO_DL;
|
|
||||||
|
|
||||||
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())
|
if(it != mChannelStatus.end())
|
||||||
{
|
{
|
||||||
autoDl = mChannelStatus[chId] & RS_CHAN_STATUS_AUTO_DL;
|
autoDl = it->second & RS_CHAN_STATUS_AUTO_DL;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -766,9 +850,12 @@ bool p3Channels::locked_eventDuplicateMsg(GroupInfo *grp, RsDistribMsg *msg, std
|
|||||||
localpath, flags, srcIds);
|
localpath, flags, srcIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(cit != mMsgReadStatus.end()){
|
||||||
|
|
||||||
|
if(mit1 != cit->second.end())
|
||||||
mit1->second |= (CHANNEL_MSG_STATUS_MASK &
|
mit1->second |= (CHANNEL_MSG_STATUS_MASK &
|
||||||
CHANNEL_MSG_STATUS_DOWLOADED);
|
CHANNEL_MSG_STATUS_DOWLOADED);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -890,7 +977,9 @@ bool p3Channels::childLoadList(std::list<RsItem* >& configSaves)
|
|||||||
{
|
{
|
||||||
std::cerr << "p3Channels::childLoadList(): Configs items loaded were incorrect!"
|
std::cerr << "p3Channels::childLoadList(): Configs items loaded were incorrect!"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
return false;
|
|
||||||
|
if(*it != NULL)
|
||||||
|
delete *it;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -908,7 +997,8 @@ void p3Channels::processChanReadStatus(RsChannelReadStatus* drs)
|
|||||||
|
|
||||||
if(sit != drs->msgReadStatus.end()){
|
if(sit != drs->msgReadStatus.end()){
|
||||||
mChannelStatus[chId] = sit->second;
|
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
|
// first pull out the channel id status
|
||||||
@ -920,8 +1010,30 @@ void p3Channels::processChanReadStatus(RsChannelReadStatus* drs)
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::list<RsItem *> p3Channels::childSaveList()
|
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;
|
return saveList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,7 +33,8 @@
|
|||||||
#include "serialiser/rstlvtypes.h"
|
#include "serialiser/rstlvtypes.h"
|
||||||
#include "serialiser/rschannelitems.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, uint32_t> statMap;
|
||||||
typedef std::map<std::string, statMap> chanStatMap;
|
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 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 getMessageCount(const std::string cId, unsigned int &newCount, unsigned int &unreadCount);
|
||||||
|
virtual bool channelSubscribe(std::string cId, bool subscribe, bool autoDl);
|
||||||
virtual bool channelSubscribe(std::string cId, bool subscribe);
|
|
||||||
virtual bool channelExtraFileHash(std::string path, std::string chId, FileInfo& fInfo);
|
virtual bool channelExtraFileHash(std::string path, std::string chId, FileInfo& fInfo);
|
||||||
virtual bool channelExtraFileRemove(std::string hash, std::string chId);
|
virtual bool channelExtraFileRemove(std::string hash, std::string chId);
|
||||||
virtual bool channelRestoreKeys(std::string chId);
|
virtual bool channelRestoreKeys(std::string chId);
|
||||||
virtual bool channelShareKeys(std::string chId, std::list<std::string>& peers);
|
virtual bool channelShareKeys(std::string chId, std::list<std::string>& peers);
|
||||||
virtual bool channelEditInfo(std::string chId, ChannelInfo &ci);
|
virtual bool channelEditInfo(std::string chId, ChannelInfo &ci);
|
||||||
virtual void getPubKeysAvailableGrpIds(std::list<std::string>& grpIds);
|
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);
|
virtual bool channelGetAutoDl(const std::string& chId, bool& autoDl);
|
||||||
|
|
||||||
/***************************************************************************************/
|
/***************************************************************************************/
|
||||||
@ -112,12 +112,15 @@ virtual std::list<RsItem *> childSaveList();
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
void processChanReadStatus(RsChannelReadStatus* drs);
|
void processChanReadStatus(RsChannelReadStatus* drs);
|
||||||
|
void addChannelReadStatusEntry(const std::string& cId);
|
||||||
|
void removeChannelReadStatusEntry(const std::string& cId);
|
||||||
RsFiles *mRsFiles;
|
RsFiles *mRsFiles;
|
||||||
std::string mChannelsDir;
|
std::string mChannelsDir;
|
||||||
std::list<RsItem *> saveList;
|
std::list<RsItem *> saveList;
|
||||||
|
|
||||||
std::list<RsChannelReadStatus *> mReadStatus;
|
std::list<RsChannelReadStatus *> mReadStatus;
|
||||||
|
std::map<std::string, RsChannelReadStatus* > mChanReadStatus;
|
||||||
|
|
||||||
chanStatMap mMsgReadStatus;
|
chanStatMap mMsgReadStatus;
|
||||||
statMap mChannelStatus;
|
statMap mChannelStatus;
|
||||||
};
|
};
|
||||||
|
@ -61,7 +61,7 @@
|
|||||||
//#define DISTRIB_DEBUG 1
|
//#define DISTRIB_DEBUG 1
|
||||||
//#define DISTRIB_THREAD_DEBUG 1
|
//#define DISTRIB_THREAD_DEBUG 1
|
||||||
//#define DISTRIB_DUMMYMSG_DEBUG 1
|
//#define DISTRIB_DUMMYMSG_DEBUG 1
|
||||||
//#define DISTRIB_HISTORY_DEBUG
|
|
||||||
|
|
||||||
RSA *extractPublicKey(RsTlvSecurityKey &key);
|
RSA *extractPublicKey(RsTlvSecurityKey &key);
|
||||||
RSA *extractPrivateKey(RsTlvSecurityKey &key);
|
RSA *extractPrivateKey(RsTlvSecurityKey &key);
|
||||||
@ -209,11 +209,13 @@ int p3GroupDistrib::tick()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef ENABLE_CACHE_OPT
|
||||||
if(updateCacheDoc){
|
if(updateCacheDoc){
|
||||||
std::cerr << "count: " << mCount << std::endl;
|
std::cerr << "count: " << mCount << std::endl;
|
||||||
updateCacheDocument();
|
updateCacheDocument();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1068,6 +1070,7 @@ void p3GroupDistrib::loadFileMsgs(const std::string &filename, uint16_t cacheSub
|
|||||||
time_t now = time(NULL);
|
time_t now = time(NULL);
|
||||||
bool cache = false;
|
bool cache = false;
|
||||||
|
|
||||||
|
#ifdef ENABLE_CACHE_OPT
|
||||||
// if cache id exists in cache table exit
|
// if cache id exists in cache table exit
|
||||||
{
|
{
|
||||||
RsStackMutex stack(distribMtx);
|
RsStackMutex stack(distribMtx);
|
||||||
@ -1080,6 +1083,7 @@ void p3GroupDistrib::loadFileMsgs(const std::string &filename, uint16_t cacheSub
|
|||||||
cache = true;
|
cache = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// link grp to cache id (only one cache id, so doesn't matter if one grp comes out twice
|
// link grp to cache id (only one cache id, so doesn't matter if one grp comes out twice
|
||||||
// with same cache id)
|
// with same cache id)
|
||||||
@ -2617,8 +2621,9 @@ bool p3GroupDistrib::saveList(bool &cleanup, std::list<RsItem *>& saveData)
|
|||||||
delete childSer;
|
delete childSer;
|
||||||
|
|
||||||
// now save hostory doc
|
// now save hostory doc
|
||||||
|
#ifdef ENABLE_CACHE_OPT
|
||||||
locked_saveHistoryCacheFile();
|
locked_saveHistoryCacheFile();
|
||||||
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -508,7 +508,7 @@ class p3GroupDistrib: public CacheSource, public CacheStore, public p3Config, pu
|
|||||||
std::string publishMsg(RsDistribMsg *msg, bool personalSign);
|
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 grpId id of group to subscribe to
|
||||||
* @param subscribe true to subscribe and vice versa
|
* @param subscribe true to subscribe and vice versa
|
||||||
* @return
|
* @return
|
||||||
|
Loading…
Reference in New Issue
Block a user