diff --git a/src/apps/group_chat/models.rs b/src/apps/group_chat/models.rs index dc1952e..62956a8 100644 --- a/src/apps/group_chat/models.rs +++ b/src/apps/group_chat/models.rs @@ -168,13 +168,13 @@ impl GroupChat { mgid: &GroupId, ) -> Result { match info { - GroupInfo::Common(owner, _, g_id, g_type, agree, name, g_bio, avatar) => { + GroupInfo::Common(owner, _, _, g_id, g_type, agree, name, g_bio, avatar) => { write_avatar_sync(base, &mgid, &g_id, avatar)?; Ok(Self::new_from( g_id, height, owner, g_type, addr, name, g_bio, agree, key, )) } - GroupInfo::Encrypted(owner, _, g_id, agree, _hash, _name, _bio, avatar) => { + GroupInfo::Encrypted(owner, _, _, g_id, agree, _hash, _name, _bio, avatar) => { // TODO decrypted. let g_type = GroupType::Encrypted; @@ -201,11 +201,12 @@ impl GroupChat { ) } - pub fn to_group_info(self, name: String, avatar: Vec) -> GroupInfo { + pub fn to_group_info(self, name: String, avatar: Vec, owner_avatar: Vec) -> GroupInfo { match self.g_type { GroupType::Private | GroupType::Open => GroupInfo::Common( self.owner, name, + owner_avatar, self.g_id, self.g_type, self.is_need_agree, @@ -217,6 +218,7 @@ impl GroupChat { // TODO encrypted self.owner, name, + owner_avatar, self.g_id, self.g_type, self.is_need_agree, diff --git a/src/apps/group_chat/rpc.rs b/src/apps/group_chat/rpc.rs index 45d1523..225cfa5 100644 --- a/src/apps/group_chat/rpc.rs +++ b/src/apps/group_chat/rpc.rs @@ -12,7 +12,7 @@ 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::session::{Session, SessionType}; -use crate::storage::{chat_db, group_chat_db, session_db, write_avatar}; +use crate::storage::{chat_db, group_chat_db, read_avatar, session_db, write_avatar}; use super::add_layer; use super::models::{to_network_message, GroupChat, GroupChatKey, Member, Message, Request}; @@ -194,7 +194,7 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler) { let mut results = HandleResult::new(); // add to rpcs. results.rpcs.push(json!(gc.to_rpc())); - let info = gc.to_group_info(my_name, avatar_bytes); + let info = gc.to_group_info(my_name, avatar_bytes, me.avatar); // TODO create proof. let proof: Proof = Default::default(); @@ -216,10 +216,11 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler) { let gc = GroupChat::get_id(&db, &id)??; drop(db); - // TODO load avatar - let avatar = vec![]; + // load avatar + let avatar = read_avatar(state.group.read().await.base(), &gid, &gc.g_id).await?; + let owner_avatar = state.group.read().await.clone_user(&gid)?.avatar; let addr = gc.g_addr; - let info = gc.to_group_info(mname, avatar); + let info = gc.to_group_info(mname, avatar, owner_avatar); // TODO create proof. let proof: Proof = Default::default(); diff --git a/src/group.rs b/src/group.rs index 73d3db5..7838430 100644 --- a/src/group.rs +++ b/src/group.rs @@ -19,7 +19,7 @@ use crate::consensus::Event; use crate::event::{InnerEvent, StatusEvent, SyncEvent}; use crate::layer::Layer; use crate::rpc; -use crate::storage::{account_db, account_init, consensus_db}; +use crate::storage::{account_db, account_init, consensus_db, write_avatar}; use crate::utils::device_status::device_status as local_device_status; pub(crate) mod running; @@ -445,6 +445,7 @@ impl Group { let account_db = account_db(&self.base)?; account.insert(&account_db)?; account_db.close()?; + let _ = write_avatar(&self.base, &account_id, &account_id, &account.avatar).await; self.accounts.insert(account.gid, account); let mut device = Device::new(device_name.to_owned(), device_info.to_owned(), self.addr);