From f56b754786be0ac13fab01f63b4f1b8d349c71f4 Mon Sep 17 00:00:00 2001 From: Sun Date: Thu, 10 Jun 2021 17:36:11 +0800 Subject: [PATCH] [GroupChat] fix invite update last session --- src/apps/group_chat/models.rs | 2 +- src/apps/group_chat/rpc.rs | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/apps/group_chat/models.rs b/src/apps/group_chat/models.rs index 67f0e80..965fe74 100644 --- a/src/apps/group_chat/models.rs +++ b/src/apps/group_chat/models.rs @@ -669,7 +669,7 @@ impl Member { pub fn get_id(db: &DStorage, fid: &i64, mid: &GroupId) -> Result { let mut matrix = db.query(&format!( - "SELECT id FROM members WHERE fid = {} AND mid = '{}'", + "SELECT id FROM members WHERE fid = {} AND mid = '{}' AND is_delete = false", fid, mid.to_hex() ))?; diff --git a/src/apps/group_chat/rpc.rs b/src/apps/group_chat/rpc.rs index af6fc7b..c76c251 100644 --- a/src/apps/group_chat/rpc.rs +++ b/src/apps/group_chat/rpc.rs @@ -10,7 +10,7 @@ use tdn_did::Proof; use group_chat_types::{CheckType, Event, GroupType, JoinProof, LayerEvent}; use crate::apps::chat::{Friend, MessageType}; -use crate::rpc::{session_close, session_delete, RpcState}; +use crate::rpc::{session_close, session_create, session_delete, session_last, RpcState}; use crate::session::{Session, SessionType}; use crate::storage::{chat_db, group_chat_db, read_avatar, session_db, write_avatar}; @@ -322,6 +322,8 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler) { let gc = GroupChat::get_id(&group_db, &id)??; let tmp_name = gc.g_name.replace(";", "-;"); + let s_db = session_db(&base, &gid)?; + let mut results = HandleResult::new(); let mut layer_lock = state.layer.write().await; for (fid, fgid, mut faddr, proof) in invites { @@ -344,7 +346,7 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler) { } } - let (msg, nw, _) = crate::apps::chat::LayerEvent::from_message( + let (msg, nw, sc) = crate::apps::chat::LayerEvent::from_message( &base, gid, fid, @@ -356,6 +358,23 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler) { let s = crate::apps::chat::event_message(&mut layer_lock, msg.id, gid, faddr, &event); results.layers.push((gid, fgid, s)); + + if let Ok(id) = + Session::last(&s_db, &fid, &SessionType::Chat, &msg.datetime, &sc, true) + { + results + .rpcs + .push(session_last(gid, &id, &msg.datetime, &sc, false)); + } else { + let c_db = group_chat_db(&base, &gid)?; + if let Some(f) = GroupChat::get_id(&c_db, &fid)? { + let mut session = f.to_session(); + session.last_content = sc; + session.last_datetime = msg.datetime; + session.insert(&s_db)?; + results.rpcs.push(session_create(gid, &session)); + } + } } Ok(results) },