Browse Source

add new notice menu in UI

pull/18/head
Sun 4 years ago
parent
commit
f22f259648
  1. 8
      lib/apps/chat/add.dart
  2. 4
      lib/apps/chat/detail.dart
  3. 12
      lib/apps/device/provider.dart
  4. 8
      lib/apps/domain/page.dart
  5. 8
      lib/apps/file/list.dart
  6. 12
      lib/apps/group/detail.dart
  7. 302
      lib/apps/group/provider.dart.1
  8. 2
      lib/apps/jarvis/detail.dart
  9. 10
      lib/apps/wallet/page.dart
  10. 6
      lib/pages/account_domain.dart
  11. 28
      lib/provider.dart
  12. 12
      lib/rpc.dart
  13. 4
      lib/widgets/transfer.dart
  14. 5
      src/apps/chat/layer.rs
  15. 5
      src/rpc.rs

8
lib/apps/chat/add.dart

@ -137,10 +137,10 @@ class _ChatAddState extends State<ChatAdd> { @@ -137,10 +137,10 @@ class _ChatAddState extends State<ChatAdd> {
void initState() {
super.initState();
rpc.addListener('chat-request-create', _requestCreate, true, true);
rpc.addListener('chat-request-delivery', _requestDelivery, false);
rpc.addListener('chat-request-agree', _requestAgree, false);
rpc.addListener('chat-request-reject', _requestReject, false);
rpc.addListener('chat-request-create', _requestCreate);
rpc.addListener('chat-request-delivery', _requestDelivery);
rpc.addListener('chat-request-agree', _requestAgree);
rpc.addListener('chat-request-reject', _requestReject);
new Future.delayed(Duration.zero, () {
if (widget.id != '') {

4
lib/apps/chat/detail.dart

@ -33,8 +33,8 @@ class _ChatDetailState extends State<ChatDetail> { @@ -33,8 +33,8 @@ class _ChatDetailState extends State<ChatDetail> {
initState() {
super.initState();
rpc.addListener('chat-message-create', _messageCreate, true);
rpc.addListener('chat-message-delivery', _messageDelivery, false);
rpc.addListener('chat-message-create', _messageCreate);
rpc.addListener('chat-message-delivery', _messageDelivery);
}
// [friend, [message]]

12
lib/apps/device/provider.dart

@ -9,12 +9,12 @@ class DeviceProvider extends ChangeNotifier { @@ -9,12 +9,12 @@ class DeviceProvider extends ChangeNotifier {
DeviceProvider() {
// rpc.
rpc.addListener('device-list', _list, false);
rpc.addListener('device-create', _create, true);
rpc.addListener('device-delete', _delete, false);
rpc.addListener('device-online', _online, false);
rpc.addListener('device-offline', _offline, false);
rpc.addListener('device-status', _status, false);
rpc.addListener('device-list', _list);
rpc.addListener('device-create', _create);
rpc.addListener('device-delete', _delete);
rpc.addListener('device-online', _online);
rpc.addListener('device-offline', _offline);
rpc.addListener('device-status', _status);
}
clear() {

8
lib/apps/domain/page.dart

@ -67,9 +67,9 @@ class _DomainDetailState extends State<DomainDetail> { @@ -67,9 +67,9 @@ class _DomainDetailState extends State<DomainDetail> {
super.initState();
// resigter rpc for current page.
rpc.addListener('domain-list', _domainList, false);
rpc.addListener('domain-provider-add', _domainProviderAdd, false);
rpc.addListener('domain-register-success', _domainRegisterSuccess, false);
rpc.addListener('domain-list', _domainList);
rpc.addListener('domain-provider-add', _domainProviderAdd);
rpc.addListener('domain-register-success', _domainRegisterSuccess);
rpc.send('domain-list', []);
}
@ -382,7 +382,7 @@ class _RegisterScreenState extends State<_RegisterScreen> { @@ -382,7 +382,7 @@ class _RegisterScreenState extends State<_RegisterScreen> {
@override
void initState() {
super.initState();
rpc.addListener('domain-register-failure', _domainRegisterFailure, false);
rpc.addListener('domain-register-failure', _domainRegisterFailure);
}

8
lib/apps/file/list.dart

@ -31,10 +31,10 @@ class _FilesListState extends State<FilesList> { @@ -31,10 +31,10 @@ class _FilesListState extends State<FilesList> {
@override
void initState() {
super.initState();
rpc.addListener('dc-list', _dcList, false);
rpc.addListener('dc-file-create', _dcFileCreate, false);
rpc.addListener('dc-folder-create', _dcFolderCreate, false);
rpc.addListener('dc-file-upload', _dcFolderCreate, false);
rpc.addListener('dc-list', _dcList);
rpc.addListener('dc-file-create', _dcFileCreate);
rpc.addListener('dc-folder-create', _dcFolderCreate);
rpc.addListener('dc-file-upload', _dcFolderCreate);
_loadDirectory(widget.path.last);
}

12
lib/apps/group/detail.dart

@ -36,12 +36,12 @@ class _GroupChatDetailState extends State<GroupChatDetail> { @@ -36,12 +36,12 @@ class _GroupChatDetailState extends State<GroupChatDetail> {
initState() {
super.initState();
rpc.addListener('group-member-join', _memberJoin, false);
rpc.addListener('group-member-leave', _memberLeave, false);
rpc.addListener('group-member-online', _memberOnline, false);
rpc.addListener('group-member-offline', _memberOffline, false);
rpc.addListener('group-message-create', _messageCreate, false);
rpc.addListener('group-message-delivery', _messageDelivery, false);
rpc.addListener('group-member-join', _memberJoin);
rpc.addListener('group-member-leave', _memberLeave);
rpc.addListener('group-member-online', _memberOnline);
rpc.addListener('group-member-offline', _memberOffline);
rpc.addListener('group-message-create', _messageCreate);
rpc.addListener('group-message-delivery', _messageDelivery);
}
// [group, [member], [message]]

302
lib/apps/group/provider.dart.1

@ -1,302 +0,0 @@ @@ -1,302 +0,0 @@
import "dart:collection";
import 'package:flutter/material.dart';
import 'package:esse/rpc.dart';
import 'package:esse/global.dart';
import 'package:esse/apps/primitives.dart';
import 'package:esse/apps/group/models.dart';
class GroupChatProvider extends ChangeNotifier {
Map<int, GroupChat> groups = {};
List<int> createKeys = [];
List<int> orderKeys = [];
SplayTreeMap<int, Request> requests = SplayTreeMap();
int? actived;
SplayTreeMap<int, Message> activedMessages = SplayTreeMap();
SplayTreeMap<int, Member> activedMembers = SplayTreeMap();
GroupChat? get activedGroup => this.groups[this.actived];
bool get isActivedGroupOwner => this.activedGroup != null ? this.activedGroup!.owner == Global.gid : false;
bool get isActivedGroupManager {
for (var m in this.activedMembers.values) {
if (m.mid == Global.gid) {
return m.isManager;
}
}
return false;
}
List activedMemberOrder(String myId) {
int meId = 0;
bool meOwner = false;
bool meManager = false;
List<int> allKeys = [];
List<int> managers = [];
List<int> commons = [];
List<int> blocks = [];
this.activedMembers.forEach((i, m) {
if (m.mid == myId) {
meId = i;
if (m.isManager) {
meManager = true;
if (m.mid == this.activedGroup!.owner) {
meOwner = true;
}
}
} else {
if (m.isBlock) {
blocks.add(i);
} else {
if (m.isManager) {
if (m.mid == this.activedGroup!.owner) {
allKeys.add(i);
} else {
managers.add(i);
}
} else {
commons.add(i);
}
}
}
});
return [allKeys + managers + commons + blocks, meId, meOwner, meManager];
}
GroupChatProvider() {
// rpc.
rpc.addListener('group-chat-list', _list, false);
rpc.addListener('group-chat-create', _create, false);
rpc.addListener('group-chat-result', _result, false);
rpc.addListener('group-chat-detail', _detail, true);
// rpc.addListener('group-chat-update', _update, false);
rpc.addListener('group-chat-join', _join, true);
rpc.addListener('group-chat-request-list', _requestList, false);
rpc.addListener('group-chat-request-handle', _requestHandle, false);
rpc.addListener('group-chat-member-join', _memberJoin, false);
rpc.addListener('group-chat-member-info', _memberInfo, false);
rpc.addListener('group-chat-member-leave', _memberLeave, false);
rpc.addListener('group-chat-member-online', _memberOnline, false);
rpc.addListener('group-chat-member-offline', _memberOffline, false);
rpc.addListener('group-chat-message-create', _messageCreate, true);
// rpc.addListener('group-chat-message-delete', _messageDelete, false);
// rpc.addListener('group-chat-message-delivery', _messageDelivery, false);
}
clear() {
this.groups.clear();
this.createKeys.clear();
this.orderKeys.clear();
this.requests.clear();
this.activedMessages.clear();
this.activedMembers.clear();
}
updateActived() {
this.clear();
// load groups.
rpc.send('group-chat-list', []);
}
updateActivedGroup(int id) {
this.actived = id;
rpc.send('group-chat-detail', [id]);
}
clearActivedGroup() {
this.activedMessages.clear();
this.activedMembers.clear();
}
requestClear() {
this.requests.clear();
}
join(GroupType gtype, String gid, String gaddr, String name, String remark, [String proof = '', String key = '']) {
rpc.send('group-chat-join', [gtype.toInt(), gid, gaddr, name, remark, proof, key]);
}
requestHandle(String gid, int id, int rid, bool ok) {
rpc.send('group-chat-request-handle', [gid, id, rid, ok]);
}
requestBlock(String gid, String rgid) {
rpc.send('group-chat-request-block', [gid, rgid]);
}
messageCreate(MessageType mtype, String content) {
final gcd = this.activedGroup!.gid;
rpc.send('group-chat-message-create', [gcd, mtype.toInt(), content]);
}
close(int id) {
final gcd = this.activedGroup!.gid;
rpc.send('group-chat-close', [gcd, id]);
this.activedGroup!.isClosed = true;
notifyListeners();
}
delete(int id) {
final gcd = this.activedGroup!.gid;
rpc.send('group-chat-delete', [gcd, id]);
this.actived = 0;
this.groups.remove(id);
this.activedMessages.clear();
this.activedMembers.clear();
}
memberUpdate(int id, bool isBlock) {
this.activedMembers[id]!.isBlock = isBlock;
rpc.send('group-chat-member-update', [id, isBlock]);
notifyListeners();
}
_list(List params) {
this.clear();
params.forEach((params) {
final gc = GroupChat.fromList(params);
if (gc.isOk) {
this.orderKeys.add(gc.id);
} else {
this.createKeys.add(gc.id);
}
this.groups[gc.id] = gc;
});
notifyListeners();
}
_create(List params) {
final gc = GroupChat.fromList(params);
if (gc.isOk) {
this.orderKeys.add(gc.id);
} else {
this.createKeys.add(gc.id);
}
this.groups[gc.id] = gc;
notifyListeners();
}
_result(List params) {
final id = params[0];
this.groups[id]!.isOk = params[1];
if (params[1]) {
//this.createKeys.remove(id);
this.orderKeys.add(id);
}
notifyListeners();
}
_detail(List params) {
this.clearActivedGroup();
params[0].forEach((param) {
this.activedMembers[param[0]] = Member.fromList(param);
});
params[1].forEach((param) {
this.activedMessages[param[0]] = Message.fromList(param);
});
notifyListeners();
}
_join(List params) {
this.requests[params[0]] = Request.fromList(params);
notifyListeners();
}
_requestHandle(List params) {
final id = params[1];
final ok = params[2];
//final _efficacy = params[3];
if (this.actived == params[0] && this.requests.containsKey(id)) {
this.requests[id]!.overIt(ok);
notifyListeners();
}
}
_requestList(List params) {
this.requests.clear();
params.forEach((param) {
this.requests[param[0]] = Request.fromList(param);
});
notifyListeners();
}
_memberJoin(List params) {
final member = Member.fromList(params);
if (this.actived == member.fid) {
this.activedMembers[member.id] = member;
// TODO Better add UI member joined.
notifyListeners();
}
}
_memberLeave(List params) {
final id = params[0];
if (this.actived == params[0] && this.activedMembers.containsKey(id)) {
this.activedMembers.remove(id);
notifyListeners();
}
}
_memberInfo(List params) {
final id = params[1];
if (this.actived == params[0] && this.activedMembers.containsKey(id)) {
this.activedMembers[id]!.addr = params[2];
this.activedMembers[id]!.name = params[3];
notifyListeners();
}
}
_memberOnline(List params) {
final id = params[0];
final mgid = params[1];
final maddr = params[2];
if (this.actived == id) {
int mid = 0;
this.activedMembers.forEach((i, m) {
if (m.mid == mgid) {
mid = i;
}
});
if (mid > 0) {
this.activedMembers[mid]!.addr = maddr;
this.activedMembers[mid]!.online = true;
notifyListeners();
}
}
}
_memberOffline(List params) {
final id = params[0];
final mgid = params[1];
if (this.actived == id) {
int mid = 0;
this.activedMembers.forEach((i, m) {
if (m.mid == mgid) {
mid = i;
}
});
if (mid > 0) {
this.activedMembers[mid]!.online = false;
notifyListeners();
}
}
}
_messageCreate(List params) {
final msg = Message.fromList(params);
if (msg.fid == this.actived) {
if (!msg.isDelivery!) {
msg.isDelivery = null; // When message create, set is is none;
}
this.activedMessages[msg.id] = msg;
notifyListeners();
}
}
}

2
lib/apps/jarvis/detail.dart

@ -47,7 +47,7 @@ class _JarvisDetailState extends State<JarvisDetail> { @@ -47,7 +47,7 @@ class _JarvisDetailState extends State<JarvisDetail> {
initState() {
super.initState();
rpc.addListener('jarvis-create', _create, false);
rpc.addListener('jarvis-create', _create);
textFocus.addListener(() {
if (textFocus.hasFocus) {

10
lib/apps/wallet/page.dart

@ -43,11 +43,11 @@ class _WalletDetailState extends State<WalletDetail> with SingleTickerProviderSt @@ -43,11 +43,11 @@ class _WalletDetailState extends State<WalletDetail> with SingleTickerProviderSt
void initState() {
_tabController = new TabController(length: 2, vsync: this);
rpc.addListener('wallet-generate', _walletGenerate, false);
rpc.addListener('wallet-import', _walletGenerate, false);
rpc.addListener('wallet-token', _walletToken, false);
rpc.addListener('wallet-balance', _walletBalance, false);
rpc.addListener('wallet-transfer', _walletTransfer, false);
rpc.addListener('wallet-generate', _walletGenerate);
rpc.addListener('wallet-import', _walletGenerate);
rpc.addListener('wallet-token', _walletToken);
rpc.addListener('wallet-balance', _walletBalance);
rpc.addListener('wallet-transfer', _walletTransfer);
super.initState();
Future.delayed(Duration.zero, _load);

6
lib/pages/account_domain.dart

@ -50,9 +50,9 @@ class AccountDomainScreenState extends State<AccountDomainScreen> { @@ -50,9 +50,9 @@ class AccountDomainScreenState extends State<AccountDomainScreen> {
initState() {
super.initState();
rpc.addListener('domain-list', _domainList, false);
rpc.addListener('domain-register-success', _domainRegisterSuccess, false);
rpc.addListener('domain-register-failure', _domainRegisterFailure, false);
rpc.addListener('domain-list', _domainList);
rpc.addListener('domain-register-success', _domainRegisterSuccess);
rpc.addListener('domain-register-failure', _domainRegisterFailure);
rpc.send('domain-list', []);
_nameController.text = widget.name;

28
lib/provider.dart

@ -45,22 +45,23 @@ class AccountProvider extends ChangeNotifier { @@ -45,22 +45,23 @@ class AccountProvider extends ChangeNotifier {
AccountProvider() {
// rpc notice when account not actived.
rpc.addNotice(_accountNotice, _newRequestNotice);
rpc.addNotice(_accountNotice);
// rpc
rpc.addListener('account-system-info', _systemInfo, false);
rpc.addListener('account-update', _accountUpdate, false);
rpc.addListener('account-login', _accountLogin, false);
rpc.addListener('account-system-info', _systemInfo);
rpc.addListener('account-update', _accountUpdate);
rpc.addListener('account-login', _accountLogin);
rpc.addListener('session-list', _sessionList, false);
rpc.addListener('session-list', _sessionList);
rpc.addListener('session-last', _sessionLast, true);
rpc.addListener('session-create', _sessionCreate, true);
rpc.addListener('session-update', _sessionUpdate, false);
rpc.addListener('session-close', _sessionClose, false);
rpc.addListener('session-delete', _sessionDelete, false);
rpc.addListener('session-connect', _sessionConnect, false);
rpc.addListener('session-suspend', _sessionSuspend, false);
rpc.addListener('session-lost', _sessionLost, false);
rpc.addListener('session-update', _sessionUpdate);
rpc.addListener('session-close', _sessionClose);
rpc.addListener('session-delete', _sessionDelete);
rpc.addListener('session-connect', _sessionConnect);
rpc.addListener('session-suspend', _sessionSuspend);
rpc.addListener('session-lost', _sessionLost);
rpc.addListener('notice-menu', _noticeMenu, true);
}
/// when security load accounts from cache.
@ -248,8 +249,9 @@ class AccountProvider extends ChangeNotifier { @@ -248,8 +249,9 @@ class AccountProvider extends ChangeNotifier {
}
}
_newRequestNotice(String gid) {
if (this.activedAccountId == gid) {
_noticeMenu(List params) {
final st = SessionTypeExtension.fromInt(params[0]);
if (st == SessionType.Chat) {
this.systemAppFriendAddNew = true;
notifyListeners();
}

12
lib/rpc.dart

@ -61,7 +61,6 @@ class WebSocketsNotifications { @@ -61,7 +61,6 @@ class WebSocketsNotifications {
Map<String, List> _listeners = new Map<String, List>();
Function? _notice;
Function? _requestNotice;
bool isLinked() {
return !_closed;
@ -119,13 +118,12 @@ class WebSocketsNotifications { @@ -119,13 +118,12 @@ class WebSocketsNotifications {
}
}
addNotice(Function noticeCallback, Function requestCallback) {
addNotice(Function noticeCallback) {
_notice = noticeCallback;
_requestNotice = requestCallback;
}
addListener(String method, Function callback, bool notice, [bool request = false]) {
_listeners[method] = [callback, notice, request];
addListener(String method, Function callback, [bool notice = false]) {
_listeners[method] = [callback, notice];
}
removeListener(String method) {
@ -145,10 +143,6 @@ class WebSocketsNotifications { @@ -145,10 +143,6 @@ class WebSocketsNotifications {
String gid = response["gid"];
if (_listeners[method] != null) {
final callbacks = _listeners[method]!;
if (callbacks[2] != null && callbacks[2]) {
_requestNotice!(gid);
}
if (gid == Global.gid || method.startsWith('account')) {
try {
callbacks[0](params);

4
lib/widgets/transfer.dart

@ -44,8 +44,8 @@ class _TransferState extends State<Transfer> { @@ -44,8 +44,8 @@ class _TransferState extends State<Transfer> {
@override
initState() {
rpc.addListener('wallet-token', _walletToken, false);
rpc.addListener('wallet-balance', _walletBalance, false);
rpc.addListener('wallet-token', _walletToken);
rpc.addListener('wallet-balance', _walletBalance);
_amountController.addListener(() {
setState(() {
this._checked = false;

5
src/apps/chat/layer.rs

@ -15,7 +15,9 @@ use crate::account::User; @@ -15,7 +15,9 @@ use crate::account::User;
use crate::event::InnerEvent;
use crate::layer::{Layer, Online};
use crate::migrate::consensus::{FRIEND_TABLE_PATH, MESSAGE_TABLE_PATH, REQUEST_TABLE_PATH};
use crate::rpc::{session_connect, session_create, session_last, session_lost, session_suspend};
use crate::rpc::{
notice_menu, session_connect, session_create, session_last, session_lost, session_suspend,
};
use crate::session::{connect_session, Session, SessionType};
use crate::storage::{chat_db, session_db, write_avatar_sync};
@ -227,6 +229,7 @@ impl LayerEvent { @@ -227,6 +229,7 @@ impl LayerEvent {
)?;
results.rpcs.push(rpc::request_create(mgid, &request));
results.rpcs.push(notice_menu(mgid, &SessionType::Chat));
return Ok(results);
} else {
let group_lock = layer.group.read().await;

5
src/rpc.rs

@ -86,6 +86,11 @@ pub(crate) fn session_last( @@ -86,6 +86,11 @@ pub(crate) fn session_last(
rpc_response(0, "session-last", json!([id, time, content, readed]), mgid)
}
#[inline]
pub(crate) fn notice_menu(mgid: GroupId, t: &SessionType) -> RpcParam {
rpc_response(0, "notice_menu", json!([t.to_int()]), mgid)
}
#[inline]
pub(crate) fn _session_update(
mgid: GroupId,

Loading…
Cancel
Save