forked from Henry-Hiles/nexus
44 lines
1.4 KiB
Dart
44 lines
1.4 KiB
Dart
import "dart:async";
|
|
import "package:collection/collection.dart";
|
|
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
|
import "package:flutter_riverpod/flutter_riverpod.dart";
|
|
import "package:nexus/controllers/members_controller.dart";
|
|
import "package:nexus/models/configs/author_config.dart";
|
|
import "package:nexus/models/membership.dart";
|
|
|
|
class AuthorController extends AsyncNotifier<Membership> {
|
|
final AuthorConfig config;
|
|
AuthorController(this.config);
|
|
|
|
@override
|
|
Future<Membership> build() async {
|
|
var member = await ref.watch(
|
|
MembersController.provider(config.room).selectAsync(
|
|
(value) => value.firstWhereOrNull(
|
|
(membership) => membership.userId == config.message.authorId,
|
|
),
|
|
),
|
|
);
|
|
|
|
final pmp = config.message.metadata?["pmp"] == null
|
|
? null
|
|
: Membership.fromContent(
|
|
IMap(config.message.metadata?["pmp"]),
|
|
config.message.authorId,
|
|
);
|
|
|
|
return Membership(
|
|
avatarUrl: pmp?.avatarUrl ?? member?.avatarUrl,
|
|
displayName:
|
|
pmp?.displayName ??
|
|
member?.displayName ??
|
|
config.message.authorId.substring(1).split(":").first,
|
|
userId: config.message.authorId,
|
|
);
|
|
}
|
|
|
|
static final provider = AsyncNotifierProvider.family
|
|
.autoDispose<AuthorController, Membership, AuthorConfig>(
|
|
AuthorController.new,
|
|
);
|
|
}
|