use crate::Perform;
use actix_web::web::Data;
use lemmy_api_common::{
- blocking,
- check_private_instance,
- get_local_user_view_from_jwt_opt,
site::{Search, SearchResponse},
+ utils::{blocking, check_private_instance, get_local_user_view_from_jwt_opt},
};
use lemmy_apub::{fetcher::resolve_actor_identifier, objects::community::ApubCommunity};
use lemmy_db_schema::{
- from_opt_str_to_opt_enum,
- source::community::Community,
+ source::{community::Community, local_site::LocalSite},
traits::DeleteableOrRemoveable,
- ListingType,
+ utils::post_to_comment_sort_type,
SearchType,
- SortType,
};
-use lemmy_db_views::{comment_view::CommentQueryBuilder, post_view::PostQueryBuilder};
-use lemmy_db_views_actor::{
- community_view::CommunityQueryBuilder,
- person_view::PersonQueryBuilder,
-};
-use lemmy_utils::{ConnectionId, LemmyError};
+use lemmy_db_views::{comment_view::CommentQuery, post_view::PostQuery};
+use lemmy_db_views_actor::{community_view::CommunityQuery, person_view::PersonQuery};
+use lemmy_utils::{error::LemmyError, ConnectionId};
use lemmy_websocket::LemmyContext;
#[async_trait::async_trait(?Send)]
let local_user_view =
get_local_user_view_from_jwt_opt(data.auth.as_ref(), context.pool(), context.secret())
.await?;
+ let local_site = blocking(context.pool(), LocalSite::read).await??;
- check_private_instance(&local_user_view, context.pool()).await?;
-
- let show_nsfw = local_user_view.as_ref().map(|t| t.local_user.show_nsfw);
- let show_bot_accounts = local_user_view
- .as_ref()
- .map(|t| t.local_user.show_bot_accounts);
- let show_read_posts = local_user_view
- .as_ref()
- .map(|t| t.local_user.show_read_posts);
+ check_private_instance(&local_user_view, &local_site)?;
- let person_id = local_user_view.map(|u| u.person.id);
+ let person_id = local_user_view.as_ref().map(|u| u.person.id);
+ let local_user = local_user_view.map(|l| l.local_user);
let mut posts = Vec::new();
let mut comments = Vec::new();
let q = data.q.to_owned();
let page = data.page;
let limit = data.limit;
- let sort: Option<SortType> = from_opt_str_to_opt_enum(&data.sort);
- let listing_type: Option<ListingType> = from_opt_str_to_opt_enum(&data.listing_type);
- let search_type: SearchType = from_opt_str_to_opt_enum(&data.type_).unwrap_or(SearchType::All);
+ let sort = data.sort;
+ let listing_type = data.listing_type;
+ let search_type = data.type_.unwrap_or(SearchType::All);
let community_id = data.community_id;
let community_actor_id = if let Some(name) = &data.community_name {
- resolve_actor_identifier::<ApubCommunity, Community>(name, context)
+ resolve_actor_identifier::<ApubCommunity, Community>(name, context, false)
.await
.ok()
.map(|c| c.actor_id)
match search_type {
SearchType::Posts => {
posts = blocking(context.pool(), move |conn| {
- PostQueryBuilder::create(conn)
+ PostQuery::builder()
+ .conn(conn)
.sort(sort)
- .show_nsfw(show_nsfw)
- .show_bot_accounts(show_bot_accounts)
- .show_read_posts(show_read_posts)
.listing_type(listing_type)
.community_id(community_id)
.community_actor_id(community_actor_id)
.creator_id(creator_id)
- .my_person_id(person_id)
- .search_term(q)
+ .local_user(local_user.as_ref())
+ .search_term(Some(q))
.page(page)
.limit(limit)
+ .build()
.list()
})
.await??;
}
SearchType::Comments => {
comments = blocking(context.pool(), move |conn| {
- CommentQueryBuilder::create(conn)
- .sort(sort)
+ CommentQuery::builder()
+ .conn(conn)
+ .sort(sort.map(post_to_comment_sort_type))
.listing_type(listing_type)
- .search_term(q)
- .show_bot_accounts(show_bot_accounts)
+ .search_term(Some(q))
.community_id(community_id)
.community_actor_id(community_actor_id)
.creator_id(creator_id)
- .my_person_id(person_id)
+ .local_user(local_user.as_ref())
.page(page)
.limit(limit)
+ .build()
.list()
})
.await??;
}
SearchType::Communities => {
communities = blocking(context.pool(), move |conn| {
- CommunityQueryBuilder::create(conn)
+ CommunityQuery::builder()
+ .conn(conn)
.sort(sort)
.listing_type(listing_type)
- .search_term(q)
- .my_person_id(person_id)
+ .search_term(Some(q))
+ .local_user(local_user.as_ref())
.page(page)
.limit(limit)
+ .build()
.list()
})
.await??;
}
SearchType::Users => {
users = blocking(context.pool(), move |conn| {
- PersonQueryBuilder::create(conn)
+ PersonQuery::builder()
+ .conn(conn)
.sort(sort)
- .search_term(q)
+ .search_term(Some(q))
.page(page)
.limit(limit)
+ .build()
.list()
})
.await??;
data.community_id.is_some() || data.community_name.is_some() || data.creator_id.is_some();
let community_actor_id_2 = community_actor_id.to_owned();
+ let local_user_ = local_user.clone();
posts = blocking(context.pool(), move |conn| {
- PostQueryBuilder::create(conn)
+ PostQuery::builder()
+ .conn(conn)
.sort(sort)
- .show_nsfw(show_nsfw)
- .show_bot_accounts(show_bot_accounts)
- .show_read_posts(show_read_posts)
.listing_type(listing_type)
.community_id(community_id)
.community_actor_id(community_actor_id_2)
.creator_id(creator_id)
- .my_person_id(person_id)
- .search_term(q)
+ .local_user(local_user_.as_ref())
+ .search_term(Some(q))
.page(page)
.limit(limit)
+ .build()
.list()
})
.await??;
let q = data.q.to_owned();
let community_actor_id = community_actor_id.to_owned();
+ let local_user_ = local_user.clone();
comments = blocking(context.pool(), move |conn| {
- CommentQueryBuilder::create(conn)
- .sort(sort)
+ CommentQuery::builder()
+ .conn(conn)
+ .sort(sort.map(post_to_comment_sort_type))
.listing_type(listing_type)
- .search_term(q)
- .show_bot_accounts(show_bot_accounts)
+ .search_term(Some(q))
.community_id(community_id)
.community_actor_id(community_actor_id)
.creator_id(creator_id)
- .my_person_id(person_id)
+ .local_user(local_user_.as_ref())
.page(page)
.limit(limit)
+ .build()
.list()
})
.await??;
vec![]
} else {
blocking(context.pool(), move |conn| {
- CommunityQueryBuilder::create(conn)
+ CommunityQuery::builder()
+ .conn(conn)
.sort(sort)
.listing_type(listing_type)
- .search_term(q)
- .my_person_id(person_id)
+ .search_term(Some(q))
+ .local_user(local_user.as_ref())
.page(page)
.limit(limit)
+ .build()
.list()
})
.await??
vec![]
} else {
blocking(context.pool(), move |conn| {
- PersonQueryBuilder::create(conn)
+ PersonQuery::builder()
+ .conn(conn)
.sort(sort)
- .search_term(q)
+ .search_term(Some(q))
.page(page)
.limit(limit)
+ .build()
.list()
})
.await??
}
SearchType::Url => {
posts = blocking(context.pool(), move |conn| {
- PostQueryBuilder::create(conn)
+ PostQuery::builder()
+ .conn(conn)
.sort(sort)
- .show_nsfw(show_nsfw)
- .show_bot_accounts(show_bot_accounts)
- .show_read_posts(show_read_posts)
.listing_type(listing_type)
- .my_person_id(person_id)
.community_id(community_id)
.community_actor_id(community_actor_id)
.creator_id(creator_id)
- .url_search(q)
+ .url_search(Some(q))
.page(page)
.limit(limit)
+ .build()
.list()
})
.await??;