diff --git a/lib/apps/group_chat/add.dart b/lib/apps/group_chat/add.dart index 0d822c6..32001a2 100644 --- a/lib/apps/group_chat/add.dart +++ b/lib/apps/group_chat/add.dart @@ -134,10 +134,11 @@ class _GroupAddPageState extends State { } _create() { + final myName = context.read().activedAccount.name; final addr = _createAddrController.text.trim(); final name = _createNameController.text.trim(); final bio = _createBioController.text.trim(); - context.read().create(addr, name, bio, _groupNeedAgree); + context.read().create(myName, addr, name, bio, _groupNeedAgree); setState(() { _createNameController.text = ''; _createBioController.text = ''; diff --git a/lib/apps/group_chat/provider.dart b/lib/apps/group_chat/provider.dart index 65bd771..6e0e8c6 100644 --- a/lib/apps/group_chat/provider.dart +++ b/lib/apps/group_chat/provider.dart @@ -85,8 +85,8 @@ class GroupChatProvider extends ChangeNotifier { rpc.send('group-chat-check', [addr]); } - create(String addr, String name, String bio, bool needAgree) { - rpc.send('group-chat-create', [addr, name, bio, needAgree]); + create(String myName, String addr, String name, String bio, bool needAgree) { + rpc.send('group-chat-create', [myName, addr, name, bio, needAgree]); } reSend(int id) { diff --git a/src/apps/group_chat/layer.rs b/src/apps/group_chat/layer.rs index 5d85bc0..feb90e4 100644 --- a/src/apps/group_chat/layer.rs +++ b/src/apps/group_chat/layer.rs @@ -41,11 +41,18 @@ pub(crate) async fn handle( GroupResult::Create(gcd, ok) => { println!("Create result: {}", ok); if ok { - // TODO get gc by gcd. + // get gc by gcd. let db = group_chat_db(layer.read().await.base(), &mgid)?; if let Some(mut gc) = GroupChat::get(&db, &gcd)? { gc.ok(&db)?; - results.rpcs.push(rpc::create_result(mgid, gc.id, ok)) + results.rpcs.push(rpc::create_result(mgid, gc.id, ok)); + + // online this group. + layer.write().await.running_mut(&mgid)?.check_add_online( + gcd, + Online::Direct(addr), + gc.id, + )?; } } } diff --git a/src/apps/group_chat/models.rs b/src/apps/group_chat/models.rs index 3642424..9dc6232 100644 --- a/src/apps/group_chat/models.rs +++ b/src/apps/group_chat/models.rs @@ -134,10 +134,11 @@ impl GroupChat { } } - pub fn to_group_info(self, avatar: Vec) -> GroupInfo { + pub fn to_group_info(self, name: String, avatar: Vec) -> GroupInfo { match self.g_type { GroupType::Common | GroupType::Open => GroupInfo::Common( self.owner, + name, self.g_id, self.g_type, self.is_need_agree, @@ -148,6 +149,7 @@ impl GroupChat { GroupType::Encrypted => GroupInfo::Common( // TODO encrypted self.owner, + name, 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 04fe5c0..3bd50b2 100644 --- a/src/apps/group_chat/rpc.rs +++ b/src/apps/group_chat/rpc.rs @@ -139,13 +139,13 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler) { handler.add_method( "group-chat-create", |gid: GroupId, params: Vec, state: Arc| async move { - let addr = PeerAddr::from_hex(params[0].as_str()?) + let my_name = params[0].as_str()?.to_owned(); + let addr = PeerAddr::from_hex(params[1].as_str()?) .map_err(|_e| new_io_error("PeerAddr invalid!"))?; - let name = params[1].as_str()?.to_owned(); - let bio = params[2].as_str()?.to_owned(); - let need_agree = params[3].as_bool()?; + let name = params[2].as_str()?.to_owned(); + let bio = params[3].as_str()?.to_owned(); + let need_agree = params[4].as_bool()?; let avatar = vec![]; - println!("Create: {}, {}, {}", name, bio, need_agree); let db = group_chat_db(state.layer.read().await.base(), &gid)?; let mut gc = GroupChat::new(gid, GroupType::Common, addr, name, bio, need_agree); @@ -161,7 +161,7 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler) { let mut results = HandleResult::new(); // TODO add to rpcs. results.rpcs.push(json!(gc.to_rpc())); - let info = gc.to_group_info(avatar); + let info = gc.to_group_info(my_name, avatar); // TODO create proof. let proof: Proof = Default::default();