2022-02-13 18:55:37 +00:00
|
|
|
use crate::activitypub::constants::AP_PUBLIC;
|
|
|
|
use crate::models::posts::types::Visibility;
|
|
|
|
use crate::models::profiles::types::DbActorProfile;
|
|
|
|
|
|
|
|
pub fn get_note_visibility(
|
|
|
|
author: &DbActorProfile,
|
|
|
|
primary_audience: Vec<String>,
|
|
|
|
secondary_audience: Vec<String>,
|
|
|
|
) -> Visibility {
|
|
|
|
if primary_audience.contains(&AP_PUBLIC.to_string()) ||
|
|
|
|
secondary_audience.contains(&AP_PUBLIC.to_string()) {
|
|
|
|
Visibility::Public
|
|
|
|
} else {
|
2022-02-13 17:55:35 +00:00
|
|
|
let maybe_followers = author.actor_json.as_ref()
|
|
|
|
.and_then(|actor| actor.followers.as_ref());
|
|
|
|
if let Some(followers) = maybe_followers {
|
2022-02-23 23:07:51 +00:00
|
|
|
if primary_audience.contains(followers) ||
|
|
|
|
secondary_audience.contains(followers) {
|
2022-02-13 17:55:35 +00:00
|
|
|
Visibility::Followers
|
|
|
|
} else {
|
|
|
|
Visibility::Direct
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
Visibility::Direct
|
|
|
|
}
|
2022-02-13 18:55:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
2022-02-13 17:55:35 +00:00
|
|
|
use crate::activitypub::actor::Actor;
|
2022-02-13 18:55:37 +00:00
|
|
|
use super::*;
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_get_note_visibility_public() {
|
|
|
|
let author = DbActorProfile::default();
|
|
|
|
let primary_audience = vec![AP_PUBLIC.to_string()];
|
|
|
|
let secondary_audience = vec![];
|
|
|
|
let visibility = get_note_visibility(
|
|
|
|
&author,
|
|
|
|
primary_audience,
|
|
|
|
secondary_audience,
|
|
|
|
);
|
|
|
|
assert_eq!(visibility, Visibility::Public);
|
|
|
|
}
|
|
|
|
|
2022-02-13 17:55:35 +00:00
|
|
|
#[test]
|
|
|
|
fn test_get_note_visibility_followers() {
|
|
|
|
let author_followers = "https://example.com/users/author/followers";
|
|
|
|
let author = DbActorProfile {
|
|
|
|
actor_json: Some(Actor {
|
|
|
|
followers: Some(author_followers.to_string()),
|
|
|
|
..Default::default()
|
|
|
|
}),
|
|
|
|
..Default::default()
|
|
|
|
};
|
|
|
|
let primary_audience = vec![author_followers.to_string()];
|
|
|
|
let secondary_audience = vec![];
|
|
|
|
let visibility = get_note_visibility(
|
|
|
|
&author,
|
|
|
|
primary_audience,
|
|
|
|
secondary_audience,
|
|
|
|
);
|
|
|
|
assert_eq!(visibility, Visibility::Followers);
|
|
|
|
}
|
|
|
|
|
2022-02-13 18:55:37 +00:00
|
|
|
#[test]
|
|
|
|
fn test_get_note_visibility_direct() {
|
|
|
|
let author = DbActorProfile::default();
|
|
|
|
let primary_audience = vec!["https://example.com/users/1".to_string()];
|
|
|
|
let secondary_audience = vec![];
|
|
|
|
let visibility = get_note_visibility(
|
|
|
|
&author,
|
|
|
|
primary_audience,
|
|
|
|
secondary_audience,
|
|
|
|
);
|
|
|
|
assert_eq!(visibility, Visibility::Direct);
|
|
|
|
}
|
|
|
|
}
|