Put user sort before site sort.

This commit is contained in:
Dessalines 2024-02-15 13:48:23 -05:00
parent 59111c0379
commit befa933939
3 changed files with 26 additions and 5 deletions

View file

@ -49,6 +49,7 @@ pub async fn list_comments(
let listing_type = Some(listing_type_with_default(
data.type_,
&local_site,
local_user_view.as_ref().map(|u| &u.local_user),
community_id,
));

View file

@ -43,13 +43,19 @@ pub async fn list_posts(
return Err(LemmyError::from(LemmyErrorType::ContradictingFilters));
}
let local_user_ref = local_user_view.as_ref().map(|u| &u.local_user);
let listing_type = Some(listing_type_with_default(
data.type_,
&local_site,
local_user_ref,
community_id,
));
let sort = Some(sort_type_with_default(data.sort, &local_site));
let sort = Some(sort_type_with_default(
data.sort,
&local_site,
local_user_ref,
));
// parse pagination token
let page_after = if let Some(pa) = &data.page_cursor {

View file

@ -1,6 +1,6 @@
use lemmy_db_schema::{
newtypes::CommunityId,
source::local_site::LocalSite,
source::{local_site::LocalSite, local_user::LocalUser},
ListingType,
SortType,
};
@ -17,11 +17,16 @@ pub mod user_settings_backup;
fn listing_type_with_default(
type_: Option<ListingType>,
local_site: &LocalSite,
local_user: Option<&LocalUser>,
community_id: Option<CommunityId>,
) -> ListingType {
// On frontpage use listing type from param or admin configured default
if community_id.is_none() {
type_.unwrap_or(local_site.default_post_listing_type)
type_.unwrap_or(
local_user
.map(|u| u.default_listing_type)
.unwrap_or(local_site.default_post_listing_type),
)
} else {
// inside of community show everything
ListingType::All
@ -29,6 +34,15 @@ fn listing_type_with_default(
}
/// Returns a default instance-level sort type, if none is given by the user.
fn sort_type_with_default(type_: Option<SortType>, local_site: &LocalSite) -> SortType {
type_.unwrap_or(local_site.default_sort_type)
/// Order is type, local user default, then site default.
fn sort_type_with_default(
type_: Option<SortType>,
local_site: &LocalSite,
local_user: Option<&LocalUser>,
) -> SortType {
type_.unwrap_or(
local_user
.map(|u| u.default_sort_type)
.unwrap_or(local_site.default_sort_type),
)
}