generated from t/malachite
add: chat pins
This commit is contained in:
parent
9546c580e7
commit
82eafdadb3
21 changed files with 330 additions and 56 deletions
|
@ -1,3 +1,5 @@
|
|||
use std::collections::HashMap;
|
||||
|
||||
use crate::{
|
||||
State, get_user_from_token,
|
||||
routes::{
|
||||
|
@ -50,7 +52,6 @@ pub async fn chat_request(
|
|||
jar: CookieJar,
|
||||
Extension(data): Extension<State>,
|
||||
Path(id): Path<usize>,
|
||||
Query(props): Query<PaginatedQuery>,
|
||||
) -> impl IntoResponse {
|
||||
let (ref data, ref tera, ref build_code) = *data.read().await;
|
||||
let user = match get_user_from_token!(jar, data.2) {
|
||||
|
@ -75,18 +76,10 @@ pub async fn chat_request(
|
|||
}
|
||||
};
|
||||
|
||||
let messages = match data.get_messages_by_chat(id, 24, props.page).await {
|
||||
Ok(x) => x,
|
||||
Err(e) => {
|
||||
return Err(render_error(e, tera, data.0.0.clone(), Some(user)).await);
|
||||
}
|
||||
};
|
||||
|
||||
let mut ctx = default_context(&data.0.0, &build_code, &Some(user));
|
||||
|
||||
ctx.insert("chat", &chat);
|
||||
ctx.insert("members", &members);
|
||||
ctx.insert("messages", &messages);
|
||||
|
||||
Ok(Html(tera.render("chat.lisp", &ctx).unwrap()))
|
||||
}
|
||||
|
@ -135,12 +128,47 @@ pub async fn messages_request(
|
|||
}
|
||||
};
|
||||
|
||||
let chat = match data.get_chat_by_id(id).await {
|
||||
Ok(x) => x,
|
||||
Err(e) => {
|
||||
return Err(render_error(e, tera, data.0.0.clone(), Some(user)).await);
|
||||
}
|
||||
};
|
||||
|
||||
let mut seen_user_blocks: HashMap<usize, bool> = HashMap::new();
|
||||
|
||||
let messages = match if before > 0 {
|
||||
data.get_messages_by_chat_before(id, before, 24, 0).await
|
||||
} else {
|
||||
data.get_messages_by_chat(id, 24, 0).await
|
||||
} {
|
||||
Ok(x) => x,
|
||||
Ok(x) => {
|
||||
let mut y = Vec::new();
|
||||
|
||||
for z in x {
|
||||
if let Some(status) = seen_user_blocks.get(&z.owner) {
|
||||
if *status {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
let is_blocked = data
|
||||
.2
|
||||
.get_userblock_by_initiator_receiver(user.id, z.owner)
|
||||
.await
|
||||
.is_ok();
|
||||
|
||||
seen_user_blocks.insert(z.owner, is_blocked);
|
||||
|
||||
if is_blocked {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
y.push(z);
|
||||
}
|
||||
|
||||
y
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(render_error(e, tera, data.0.0.clone(), Some(user)).await);
|
||||
}
|
||||
|
@ -156,6 +184,7 @@ pub async fn messages_request(
|
|||
},
|
||||
);
|
||||
|
||||
ctx.insert("pins", &chat.pinned_messages);
|
||||
ctx.insert("messages", &messages);
|
||||
ctx.insert("id", &props.use_id);
|
||||
|
||||
|
@ -225,3 +254,55 @@ pub async fn manage_chat_request(
|
|||
|
||||
Ok(Html(tera.render("manage.lisp", &ctx).unwrap()))
|
||||
}
|
||||
|
||||
pub async fn chat_pins_request(
|
||||
jar: CookieJar,
|
||||
Extension(data): Extension<State>,
|
||||
Path(id): Path<usize>,
|
||||
) -> impl IntoResponse {
|
||||
let (ref data, ref tera, ref build_code) = *data.read().await;
|
||||
let user = match get_user_from_token!(jar, data.2) {
|
||||
Some(x) => x,
|
||||
None => {
|
||||
return Err(render_error(Error::NotAllowed, tera, data.0.0.clone(), None).await);
|
||||
}
|
||||
};
|
||||
|
||||
let (chat, members) = match data.get_chat_by_id(id).await {
|
||||
Ok(x) => {
|
||||
if !x.members.contains(&user.id) {
|
||||
return Err(
|
||||
render_error(Error::NotAllowed, tera, data.0.0.clone(), Some(user)).await,
|
||||
);
|
||||
}
|
||||
|
||||
data.fill_chat(x).await
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(render_error(e, tera, data.0.0.clone(), Some(user)).await);
|
||||
}
|
||||
};
|
||||
|
||||
let messages = {
|
||||
let mut x = Vec::new();
|
||||
|
||||
for y in &chat.pinned_messages {
|
||||
x.push(match data.get_message_by_id(*y).await {
|
||||
Ok(z) => z,
|
||||
Err(e) => {
|
||||
return Err(render_error(e, tera, data.0.0.clone(), Some(user)).await);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
x
|
||||
};
|
||||
|
||||
let mut ctx = default_context(&data.0.0, &build_code, &Some(user));
|
||||
|
||||
ctx.insert("chat", &chat);
|
||||
ctx.insert("members", &members);
|
||||
ctx.insert("messages", &messages);
|
||||
|
||||
Ok(Html(tera.render("pins.lisp", &ctx).unwrap()))
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue