Fix issues with incoming PRs.

This commit is contained in:
Paul
2021-08-16 14:07:42 +01:00
parent c632341eb7
commit 326e539ad3
18 changed files with 42 additions and 32 deletions

View File

@@ -35,7 +35,7 @@ pub struct Relationship {
pub status: RelationshipStatus, pub status: RelationshipStatus,
} }
#[derive(Serialize, Deserialize, Debug, Clone)] #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum Presence { pub enum Presence {
Online, Online,
Idle, Idle,
@@ -153,12 +153,11 @@ impl User {
} }
// If the user's status is `Presence::Invisible`, return it as `Presence::Offline` // If the user's status is `Presence::Invisible`, return it as `Presence::Offline`
if let Some(mut status) = user.status { if let Some(status) = &user.status {
if let Some(presence) = status.presence { if let Some(presence) = &status.presence {
if presence == Presence::Invisible { if presence == &Presence::Invisible {
status.presence = Some(Presence::Offline); user.status = None;
user.status = Some(status); user.online = Some(false);
user.online = Some(False);
} }
} }
} }

View File

@@ -129,11 +129,16 @@ async fn accept(stream: TcpStream) {
} }
} { } {
if let Ok(user) = (Ref { id: id.clone() }).fetch_user().await { if let Ok(user) = (Ref { id: id.clone() }).fetch_user().await {
let is_invisible = if let Some(status) = user.status { let is_invisible = if let Some(status) = &user.status {
if let Some(presence) = status.presence { if let Some(presence) = &status.presence {
presence == Presence::Invisible presence == &Presence::Invisible
} else {
false
} }
} else {
false
}; };
let was_online = is_online(&id); let was_online = is_online(&id);
{ {

View File

@@ -35,7 +35,7 @@ pub async fn edit_bot(user: User, target: Ref, data: Json<Data>) -> Result<Empty
&& data.interactions_url.is_none() && data.interactions_url.is_none()
&& data.remove.is_none() && data.remove.is_none()
{ {
return Ok(()); return Ok(EmptyResponse {});
} }
let bot = target.fetch_bot().await?; let bot = target.fetch_bot().await?;

View File

@@ -59,7 +59,8 @@ pub async fn invite_bot(user: User, target: Ref, dest: Json<Destination>) -> Res
Err(Error::MissingPermission)? Err(Error::MissingPermission)?
} }
channel.add_to_group(bot.id, user.id).await channel.add_to_group(bot.id, user.id).await?;
Ok(EmptyResponse {})
} }
} }
} }

View File

@@ -70,7 +70,8 @@ pub async fn req(user: User, target: Ref) -> Result<EmptyResponse> {
target.publish_update(json!({ "owner": new_owner })).await?; target.publish_update(json!({ "owner": new_owner })).await?;
} else { } else {
return target.delete().await; target.delete().await?;
return Ok(EmptyResponse {});
} }
} else { } else {
get_collection("channels") get_collection("channels")
@@ -108,7 +109,8 @@ pub async fn req(user: User, target: Ref) -> Result<EmptyResponse> {
Channel::TextChannel { .. } | Channel::TextChannel { .. } |
Channel::VoiceChannel { .. } => { Channel::VoiceChannel { .. } => {
if perm.get_manage_channel() { if perm.get_manage_channel() {
target.delete().await target.delete().await?;
Ok(EmptyResponse {})
} else { } else {
Err(Error::MissingPermission) Err(Error::MissingPermission)
} }

View File

@@ -19,6 +19,6 @@ pub async fn req(user: User, target: Ref, member: Ref) -> Result<EmptyResponse>
Err(Error::MissingPermission)? Err(Error::MissingPermission)?
} }
channel.add_to_group(member.id, user.id).await; channel.add_to_group(member.id, user.id).await?;
Ok(EmptyResponse {}) Ok(EmptyResponse {})
} }

View File

@@ -24,6 +24,6 @@ pub async fn req(user: User, target: Ref, msg: Ref) -> Result<EmptyResponse> {
} }
} }
message.delete().await; message.delete().await?;
Ok(EmptyResponse {}) Ok(EmptyResponse {})
} }

View File

@@ -73,6 +73,6 @@ pub async fn req(user: User, target: Ref, msg: Ref, edit: Json<Data>) -> Result<
with: "message", with: "message",
})?; })?;
message.publish_update(update).await; message.publish_update(update).await?;
Ok(EmptyResponse {}) Ok(EmptyResponse {})
} }

View File

@@ -6,7 +6,7 @@ pub async fn req(user: User, target: Ref) -> Result<EmptyResponse> {
let target = target.fetch_invite().await?; let target = target.fetch_invite().await?;
if target.creator() == &user.id { if target.creator() == &user.id {
target.delete().await target.delete().await?;
} else { } else {
match &target { match &target {
Invite::Server { server, .. } => { Invite::Server { server, .. } => {
@@ -20,10 +20,11 @@ pub async fn req(user: User, target: Ref) -> Result<EmptyResponse> {
return Err(Error::MissingPermission); return Err(Error::MissingPermission);
} }
target.delete().await; target.delete().await?;
Ok(EmptyResponse {})
} }
_ => unreachable!(), _ => unreachable!(),
} }
} }
Ok(EmptyResponse {})
} }

View File

@@ -1,10 +1,10 @@
use crate::database::*; use crate::database::*;
use crate::util::result::{Error, Result}; use crate::util::result::{EmptyResponse, Error, Result};
use mongodb::bson::{doc, to_document}; use mongodb::bson::{doc, to_document};
use rauth::auth::Session; use rauth::auth::Session;
use rocket::serde::json::Json; use rocket::serde::json::Json;
use serde::{Deserialize, Serialize, EmptyResponse}; use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
pub struct Subscription { pub struct Subscription {

View File

@@ -57,6 +57,6 @@ pub async fn req(user: User, server: Ref, target: Ref, data: Json<Data>) -> Resu
with: "server_ban", with: "server_ban",
})?; })?;
server.remove_member(&target.id, RemoveMember::Ban).await; server.remove_member(&target.id, RemoveMember::Ban).await?;
Ok(EmptyResponse {}) Ok(EmptyResponse {})
} }

View File

@@ -25,7 +25,7 @@ pub async fn req(user: User, server: Ref, target: String, data: Json<Data>) -> R
.map_err(|error| Error::FailedValidation { error })?; .map_err(|error| Error::FailedValidation { error })?;
if data.nickname.is_none() && data.avatar.is_none() && data.roles.is_none() && data.remove.is_none() { if data.nickname.is_none() && data.avatar.is_none() && data.roles.is_none() && data.remove.is_none() {
return Ok(()); return Ok(EmptyResponse {});
} }
let server = server.fetch_server().await?; let server = server.fetch_server().await?;

View File

@@ -27,7 +27,7 @@ pub async fn req(user: User, target: Ref, member: String) -> Result<EmptyRespons
target target
.remove_member(&member.id.user, RemoveMember::Kick) .remove_member(&member.id.user, RemoveMember::Kick)
.await; .await?;
Ok(EmptyResponse {}) Ok(EmptyResponse {})
} }

View File

@@ -26,7 +26,7 @@ pub async fn req(user: User, target: Ref, role_id: String, data: Json<Data>) ->
if data.name.is_none() && data.colour.is_none() && data.hoist.is_none() && data.rank.is_none() && data.remove.is_none() if data.name.is_none() && data.colour.is_none() && data.hoist.is_none() && data.rank.is_none() && data.remove.is_none()
{ {
return Ok(()); return Ok(EmptyResponse {});
} }
let target = target.fetch_server().await?; let target = target.fetch_server().await?;

View File

@@ -18,6 +18,6 @@ pub async fn req(user: User, target: Ref) -> Result<EmptyResponse> {
Err(Error::MissingPermission)? Err(Error::MissingPermission)?
} }
target.mark_as_read(&user.id).await; target.mark_as_read(&user.id).await?;
Ok(EmptyResponse {}) Ok(EmptyResponse {})
} }

View File

@@ -16,8 +16,10 @@ pub async fn req(user: User, target: Ref) -> Result<EmptyResponse> {
} }
if user.id == target.owner { if user.id == target.owner {
target.delete().await target.delete().await?;
} else { } else {
target.remove_member(&user.id, RemoveMember::Leave).await target.remove_member(&user.id, RemoveMember::Leave).await?;
} }
Ok(EmptyResponse {})
} }

View File

@@ -5,7 +5,7 @@ use rocket::serde::json::Value;
#[get("/<target>")] #[get("/<target>")]
pub async fn req(user: User, target: Ref) -> Result<Value> { pub async fn req(user: User, target: Ref) -> Result<Value> {
let mut target = target.fetch_user().await?; let target = target.fetch_user().await?;
let perm = permissions::PermissionCalculator::new(&user) let perm = permissions::PermissionCalculator::new(&user)
.with_user(&target) .with_user(&target)

View File

@@ -71,8 +71,8 @@ pub enum Error {
pub struct EmptyResponse; pub struct EmptyResponse;
pub type Result<T, E = Error> = std::result::Result<T, E>; pub type Result<T, E = Error> = std::result::Result<T, E>;
impl<'r> Responder<'r> for EmptyResponse { impl<'r> Responder<'r, 'static> for EmptyResponse {
fn respond_to(self, req: &Request) -> response::Result<'r> { fn respond_to(self, _: &'r Request<'_>) -> response::Result<'static> {
Response::build() Response::build()
.status(rocket::http::Status { code: 204 }) .status(rocket::http::Status { code: 204 })
.ok() .ok()