add: timeline build retries
This commit is contained in:
parent
fdaae8d977
commit
e145449bc7
4 changed files with 51 additions and 19 deletions
|
@ -79,6 +79,7 @@
|
|||
("href" "/mail")
|
||||
(icon (text "mail"))
|
||||
(str (text "general:link.mail")))
|
||||
(text "{% if config.stripe -%}")
|
||||
(a
|
||||
("href" "/wallet")
|
||||
(icon (text "piggy-bank"))
|
||||
|
@ -87,6 +88,7 @@
|
|||
("href" "/products")
|
||||
(icon (text "store"))
|
||||
(str (text "economy:label.my_products")))
|
||||
(text "{%- endif %}")
|
||||
(a
|
||||
("href" "/journals/0/0")
|
||||
(icon (text "notebook"))
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
use super::{PaginatedQuery, render_error};
|
||||
use crate::{
|
||||
assets::initial_context, check_user_blocked_or_private, get_lang, get_user_from_token, State,
|
||||
assets::initial_context, check_user_blocked_or_private, get_lang, get_user_from_token,
|
||||
InnerState, State,
|
||||
};
|
||||
use axum::{
|
||||
extract::{Path, Query},
|
||||
|
@ -9,11 +10,14 @@ use axum::{
|
|||
};
|
||||
use crate::cookie::CookieJar;
|
||||
use serde::Deserialize;
|
||||
use tetratto_core::model::{
|
||||
auth::{AchievementName, DefaultTimelineChoice, ACHIEVEMENTS},
|
||||
permissions::FinePermission,
|
||||
requests::ActionType,
|
||||
Error,
|
||||
use tetratto_core::{
|
||||
database::FullPost,
|
||||
model::{
|
||||
auth::{AchievementName, DefaultTimelineChoice, ACHIEVEMENTS, User},
|
||||
permissions::FinePermission,
|
||||
requests::ActionType,
|
||||
Error,
|
||||
},
|
||||
};
|
||||
use std::fs::read_to_string;
|
||||
use pathbufd::PathBufD;
|
||||
|
@ -685,15 +689,12 @@ pub struct TimelineQuery {
|
|||
pub responses_only: bool,
|
||||
}
|
||||
|
||||
/// `/_swiss_army_timeline`
|
||||
pub async fn swiss_army_timeline_request(
|
||||
jar: CookieJar,
|
||||
Extension(data): Extension<State>,
|
||||
Query(req): Query<TimelineQuery>,
|
||||
) -> impl IntoResponse {
|
||||
let data = data.read().await;
|
||||
let user = get_user_from_token!(jar, data.0);
|
||||
|
||||
async fn swiss_army_timeline(
|
||||
data: &InnerState,
|
||||
user: Option<User>,
|
||||
req: &TimelineQuery,
|
||||
jar: &CookieJar,
|
||||
) -> std::result::Result<Vec<FullPost>, Html<String>> {
|
||||
let ignore_users = crate::ignore_users_gen!(user, data);
|
||||
|
||||
let list = if req.stack_id != 0 {
|
||||
|
@ -807,12 +808,40 @@ pub async fn swiss_army_timeline_request(
|
|||
None
|
||||
},
|
||||
),
|
||||
Err(e) => return Ok(Html(render_error(e, &jar, &data, &user).await)),
|
||||
Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)),
|
||||
},
|
||||
Err(e) => return Ok(Html(render_error(e, &jar, &data, &user).await)),
|
||||
Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)),
|
||||
}
|
||||
};
|
||||
|
||||
Ok(list)
|
||||
}
|
||||
|
||||
/// `/_swiss_army_timeline`
|
||||
pub async fn swiss_army_timeline_request(
|
||||
jar: CookieJar,
|
||||
Extension(data): Extension<State>,
|
||||
Query(req): Query<TimelineQuery>,
|
||||
) -> impl IntoResponse {
|
||||
let data = data.read().await;
|
||||
let user = get_user_from_token!(jar, data.0);
|
||||
|
||||
let mut tries_remaining = 1;
|
||||
let mut empty_retries = 0; // how many times we've retried because of an empty list
|
||||
let mut list = Vec::new();
|
||||
|
||||
while tries_remaining > 0 {
|
||||
list = match swiss_army_timeline(&data, user.clone(), &req, &jar).await {
|
||||
Ok(x) => x,
|
||||
Err(e) => return Err(e),
|
||||
};
|
||||
|
||||
if list.len() > 0 && empty_retries != 1 {
|
||||
tries_remaining -= 1;
|
||||
empty_retries += 1;
|
||||
}
|
||||
}
|
||||
|
||||
let lang = get_lang!(jar, data.0);
|
||||
let mut context = initial_context(&data.0.0.0, lang, &user).await;
|
||||
|
||||
|
|
|
@ -39,3 +39,4 @@ mod userfollows;
|
|||
|
||||
pub use drivers::DataManager;
|
||||
pub use common::NAME_REGEX;
|
||||
pub use posts::FullPost;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue