GroupPermission addMemberPermission,
GroupPermission editDetailsPermission,
File avatarFile,
- Integer expirationTimer
+ Integer expirationTimer,
+ Boolean isAnnouncementGroup
) throws IOException, GroupNotFoundException, AttachmentInvalidException, InvalidNumberException, NotAGroupMemberException {
return updateGroup(groupId,
name,
addMemberPermission,
editDetailsPermission,
avatarFile,
- expirationTimer);
+ expirationTimer,
+ isAnnouncementGroup);
}
private Pair<Long, List<SendMessageResult>> updateGroup(
final GroupPermission addMemberPermission,
final GroupPermission editDetailsPermission,
final File avatarFile,
- final Integer expirationTimer
+ final Integer expirationTimer,
+ final Boolean isAnnouncementGroup
) throws IOException, GroupNotFoundException, AttachmentInvalidException, NotAGroupMemberException {
var group = getGroupForUpdating(groupId);
addMemberPermission,
editDetailsPermission,
avatarFile,
- expirationTimer);
+ expirationTimer,
+ isAnnouncementGroup);
} catch (ConflictException e) {
// Detected conflicting update, refreshing group and trying again
group = getGroup(groupId, true);
addMemberPermission,
editDetailsPermission,
avatarFile,
- expirationTimer);
+ expirationTimer,
+ isAnnouncementGroup);
}
}
final GroupPermission addMemberPermission,
final GroupPermission editDetailsPermission,
final File avatarFile,
- Integer expirationTimer
+ final Integer expirationTimer,
+ final Boolean isAnnouncementGroup
) throws IOException {
Pair<Long, List<SendMessageResult>> result = null;
if (group.isPendingMember(account.getSelfRecipientId())) {
result = sendUpdateGroupV2Message(group, groupGroupChangePair.first(), groupGroupChangePair.second());
}
+ if (isAnnouncementGroup != null) {
+ var groupGroupChangePair = groupV2Helper.setIsAnnouncementGroup(group, isAnnouncementGroup);
+ result = sendUpdateGroupV2Message(group, groupGroupChangePair.first(), groupGroupChangePair.second());
+ }
+
if (name != null || description != null || avatarFile != null) {
var groupGroupChangePair = groupV2Helper.updateGroup(group, name, description, avatarFile);
if (avatarFile != null) {
return commitChange(groupInfoV2, change);
}
+ public Pair<DecryptedGroup, GroupChange> setIsAnnouncementGroup(
+ GroupInfoV2 groupInfoV2, boolean isAnnouncementGroup
+ ) throws IOException {
+ final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
+ final var change = groupOperations.createAnnouncementGroupChange(isAnnouncementGroup);
+ return commitChange(groupInfoV2, change);
+ }
+
private AccessControl.AccessRequired toAccessControl(final GroupLinkState state) {
switch (state) {
case DISABLED:
*--set-permission-edit-details* PERMISSION::
Set permission to edit group details: `every-member`, `only-admins`
+*--set-permission-send-messages* PERMISSION::
+Set permission to send messages in group: `every-member`, `only-admins`
+Groups where only admins can send messages are also called announcement groups
+
*-e* EXPIRATION_SECONDS, *--expiration* EXPIRATION_SECONDS::
Set expiration time of messages (seconds).
To disable expiration set expiration time to 0.
subparser.addArgument("--set-permission-edit-details")
.help("Set permission to edit group details")
.choices("every-member", "only-admins");
+ subparser.addArgument("--set-permission-send-messages")
+ .help("Set permission to send messages")
+ .choices("every-member", "only-admins");
subparser.addArgument("-e", "--expiration").type(int.class).help("Set expiration time of messages (seconds)");
}
var groupExpiration = ns.getInt("expiration");
var groupAddMemberPermission = getGroupPermission(ns.getString("set-permission-add-member"));
var groupEditDetailsPermission = getGroupPermission(ns.getString("set-permission-edit-details"));
+ var groupSendMessagesPermission = getGroupPermission(ns.getString("set-permission-send-messages"));
try {
boolean isNewGroup = false;
groupAddMemberPermission,
groupEditDetailsPermission,
groupAvatar == null ? null : new File(groupAvatar),
- groupExpiration);
+ groupExpiration,
+ groupSendMessagesPermission == null
+ ? null
+ : groupSendMessagesPermission == GroupPermission.ONLY_ADMINS);
Long timestamp = null;
if (results != null) {
timestamp = results.first();