mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-12-25 07:29:33 -05:00
Addition of sorting algorithms to the LinksDialog.
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@330 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
63e177b6ef
commit
07a458367b
@ -38,6 +38,7 @@ std::string generateRandomLinkId();
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define RANK_DEBUG 1
|
||||||
|
|
||||||
p3Ranking::p3Ranking(uint16_t subtype, CacheTransfer *cft,
|
p3Ranking::p3Ranking(uint16_t subtype, CacheTransfer *cft,
|
||||||
std::string sourcedir, std::string storedir,
|
std::string sourcedir, std::string storedir,
|
||||||
@ -47,6 +48,9 @@ p3Ranking::p3Ranking(uint16_t subtype, CacheTransfer *cft,
|
|||||||
mStorePeriod(storePeriod)
|
mStorePeriod(storePeriod)
|
||||||
{
|
{
|
||||||
mOwnId = getAuthMgr()->OwnId();
|
mOwnId = getAuthMgr()->OwnId();
|
||||||
|
mViewPeriod = 60 * 60 * 24 * 30; /* one Month */
|
||||||
|
mSortType = RS_RANK_ALG;
|
||||||
|
|
||||||
createDummyData();
|
createDummyData();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -173,52 +177,175 @@ void p3Ranking::addRankMsg(RsRankMsg *msg)
|
|||||||
|
|
||||||
bool p3Ranking::setSortPeriod(uint32_t period)
|
bool p3Ranking::setSortPeriod(uint32_t period)
|
||||||
{
|
{
|
||||||
|
bool reSort = (mViewPeriod != period);
|
||||||
mViewPeriod = period;
|
mViewPeriod = period;
|
||||||
|
|
||||||
|
if (reSort)
|
||||||
|
{
|
||||||
|
sortAllMsgs();
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool p3Ranking::setSortMethod(uint32_t type)
|
bool p3Ranking::setSortMethod(uint32_t type)
|
||||||
{
|
{
|
||||||
|
bool reSort = (mSortType != type);
|
||||||
mSortType = type;
|
mSortType = type;
|
||||||
|
|
||||||
|
if (reSort)
|
||||||
|
{
|
||||||
|
sortAllMsgs();
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool p3Ranking::clearPeerFilter()
|
bool p3Ranking::clearPeerFilter()
|
||||||
{
|
{
|
||||||
|
bool reSort = (mPeerFilter.size() > 0);
|
||||||
|
|
||||||
mPeerFilter.clear();
|
mPeerFilter.clear();
|
||||||
|
|
||||||
|
if (reSort)
|
||||||
|
{
|
||||||
|
sortAllMsgs();
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool p3Ranking::setPeerFilter(std::list<std::string> peers)
|
bool p3Ranking::setPeerFilter(std::list<std::string> peers)
|
||||||
{
|
{
|
||||||
mPeerFilter = peers;
|
mPeerFilter = peers;
|
||||||
|
|
||||||
|
sortAllMsgs();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
float p3Ranking::locked_calcRank(RankGroup &grp) /* returns 0->100 */
|
float p3Ranking::locked_calcRank(RankGroup &grp)
|
||||||
{
|
{
|
||||||
|
/* Ranking Calculations .....
|
||||||
|
*/
|
||||||
|
|
||||||
#if 0
|
time_t now = time(NULL);
|
||||||
/* where all the work is done */
|
time_t minTime = now-mViewPeriod;
|
||||||
bool doScore = (mSortType ==
|
|
||||||
bool doTime = (mSortType ==
|
|
||||||
bool doFilter = (mPeerFilter.size() > 0);
|
bool doFilter = (mPeerFilter.size() > 0);
|
||||||
float rank = 0;
|
bool doScore = (mSortType & RS_RANK_SCORE);
|
||||||
|
bool doTime = (mSortType & RS_RANK_TIME);
|
||||||
|
|
||||||
for(it = grp.comments.begin(); it != grp.comments.end(); it++)
|
uint32_t count = 0;
|
||||||
{
|
float algScore = 0;
|
||||||
|
|
||||||
if (doFilter)
|
#ifdef RANK_DEBUG
|
||||||
{
|
std::string normlink(grp.link.begin(), grp.link.end());
|
||||||
/* do first so we can discard */
|
std::cerr << "p3Ranking::locked_calcRank() for: " << normlink;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
std::cerr << "Period: " << mViewPeriod;
|
||||||
if (doScore)
|
std::cerr << " doFilter: " << doFilter;
|
||||||
if (mSortType
|
std::cerr << " doScore: " << doScore;
|
||||||
|
std::cerr << " doTime: " << doTime;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
std::map<std::string, RsRankMsg *>::iterator it;
|
||||||
|
for(it = grp.comments.begin(); it != grp.comments.end(); it++)
|
||||||
|
{
|
||||||
|
#ifdef RANK_DEBUG
|
||||||
|
std::cerr << "Comment by:" << it->first << " age: " << now - it->second->timestamp;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
if (doFilter)
|
||||||
|
{
|
||||||
|
if (mPeerFilter.end() ==
|
||||||
|
std::find(mPeerFilter.begin(), mPeerFilter.end(), it->first))
|
||||||
|
{
|
||||||
|
continue; /* skip it */
|
||||||
|
#ifdef RANK_DEBUG
|
||||||
|
std::cerr << "\tFiltered Out";
|
||||||
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 100;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if Scoring is involved... drop old ones */
|
||||||
|
if ((doScore) && (it->second->timestamp < minTime))
|
||||||
|
{
|
||||||
|
#ifdef RANK_DEBUG
|
||||||
|
std::cerr << "\tToo Old";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
time_t deltaT;
|
||||||
|
if (it->second->timestamp > now)
|
||||||
|
{
|
||||||
|
deltaT = it->second->timestamp - now;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
deltaT = now - it->second->timestamp;
|
||||||
|
}
|
||||||
|
float timeScore = ((float) mViewPeriod - deltaT) / (mViewPeriod + 0.01);
|
||||||
|
|
||||||
|
#ifdef RANK_DEBUG
|
||||||
|
std::cerr << "\tTimeScore: " << timeScore;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* algScore is sum of (filtered) timeScores */
|
||||||
|
/* timeScore is average of (all) timeScores */
|
||||||
|
/* popScore is just count of valid scores */
|
||||||
|
|
||||||
|
algScore += timeScore;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef RANK_DEBUG
|
||||||
|
std::cerr << "p3Ranking::locked_calcRank() algScore: " << algScore;
|
||||||
|
std::cerr << " Count: " << count;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if ((count < 0) || (algScore < 0))
|
||||||
|
{
|
||||||
|
#ifdef RANK_DEBUG
|
||||||
|
std::cerr << "Final score: 0";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((doScore) && (doTime))
|
||||||
|
{
|
||||||
|
#ifdef RANK_DEBUG
|
||||||
|
std::cerr << "Final (alg) score:" << algScore;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
return algScore;
|
||||||
|
}
|
||||||
|
else if (doScore)
|
||||||
|
{
|
||||||
|
#ifdef RANK_DEBUG
|
||||||
|
std::cerr << "Final (pop) score:" << count;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
else if (doTime)
|
||||||
|
{
|
||||||
|
#ifdef RANK_DEBUG
|
||||||
|
std::cerr << "Final (time) score:" << algScore / count;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
return algScore / count;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void p3Ranking::reSortGroup(RankGroup &grp)
|
void p3Ranking::reSortGroup(RankGroup &grp)
|
||||||
{
|
{
|
||||||
@ -281,11 +408,11 @@ float p3Ranking::getMaxRank()
|
|||||||
bool p3Ranking::getRankings(uint32_t first, uint32_t count, std::list<std::string> &rids)
|
bool p3Ranking::getRankings(uint32_t first, uint32_t count, std::list<std::string> &rids)
|
||||||
{
|
{
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
std::multimap<float, std::string>::iterator rit;
|
std::multimap<float, std::string>::reverse_iterator rit;
|
||||||
for(rit = mRankings.begin(); (i < first) && (rit != mRankings.end()); rit++);
|
for(rit = mRankings.rbegin(); (i < first) && (rit != mRankings.rend()); rit++);
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
for(; (i < count) && (rit != mRankings.end()); rit++)
|
for(; (i < count) && (rit != mRankings.rend()); rit++)
|
||||||
{
|
{
|
||||||
rids.push_back(rit->second);
|
rids.push_back(rit->second);
|
||||||
}
|
}
|
||||||
@ -404,7 +531,7 @@ void p3Ranking::createDummyData()
|
|||||||
msg->PeerId(mOwnId);
|
msg->PeerId(mOwnId);
|
||||||
msg->rid = "0001";
|
msg->rid = "0001";
|
||||||
msg->title = L"Original Awesome Site!";
|
msg->title = L"Original Awesome Site!";
|
||||||
msg->timestamp = now - 12345;
|
msg->timestamp = now - 60 * 60 * 24 * 15;
|
||||||
msg->link = L"http://www.retroshare.org";
|
msg->link = L"http://www.retroshare.org";
|
||||||
msg->comment = L"Retroshares Website";
|
msg->comment = L"Retroshares Website";
|
||||||
|
|
||||||
@ -424,12 +551,46 @@ void p3Ranking::createDummyData()
|
|||||||
msg->PeerId("ALTID");
|
msg->PeerId("ALTID");
|
||||||
msg->rid = "0002";
|
msg->rid = "0002";
|
||||||
msg->title = L"Awesome Site!";
|
msg->title = L"Awesome Site!";
|
||||||
msg->timestamp = now - 12345;
|
msg->timestamp = now - 60 * 60 * 24 * 29;
|
||||||
msg->link = L"http://www.lunamutt.org";
|
msg->link = L"http://www.lunamutt.org";
|
||||||
msg->comment = L"Lunamutt's Website (TWO) How Long can this comment be!\n";
|
msg->comment = L"Lunamutt's Website (TWO) How Long can this comment be!\n";
|
||||||
msg->comment += L"What happens to the second line?\n";
|
msg->comment += L"What happens to the second line?\n";
|
||||||
msg->comment += L"And a 3rd!";
|
msg->comment += L"And a 3rd!";
|
||||||
|
|
||||||
addRankMsg(msg);
|
addRankMsg(msg);
|
||||||
|
|
||||||
|
msg = new RsRankMsg();
|
||||||
|
msg->PeerId("ALTID2");
|
||||||
|
msg->rid = "0002";
|
||||||
|
msg->title = L"Awesome Site!";
|
||||||
|
msg->timestamp = now - 60 * 60 * 7;
|
||||||
|
msg->link = L"http://www.lunamutt.org";
|
||||||
|
msg->comment += L"A Short Comment";
|
||||||
|
|
||||||
|
addRankMsg(msg);
|
||||||
|
|
||||||
|
|
||||||
|
/***** Third one ****/
|
||||||
|
|
||||||
|
msg = new RsRankMsg();
|
||||||
|
msg->PeerId(mOwnId);
|
||||||
|
msg->rid = "0003";
|
||||||
|
msg->title = L"Weird Site!";
|
||||||
|
msg->timestamp = now - 60 * 60;
|
||||||
|
msg->link = L"http://www.lunamutt.com";
|
||||||
|
msg->comment = L"";
|
||||||
|
|
||||||
|
addRankMsg(msg);
|
||||||
|
|
||||||
|
msg = new RsRankMsg();
|
||||||
|
msg->PeerId("ALTID");
|
||||||
|
msg->rid = "0003";
|
||||||
|
msg->title = L"Weird Site!";
|
||||||
|
msg->timestamp = now - 60 * 60 * 24 * 2;
|
||||||
|
msg->link = L"http://www.lunamutt.com";
|
||||||
|
msg->comment = L"";
|
||||||
|
|
||||||
|
addRankMsg(msg);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,7 +344,14 @@ void LinksDialog::updateLinks()
|
|||||||
QTreeWidgetItem *child = new QTreeWidgetItem((QTreeWidget*)0);
|
QTreeWidgetItem *child = new QTreeWidgetItem((QTreeWidget*)0);
|
||||||
|
|
||||||
/* (0) Comment */
|
/* (0) Comment */
|
||||||
|
if (cit->comment != L"")
|
||||||
|
{
|
||||||
child -> setText(0, QString::fromStdWString(cit->comment));
|
child -> setText(0, QString::fromStdWString(cit->comment));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
child -> setText(0, "No Comment");
|
||||||
|
}
|
||||||
|
|
||||||
/* (2) Peer / Date */
|
/* (2) Peer / Date */
|
||||||
{
|
{
|
||||||
@ -412,14 +419,12 @@ void LinksDialog::openLink ( QTreeWidgetItem * item, int column )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cerr << "LinksDialog::openLink() " << (item->text(0)).toStdString() << std::endl;
|
std::cerr << "LinksDialog::openLink() " << (item->text(2)).toStdString() << std::endl;
|
||||||
/* open a browser */
|
/* open a browser */
|
||||||
QUrl url(item->text(0));
|
QUrl url(item->text(2));
|
||||||
QDesktopServices::openUrl ( url );
|
QDesktopServices::openUrl ( url );
|
||||||
|
|
||||||
/* close expansion */
|
/* close expansion */
|
||||||
//ui.linkTreeWidget->collapseItem(item);
|
|
||||||
|
|
||||||
bool state = item->isExpanded();
|
bool state = item->isExpanded();
|
||||||
item->setExpanded(!state);
|
item->setExpanded(!state);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user