mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-05-11 14:32:39 +00:00
375d9a2a3c
* persistent activity queue * fixes * fixes * make federation workers function callable from outside * log federation instances * dead instance detection not needed here * taplo fmt * split federate bin/lib * minor fix * better logging * log * create struct to hold cancellable task for readability * use boxfuture for readability * reset submodule * fix * fix lint * swap * remove json column, use separate array columns instead * some review comments * make worker a struct for readability * minor readability * add local filter to community follower view * remove separate lemmy_federate entry point * fix remaining duration * address review comments mostly * fix lint * upgrade actitypub-fed to simpler interface * fix sql format * increase delays a bit * fixes after merge * remove selectable * fix instance selectable * add comment * start federation based on latest id at the time * rename federate process args * dead instances in one query * filter follow+report activities by local * remove synchronous federation remove activity sender queue * lint * fix federation tests by waiting for results to change * fix fed test * fix comment report * wait some more * Apply suggestions from code review Co-authored-by: SorteKanin <sortekanin@gmail.com> * fix most remaining tests * wait until private messages * fix community tests * fix community tests * move arg parse * use instance_id instead of domain in federation_queue_state table --------- Co-authored-by: Dessalines <dessalines@users.noreply.github.com> Co-authored-by: SorteKanin <sortekanin@gmail.com>
70 lines
2.1 KiB
Rust
70 lines
2.1 KiB
Rust
use crate::{
|
|
community::BanFromCommunity,
|
|
context::LemmyContext,
|
|
person::BanPerson,
|
|
post::{DeletePost, RemovePost},
|
|
};
|
|
use activitypub_federation::config::Data;
|
|
use futures::future::BoxFuture;
|
|
use lemmy_db_schema::{
|
|
newtypes::{CommunityId, DbUrl, PersonId},
|
|
source::{
|
|
comment::Comment,
|
|
community::Community,
|
|
person::Person,
|
|
post::Post,
|
|
private_message::PrivateMessage,
|
|
},
|
|
};
|
|
use lemmy_db_views::structs::PrivateMessageView;
|
|
use lemmy_utils::error::LemmyResult;
|
|
use once_cell::sync::OnceCell;
|
|
use url::Url;
|
|
|
|
type MatchOutgoingActivitiesBoxed =
|
|
Box<for<'a> fn(SendActivityData, &'a Data<LemmyContext>) -> BoxFuture<'a, LemmyResult<()>>>;
|
|
|
|
/// This static is necessary so that the api_common crates don't need to depend on lemmy_apub
|
|
pub static MATCH_OUTGOING_ACTIVITIES: OnceCell<MatchOutgoingActivitiesBoxed> = OnceCell::new();
|
|
|
|
#[derive(Debug)]
|
|
pub enum SendActivityData {
|
|
CreatePost(Post),
|
|
UpdatePost(Post),
|
|
DeletePost(Post, Person, DeletePost),
|
|
RemovePost(Post, Person, RemovePost),
|
|
LockPost(Post, Person, bool),
|
|
FeaturePost(Post, Person, bool),
|
|
CreateComment(Comment),
|
|
UpdateComment(Comment),
|
|
DeleteComment(Comment, Person, Community),
|
|
RemoveComment(Comment, Person, Community, Option<String>),
|
|
LikePostOrComment(DbUrl, Person, Community, i16),
|
|
FollowCommunity(Community, Person, bool),
|
|
UpdateCommunity(Person, Community),
|
|
DeleteCommunity(Person, Community, bool),
|
|
RemoveCommunity(Person, Community, Option<String>, bool),
|
|
AddModToCommunity(Person, CommunityId, PersonId, bool),
|
|
BanFromCommunity(Person, CommunityId, Person, BanFromCommunity),
|
|
BanFromSite(Person, Person, BanPerson),
|
|
CreatePrivateMessage(PrivateMessageView),
|
|
UpdatePrivateMessage(PrivateMessageView),
|
|
DeletePrivateMessage(Person, PrivateMessage, bool),
|
|
DeleteUser(Person, bool),
|
|
CreateReport(Url, Person, Community, String),
|
|
}
|
|
|
|
pub struct ActivityChannel;
|
|
|
|
impl ActivityChannel {
|
|
pub async fn submit_activity(
|
|
data: SendActivityData,
|
|
context: &Data<LemmyContext>,
|
|
) -> LemmyResult<()> {
|
|
MATCH_OUTGOING_ACTIVITIES
|
|
.get()
|
|
.expect("retrieve function pointer")(data, context)
|
|
.await
|
|
}
|
|
}
|