99 lines
2.5 KiB
Rust
99 lines
2.5 KiB
Rust
use crate::{
|
|
apub::actions::{
|
|
AcceptFollowRequest, CreateFollowRequest, DeleteFollowRequest, RejectFollowRequest,
|
|
},
|
|
Action, Context, Error,
|
|
};
|
|
|
|
impl Action for CreateFollowRequest {
|
|
fn perform(&self, context: &Context) -> Result<(), Error> {
|
|
let follow_request = context.store.view.follow_requests.new(
|
|
self.followed_profile,
|
|
self.followed_by_profile,
|
|
self.published,
|
|
)?;
|
|
|
|
context
|
|
.apub
|
|
.follow_request(&self.apub_id, follow_request.id)?;
|
|
|
|
if let Ok(Some(true)) = context.store.profiles.is_local(self.followed_profile) {
|
|
context.store.view.follow_request_notifs.new(
|
|
self.followed_profile,
|
|
follow_request.id,
|
|
self.published,
|
|
);
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
impl Action for AcceptFollowRequest {
|
|
fn perform(&self, context: &Context) -> Result<(), Error> {
|
|
let opt = context
|
|
.store
|
|
.view
|
|
.follow_requests
|
|
.remove(self.follow_request_id)?;
|
|
|
|
if let Some(undo_follow_request) = opt {
|
|
context
|
|
.store
|
|
.view
|
|
.follow_request_notifs
|
|
.remove(undo_follow_request.0.id);
|
|
|
|
let follow = context.store.view.follows.new(
|
|
undo_follow_request.0.left,
|
|
undo_follow_request.0.right,
|
|
self.published,
|
|
)?;
|
|
|
|
context.apub.follow(&self.apub_id, follow.id)?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
impl Action for RejectFollowRequest {
|
|
fn perform(&self, context: &Context) -> Result<(), Error> {
|
|
let opt = context
|
|
.store
|
|
.view
|
|
.follow_requests
|
|
.remove(self.follow_request_id)?;
|
|
|
|
if let Some(undo_follow_request) = opt {
|
|
context
|
|
.store
|
|
.view
|
|
.follow_request_notifs
|
|
.remove(undo_follow_request.0.id);
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
impl Action for DeleteFollowRequest {
|
|
fn perform(&self, context: &Context) -> Result<(), Error> {
|
|
let opt = context
|
|
.store
|
|
.view
|
|
.follow_requests
|
|
.remove(self.follow_request_id)?;
|
|
|
|
if let Some(undo_follow_request) = opt {
|
|
context
|
|
.store
|
|
.view
|
|
.follow_request_notifs
|
|
.remove(undo_follow_request.0.id);
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
}
|