1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2025-06-19 08:15:16 +00:00

Display Forez presence

This commit is contained in:
2021-04-22 15:41:35 +02:00
parent 1f0abe9c2b
commit 96fb14e7de
9 changed files with 442 additions and 3 deletions

30
lib/lists/base_set.dart Normal file
View File

@ -0,0 +1,30 @@
import 'dart:collection';
/// Base set
///
/// @author pierre Hubert
class BaseSet<T> extends SetBase<T> {
final _set = new Set<T>();
@override
bool add(T value) => _set.add(value);
@override
bool contains(Object element) => _set.contains(element);
@override
Iterator<T> get iterator => _set.iterator;
@override
int get length => _set.length;
@override
T lookup(Object element) => _set.lookup(element);
@override
bool remove(Object value) => _set.remove(value);
@override
Set<T> toSet() => _set.toSet();
}

View File

@ -0,0 +1,51 @@
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();
}