/* * libretroshare/src/services: p3ranking.h * * 3P/PQI network interface for RetroShare. * * Copyright 2007-2008 by Robert Fernie. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License Version 2 as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA. * * Please report all bugs and problems to "retroshare@lunamutt.com". * */ #ifndef P3_GENERIC_RANKING_HEADER #define P3_GENERIC_RANKING_HEADER #include "dbase/cachestrapper.h" #include "pqi/pqiservice.h" #include "pqi/pqistore.h" #include "pqi/p3connmgr.h" #include "pqi/p3cfgmgr.h" #include "serialiser/rsserial.h" #include "rsiface/rsrank.h" /* * A Generic Ranking system. * Each User provides one cache... * * can be overloaded for specific types * (links, shares, photos etc) * * This is not generic yet!!! */ class RsRankMsg; class RsRankLinkMsg; class RankGroup { public: std::string rid; /* Random Id */ std::wstring link; std::wstring title; float rank; bool ownTag; std::map comments; }; class p3Ranking: public CacheSource, public CacheStore, public p3Config { public: p3Ranking(p3ConnectMgr *connMgr, uint16_t type, CacheStrapper *cs, CacheTransfer *cft, std::string sourcedir, std::string storedir, uint32_t storePeriod); /******************************* CACHE SOURCE / STORE Interface *********************/ /* overloaded functions from Cache Source */ virtual bool loadLocalCache(const CacheData &data); /* overloaded functions from Cache Store */ virtual int loadCache(const CacheData &data); /******************************* CACHE SOURCE / STORE Interface *********************/ public: /************* Extern Interface *******/ /* changed */ virtual bool updated(); /* Set Sort Methods */ virtual bool setSortPeriod(uint32_t period); virtual bool setSortMethod(uint32_t type); virtual bool clearPeerFilter(); virtual bool setPeerFilter(std::list peers); /* get Ids */ virtual uint32_t getRankingsCount(); virtual float getMaxRank(); virtual bool getRankings(uint32_t first, uint32_t count, std::list &rids); virtual bool getRankDetails(std::string rid, RsRankDetails &details); /* Add New Comment / Msg */ virtual std::string newRankMsg(std::wstring link, std::wstring title, std::wstring comment, int32_t score); virtual bool updateComment(std::string rid, std::wstring comment, int32_t score); virtual std::string anonRankMsg(std::string rid, std::wstring link, std::wstring title); void tick(); void loadRankFile(std::string filename, std::string src); void addRankMsg(RsRankLinkMsg *msg); void publishMsgs(bool own); float locked_calcRank(RankGroup &grp); /* returns 0->100 */ void locked_reSortGroup(RankGroup &grp); void sortAllMsgs(); pqistore *createStore(std::string file, std::string src, bool reading); /****************** p3Config STUFF *******************/ protected: bool addAnonToList(RsRankLinkMsg *msg); virtual RsSerialiser *setupSerialiser(); virtual std::list saveList(bool &cleanup); virtual bool loadList(std::list load); virtual void saveDone(); private: void createDummyData(); p3ConnectMgr *mConnMgr; RsMutex mRankMtx; /***** below here is locked *****/ bool mRepublish; bool mRepublishFriends; time_t mRepublishFriendTS; uint32_t mStorePeriod; std::string mOwnId; bool mUpdated; bool mRepost; std::map mData; std::multimap mRankings; /* Filter/Sort params */ std::list mPeerFilter; uint32_t mViewPeriod; uint32_t mSortType; /* Anonymous Link List */ std::list mAnon; }; #endif