session.dart 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import 'package:e2ee_chat/common/global.dart';
  2. import 'package:e2ee_chat/model/message.dart';
  3. import 'package:e2ee_chat/model/user.dart';
  4. import 'package:flutter/cupertino.dart';
  5. import 'login.dart';
  6. enum DTMessageType { text, image }
  7. class SessionListModel extends ChangeNotifier {
  8. User? get user => LoginPresenter().user;
  9. List<SessionModel> get sessions {
  10. final _user = user;
  11. var list = <SessionModel>[];
  12. if (_user != null) {
  13. var friends = _user.friends;
  14. for (var i in friends) {
  15. list.add(SessionModel(i));
  16. }
  17. }
  18. return list;
  19. }
  20. int get count => sessions.length;
  21. }
  22. class SessionModel extends SessionListModel {
  23. // TODO: 仅支持单聊
  24. SessionModel(this.contact);
  25. final User contact;
  26. /// 消息体
  27. Message? get lastMessage {
  28. final _user = user;
  29. Message? message;
  30. if (_user != null) {
  31. try {
  32. message = _user.messages.lastWhere((msg) => msg.from.target == _user || msg.to.target == _user);
  33. } catch (e) {
  34. debug("no message");
  35. }
  36. }
  37. return message;
  38. }
  39. /// 未读数量
  40. int get unReadCount {
  41. // TODO: 未读消息数量
  42. return 0;
  43. }
  44. get chatName => contact.username;
  45. /// 单聊
  46. get isSingle => true;
  47. /// 群聊信息
  48. get isGroup => false;
  49. /// 消息免打扰
  50. get isDND => contact.isDND;
  51. /// 是否为置顶
  52. get isStick => contact.isStick;
  53. /// 特别关注
  54. get isSpecialAttention => contact.isSpecialAttention;
  55. // TODO: 是否 @ 你
  56. get isAtYou => false;
  57. // TODO: 是否 @ 全部
  58. get isAtAll => false;
  59. // TODO: user avatar
  60. get avatar => Global.defaultAvatar;
  61. }