application_question: "string"
private_instance: true
default_theme: "string"
+ default_post_listing_type: "string"
}
# the domain name of your instance (mandatory)
hostname: "unset"
pub application_question: Option<String>,
pub private_instance: Option<bool>,
pub default_theme: Option<String>,
+ pub default_post_listing_type: Option<String>,
pub auth: Sensitive<String>,
}
pub application_question: Option<String>,
pub private_instance: Option<bool>,
pub default_theme: Option<String>,
+ pub default_post_listing_type: Option<String>,
pub auth: Sensitive<String>,
}
blocking,
check_private_instance,
get_local_user_view_from_jwt_opt,
- post::*,
+ post::{GetPosts, GetPostsResponse},
};
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, site::Site},
traits::DeleteableOrRemoveable,
ListingType,
SortType,
use lemmy_db_views::post_view::PostQueryBuilder;
use lemmy_utils::{ConnectionId, LemmyError};
use lemmy_websocket::LemmyContext;
+use std::str::FromStr;
#[async_trait::async_trait(?Send)]
impl PerformCrud for GetPosts {
.map(|t| t.local_user.show_read_posts);
let sort: Option<SortType> = from_opt_str_to_opt_enum(&data.sort);
- let listing_type: Option<ListingType> = from_opt_str_to_opt_enum(&data.type_);
+ let listing_type: ListingType = match from_opt_str_to_opt_enum(&data.type_) {
+ Some(l) => l,
+ None => {
+ let site = blocking(context.pool(), Site::read_local_site).await??;
+ ListingType::from_str(&site.default_post_listing_type)?
+ }
+ };
let page = data.page;
let limit = data.limit;
check_private_instance,
get_local_user_view_from_jwt_opt,
mark_post_as_read,
- post::*,
+ post::{GetPost, GetPostResponse},
};
use lemmy_db_schema::traits::DeleteableOrRemoveable;
use lemmy_db_views::{comment_view::CommentQueryBuilder, post_view::PostView};
private_key: Some(Some(keypair.private_key)),
public_key: Some(keypair.public_key),
default_theme: data.default_theme.clone(),
+ default_post_listing_type: data.default_post_listing_type.clone(),
..SiteForm::default()
};
application_question: setup.application_question.to_owned(),
private_instance: setup.private_instance,
default_theme: setup.default_theme.to_owned(),
+ default_post_listing_type: setup.default_post_listing_type.to_owned(),
auth: admin_jwt,
};
create_site.perform(context, websocket_id).await?;
site::{Site, SiteForm},
},
traits::Crud,
+ ListingType,
};
use lemmy_db_views::site_view::SiteView;
use lemmy_utils::{utils::check_slurs_opt, ConnectionId, LemmyError};
use lemmy_websocket::{messages::SendAllMessage, LemmyContext, UserOperationCrud};
-use std::default::Default;
+use std::{default::Default, str::FromStr};
#[async_trait::async_trait(?Send)]
impl PerformCrud for EditSite {
return Err(LemmyError::from_message("application_question_required"));
}
+ if let Some(default_post_listing_type) = &data.default_post_listing_type {
+ // only allow all or local as default listing types
+ let val = ListingType::from_str(default_post_listing_type);
+ if val != Ok(ListingType::All) && val != Ok(ListingType::Local) {
+ return Err(LemmyError::from_message(
+ "invalid_default_post_listing_type",
+ ));
+ }
+ }
+
let site_form = SiteForm {
name: data.name.to_owned().unwrap_or(local_site.name),
sidebar,
application_question,
private_instance: data.private_instance,
default_theme: data.default_theme.clone(),
+ default_post_listing_type: data.default_post_listing_type.clone(),
..SiteForm::default()
};
NewComments,
}
-#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy)]
+#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
pub enum ListingType {
All,
Local,
private_key -> Nullable<Text>,
public_key -> Text,
default_theme -> Text,
+ default_post_listing_type -> Text,
}
}
pub private_key: Option<String>,
pub public_key: String,
pub default_theme: String,
+ pub default_post_listing_type: String,
}
#[derive(Insertable, AsChangeset, Default)]
pub private_key: Option<Option<String>>,
pub public_key: Option<String>,
pub default_theme: Option<String>,
+ pub default_post_listing_type: Option<String>,
}
pub private_instance: Option<bool>,
#[default(None)]
pub default_theme: Option<String>,
+ #[default(None)]
+ pub default_post_listing_type: Option<String>,
}
--- /dev/null
+alter table site drop column default_post_listing_type;
--- /dev/null
+alter table site add column default_post_listing_type text not null default 'Local';