mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-29 16:26:27 +00:00
52 lines
1.5 KiB
Dart
52 lines
1.5 KiB
Dart
|
import 'package:comunic/lists/base_set.dart';
|
||
|
import 'package:comunic/models/forez_presence.dart';
|
||
|
|
||
|
/// Forez presence set
|
||
|
///
|
||
|
/// @author Pierre Hubert
|
||
|
|
||
|
class PresenceSet extends BaseSet<Presence> {
|
||
|
/// Get the presence of a specific user
|
||
|
PresenceSet getForUser(int userID) =>
|
||
|
PresenceSet()..addAll(where((element) => element.userID == userID));
|
||
|
|
||
|
bool containsDate(DateTime dt) => any(
|
||
|
(element) =>
|
||
|
element.year == dt.year &&
|
||
|
element.month == dt.month &&
|
||
|
element.day == dt.day,
|
||
|
);
|
||
|
|
||
|
void removeDate(DateTime dt) => removeWhere(
|
||
|
(element) =>
|
||
|
element.year == dt.year &&
|
||
|
element.month == dt.month &&
|
||
|
element.day == dt.day,
|
||
|
);
|
||
|
|
||
|
void toggleDate(DateTime dt, int userID) {
|
||
|
if (containsDate(dt))
|
||
|
removeDate(dt);
|
||
|
else
|
||
|
add(Presence.fromDateTime(dt, userID));
|
||
|
}
|
||
|
|
||
|
int countAtDate(DateTime dt) => where(
|
||
|
(element) =>
|
||
|
element.year == dt.year &&
|
||
|
element.month == dt.month &&
|
||
|
element.day == dt.day,
|
||
|
).length;
|
||
|
|
||
|
/// Get the list of users present at a specified date
|
||
|
List<int> getUsersAtDate(DateTime dt) => where(
|
||
|
(element) =>
|
||
|
element.year == dt.year &&
|
||
|
element.month == dt.month &&
|
||
|
element.day == dt.day,
|
||
|
).map((e) => e.userID).toList();
|
||
|
|
||
|
/// Get the ID of all the users referenced in this set
|
||
|
Set<int> get usersID => map((element) => element.userID).toSet();
|
||
|
}
|