Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix listing type default value #2796

Merged
merged 2 commits into from
Apr 12, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 0 additions & 11 deletions crates/api_common/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ use lemmy_db_schema::{
},
traits::{Crud, Readable},
utils::DbPool,
ListingType,
};
use lemmy_db_views::{comment_view::CommentQuery, structs::LocalUserView};
use lemmy_db_views_actor::structs::{
Expand All @@ -41,7 +40,6 @@ use lemmy_utils::{
use regex::Regex;
use reqwest_middleware::ClientWithMiddleware;
use rosetta_i18n::{Language, LanguageId};
use std::str::FromStr;
use tracing::warn;
use url::{ParseError, Url};

Expand Down Expand Up @@ -781,15 +779,6 @@ pub async fn delete_user_account(
Ok(())
}

pub fn listing_type_with_site_default(
listing_type: Option<ListingType>,
local_site: &LocalSite,
) -> Result<ListingType, LemmyError> {
Ok(listing_type.unwrap_or(ListingType::from_str(
&local_site.default_post_listing_type,
)?))
}

#[cfg(test)]
mod tests {
use crate::utils::{honeypot_check, password_length_check};
Expand Down
20 changes: 7 additions & 13 deletions crates/apub/src/api/list_comments.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
use crate::{
api::PerformApub,
api::{listing_type_with_default, PerformApub},
fetcher::resolve_actor_identifier,
objects::community::ApubCommunity,
};
use activitypub_federation::config::Data;
use lemmy_api_common::{
comment::{GetComments, GetCommentsResponse},
context::LemmyContext,
utils::{
check_private_instance,
get_local_user_view_from_jwt_opt,
listing_type_with_site_default,
},
utils::{check_private_instance, get_local_user_view_from_jwt_opt},
};
use lemmy_db_schema::{
source::{comment::Comment, community::Community, local_site::LocalSite},
Expand All @@ -37,16 +33,13 @@ impl PerformApub for GetComments {
let local_site = LocalSite::read(context.pool()).await?;
check_private_instance(&local_user_view, &local_site)?;

let community_id = data.community_id;
let listing_type = listing_type_with_site_default(data.type_, &local_site)?;

let community_actor_id = if let Some(name) = &data.community_name {
let community_id = if let Some(name) = &data.community_name {
resolve_actor_identifier::<ApubCommunity, Community>(name, context, &None, true)
.await
.ok()
.map(|c| c.actor_id.clone())
.map(|c| c.id)
} else {
None
data.community_id
};
let sort = data.sort;
let max_depth = data.max_depth;
Expand All @@ -55,6 +48,8 @@ impl PerformApub for GetComments {
let limit = data.limit;
let parent_id = data.parent_id;

let listing_type = listing_type_with_default(data.type_, &local_site, community_id)?;

// If a parent_id is given, fetch the comment to get the path
let parent_path = if let Some(parent_id) = parent_id {
Some(Comment::read(context.pool(), parent_id).await?.path)
Expand All @@ -72,7 +67,6 @@ impl PerformApub for GetComments {
.max_depth(max_depth)
.saved_only(saved_only)
.community_id(community_id)
.community_actor_id(community_actor_id)
.parent_path(parent_path_cloned)
.post_id(post_id)
.local_user(local_user.as_ref())
Expand Down
20 changes: 7 additions & 13 deletions crates/apub/src/api/list_posts.rs
Original file line number Diff line number Diff line change
@@ -1,18 +1,13 @@
use crate::{
api::PerformApub,
api::{listing_type_with_default, PerformApub},
fetcher::resolve_actor_identifier,
objects::community::ApubCommunity,
};
use activitypub_federation::config::Data;
use lemmy_api_common::{
context::LemmyContext,
post::{GetPosts, GetPostsResponse},
utils::{
check_private_instance,
get_local_user_view_from_jwt_opt,
is_mod_or_admin_opt,
listing_type_with_site_default,
},
utils::{check_private_instance, get_local_user_view_from_jwt_opt, is_mod_or_admin_opt},
};
use lemmy_db_schema::source::{community::Community, local_site::LocalSite};
use lemmy_db_views::post_view::PostQuery;
Expand All @@ -37,21 +32,21 @@ impl PerformApub for GetPosts {
check_private_instance(&local_user_view, &local_site)?;

let sort = data.sort;
let listing_type = listing_type_with_site_default(data.type_, &local_site)?;

let page = data.page;
let limit = data.limit;
let community_id = data.community_id;
let community_actor_id = if let Some(name) = &data.community_name {
let community_id = if let Some(name) = &data.community_name {
resolve_actor_identifier::<ApubCommunity, Community>(name, context, &None, true)
.await
.ok()
.map(|c| c.actor_id.clone())
.map(|c| c.id)
} else {
None
data.community_id
};
let saved_only = data.saved_only;

let listing_type = listing_type_with_default(data.type_, &local_site, community_id)?;

let is_mod_or_admin =
is_mod_or_admin_opt(context.pool(), local_user_view.as_ref(), community_id)
.await
Expand All @@ -63,7 +58,6 @@ impl PerformApub for GetPosts {
.listing_type(Some(listing_type))
.sort(sort)
.community_id(community_id)
.community_actor_id(community_actor_id)
.saved_only(saved_only)
.page(page)
.limit(limit)
Expand Down
20 changes: 20 additions & 0 deletions crates/apub/src/api/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
use activitypub_federation::config::Data;
use lemmy_api_common::context::LemmyContext;
use lemmy_db_schema::{newtypes::CommunityId, source::local_site::LocalSite, ListingType};
use lemmy_utils::{error::LemmyError, ConnectionId};
use std::str::FromStr;

mod list_comments;
mod list_posts;
Expand All @@ -19,3 +21,21 @@ pub trait PerformApub {
websocket_id: Option<ConnectionId>,
) -> Result<Self::Response, LemmyError>;
}

/// Returns default listing type, depending if the query is for frontpage or community.
fn listing_type_with_default(
type_: Option<ListingType>,
local_site: &LocalSite,
community_id: Option<CommunityId>,
) -> Result<ListingType, LemmyError> {
// On frontpage use listing type from param or admin configured default
let listing_type = if community_id.is_none() {
type_.unwrap_or(ListingType::from_str(
&local_site.default_post_listing_type,
)?)
} else {
// inside of community show everything
ListingType::All
};
Ok(listing_type)
}
14 changes: 3 additions & 11 deletions crates/apub/src/api/search.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,13 @@ impl PerformApub for Search {
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 {
let community_id = if let Some(name) = &data.community_name {
resolve_actor_identifier::<ApubCommunity, Community>(name, context, &local_user_view, false)
.await
.ok()
.map(|c| c.actor_id.clone())
.map(|c| c.id.clone())
} else {
None
data.community_id
};
let creator_id = data.creator_id;
let local_user = local_user_view.map(|l| l.local_user);
Expand All @@ -70,7 +69,6 @@ impl PerformApub for Search {
.sort(sort)
.listing_type(listing_type)
.community_id(community_id)
.community_actor_id(community_actor_id)
.creator_id(creator_id)
.local_user(local_user.as_ref())
.search_term(Some(q))
Expand All @@ -88,7 +86,6 @@ impl PerformApub for Search {
.listing_type(listing_type)
.search_term(Some(q))
.community_id(community_id)
.community_actor_id(community_actor_id)
.creator_id(creator_id)
.local_user(local_user.as_ref())
.page(page)
Expand Down Expand Up @@ -126,15 +123,13 @@ impl PerformApub for Search {
// If the community or creator is included, dont search communities or users
let community_or_creator_included =
data.community_id.is_some() || data.community_name.is_some() || data.creator_id.is_some();
let community_actor_id_2 = community_actor_id.clone();

let local_user_ = local_user.clone();
posts = PostQuery::builder()
.pool(context.pool())
.sort(sort)
.listing_type(listing_type)
.community_id(community_id)
.community_actor_id(community_actor_id_2)
.creator_id(creator_id)
.local_user(local_user_.as_ref())
.search_term(Some(q))
Expand All @@ -146,7 +141,6 @@ impl PerformApub for Search {
.await?;

let q = data.q.clone();
let community_actor_id = community_actor_id.clone();

let local_user_ = local_user.clone();
comments = CommentQuery::builder()
Expand All @@ -155,7 +149,6 @@ impl PerformApub for Search {
.listing_type(listing_type)
.search_term(Some(q))
.community_id(community_id)
.community_actor_id(community_actor_id)
.creator_id(creator_id)
.local_user(local_user_.as_ref())
.page(page)
Expand Down Expand Up @@ -205,7 +198,6 @@ impl PerformApub for Search {
.sort(sort)
.listing_type(listing_type)
.community_id(community_id)
.community_actor_id(community_actor_id)
.creator_id(creator_id)
.url_search(Some(q))
.is_mod_or_admin(is_admin)
Expand Down
7 changes: 1 addition & 6 deletions crates/db_views/src/comment_view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use diesel_async::RunQueryDsl;
use diesel_ltree::{nlevel, subpath, Ltree, LtreeExtensions};
use lemmy_db_schema::{
aggregates::structs::CommentAggregates,
newtypes::{CommentId, CommunityId, DbUrl, LocalUserId, PersonId, PostId},
newtypes::{CommentId, CommunityId, LocalUserId, PersonId, PostId},
schema::{
comment,
comment_aggregates,
Expand Down Expand Up @@ -170,7 +170,6 @@ pub struct CommentQuery<'a> {
listing_type: Option<ListingType>,
sort: Option<CommentSortType>,
community_id: Option<CommunityId>,
community_actor_id: Option<DbUrl>,
post_id: Option<PostId>,
parent_path: Option<Ltree>,
creator_id: Option<PersonId>,
Expand Down Expand Up @@ -306,10 +305,6 @@ impl<'a> CommentQuery<'a> {
query = query.filter(post::community_id.eq(community_id));
}

if let Some(community_actor_id) = self.community_actor_id {
query = query.filter(community::actor_id.eq(community_actor_id))
}

if self.saved_only.unwrap_or(false) {
query = query.filter(comment_saved::comment_id.is_not_null());
}
Expand Down
9 changes: 2 additions & 7 deletions crates/db_views/src/post_view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use diesel::{
use diesel_async::RunQueryDsl;
use lemmy_db_schema::{
aggregates::structs::PostAggregates,
newtypes::{CommunityId, DbUrl, LocalUserId, PersonId, PostId},
newtypes::{CommunityId, LocalUserId, PersonId, PostId},
schema::{
community,
community_block,
Expand Down Expand Up @@ -224,7 +224,6 @@ pub struct PostQuery<'a> {
sort: Option<SortType>,
creator_id: Option<PersonId>,
community_id: Option<CommunityId>,
community_actor_id: Option<DbUrl>,
local_user: Option<&'a LocalUser>,
search_term: Option<String>,
url_search: Option<String>,
Expand Down Expand Up @@ -380,16 +379,12 @@ impl<'a> PostQuery<'a> {
}
}
}
if self.community_id.is_none() && self.community_actor_id.is_none() {
if self.community_id.is_none() {
query = query.then_order_by(post_aggregates::featured_local.desc());
} else if let Some(community_id) = self.community_id {
query = query
.filter(post::community_id.eq(community_id))
.then_order_by(post_aggregates::featured_community.desc());
} else if let Some(community_actor_id) = self.community_actor_id {
query = query
.filter(community::actor_id.eq(community_actor_id))
.then_order_by(post_aggregates::featured_community.desc());
}

if let Some(url_search) = self.url_search {
Expand Down