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> { @@ -134,10 +134,11 @@ class _GroupAddPageState extends State<GroupAddPage> {
}
_create() {
final myName = context.read<AccountProvider>().activedAccount.name;
final addr = _createAddrController.text.trim();
final name = _createNameController.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(() {
_createNameController.text = '';
_createBioController.text = '';

4
lib/apps/group_chat/provider.dart

@ -85,8 +85,8 @@ class GroupChatProvider extends ChangeNotifier { @@ -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) {

11
src/apps/group_chat/layer.rs

@ -41,11 +41,18 @@ pub(crate) async fn handle( @@ -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,
)?;
}
}
}

4
src/apps/group_chat/models.rs

@ -134,10 +134,11 @@ impl GroupChat { @@ -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 {
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 { @@ -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,

12
src/apps/group_chat/rpc.rs

@ -139,13 +139,13 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) { @@ -139,13 +139,13 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
handler.add_method(
"group-chat-create",
|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!"))?;
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<RpcState>) { @@ -161,7 +161,7 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
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();

Loading…
Cancel
Save