OpenContacts/lib/models/friend.dart

57 lines
1.5 KiB
Dart
Raw Normal View History

2023-04-29 15:26:12 -04:00
import 'dart:developer';
import 'package:flutter/foundation.dart';
class Friend extends Comparable {
2023-04-29 13:18:46 -04:00
final String id;
final String username;
final UserStatus userStatus;
Friend({required this.id, required this.username, required this.userStatus});
2023-04-29 15:26:12 -04:00
factory Friend.fromMap(Map map) {
return Friend(id: map["id"], username: map["friendUsername"], userStatus: UserStatus.fromMap(map["userStatus"]));
}
@override
int compareTo(other) {
if (userStatus.onlineStatus == other.userStatus.onlineStatus) {
return userStatus.lastStatusChange.compareTo(other.userStatus.lastStatusChange);
} else {
if (userStatus.onlineStatus == OnlineStatus.online) {
return -1;
} else {
return 1;
}
}
}
2023-04-29 13:18:46 -04:00
}
enum OnlineStatus {
2023-04-29 15:26:12 -04:00
unknown,
2023-04-29 13:18:46 -04:00
offline,
2023-04-29 15:26:12 -04:00
away,
busy,
2023-04-29 13:18:46 -04:00
online,
}
class UserStatus {
final OnlineStatus onlineStatus;
final DateTime lastStatusChange;
UserStatus({required this.onlineStatus, required this.lastStatusChange});
2023-04-29 15:26:12 -04:00
factory UserStatus.fromMap(Map map) {
final statusString = map["onlineStatus"] as String?;
2023-04-29 16:21:00 -04:00
final status = OnlineStatus.values.firstWhere((element) => element.name.toLowerCase() == statusString?.toLowerCase(),
2023-04-29 15:26:12 -04:00
orElse: () => OnlineStatus.unknown,
);
if (status == OnlineStatus.unknown && statusString != null) {
log("Unknown OnlineStatus '$statusString' in response");
}
return UserStatus(
onlineStatus: status,
lastStatusChange: DateTime.parse(map["lastStatusChange"]),
);
}
2023-04-29 13:18:46 -04:00
}