|
|
|
@ -1,12 +1,13 @@
|
|
|
|
|
use color_eyre::Result; |
|
|
|
|
use futures::{future, StreamExt}; |
|
|
|
|
use tracing::info; |
|
|
|
|
use tracing_subscriber::EnvFilter; |
|
|
|
|
|
|
|
|
|
use phoebe::{ |
|
|
|
|
get_linked_channels, link_messages, |
|
|
|
|
get_linked_channels, get_linked_messages, link_messages, |
|
|
|
|
prelude::{ChatEvent, SqlitePool}, |
|
|
|
|
service::Service, |
|
|
|
|
DynServiceLookup, |
|
|
|
|
unlink_message, DynServiceLookup, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
async fn handle_events( |
|
|
|
@ -24,7 +25,7 @@ async fn handle_events(
|
|
|
|
|
|
|
|
|
|
while let Ok(event) = rx.recv().await { |
|
|
|
|
match event { |
|
|
|
|
phoebe::prelude::ChatEvent::NewMessage(message) => { |
|
|
|
|
ChatEvent::NewMessage(message) => { |
|
|
|
|
let linked_channels = |
|
|
|
|
get_linked_channels(&mut conn, dyn_service, &message.origin.channel).await; |
|
|
|
|
|
|
|
|
@ -45,6 +46,33 @@ async fn handle_events(
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ChatEvent::DeleteMessage(origin) => { |
|
|
|
|
let messages = if let Ok(message_stream) = |
|
|
|
|
get_linked_messages(&mut conn, dyn_service, &origin).await |
|
|
|
|
{ |
|
|
|
|
message_stream |
|
|
|
|
.filter(|r| future::ready(r.channel.service == service.tag())) |
|
|
|
|
.collect::<Vec<_>>() |
|
|
|
|
.await |
|
|
|
|
} else { |
|
|
|
|
vec![] |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
if !messages.is_empty() { |
|
|
|
|
if let Err(e) = unlink_message(&mut conn, &origin).await { |
|
|
|
|
tracing::error!("Failed to unlink origin message: {e}"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for message in messages { |
|
|
|
|
if service.delete_message(&message).await { |
|
|
|
|
if let Err(e) = unlink_message(&mut conn, &message).await { |
|
|
|
|
tracing::error!("Failed to unlink related message: {e}"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -78,7 +106,7 @@ async fn main() -> Result<()> {
|
|
|
|
|
.into_iter() |
|
|
|
|
.map(|srv| tokio::spawn(handle_events(dyn_service, db.clone(), srv, tx.subscribe()))); |
|
|
|
|
|
|
|
|
|
let _ = futures::future::join_all(handles).await; |
|
|
|
|
let _ = future::join_all(handles).await; |
|
|
|
|
|
|
|
|
|
Ok(()) |
|
|
|
|
} |
|
|
|
|