add: dedicated responses tab for profiles
This commit is contained in:
parent
9ba6320d46
commit
07a23f505b
24 changed files with 332 additions and 55 deletions
|
@ -154,7 +154,7 @@ pub async fn update_user_settings_request(
|
|||
|
||||
// award achievement
|
||||
if let Err(e) = data
|
||||
.add_achievement(&mut user, AchievementName::EditSettings.into())
|
||||
.add_achievement(&mut user, AchievementName::EditSettings.into(), true)
|
||||
.await
|
||||
{
|
||||
return Json(e.into());
|
||||
|
@ -500,7 +500,7 @@ pub async fn enable_totp_request(
|
|||
|
||||
// award achievement
|
||||
if let Err(e) = data
|
||||
.add_achievement(&mut user, AchievementName::Enable2fa.into())
|
||||
.add_achievement(&mut user, AchievementName::Enable2fa.into(), true)
|
||||
.await
|
||||
{
|
||||
return Json(e.into());
|
||||
|
@ -968,7 +968,7 @@ pub async fn self_serve_achievement_request(
|
|||
}
|
||||
|
||||
// award achievement
|
||||
match data.add_achievement(&mut user, req.name.into()).await {
|
||||
match data.add_achievement(&mut user, req.name.into(), true).await {
|
||||
Ok(_) => Json(ApiReturn {
|
||||
ok: true,
|
||||
message: "Achievement granted".to_string(),
|
||||
|
|
|
@ -62,7 +62,7 @@ pub async fn follow_request(
|
|||
|
||||
// award achievement
|
||||
if let Err(e) = data
|
||||
.add_achievement(&mut user, AchievementName::FollowUser.into())
|
||||
.add_achievement(&mut user, AchievementName::FollowUser.into(), true)
|
||||
.await
|
||||
{
|
||||
return Json(e.into());
|
||||
|
|
|
@ -27,7 +27,7 @@ pub async fn create_request(
|
|||
|
||||
// award achievement
|
||||
if let Err(e) = data
|
||||
.add_achievement(&mut user, AchievementName::CreateDraft.into())
|
||||
.add_achievement(&mut user, AchievementName::CreateDraft.into(), true)
|
||||
.await
|
||||
{
|
||||
return Json(e.into());
|
||||
|
|
|
@ -181,7 +181,7 @@ pub async fn create_request(
|
|||
|
||||
// achievements
|
||||
if let Err(e) = data
|
||||
.add_achievement(&mut user, AchievementName::CreatePost.into())
|
||||
.add_achievement(&mut user, AchievementName::CreatePost.into(), true)
|
||||
.await
|
||||
{
|
||||
return Json(e.into());
|
||||
|
@ -189,7 +189,7 @@ pub async fn create_request(
|
|||
|
||||
if user.post_count >= 49 {
|
||||
if let Err(e) = data
|
||||
.add_achievement(&mut user, AchievementName::Create50Posts.into())
|
||||
.add_achievement(&mut user, AchievementName::Create50Posts.into(), true)
|
||||
.await
|
||||
{
|
||||
return Json(e.into());
|
||||
|
@ -198,7 +198,7 @@ pub async fn create_request(
|
|||
|
||||
if user.post_count >= 99 {
|
||||
if let Err(e) = data
|
||||
.add_achievement(&mut user, AchievementName::Create100Posts.into())
|
||||
.add_achievement(&mut user, AchievementName::Create100Posts.into(), true)
|
||||
.await
|
||||
{
|
||||
return Json(e.into());
|
||||
|
@ -207,7 +207,7 @@ pub async fn create_request(
|
|||
|
||||
if user.post_count >= 999 {
|
||||
if let Err(e) = data
|
||||
.add_achievement(&mut user, AchievementName::Create1000Posts.into())
|
||||
.add_achievement(&mut user, AchievementName::Create1000Posts.into(), true)
|
||||
.await
|
||||
{
|
||||
return Json(e.into());
|
||||
|
@ -348,7 +348,7 @@ pub async fn update_content_request(
|
|||
|
||||
// award achievement
|
||||
if let Err(e) = data
|
||||
.add_achievement(&mut user, AchievementName::EditPost.into())
|
||||
.add_achievement(&mut user, AchievementName::EditPost.into(), true)
|
||||
.await
|
||||
{
|
||||
return Json(e.into());
|
||||
|
|
|
@ -55,7 +55,7 @@ pub async fn create_request(
|
|||
let mut user = user.clone();
|
||||
|
||||
if let Err(e) = data
|
||||
.add_achievement(&mut user, AchievementName::CreateQuestion.into())
|
||||
.add_achievement(&mut user, AchievementName::CreateQuestion.into(), true)
|
||||
.await
|
||||
{
|
||||
return Json(e.into());
|
||||
|
@ -63,7 +63,7 @@ pub async fn create_request(
|
|||
|
||||
if drawings.len() > 0 {
|
||||
if let Err(e) = data
|
||||
.add_achievement(&mut user, AchievementName::CreateDrawing.into())
|
||||
.add_achievement(&mut user, AchievementName::CreateDrawing.into(), true)
|
||||
.await
|
||||
{
|
||||
return Json(e.into());
|
||||
|
|
|
@ -110,7 +110,7 @@ pub async fn create_request(
|
|||
Ok(x) => {
|
||||
// award achievement
|
||||
if let Err(e) = data
|
||||
.add_achievement(&mut user, AchievementName::CreateJournal.into())
|
||||
.add_achievement(&mut user, AchievementName::CreateJournal.into(), true)
|
||||
.await
|
||||
{
|
||||
return Json(e.into());
|
||||
|
|
|
@ -198,7 +198,7 @@ pub async fn update_content_request(
|
|||
|
||||
// award achievement
|
||||
if let Err(e) = data
|
||||
.add_achievement(&mut user, AchievementName::EditNote.into())
|
||||
.add_achievement(&mut user, AchievementName::EditNote.into(), true)
|
||||
.await
|
||||
{
|
||||
return Json(e.into());
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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`
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue