forked from jmug/stoatchat
feat: Message pinning
This commit is contained in:
@@ -87,3 +87,8 @@ pub mod tasks;
|
||||
pub fn if_false(t: &bool) -> bool {
|
||||
!t
|
||||
}
|
||||
|
||||
/// Utility function to check if an option doesnt contain true
|
||||
pub fn if_option_false(t: &Option<bool>) -> bool {
|
||||
t != &Some(true)
|
||||
}
|
||||
@@ -65,6 +65,9 @@ auto_derived_partial!(
|
||||
/// Name and / or avatar overrides for this message
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub masquerade: Option<Masquerade>,
|
||||
/// Whether or not the message in pinned
|
||||
#[serde(skip_serializing_if = "crate::if_option_false")]
|
||||
pub pinned: Option<bool>,
|
||||
|
||||
/// Bitfield of message flags
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
@@ -168,6 +171,8 @@ auto_derived!(
|
||||
pub author: Option<String>,
|
||||
/// Search query
|
||||
pub query: Option<String>,
|
||||
/// Search for pinned
|
||||
pub pinned: Option<bool>,
|
||||
}
|
||||
|
||||
/// Message Query
|
||||
@@ -205,6 +210,7 @@ impl Default for Message {
|
||||
interactions: Default::default(),
|
||||
masquerade: None,
|
||||
flags: None,
|
||||
pinned: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -571,6 +577,8 @@ impl Message {
|
||||
users.push(id.clone());
|
||||
}
|
||||
v0::SystemMessage::Text { .. } => {}
|
||||
v0::SystemMessage::MessagePinned { .. } => {},
|
||||
v0::SystemMessage::MessageUnpinned { .. } => {},
|
||||
}
|
||||
}
|
||||
users
|
||||
|
||||
@@ -50,6 +50,10 @@ impl AbstractMessages for MongoDb {
|
||||
false
|
||||
};
|
||||
|
||||
if let Some(pinned) = query.filter.pinned {
|
||||
filter.insert("pinned", pinned);
|
||||
};
|
||||
|
||||
// 2. Find query limit
|
||||
let limit = query.limit.unwrap_or(50);
|
||||
|
||||
@@ -156,6 +160,7 @@ impl AbstractMessages for MongoDb {
|
||||
.build(),
|
||||
)
|
||||
.await
|
||||
.inspect_err(|e| eprintln!("{e:?}"))
|
||||
.map_err(|_| create_database_error!("find", COL))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,6 +56,12 @@ impl AbstractMessages for ReferenceDb {
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(pinned) = query.filter.pinned {
|
||||
if message.pinned.unwrap_or_default() == pinned {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
true
|
||||
})
|
||||
.cloned()
|
||||
|
||||
@@ -482,6 +482,7 @@ impl crate::Message {
|
||||
interactions: self.interactions.into(),
|
||||
masquerade: self.masquerade.map(Into::into),
|
||||
flags: self.flags.map(|flags| flags as u32).unwrap_or_default(),
|
||||
pinned: self.pinned,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -509,6 +510,7 @@ impl From<crate::PartialMessage> for PartialMessage {
|
||||
interactions: value.interactions.map(Into::into),
|
||||
masquerade: value.masquerade.map(Into::into),
|
||||
flags: value.flags.map(|flags| flags as u32),
|
||||
pinned: value.pinned,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user