Updates for new Filter type

This commit is contained in:
Mike Dilger 2024-01-20 09:10:10 +13:00
parent 0c7bfa5b5d
commit 50bd89bd89

View File

@ -483,11 +483,14 @@ impl Minion {
let mut event_kinds = crate::feed::feed_related_event_kinds(false);
event_kinds.retain(|f| f.augments_feed_related());
let filter = Filter {
e: ids,
let filter = {
let mut filter = Filter {
kinds: event_kinds,
..Default::default()
};
filter.set_tag_values('e', ids.iter().map(|id| id.to_string()).collect());
filter
};
self.subscribe(vec![filter], "temp_augments", job_id)
.await?;
@ -631,44 +634,46 @@ impl Minion {
let pkh: PublicKeyHex = pubkey.into();
// If the relay is not spamsafe, only accept mentions from people we follow
if self.dbrelay.has_usage_bits(Relay::SPAMSAFE)
|| !GLOBALS.storage.read_setting_avoid_spam_on_unsafe_relays()
{
filters.push(Filter {
p: vec![pkh.clone()],
let filter = {
let mut filter = Filter {
kinds: event_kinds,
since: Some(replies_since),
..Default::default()
});
} else {
};
let values = vec![pkh.to_string()];
filter.set_tag_values('p', values);
// Spam prevention:
if !self.dbrelay.has_usage_bits(Relay::SPAMSAFE)
&& GLOBALS.storage.read_setting_avoid_spam_on_unsafe_relays()
{
// As the relay is not spam safe, only take mentions from followers
let authors: Vec<PublicKeyHex> = GLOBALS
filter.authors = GLOBALS
.people
.get_subscribed_pubkeys()
.drain(..)
.map(|pk| pk.into())
.collect();
filters.push(Filter {
authors,
p: vec![pkh.clone()],
kinds: event_kinds,
since: Some(replies_since),
..Default::default()
});
}
filter
};
filters.push(filter);
// Giftwrap specially looks back further
// Giftwraps cannot be filtered by author so we have to take them regardless
// of the spamsafe designation of the relay.
filters.push(Filter {
p: vec![pkh],
let filter = {
let mut filter = Filter {
kinds: vec![EventKind::GiftWrap],
since: Some(giftwrap_since),
..Default::default()
});
};
let values = vec![pkh.to_string()];
filter.set_tag_values('p', values);
filter
};
filters.push(filter);
}
if filters.is_empty() {
@ -861,22 +866,45 @@ impl Minion {
let pkh: PublicKeyHex = pubkey.into();
filters.push(Filter {
p: vec![pkh.clone()],
let filter = {
let mut filter = Filter {
kinds: event_kinds,
since: Some(since),
until: Some(until),
..Default::default()
});
};
filter.set_tag_values('p', vec![pkh.to_string()]);
// Spam prevention:
if !self.dbrelay.has_usage_bits(Relay::SPAMSAFE)
&& GLOBALS.storage.read_setting_avoid_spam_on_unsafe_relays()
{
filter.authors = GLOBALS
.people
.get_subscribed_pubkeys()
.drain(..)
.map(|pk| pk.into())
.collect();
}
filter
};
filters.push(filter);
// Giftwrap specially looks back further
filters.push(Filter {
p: vec![pkh],
// Giftwraps cannot be filtered by author so we have to take them regardless
// of the spamsafe designation of the relay.
let filter = {
let mut filter = Filter {
kinds: vec![EventKind::GiftWrap],
since: Some(giftwrap_since),
until: Some(giftwrap_until),
..Default::default()
});
};
filter.set_tag_values('p', vec![pkh.to_string()]);
filter
};
filters.push(filter);
} else {
self.to_overlord.send(ToOverlordMessage::MinionJobComplete(
self.url.clone(),
@ -923,44 +951,47 @@ impl Minion {
..Default::default()
});
// Also get reactions to these ancestors (but not replies)
// Get reactions to ancestors, but not replies
let kinds = crate::feed::feed_augment_event_kinds();
filters.push(Filter {
e: ancestor_ids,
let filter = {
let mut filter = Filter {
kinds,
..Default::default()
});
};
let values = ancestor_ids.iter().map(|id| id.to_string()).collect();
filter.set_tag_values('e', values);
filter
};
filters.push(filter);
}
// Allow all feed related event kinds (excluding DMs)
let event_kinds = crate::feed::feed_related_event_kinds(false);
if self.dbrelay.has_usage_bits(Relay::SPAMSAFE)
|| !GLOBALS.storage.read_setting_avoid_spam_on_unsafe_relays()
{
// As the relay is spam safe, take all replies!
filters.push(Filter {
e: vec![main],
let filter = {
let mut filter = Filter {
kinds: event_kinds,
..Default::default()
});
} else {
// As the relay is not spam safe, only take replies from followers
let authors: Vec<PublicKeyHex> = GLOBALS
};
let values = vec![main.to_string()];
filter.set_tag_values('e', values);
// Spam prevention:
if !self.dbrelay.has_usage_bits(Relay::SPAMSAFE)
&& GLOBALS.storage.read_setting_avoid_spam_on_unsafe_relays()
{
filter.authors = GLOBALS
.people
.get_subscribed_pubkeys()
.drain(..)
.map(|pk| pk.into())
.collect();
filters.push(Filter {
authors,
e: vec![main],
kinds: event_kinds,
..Default::default()
});
}
filter
};
filters.push(filter);
self.subscribe(filters, "thread_feed", job_id).await?;
Ok(())
@ -983,12 +1014,17 @@ impl Minion {
let mut authors: Vec<PublicKeyHex> = dmchannel.keys().iter().map(|k| k.into()).collect();
authors.push(pkh.clone());
let filters: Vec<Filter> = vec![Filter {
let filter = {
let mut filter = Filter {
authors,
kinds: vec![EventKind::EncryptedDirectMessage],
p: vec![pkh], // tagging the user
..Default::default()
}];
};
// tagging the user
filter.set_tag_values('p', vec![pkh.to_string()]);
filter
};
let filters: Vec<Filter> = vec![filter];
self.subscribe(filters, "dm_channel", job_id).await?;
@ -1088,7 +1124,7 @@ impl Minion {
let pkh: PublicKeyHex = ea.author.into();
filter.authors = vec![pkh];
filter.kinds = vec![ea.kind];
filter.d = vec![ea.d];
filter.set_tag_values('d', vec![ea.d]);
self.subscribe(vec![filter], &handle, job_id).await
}