Browse Source

update group chat create

pull/18/head
Sun 4 years ago
parent
commit
7b5009b003
  1. 3
      lib/apps/group_chat/add.dart
  2. 4
      lib/apps/group_chat/provider.dart
  3. 11
      src/apps/group_chat/layer.rs
  4. 4
      src/apps/group_chat/models.rs
  5. 12
      src/apps/group_chat/rpc.rs

3
lib/apps/group_chat/add.dart

@ -134,10 +134,11 @@ class _GroupAddPageState extends State<GroupAddPage> {
} }
_create() { _create() {
final myName = context.read<AccountProvider>().activedAccount.name;
final addr = _createAddrController.text.trim(); final addr = _createAddrController.text.trim();
final name = _createNameController.text.trim(); final name = _createNameController.text.trim();
final bio = _createBioController.text.trim(); final bio = _createBioController.text.trim();
context.read<GroupChatProvider>().create(addr, name, bio, _groupNeedAgree); context.read<GroupChatProvider>().create(myName, addr, name, bio, _groupNeedAgree);
setState(() { setState(() {
_createNameController.text = ''; _createNameController.text = '';
_createBioController.text = ''; _createBioController.text = '';

4
lib/apps/group_chat/provider.dart

@ -85,8 +85,8 @@ class GroupChatProvider extends ChangeNotifier {
rpc.send('group-chat-check', [addr]); rpc.send('group-chat-check', [addr]);
} }
create(String addr, String name, String bio, bool needAgree) { create(String myName, String addr, String name, String bio, bool needAgree) {
rpc.send('group-chat-create', [addr, name, bio, needAgree]); rpc.send('group-chat-create', [myName, addr, name, bio, needAgree]);
} }
reSend(int id) { reSend(int id) {

11
src/apps/group_chat/layer.rs

@ -41,11 +41,18 @@ pub(crate) async fn handle(
GroupResult::Create(gcd, ok) => { GroupResult::Create(gcd, ok) => {
println!("Create result: {}", ok); println!("Create result: {}", ok);
if ok { if ok {
// TODO get gc by gcd. // get gc by gcd.
let db = group_chat_db(layer.read().await.base(), &mgid)?; let db = group_chat_db(layer.read().await.base(), &mgid)?;
if let Some(mut gc) = GroupChat::get(&db, &gcd)? { if let Some(mut gc) = GroupChat::get(&db, &gcd)? {
gc.ok(&db)?; 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,
)?;
} }
} }
} }

4
src/apps/group_chat/models.rs

@ -134,10 +134,11 @@ impl GroupChat {
} }
} }
pub fn to_group_info(self, avatar: Vec<u8>) -> GroupInfo { pub fn to_group_info(self, name: String, avatar: Vec<u8>) -> GroupInfo {
match self.g_type { match self.g_type {
GroupType::Common | GroupType::Open => GroupInfo::Common( GroupType::Common | GroupType::Open => GroupInfo::Common(
self.owner, self.owner,
name,
self.g_id, self.g_id,
self.g_type, self.g_type,
self.is_need_agree, self.is_need_agree,
@ -148,6 +149,7 @@ impl GroupChat {
GroupType::Encrypted => GroupInfo::Common( GroupType::Encrypted => GroupInfo::Common(
// TODO encrypted // TODO encrypted
self.owner, self.owner,
name,
self.g_id, self.g_id,
self.g_type, self.g_type,
self.is_need_agree, self.is_need_agree,

12
src/apps/group_chat/rpc.rs

@ -139,13 +139,13 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
handler.add_method( handler.add_method(
"group-chat-create", "group-chat-create",
|gid: GroupId, params: Vec<RpcParam>, state: Arc<RpcState>| async move { |gid: GroupId, params: Vec<RpcParam>, state: Arc<RpcState>| 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!"))?; .map_err(|_e| new_io_error("PeerAddr invalid!"))?;
let name = params[1].as_str()?.to_owned(); let name = params[2].as_str()?.to_owned();
let bio = params[2].as_str()?.to_owned(); let bio = params[3].as_str()?.to_owned();
let need_agree = params[3].as_bool()?; let need_agree = params[4].as_bool()?;
let avatar = vec![]; let avatar = vec![];
println!("Create: {}, {}, {}", name, bio, need_agree);
let db = group_chat_db(state.layer.read().await.base(), &gid)?; let db = group_chat_db(state.layer.read().await.base(), &gid)?;
let mut gc = GroupChat::new(gid, GroupType::Common, addr, name, bio, need_agree); 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<RpcState>) {
let mut results = HandleResult::new(); let mut results = HandleResult::new();
// TODO add to rpcs. // TODO add to rpcs.
results.rpcs.push(json!(gc.to_rpc())); 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. // TODO create proof.
let proof: Proof = Default::default(); let proof: Proof = Default::default();

Loading…
Cancel
Save