package org.asamk.signal.manager.api;
-import org.asamk.signal.manager.groups.GroupId;
-import org.asamk.signal.manager.groups.GroupInviteLinkUrl;
-import org.asamk.signal.manager.storage.recipients.RecipientAddress;
+import org.asamk.signal.manager.helper.RecipientAddressResolver;
+import org.asamk.signal.manager.storage.groups.GroupInfo;
+import org.asamk.signal.manager.storage.recipients.RecipientId;
import java.util.Set;
-
-public class Group {
-
- private final GroupId groupId;
- private final String title;
- private final String description;
- private final GroupInviteLinkUrl groupInviteLinkUrl;
- private final Set<RecipientAddress> members;
- private final Set<RecipientAddress> pendingMembers;
- private final Set<RecipientAddress> requestingMembers;
- private final Set<RecipientAddress> adminMembers;
- private final boolean isBlocked;
- private final int messageExpirationTime;
- private final boolean isAnnouncementGroup;
- private final boolean isMember;
-
- public Group(
- final GroupId groupId,
- final String title,
- final String description,
- final GroupInviteLinkUrl groupInviteLinkUrl,
- final Set<RecipientAddress> members,
- final Set<RecipientAddress> pendingMembers,
- final Set<RecipientAddress> requestingMembers,
- final Set<RecipientAddress> adminMembers,
- final boolean isBlocked,
- final int messageExpirationTime,
- final boolean isAnnouncementGroup,
- final boolean isMember
+import java.util.stream.Collectors;
+
+public record Group(
+ GroupId groupId,
+ String title,
+ String description,
+ GroupInviteLinkUrl groupInviteLinkUrl,
+ Set<RecipientAddress> members,
+ Set<RecipientAddress> pendingMembers,
+ Set<RecipientAddress> requestingMembers,
+ Set<RecipientAddress> adminMembers,
+ Set<RecipientAddress> bannedMembers,
+ boolean isBlocked,
+ int messageExpirationTimer,
+ GroupPermission permissionAddMember,
+ GroupPermission permissionEditDetails,
+ GroupPermission permissionSendMessage,
+ boolean isMember,
+ boolean isAdmin
+) {
+
+ public static Group from(
+ final GroupInfo groupInfo,
+ final RecipientAddressResolver recipientStore,
+ final RecipientId selfRecipientId
) {
- this.groupId = groupId;
- this.title = title;
- this.description = description;
- this.groupInviteLinkUrl = groupInviteLinkUrl;
- this.members = members;
- this.pendingMembers = pendingMembers;
- this.requestingMembers = requestingMembers;
- this.adminMembers = adminMembers;
- this.isBlocked = isBlocked;
- this.messageExpirationTime = messageExpirationTime;
- this.isAnnouncementGroup = isAnnouncementGroup;
- this.isMember = isMember;
- }
-
- public GroupId getGroupId() {
- return groupId;
- }
-
- public String getTitle() {
- return title;
- }
-
- public String getDescription() {
- return description;
- }
-
- public GroupInviteLinkUrl getGroupInviteLinkUrl() {
- return groupInviteLinkUrl;
- }
-
- public Set<RecipientAddress> getMembers() {
- return members;
- }
-
- public Set<RecipientAddress> getPendingMembers() {
- return pendingMembers;
- }
-
- public Set<RecipientAddress> getRequestingMembers() {
- return requestingMembers;
- }
-
- public Set<RecipientAddress> getAdminMembers() {
- return adminMembers;
- }
-
- public boolean isBlocked() {
- return isBlocked;
- }
-
- public int getMessageExpirationTime() {
- return messageExpirationTime;
- }
-
- public boolean isAnnouncementGroup() {
- return isAnnouncementGroup;
- }
-
- public boolean isMember() {
- return isMember;
+ return new Group(groupInfo.getGroupId(),
+ groupInfo.getTitle(),
+ groupInfo.getDescription(),
+ groupInfo.getGroupInviteLink(),
+ groupInfo.getMembers()
+ .stream()
+ .map(recipientStore::resolveRecipientAddress)
+ .map(org.asamk.signal.manager.storage.recipients.RecipientAddress::toApiRecipientAddress)
+ .collect(Collectors.toSet()),
+ groupInfo.getPendingMembers()
+ .stream()
+ .map(recipientStore::resolveRecipientAddress)
+ .map(org.asamk.signal.manager.storage.recipients.RecipientAddress::toApiRecipientAddress)
+ .collect(Collectors.toSet()),
+ groupInfo.getRequestingMembers()
+ .stream()
+ .map(recipientStore::resolveRecipientAddress)
+ .map(org.asamk.signal.manager.storage.recipients.RecipientAddress::toApiRecipientAddress)
+ .collect(Collectors.toSet()),
+ groupInfo.getAdminMembers()
+ .stream()
+ .map(recipientStore::resolveRecipientAddress)
+ .map(org.asamk.signal.manager.storage.recipients.RecipientAddress::toApiRecipientAddress)
+ .collect(Collectors.toSet()),
+ groupInfo.getBannedMembers()
+ .stream()
+ .map(recipientStore::resolveRecipientAddress)
+ .map(org.asamk.signal.manager.storage.recipients.RecipientAddress::toApiRecipientAddress)
+ .collect(Collectors.toSet()),
+ groupInfo.isBlocked(),
+ groupInfo.getMessageExpirationTimer(),
+ groupInfo.getPermissionAddMember(),
+ groupInfo.getPermissionEditDetails(),
+ groupInfo.getPermissionSendMessage(),
+ groupInfo.isMember(selfRecipientId),
+ groupInfo.isAdmin(selfRecipientId));
}
}