Browse Source

fix request create notice

pull/18/head
Sun 4 years ago
parent
commit
a29f970573
  1. 2
      lib/apps/chat/provider.dart
  2. 19
      lib/pages/home.dart
  3. 10
      lib/provider.dart
  4. 19
      lib/rpc.dart
  5. 7
      src/apps/chat/rpc.rs

2
lib/apps/chat/provider.dart

@ -41,7 +41,7 @@ class ChatProvider extends ChangeNotifier {
rpc.addListener('chat-friend-update', _friendUpdate, false); rpc.addListener('chat-friend-update', _friendUpdate, false);
rpc.addListener('chat-friend-close', _friendClose, false); rpc.addListener('chat-friend-close', _friendClose, false);
rpc.addListener('chat-request-list', _requestList, false); rpc.addListener('chat-request-list', _requestList, false);
rpc.addListener('chat-request-create', _requestCreate, true); rpc.addListener('chat-request-create', _requestCreate, true, true);
rpc.addListener('chat-request-delivery', _requestDelivery, false); rpc.addListener('chat-request-delivery', _requestDelivery, false);
rpc.addListener('chat-request-agree', _requestAgree, false); rpc.addListener('chat-request-agree', _requestAgree, false);
rpc.addListener('chat-request-reject', _requestReject, false); rpc.addListener('chat-request-reject', _requestReject, false);

19
lib/pages/home.dart

@ -103,7 +103,7 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
@override @override
void initState() { void initState() {
controller = AnimationController( controller = AnimationController(
vsync: this, duration: const Duration(seconds: 5) vsync: this, duration: const Duration(seconds: 8)
)..addListener(() { )..addListener(() {
if (controller.value == 1.0) { if (controller.value == 1.0) {
isProcess = false; isProcess = false;
@ -132,7 +132,7 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
final name = params[2]; final name = params[2];
final widget = ChatAddPage(id: id, addr: addr, name: name); final widget = ChatAddPage(id: id, addr: addr, name: name);
Provider.of<AccountProvider>(context, listen: false) Provider.of<AccountProvider>(context, listen: false)
.systemAppGroupAddNew = false; .systemAppFriendAddNew = false;
if (isDesktop) { if (isDesktop) {
Provider.of<AccountProvider>(context, listen: false) Provider.of<AccountProvider>(context, listen: false)
.updateActivedApp(widget); .updateActivedApp(widget);
@ -209,15 +209,6 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
Navigator.push(context, MaterialPageRoute(builder: (_) => widget)); Navigator.push(context, MaterialPageRoute(builder: (_) => widget));
} }
} else if (value == 2) { } else if (value == 2) {
final widget = GroupAddPage();
if (isDesktop) {
provider.updateActivedApp(widget);
} else {
provider.systemAppFriendAddNew = false;
setState(() {});
Navigator.push(context, MaterialPageRoute(builder: (_) => widget));
}
} else if (value == 3) {
showShadowDialog( showShadowDialog(
context, context,
Icons.info, Icons.info,
@ -234,15 +225,13 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
_menuItem(0, Icons.qr_code_scanner_rounded, lang.scan), _menuItem(0, Icons.qr_code_scanner_rounded, lang.scan),
_menuItem(1, Icons.person_add_rounded, lang.addFriend, _menuItem(1, Icons.person_add_rounded, lang.addFriend,
provider.systemAppFriendAddNew), provider.systemAppFriendAddNew),
_menuItem(2, Icons.add_business_rounded, lang.addGroup, _menuItem(2, Icons.qr_code_rounded, lang.myQrcode),
provider.systemAppGroupAddNew),
_menuItem(3, Icons.qr_code_rounded, lang.myQrcode),
]; ];
}, },
) )
: GestureDetector(onTap: () => provider.updateToHome(), : GestureDetector(onTap: () => provider.updateToHome(),
child: Icon(Icons.home_outlined, color: color.primary))), child: Icon(Icons.home_outlined, color: color.primary))),
if (provider.systemAppFriendAddNew || provider.systemAppGroupAddNew) if (provider.systemAppFriendAddNew)
Positioned( Positioned(
top: 0, top: 0,
right: 0, right: 0,

10
lib/provider.dart

@ -29,13 +29,12 @@ class AccountProvider extends ChangeNotifier {
Widget currentListShow = null; Widget currentListShow = null;
Widget coreShowWidget = DefaultCoreShow(); Widget coreShowWidget = DefaultCoreShow();
bool systemAppFriendAddNew = false; bool systemAppFriendAddNew = false;
bool systemAppGroupAddNew = false;
Widget get homeShowWidget => this.currentListShow ?? this.defaultListShow; Widget get homeShowWidget => this.currentListShow ?? this.defaultListShow;
AccountProvider() { AccountProvider() {
// rpc notice when account not actived. // rpc notice when account not actived.
rpc.addNotice(_accountNotice); rpc.addNotice(_accountNotice, _newRequestNotice);
// rpc // rpc
rpc.addListener('account-system-info', _systemInfo, false); rpc.addListener('account-system-info', _systemInfo, false);
@ -199,6 +198,13 @@ class AccountProvider extends ChangeNotifier {
} }
} }
_newRequestNotice(String gid) {
if (this.activedAccountId == gid) {
this.systemAppFriendAddNew = true;
notifyListeners();
}
}
_accountUpdate(List params) { _accountUpdate(List params) {
final gid = params[0]; final gid = params[0];
this.accounts[gid].name = params[1]; this.accounts[gid].name = params[1];

19
lib/rpc.dart

@ -61,6 +61,7 @@ class WebSocketsNotifications {
Map<String, List> _listeners = new Map<String, List>(); Map<String, List> _listeners = new Map<String, List>();
Function _notice; Function _notice;
Function _requestNotice;
bool isLinked() { bool isLinked() {
return !_closed; return !_closed;
@ -122,12 +123,13 @@ class WebSocketsNotifications {
} }
} }
addNotice(Function callback) { addNotice(Function noticeCallback, Function requestCallback) {
_notice = callback; _notice = noticeCallback;
_requestNotice = requestCallback;
} }
addListener(String method, Function callback, bool notice) { addListener(String method, Function callback, bool notice, [bool request]) {
_listeners[method] = [callback, notice]; _listeners[method] = [callback, notice, request];
} }
removeListener(String method) { removeListener(String method) {
@ -147,9 +149,14 @@ class WebSocketsNotifications {
List params = response["result"]; List params = response["result"];
String gid = response["gid"]; String gid = response["gid"];
if (_listeners[method] != null) { if (_listeners[method] != null) {
final callbacks = _listeners[method];
if (callbacks[2] != null && callbacks[2]) {
_requestNotice(gid);
}
if (gid == Global.gid || method.startsWith('account')) { if (gid == Global.gid || method.startsWith('account')) {
_listeners[method][0](params); callbacks[0](params);
} else { } else if (callbacks[1] != null && callbacks[1]) {
_notice(gid); _notice(gid);
} }
} else { } else {

7
src/apps/chat/rpc.rs

@ -279,7 +279,6 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
false, false,
); );
let mut results = HandleResult::rpc(Default::default());
let me = state.group.read().await.clone_user(&gid)?; let me = state.group.read().await.clone_user(&gid)?;
let mut layer_lock = state.layer.write().await; let mut layer_lock = state.layer.write().await;
@ -287,16 +286,18 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
if Friend::is_friend(&db, &request.gid)? { if Friend::is_friend(&db, &request.gid)? {
debug!("had friend."); debug!("had friend.");
drop(layer_lock); drop(layer_lock);
return Ok(results); return Ok(HandleResult::new());
} }
if let Some(req) = Request::get(&db, &request.gid)? { if let Some(req) = Request::get(&db, &request.gid)? {
println!("Had this request."); debug!("Had this request.");
req.delete(&db)?; req.delete(&db)?;
} }
request.insert(&db)?; request.insert(&db)?;
drop(db); drop(db);
let mut results = HandleResult::rpc(json!(request.to_rpc()));
state.group.write().await.broadcast( state.group.write().await.broadcast(
&gid, &gid,
InnerEvent::SessionRequestCreate( InnerEvent::SessionRequestCreate(

Loading…
Cancel
Save