Browse Source

[GroupChat] fix packed sync update session

pull/18/head
Sun 4 years ago
parent
commit
51eb2bc237
  1. 45
      src/apps/group_chat/layer.rs

45
src/apps/group_chat/layer.rs

@ -277,6 +277,7 @@ async fn handle_event( @@ -277,6 +277,7 @@ async fn handle_event(
if let Some(f) = GroupChat::get_id(&c_db, &gid)? {
let mut session = f.to_session();
session.last_content = scontent;
session.last_datetime = msg.datetime;
session.insert(&s_db)?;
results.rpcs.push(session_create(mgid, &session));
}
@ -375,8 +376,12 @@ fn handle_sync( @@ -375,8 +376,12 @@ fn handle_sync(
) -> Result<()> {
let db = group_chat_db(&base, &mgid)?;
let mut last_scontent: Option<(String, i64)> = None;
for event in events {
let _ = handle_sync_event(&mgid, &fid, from, event, &base, &db, results);
if let Ok(scontent) = handle_sync_event(&mgid, &fid, from, event, &base, &db, results) {
last_scontent = scontent;
}
from += 1;
}
@ -387,6 +392,23 @@ fn handle_sync( @@ -387,6 +392,23 @@ fn handle_sync(
// update group chat height.
GroupChat::add_height(&db, fid, to)?;
// UPDATE SESSION.
if let Some((sc, t)) = last_scontent {
let s_db = session_db(&base, &mgid)?;
if let Ok(id) = Session::last(&s_db, &fid, &SessionType::Group, &t, &sc, true) {
results.rpcs.push(session_last(mgid, &id, &t, &sc, false));
} else {
let c_db = group_chat_db(&base, &mgid)?;
if let Some(f) = GroupChat::get_id(&c_db, &fid)? {
let mut session = f.to_session();
session.last_content = sc;
session.last_datetime = t;
session.insert(&s_db)?;
results.rpcs.push(session_create(mgid, &session));
}
}
}
Ok(())
}
@ -398,25 +420,31 @@ fn handle_sync_event( @@ -398,25 +420,31 @@ fn handle_sync_event(
base: &PathBuf,
db: &DStorage,
results: &mut HandleResult,
) -> Result<()> {
match event {
) -> Result<Option<(String, i64)>> {
let scontent = match event {
PackedEvent::GroupInfo => {
// TODO
None
}
PackedEvent::GroupTransfer => {
// TODO
None
}
PackedEvent::GroupManagerAdd => {
// TODO
None
}
PackedEvent::GroupManagerDel => {
// TODO
None
}
PackedEvent::GroupClose => {
// TOOD
None
}
PackedEvent::MemberInfo(_mid, _maddr, _mname, _mavatar) => {
// TODO
None
}
PackedEvent::MemberJoin(mid, maddr, mname, mavatar, mtime) => {
if mavatar.len() > 0 {
@ -425,16 +453,19 @@ fn handle_sync_event( @@ -425,16 +453,19 @@ fn handle_sync_event(
let mut member = Member::new(*fid, mid, maddr, mname, false, mtime);
member.insert(&db)?;
results.rpcs.push(rpc::member_join(*mgid, member));
None
}
PackedEvent::MemberLeave(_mid) => {
// TODO
None
}
PackedEvent::MessageCreate(mid, nmsg, time) => {
let (msg, _) = from_network_message(height, *fid, mid, mgid, nmsg, time, base)?;
let (msg, scontent) = from_network_message(height, *fid, mid, mgid, nmsg, time, base)?;
results.rpcs.push(rpc::message_create(*mgid, &msg));
Some((scontent, time))
}
PackedEvent::None => {}
}
PackedEvent::None => None,
};
Ok(())
Ok(scontent)
}

Loading…
Cancel
Save