| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import 'dart:async';
- import 'dart:convert';
- import 'package:dash_chat/dash_chat.dart';
- import 'package:e2ee_chat/azlistview/azlistview.dart';
- import 'package:e2ee_chat/common/api.dart';
- import 'package:e2ee_chat/common/global.dart';
- import 'package:e2ee_chat/model/contact_info.dart';
- import 'package:e2ee_chat/model/friendship.dart';
- import 'package:e2ee_chat/model/message.dart';
- import 'package:e2ee_chat/model/user.dart';
- import 'package:e2ee_chat/objectbox.g.dart';
- import 'package:e2ee_chat/presenter/login.dart';
- import 'package:flutter/material.dart';
- import 'package:objectbox/objectbox.dart';
- import 'package:rxdart/rxdart.dart';
- import 'chat_list.dart';
- class FriendRequestPresenter extends ChatListPresenter {
- FriendRequestPresenter({this.from}) {
- _listener = _listenFriendRequest();
- }
- User? get user => LoginPresenter().user;
- User? from;
- List<ContactInfo> requests = [];
- bool _disposed = false;
- Future<void>? _listener;
- @override
- void dispose() {
- _disposed = true;
- _listener?.then((e) => super.dispose()) ?? super.dispose();
- }
- Future<void> _listenFriendRequest() async {
- while (!_disposed) {
- if (from != null) {
- await flushFriendRequest();
- }
- await Future.delayed(Duration(seconds: 1));
- }
- }
- Future<void> acceptFriend(String username) async {
- bool _result = await Api().acceptFriend(username);
- if (_result) {
- requests.removeWhere((r) => r.name == username);
- notifyListeners();
- }
- }
- Future<void> flushFriendRequest() async {
- final _user = user;
- if (_user != null) {
- List<String>? _list = await Api().friendRequest();
- if (_list != null && !requests.toSet().containsAll(_list)) {
- // TODO: 如果列表一样则不刷新
- debug("flush friend request: $_list");
- requests.clear();
- for (final i in _list) {
- requests.add(ContactInfo(name: i, tag: ContactInfo.getTag(i)));
- }
- SuspensionUtil.sortListBySuspensionTag(requests);
- SuspensionUtil.setShowSuspensionStatus(requests);
- notifyListeners();
- }
- }
- // messages.forEach((message) => list.add(message.chatMessage));
- }
- }
|