Skip to content

Commit

Permalink
Merge pull request #78 from tofubert/77-message-id-spams-the-log
Browse files Browse the repository at this point in the history
message id spams the log
  • Loading branch information
tofubert authored Jan 10, 2025
2 parents d690c39 + 5e40701 commit daa7013
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 8 deletions.
13 changes: 10 additions & 3 deletions src/backend/nc_message.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use super::nc_request::NCReqDataMessage;
use super::nc_request::{NCReqDataMessage, NCReqDataMessageSystemMessage};
use chrono::prelude::*;

/// `NextCloud` message interface
Expand Down Expand Up @@ -73,12 +73,19 @@ impl NCMessage {

/// return `true` if message is an edited message
pub fn is_edit_note(&self) -> bool {
self.is_system() && self.0.systemMessage == "message_edited"
self.is_system() && self.0.systemMessage == NCReqDataMessageSystemMessage::MessageEdited
}

pub fn is_revoked(&self) -> bool {
self.is_system()
&& (self.0.systemMessage == NCReqDataMessageSystemMessage::MessageDeleted
|| self.0.systemMessage == NCReqDataMessageSystemMessage::ReactionRevoked
|| self.0.systemMessage == NCReqDataMessageSystemMessage::ReactionDeleted)
}

/// return `true` if message is a reaction
pub fn is_reaction(&self) -> bool {
self.is_system() && self.0.systemMessage == "reaction"
self.is_system() && self.0.systemMessage == NCReqDataMessageSystemMessage::Reaction
}

/// return `true` if message is a command
Expand Down
94 changes: 92 additions & 2 deletions src/backend/nc_request/nc_req_data_message.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use serde::{Deserialize, Deserializer, Serialize};
use std::collections::HashMap;
use strum::Display;

#[derive(Serialize, Deserialize, Debug, Default, Clone)]
pub struct NCReqDataMessageParameter {
Expand All @@ -17,7 +18,8 @@ pub struct NCReqDataMessage {
pub actorId: String,
pub actorDisplayName: String,
pub timestamp: i64,
pub systemMessage: String,
#[serde(deserialize_with = "sys_Message")]
pub systemMessage: NCReqDataMessageSystemMessage,
pub messageType: String,
pub isReplyable: bool,
pub referenceId: String,
Expand All @@ -41,7 +43,8 @@ pub struct NCReqDataMessageParent {
pub actorId: String,
pub actorDisplayName: String,
pub timestamp: i32,
pub systemMessage: String,
#[serde(deserialize_with = "sys_Message")]
pub systemMessage: NCReqDataMessageSystemMessage,
pub messageType: String,
pub isReplyable: bool,
pub referenceId: String,
Expand Down Expand Up @@ -75,3 +78,90 @@ where
},
)
}

/// System Messages in NC dont seem to have a collected global state, but seem to be defined by anyone and everyone.
///
/// This is collected and greped out of various log files and the spreed source code.
/// Please help extend this.
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Display)]
pub enum NCReqDataMessageSystemMessage {
#[default]
#[serde(rename = "")]
Nomessage,
#[serde(rename = "message_edited")]
MessageEdited,
#[serde(rename = "message_deleted")]
MessageDeleted,
#[serde(rename = "reaction")]
Reaction,
#[serde(rename = "reaction_revoked")]
ReactionRevoked,
#[serde(rename = "reaction_deleted")]
ReactionDeleted,
#[serde(rename = "history_cleared")]
HistoryCleared,
#[serde(rename = "poll_voted")]
PollVoted,
#[serde(rename = "poll_closed")]
PollClosed,
#[serde(rename = "call_started")]
CallStarted,
#[serde(rename = "call_ended")]
CallEnded,
#[serde(rename = "call_ended_everyone")]
CallEndedEveryone,
#[serde(rename = "call_missed")]
CallMissed,
#[serde(rename = "call_joined")]
CallJoined,
#[serde(rename = "call_left")]
CallLeft,
#[serde(rename = "user_removed")]
UserRemoved,
#[serde(rename = "user_added")]
UserAdded,
#[serde(rename = "avatar_set")]
AvatarSet,
#[serde(rename = "conversation_renamed")]
ConversationRenamed,
#[serde(rename = "conversation_created")]
ConversationCreated,
#[serde(rename = "read_only")]
ReadOnly,
#[serde(rename = "listable_none")]
ListableNone,
#[serde(rename = "group_added")]
GroupAdded,
#[serde(rename = "moderator_promoted")]
ModeratorPromoted,
#[serde(rename = "matterbridge_config_enabled")]
MatterbridgeConfigEnabled,
#[serde(rename = "matterbridge_config_disabled")]
MatterbridgeConfigDisabled,
#[serde(rename = "matterbridge_config_edited")]
MatterbridgeConfigEdited,
#[serde(rename = "i_am_the_system")]
IAmTheSystem,
}

fn sys_Message<'de, D>(deserializer: D) -> Result<NCReqDataMessageSystemMessage, D::Error>
where
D: Deserializer<'de>,
{
#[derive(Deserialize)]
#[serde(untagged)]
enum NCReqDataMessageSystemMessageMap {
ParamMap(NCReqDataMessageSystemMessage),
String(String),
}

Ok(
match NCReqDataMessageSystemMessageMap::deserialize(deserializer)? {
NCReqDataMessageSystemMessageMap::ParamMap(v) => v, // Ignoring parsing errors
NCReqDataMessageSystemMessageMap::String(s) => {
log::warn!("unknown System Message {}", s);
NCReqDataMessageSystemMessage::Nomessage
}
},
)
}
19 changes: 16 additions & 3 deletions src/backend/nc_room.rs
Original file line number Diff line number Diff line change
Expand Up @@ -232,11 +232,14 @@ impl NCRoom {

#[async_trait]
impl NCRoomInterface for NCRoom {
// the room endpoint doesnt tell you about reactions...
fn get_last_room_level_message_id(&self) -> Option<i32> {
// the room endpoint doesnt tell you about reactions...
// The NCTalk level update does however include system messages...
self.messages
.values()
.filter(|&message| !message.is_reaction() && !message.is_edit_note())
.filter(|&message| {
!message.is_reaction() && !message.is_edit_note() && !message.is_revoked()
})
.collect::<Vec<&NCMessage>>()
.last()
.map(|message| message.get_id())
Expand Down Expand Up @@ -481,9 +484,19 @@ impl NCRoomInterface for NCRoom {
}
Ordering::Less => {
log::debug!(
"Message Id was older than message stored '{}'! Stored {} Upstream {}",
"Message Id was older than message stored '{}'! Stored {} {} {} Upstream {}",
self.to_string(),
last_internal_id,
self.messages
.get(&last_internal_id)
.unwrap()
.data()
.messageType,
self.messages
.get(&last_internal_id)
.unwrap()
.data()
.systemMessage,
message_id
);
}
Expand Down

0 comments on commit daa7013

Please sign in to comment.