1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-11-29 08:16:28 +00:00
comunicmobile/lib/models/group.dart

98 lines
2.8 KiB
Dart
Raw Normal View History

2021-04-23 17:32:34 +00:00
import 'package:comunic/utils/intl_utils.dart';
2019-06-10 07:47:02 +00:00
import 'package:meta/meta.dart';
/// Group information
///
/// @author Pierre HUBERT
enum GroupMembershipLevel {
ADMINISTRATOR,
MODERATOR,
MEMBER,
INVITED,
PENDING,
VISITOR
}
2021-04-25 15:06:28 +00:00
String membershipToText(GroupMembershipLevel level) {
switch (level) {
case GroupMembershipLevel.ADMINISTRATOR:
return tr("Administrator");
case GroupMembershipLevel.MODERATOR:
return tr("Moderator");
case GroupMembershipLevel.MEMBER:
return tr("Member");
case GroupMembershipLevel.INVITED:
return tr("Invited");
case GroupMembershipLevel.PENDING:
return tr("Requested");
case GroupMembershipLevel.VISITOR:
return tr("Visitor");
}
throw new Exception("Unreachable statement!");
}
2019-06-10 07:47:02 +00:00
enum GroupVisibilityLevel { OPEN, PRIVATE, SECRETE }
enum GroupRegistrationLevel { OPEN, MODERATED, CLOSED }
enum GroupPostCreationLevel { MODERATORS, MEMBERS }
2021-04-22 13:15:40 +00:00
class Group implements Comparable<Group> {
2019-06-10 07:47:02 +00:00
final int id;
2020-05-01 13:39:54 +00:00
String name;
2020-04-15 10:04:19 +00:00
final String iconURL;
2019-06-10 07:47:02 +00:00
final int numberMembers;
2020-04-15 11:56:59 +00:00
GroupMembershipLevel membershipLevel;
2020-05-01 18:52:24 +00:00
GroupVisibilityLevel visibilityLevel;
2020-05-01 19:04:50 +00:00
GroupRegistrationLevel registrationLevel;
2020-05-01 19:13:31 +00:00
GroupPostCreationLevel postCreationLevel;
2020-05-01 18:10:25 +00:00
String virtualDirectory;
2020-04-15 16:39:07 +00:00
bool following;
2019-06-10 07:47:02 +00:00
Group({
@required this.id,
@required this.name,
2020-04-15 10:04:19 +00:00
@required this.iconURL,
2019-06-10 07:47:02 +00:00
@required this.numberMembers,
@required this.membershipLevel,
@required this.visibilityLevel,
@required this.registrationLevel,
@required this.postCreationLevel,
@required this.virtualDirectory,
@required this.following,
}) : assert(id != null),
assert(name != null),
2020-04-15 10:04:19 +00:00
assert(iconURL != null),
2019-06-10 07:47:02 +00:00
assert(numberMembers != null),
assert(membershipLevel != null),
assert(visibilityLevel != null),
assert(registrationLevel != null),
assert(postCreationLevel != null),
assert(following != null);
get displayName => this.name;
2020-04-15 16:06:20 +00:00
2020-04-15 16:39:07 +00:00
bool get isAtLeastMember =>
2020-04-15 16:06:20 +00:00
membershipLevel == GroupMembershipLevel.ADMINISTRATOR ||
membershipLevel == GroupMembershipLevel.MODERATOR ||
membershipLevel == GroupMembershipLevel.MEMBER;
2020-04-16 06:52:26 +00:00
2020-05-01 13:12:55 +00:00
bool get isAdmin => membershipLevel == GroupMembershipLevel.ADMINISTRATOR;
bool get isAtLeastModerator =>
membershipLevel == GroupMembershipLevel.ADMINISTRATOR ||
membershipLevel == GroupMembershipLevel.MODERATOR;
2020-04-16 06:52:26 +00:00
bool get canCreatePost =>
membershipLevel == GroupMembershipLevel.ADMINISTRATOR ||
membershipLevel == GroupMembershipLevel.MODERATOR ||
(membershipLevel == GroupMembershipLevel.MEMBER &&
postCreationLevel == GroupPostCreationLevel.MEMBERS);
2021-04-22 13:15:40 +00:00
2021-04-25 15:06:28 +00:00
String get membershipText => membershipToText(membershipLevel);
2021-04-23 17:32:34 +00:00
2021-04-22 13:15:40 +00:00
@override
int compareTo(Group other) => id.compareTo(other.id);
2019-06-10 07:47:02 +00:00
}