add: dedicated responses tab for profiles

This commit is contained in:
trisua 2025-07-06 13:34:20 -04:00
parent 9ba6320d46
commit 07a23f505b
24 changed files with 332 additions and 55 deletions

View file

@ -464,7 +464,7 @@ pub async fn achievements_request(
// award achievement
if let Err(e) = data
.0
.add_achievement(&mut user, AchievementName::OpenAchievements.into())
.add_achievement(&mut user, AchievementName::OpenAchievements.into(), true)
.await
{
return Err(Html(render_error(e, &jar, &data, &None).await));
@ -633,6 +633,8 @@ pub struct TimelineQuery {
pub paginated: bool,
#[serde(default)]
pub before: usize,
#[serde(default)]
pub responses_only: bool,
}
/// `/_swiss_army_timeline`
@ -680,11 +682,23 @@ pub async fn swiss_army_timeline_request(
check_user_blocked_or_private!(user, other_user, data, jar);
if req.tag.is_empty() {
data.0.get_posts_by_user(req.user_id, 12, req.page).await
if req.responses_only {
data.0
.get_responses_by_user(req.user_id, 12, req.page)
.await
} else {
data.0.get_posts_by_user(req.user_id, 12, req.page).await
}
} else {
data.0
.get_posts_by_user_tag(req.user_id, &req.tag, 12, req.page)
.await
if req.responses_only {
data.0
.get_responses_by_user_tag(req.user_id, &req.tag, 12, req.page)
.await
} else {
data.0
.get_posts_by_user_tag(req.user_id, &req.tag, 12, req.page)
.await
}
}
} else {
// everything else

View file

@ -179,6 +179,10 @@ pub struct ProfileQuery {
pub warning: bool,
#[serde(default)]
pub tag: String,
#[serde(default, alias = "r")]
pub responses_only: bool,
#[serde(default, alias = "f")]
pub force: bool,
}
#[derive(Deserialize)]

View file

@ -11,7 +11,12 @@ use axum::{
use axum_extra::extract::CookieJar;
use serde::Deserialize;
use tera::Context;
use tetratto_core::model::{auth::User, communities::Community, permissions::FinePermission, Error};
use tetratto_core::model::{
auth::{DefaultProfileTabChoice, User},
communities::Community,
permissions::FinePermission,
Error,
};
use tetratto_shared::hash::hash;
use contrasted::{Color, MINIMUM_CONTRAST_THRESHOLD};
@ -252,6 +257,10 @@ pub async fn posts_request(
check_user_blocked_or_private!(user, other_user, data, jar);
let responses_only = props.responses_only
| (other_user.settings.default_profile_tab == DefaultProfileTabChoice::Responses
&& !props.force);
// check for warning
if props.warning {
let lang = get_lang!(jar, data.0);
@ -356,7 +365,13 @@ pub async fn posts_request(
);
// return
Ok(Html(data.1.render("profile/posts.html", &context).unwrap()))
if responses_only {
Ok(Html(
data.1.render("profile/responses.html", &context).unwrap(),
))
} else {
Ok(Html(data.1.render("profile/posts.html", &context).unwrap()))
}
}
/// `/@{username}/replies`