Browse Source

[GroupChat] fix invite update last session

pull/18/head
Sun 5 years ago
parent
commit
f56b754786
  1. 2
      src/apps/group_chat/models.rs
  2. 23
      src/apps/group_chat/rpc.rs

2
src/apps/group_chat/models.rs

@ -669,7 +669,7 @@ impl Member {
pub fn get_id(db: &DStorage, fid: &i64, mid: &GroupId) -> Result<i64> { pub fn get_id(db: &DStorage, fid: &i64, mid: &GroupId) -> Result<i64> {
let mut matrix = db.query(&format!( 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, fid,
mid.to_hex() mid.to_hex()
))?; ))?;

23
src/apps/group_chat/rpc.rs

@ -10,7 +10,7 @@ use tdn_did::Proof;
use group_chat_types::{CheckType, Event, GroupType, JoinProof, LayerEvent}; use group_chat_types::{CheckType, Event, GroupType, JoinProof, LayerEvent};
use crate::apps::chat::{Friend, MessageType}; 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::session::{Session, SessionType};
use crate::storage::{chat_db, group_chat_db, read_avatar, session_db, write_avatar}; 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<RpcState>) {
let gc = GroupChat::get_id(&group_db, &id)??; let gc = GroupChat::get_id(&group_db, &id)??;
let tmp_name = gc.g_name.replace(";", "-;"); let tmp_name = gc.g_name.replace(";", "-;");
let s_db = session_db(&base, &gid)?;
let mut results = HandleResult::new(); let mut results = HandleResult::new();
let mut layer_lock = state.layer.write().await; let mut layer_lock = state.layer.write().await;
for (fid, fgid, mut faddr, proof) in invites { for (fid, fgid, mut faddr, proof) in invites {
@ -344,7 +346,7 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
} }
} }
let (msg, nw, _) = crate::apps::chat::LayerEvent::from_message( let (msg, nw, sc) = crate::apps::chat::LayerEvent::from_message(
&base, &base,
gid, gid,
fid, fid,
@ -356,6 +358,23 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
let s = let s =
crate::apps::chat::event_message(&mut layer_lock, msg.id, gid, faddr, &event); crate::apps::chat::event_message(&mut layer_lock, msg.id, gid, faddr, &event);
results.layers.push((gid, fgid, s)); 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) Ok(results)
}, },

Loading…
Cancel
Save