Fix admin login and add subscription popup settings
Some checks failed
docker-images / build-and-push (admin, admin, termi-astro-admin, admin/Dockerfile) (push) Failing after 6s
docker-images / build-and-push (backend, backend, termi-astro-backend, backend/Dockerfile) (push) Failing after 5s
docker-images / build-and-push (frontend, frontend, termi-astro-frontend, frontend/Dockerfile) (push) Failing after 6s
Some checks failed
docker-images / build-and-push (admin, admin, termi-astro-admin, admin/Dockerfile) (push) Failing after 6s
docker-images / build-and-push (backend, backend, termi-astro-backend, backend/Dockerfile) (push) Failing after 5s
docker-images / build-and-push (frontend, frontend, termi-astro-frontend, frontend/Dockerfile) (push) Failing after 6s
This commit is contained in:
@@ -143,6 +143,14 @@ pub struct SiteSettingsPayload {
|
||||
pub notification_comment_enabled: Option<bool>,
|
||||
#[serde(default, alias = "notificationFriendLinkEnabled")]
|
||||
pub notification_friend_link_enabled: Option<bool>,
|
||||
#[serde(default, alias = "subscriptionPopupEnabled")]
|
||||
pub subscription_popup_enabled: Option<bool>,
|
||||
#[serde(default, alias = "subscriptionPopupTitle")]
|
||||
pub subscription_popup_title: Option<String>,
|
||||
#[serde(default, alias = "subscriptionPopupDescription")]
|
||||
pub subscription_popup_description: Option<String>,
|
||||
#[serde(default, alias = "subscriptionPopupDelaySeconds")]
|
||||
pub subscription_popup_delay_seconds: Option<i32>,
|
||||
#[serde(default, alias = "searchSynonyms")]
|
||||
pub search_synonyms: Option<Vec<String>>,
|
||||
}
|
||||
@@ -169,6 +177,10 @@ pub struct PublicSiteSettingsResponse {
|
||||
pub music_playlist: Option<serde_json::Value>,
|
||||
pub ai_enabled: bool,
|
||||
pub paragraph_comments_enabled: bool,
|
||||
pub subscription_popup_enabled: bool,
|
||||
pub subscription_popup_title: String,
|
||||
pub subscription_popup_description: String,
|
||||
pub subscription_popup_delay_seconds: i32,
|
||||
pub seo_default_og_image: Option<String>,
|
||||
pub seo_default_twitter_handle: Option<String>,
|
||||
}
|
||||
@@ -208,6 +220,22 @@ fn normalize_optional_int(value: Option<i32>, min: i32, max: i32) -> Option<i32>
|
||||
value.map(|item| item.clamp(min, max))
|
||||
}
|
||||
|
||||
pub(crate) fn default_subscription_popup_enabled() -> bool {
|
||||
true
|
||||
}
|
||||
|
||||
pub(crate) fn default_subscription_popup_title() -> String {
|
||||
"订阅更新".to_string()
|
||||
}
|
||||
|
||||
pub(crate) fn default_subscription_popup_description() -> String {
|
||||
"有新文章或汇总简报时,通过邮件第一时间收到提醒。需要先确认邮箱,可随时退订。".to_string()
|
||||
}
|
||||
|
||||
pub(crate) fn default_subscription_popup_delay_seconds() -> i32 {
|
||||
18
|
||||
}
|
||||
|
||||
fn normalize_string_list(values: Vec<String>) -> Vec<String> {
|
||||
values
|
||||
.into_iter()
|
||||
@@ -569,6 +597,21 @@ impl SiteSettingsPayload {
|
||||
if let Some(notification_friend_link_enabled) = self.notification_friend_link_enabled {
|
||||
item.notification_friend_link_enabled = Some(notification_friend_link_enabled);
|
||||
}
|
||||
if let Some(subscription_popup_enabled) = self.subscription_popup_enabled {
|
||||
item.subscription_popup_enabled = Some(subscription_popup_enabled);
|
||||
}
|
||||
if let Some(subscription_popup_title) = self.subscription_popup_title {
|
||||
item.subscription_popup_title =
|
||||
normalize_optional_string(Some(subscription_popup_title));
|
||||
}
|
||||
if let Some(subscription_popup_description) = self.subscription_popup_description {
|
||||
item.subscription_popup_description =
|
||||
normalize_optional_string(Some(subscription_popup_description));
|
||||
}
|
||||
if self.subscription_popup_delay_seconds.is_some() {
|
||||
item.subscription_popup_delay_seconds =
|
||||
normalize_optional_int(self.subscription_popup_delay_seconds, 3, 120);
|
||||
}
|
||||
if let Some(search_synonyms) = self.search_synonyms {
|
||||
let normalized = normalize_string_list(search_synonyms);
|
||||
item.search_synonyms = (!normalized.is_empty()).then(|| serde_json::json!(normalized));
|
||||
@@ -684,6 +727,10 @@ fn default_payload() -> SiteSettingsPayload {
|
||||
notification_webhook_url: None,
|
||||
notification_comment_enabled: Some(false),
|
||||
notification_friend_link_enabled: Some(false),
|
||||
subscription_popup_enabled: Some(default_subscription_popup_enabled()),
|
||||
subscription_popup_title: Some(default_subscription_popup_title()),
|
||||
subscription_popup_description: Some(default_subscription_popup_description()),
|
||||
subscription_popup_delay_seconds: Some(default_subscription_popup_delay_seconds()),
|
||||
search_synonyms: Some(Vec::new()),
|
||||
}
|
||||
}
|
||||
@@ -734,6 +781,18 @@ fn public_response(model: Model) -> PublicSiteSettingsResponse {
|
||||
music_playlist: model.music_playlist,
|
||||
ai_enabled: model.ai_enabled.unwrap_or(false),
|
||||
paragraph_comments_enabled: model.paragraph_comments_enabled.unwrap_or(true),
|
||||
subscription_popup_enabled: model
|
||||
.subscription_popup_enabled
|
||||
.unwrap_or_else(default_subscription_popup_enabled),
|
||||
subscription_popup_title: model
|
||||
.subscription_popup_title
|
||||
.unwrap_or_else(default_subscription_popup_title),
|
||||
subscription_popup_description: model
|
||||
.subscription_popup_description
|
||||
.unwrap_or_else(default_subscription_popup_description),
|
||||
subscription_popup_delay_seconds: model
|
||||
.subscription_popup_delay_seconds
|
||||
.unwrap_or_else(default_subscription_popup_delay_seconds),
|
||||
seo_default_og_image: model.seo_default_og_image,
|
||||
seo_default_twitter_handle: model.seo_default_twitter_handle,
|
||||
}
|
||||
@@ -784,7 +843,8 @@ pub async fn home(State(ctx): State<AppContext>) -> Result<Response> {
|
||||
.collect::<Vec<_>>();
|
||||
let content_highlights =
|
||||
crate::services::analytics::build_public_content_highlights(&ctx, &posts).await?;
|
||||
let content_ranges = crate::services::analytics::build_public_content_windows(&ctx, &posts).await?;
|
||||
let content_ranges =
|
||||
crate::services::analytics::build_public_content_windows(&ctx, &posts).await?;
|
||||
|
||||
format::json(HomePageResponse {
|
||||
site_settings,
|
||||
|
||||
Reference in New Issue
Block a user