diff --git a/lib/src/core/moderation/moderation.dart b/lib/src/core/moderation/moderation.dart --- a/lib/src/core/moderation/moderation.dart +++ b/lib/src/core/moderation/moderation.dart @@ -1,5 +1,6 @@ export 'moderation_definitions.dart'; export 'moderation_engine.dart'; +export 'moderation_label_events.dart'; export 'moderation_label_localizations.dart'; export 'moderation_models.dart'; export 'moderation_presentation.dart'; diff --git a/lib/src/core/moderation/moderation_engine.dart b/lib/src/core/moderation/moderation_engine.dart --- a/lib/src/core/moderation/moderation_engine.dart +++ b/lib/src/core/moderation/moderation_engine.dart @@ -1,5 +1,6 @@ import 'package:poptart_lex/com/atproto/label/defs.dart'; import 'package:spark/src/core/moderation/moderation_definitions.dart'; +import 'package:spark/src/core/moderation/moderation_label_events.dart'; import 'package:spark/src/core/moderation/moderation_models.dart'; final class ModerationEngine { @@ -28,8 +29,7 @@ final causes = []; for (final label in labels) { - if (label.neg ?? false) continue; - if (label.exp?.toUtc().isAfter(evaluationTime) == false) continue; + if (!isLabelActiveAt(label, now: evaluationTime)) continue; final isSelfLabel = subjectDid != null && label.src == subjectDid; final definition = isSelfLabel diff --git a/lib/src/core/moderation/moderation_label_events.dart b/lib/src/core/moderation/moderation_label_events.dart new file mode 100644 --- /dev/null +++ b/lib/src/core/moderation/moderation_label_events.dart @@ -0,0 +1,46 @@ +import 'package:poptart_lex/com/atproto/label/defs.dart'; + +/// Merges label event streams to the latest event for each label identity. +List