forked from jmug/stoatchat
Messaging: Upsert mentions into unreads.
Messaging: Allow multiple attachment upload.
This commit is contained in:
@@ -128,7 +128,7 @@ impl Channel {
|
||||
operation: "delete_many",
|
||||
with: "channel_invites",
|
||||
})?;
|
||||
|
||||
|
||||
// Delete any unreads.
|
||||
get_collection("channel_unreads")
|
||||
.delete_many(
|
||||
|
||||
@@ -6,6 +6,7 @@ use crate::{
|
||||
};
|
||||
|
||||
use futures::StreamExt;
|
||||
use mongodb::options::UpdateOptions;
|
||||
use mongodb::{
|
||||
bson::{doc, to_bson, DateTime},
|
||||
options::FindOptions,
|
||||
@@ -55,7 +56,7 @@ impl Content {
|
||||
"00000000000000000000000000".to_string(),
|
||||
target.id().to_string(),
|
||||
self,
|
||||
None
|
||||
None,
|
||||
)
|
||||
.publish(&target)
|
||||
.await
|
||||
@@ -79,11 +80,16 @@ pub struct Message {
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub embeds: Option<Vec<Embed>>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub mentions: Option<Vec<String>>
|
||||
pub mentions: Option<Vec<String>>,
|
||||
}
|
||||
|
||||
impl Message {
|
||||
pub fn create(author: String, channel: String, content: Content, mentions: Option<Vec<String>>) -> Message {
|
||||
pub fn create(
|
||||
author: String,
|
||||
channel: String,
|
||||
content: Content,
|
||||
mentions: Option<Vec<String>>,
|
||||
) -> Message {
|
||||
Message {
|
||||
id: Ulid::new().to_string(),
|
||||
nonce: None,
|
||||
@@ -94,7 +100,7 @@ impl Message {
|
||||
attachments: None,
|
||||
edited: None,
|
||||
embeds: None,
|
||||
mentions
|
||||
mentions,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -208,7 +214,7 @@ impl Message {
|
||||
"mentions": message
|
||||
}
|
||||
},
|
||||
None
|
||||
UpdateOptions::builder().upsert(true).build(),
|
||||
)
|
||||
.await
|
||||
/*.map_err(|_| Error::DatabaseError {
|
||||
@@ -241,7 +247,7 @@ impl Message {
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
|
||||
// Fetch their corresponding sessions.
|
||||
if let Ok(mut cursor) = get_collection("accounts")
|
||||
.find(
|
||||
@@ -309,7 +315,7 @@ impl Message {
|
||||
ClientboundNotification::MessageUpdate {
|
||||
id: self.id.clone(),
|
||||
channel: self.channel.clone(),
|
||||
data
|
||||
data,
|
||||
}
|
||||
.publish(channel);
|
||||
self.process_embed();
|
||||
@@ -348,7 +354,7 @@ impl Message {
|
||||
ClientboundNotification::MessageUpdate {
|
||||
id,
|
||||
channel: channel.clone(),
|
||||
data: json!({ "embeds": embeds })
|
||||
data: json!({ "embeds": embeds }),
|
||||
}
|
||||
.publish(channel);
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@ use crate::util::{
|
||||
variables::JANUARY_URL,
|
||||
};
|
||||
use linkify::{LinkFinder, LinkKind};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use regex::Regex;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub enum ImageSize {
|
||||
|
||||
@@ -39,13 +39,13 @@ pub struct SystemMessageChannels {
|
||||
pub user_joined: Option<String>,
|
||||
pub user_left: Option<String>,
|
||||
pub user_kicked: Option<String>,
|
||||
pub user_banned: Option<String>
|
||||
pub user_banned: Option<String>,
|
||||
}
|
||||
|
||||
pub enum RemoveMember {
|
||||
Leave,
|
||||
Kick,
|
||||
Ban
|
||||
Ban,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
@@ -361,14 +361,20 @@ impl Server {
|
||||
}
|
||||
RemoveMember::Kick => {
|
||||
if let Some(cid) = &channels.user_kicked {
|
||||
Some((cid.clone(), SystemMessage::UserKicked { id: id.to_string() }))
|
||||
Some((
|
||||
cid.clone(),
|
||||
SystemMessage::UserKicked { id: id.to_string() },
|
||||
))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
RemoveMember::Ban => {
|
||||
if let Some(cid) = &channels.user_banned {
|
||||
Some((cid.clone(), SystemMessage::UserBanned { id: id.to_string() }))
|
||||
Some((
|
||||
cid.clone(),
|
||||
SystemMessage::UserBanned { id: id.to_string() },
|
||||
))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::HashMap;
|
||||
use serde::{Serialize, Deserialize};
|
||||
|
||||
pub type UserSettings = HashMap<String, (i64, String)>;
|
||||
|
||||
@@ -14,6 +14,6 @@ pub struct ChannelUnread {
|
||||
#[serde(rename = "_id")]
|
||||
pub id: ChannelCompositeKey,
|
||||
|
||||
pub last_id: String,
|
||||
pub last_id: Option<String>,
|
||||
pub mentions: Option<Vec<String>>,
|
||||
}
|
||||
|
||||
@@ -261,7 +261,7 @@ impl User {
|
||||
doc! {
|
||||
"_id.user": &self.id
|
||||
},
|
||||
None
|
||||
None,
|
||||
)
|
||||
.await
|
||||
.map_err(|_| Error::DatabaseError {
|
||||
|
||||
Reference in New Issue
Block a user