mirror of
https://github.com/twisterarmy/twister-core.git
synced 2025-01-10 06:48:07 +00:00
rescandirectmsgs: rescan all streams of users we follow for new and old directmessages
This commit is contained in:
parent
d9c64c2076
commit
2cd0b0a881
@ -523,6 +523,8 @@ namespace libtorrent
|
|||||||
return m_picker->have_piece(index);
|
return m_picker->have_piece(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void recheck_pieces(uint32_t piece_flags);
|
||||||
|
|
||||||
// called when we learn that we have a piece
|
// called when we learn that we have a piece
|
||||||
// only once per piece
|
// only once per piece
|
||||||
void we_have(int index, boost::uint32_t post_flags);
|
void we_have(int index, boost::uint32_t post_flags);
|
||||||
|
@ -170,6 +170,7 @@ namespace libtorrent
|
|||||||
void read_piece(int piece) const;
|
void read_piece(int piece) const;
|
||||||
void get_pieces(std::vector<std::string> &pieces, int count, int max_id, int since_id, uint32_t filter_flags) const;
|
void get_pieces(std::vector<std::string> &pieces, int count, int max_id, int since_id, uint32_t filter_flags) const;
|
||||||
bool have_piece(int piece) const;
|
bool have_piece(int piece) const;
|
||||||
|
void recheck_pieces(uint32_t piece_flags) const;
|
||||||
|
|
||||||
void get_full_peer_list(std::vector<peer_list_entry>& v) const;
|
void get_full_peer_list(std::vector<peer_list_entry>& v) const;
|
||||||
void get_peer_info(std::vector<peer_info>& v) const;
|
void get_peer_info(std::vector<peer_info>& v) const;
|
||||||
|
@ -3073,6 +3073,30 @@ namespace libtorrent
|
|||||||
m_picker->set_piece_priority(i, 6);
|
m_picker->set_piece_priority(i, 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void on_disk_read_recheck_piece_complete(int ret, disk_io_job const& j, peer_request r)
|
||||||
|
{
|
||||||
|
// [MF] FIXME: implement cond_wakeup here so that recheck_pieces would wait
|
||||||
|
}
|
||||||
|
|
||||||
|
void torrent::recheck_pieces(uint32_t piece_flags)
|
||||||
|
{
|
||||||
|
TORRENT_ASSERT(m_ses.is_network_thread());
|
||||||
|
TORRENT_ASSERT(m_picker);
|
||||||
|
|
||||||
|
for( int i = 0; i <= last_have(); i++) {
|
||||||
|
if( m_picker->have_piece(i) && m_picker->post_flags(i) == piece_flags ) {
|
||||||
|
peer_request r;
|
||||||
|
r.piece = i;
|
||||||
|
r.start = 0;
|
||||||
|
r.length = torrent_file().piece_size(i);
|
||||||
|
|
||||||
|
filesystem().async_read_and_hash(r,
|
||||||
|
boost::bind(&on_disk_read_recheck_piece_complete
|
||||||
|
, _1, _2, r), 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void torrent::we_have(int index, boost::uint32_t post_flags)
|
void torrent::we_have(int index, boost::uint32_t post_flags)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(m_ses.is_network_thread());
|
TORRENT_ASSERT(m_ses.is_network_thread());
|
||||||
|
@ -846,6 +846,12 @@ namespace libtorrent
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void torrent_handle::recheck_pieces(uint32_t piece_flags) const
|
||||||
|
{
|
||||||
|
INVARIANT_CHECK;
|
||||||
|
TORRENT_SYNC_CALL1(recheck_pieces, piece_flags);
|
||||||
|
}
|
||||||
|
|
||||||
storage_interface* torrent_handle::get_storage_impl() const
|
storage_interface* torrent_handle::get_storage_impl() const
|
||||||
{
|
{
|
||||||
INVARIANT_CHECK;
|
INVARIANT_CHECK;
|
||||||
|
@ -256,6 +256,7 @@ static const CRPCCommand vRPCCommands[] =
|
|||||||
{ "listusernamespartial", &listusernamespartial, false, true },
|
{ "listusernamespartial", &listusernamespartial, false, true },
|
||||||
{ "getdefaultuser", &getdefaultuser, false, true },
|
{ "getdefaultuser", &getdefaultuser, false, true },
|
||||||
{ "setdefaultuser", &setdefaultuser, false, true },
|
{ "setdefaultuser", &setdefaultuser, false, true },
|
||||||
|
{ "rescandirectmsgs", &rescandirectmsgs, false, true },
|
||||||
};
|
};
|
||||||
|
|
||||||
CRPCTable::CRPCTable()
|
CRPCTable::CRPCTable()
|
||||||
|
@ -208,5 +208,6 @@ extern json_spirit::Value getlasthave(const json_spirit::Array& params, bool fHe
|
|||||||
extern json_spirit::Value listusernamespartial(const json_spirit::Array& params, bool fHelp);
|
extern json_spirit::Value listusernamespartial(const json_spirit::Array& params, bool fHelp);
|
||||||
extern json_spirit::Value getdefaultuser(const json_spirit::Array& params, bool fHelp);
|
extern json_spirit::Value getdefaultuser(const json_spirit::Array& params, bool fHelp);
|
||||||
extern json_spirit::Value setdefaultuser(const json_spirit::Array& params, bool fHelp);
|
extern json_spirit::Value setdefaultuser(const json_spirit::Array& params, bool fHelp);
|
||||||
|
extern json_spirit::Value rescandirectmsgs(const json_spirit::Array& params, bool fHelp);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -653,11 +653,10 @@ bool processReceivedDM(lazy_entry const* post)
|
|||||||
} else {
|
} else {
|
||||||
std::string textOut;
|
std::string textOut;
|
||||||
if( key.Decrypt(sec, textOut) ) {
|
if( key.Decrypt(sec, textOut) ) {
|
||||||
/* this printf is good for debug, but bad for security.
|
// this printf is good for debug, but bad for security.
|
||||||
printf("Received DM for user '%s' text = '%s'\n",
|
printf("Received DM for user '%s' text = '%s'\n",
|
||||||
item.second.username.c_str(),
|
item.second.username.c_str(),
|
||||||
textOut.c_str());
|
textOut.c_str());
|
||||||
*/
|
|
||||||
|
|
||||||
std::string n = post->dict_find_string_value("n");
|
std::string n = post->dict_find_string_value("n");
|
||||||
|
|
||||||
@ -958,7 +957,8 @@ bool shouldDhtResourceExpire(std::string resource, bool multi, int height)
|
|||||||
if( m_noExpireResources[resourceBasic] == PostNoExpireRecent &&
|
if( m_noExpireResources[resourceBasic] == PostNoExpireRecent &&
|
||||||
(height + BLOCK_AGE_TO_EXPIRE_DHT_POSTS) < getBestHeight() ) {
|
(height + BLOCK_AGE_TO_EXPIRE_DHT_POSTS) < getBestHeight() ) {
|
||||||
#ifdef DEBUG_EXPIRE_DHT_ITEM
|
#ifdef DEBUG_EXPIRE_DHT_ITEM
|
||||||
printf("shouldDhtResourceExpire: expiring old post resource '%s'\n", resource.c_str());
|
printf("shouldDhtResourceExpire: expiring old post resource '%s' (height %d cur %d)\n",
|
||||||
|
resource.c_str(), height, getBestHeight());
|
||||||
#endif
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1594,3 +1594,33 @@ Value listusernamespartial(const Array& params, bool fHelp)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Value rescandirectmsgs(const Array& params, bool fHelp)
|
||||||
|
{
|
||||||
|
if (fHelp || (params.size() != 1))
|
||||||
|
throw runtime_error(
|
||||||
|
"rescandirectmsgs <username>\n"
|
||||||
|
"rescan all streams of users we follow for new and old directmessages");
|
||||||
|
|
||||||
|
string localUser = params[0].get_str();
|
||||||
|
|
||||||
|
std::set<std::string> following;
|
||||||
|
{
|
||||||
|
LOCK(cs_twister);
|
||||||
|
following = m_users[localUser].m_following;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FOREACH(string username, following) {
|
||||||
|
torrent_handle torrent;
|
||||||
|
|
||||||
|
{
|
||||||
|
LOCK(cs_twister);
|
||||||
|
if( username.size() && m_userTorrent.count(username) )
|
||||||
|
torrent = m_userTorrent[username];
|
||||||
|
}
|
||||||
|
if( torrent.is_valid() ){
|
||||||
|
torrent.recheck_pieces(USERPOST_FLAG_DM);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Value();
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user