mirror of
https://github.com/AsamK/signal-cli.git
synced 2026-03-14 02:30:15 +00:00
Support receiving admin delete messages
This commit is contained in:
parent
54ff59737e
commit
6d22ceef24
@ -122,7 +122,8 @@ public record MessageEnvelope(
|
||||
List<Preview> previews,
|
||||
List<TextStyle> textStyles,
|
||||
Optional<PinMessage> pinMessage,
|
||||
Optional<UnpinMessage> unpinMessage
|
||||
Optional<UnpinMessage> unpinMessage,
|
||||
Optional<AdminDelete> adminDelete
|
||||
) {
|
||||
|
||||
static Data from(
|
||||
@ -173,8 +174,8 @@ public record MessageEnvelope(
|
||||
.map(a -> a.stream().filter(r -> r.style != null).map(TextStyle::from).toList())
|
||||
.orElse(List.of()),
|
||||
dataMessage.getPinnedMessage().map(p -> PinMessage.from(p, recipientResolver, addressResolver)),
|
||||
dataMessage.getUnpinnedMessage()
|
||||
.map(p -> UnpinMessage.from(p, recipientResolver, addressResolver)));
|
||||
dataMessage.getUnpinnedMessage().map(p -> UnpinMessage.from(p, recipientResolver, addressResolver)),
|
||||
dataMessage.getAdminDelete().map(p -> AdminDelete.from(p, recipientResolver, addressResolver)));
|
||||
}
|
||||
|
||||
public record GroupContext(GroupId groupId, boolean isGroupUpdate, int revision) {
|
||||
@ -602,6 +603,18 @@ public record MessageEnvelope(
|
||||
}
|
||||
}
|
||||
|
||||
public record AdminDelete(RecipientAddress targetAuthor, long targetSentTimestamp) {
|
||||
|
||||
static AdminDelete from(
|
||||
SignalServiceDataMessage.AdminDelete adminDelete,
|
||||
RecipientResolver recipientResolver,
|
||||
RecipientAddressResolver addressResolver
|
||||
) {
|
||||
return new AdminDelete(addressResolver.resolveRecipientAddress(recipientResolver.resolveRecipient(
|
||||
adminDelete.getTargetAuthor())).toApiRecipientAddress(), adminDelete.getTargetSentTimestamp());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public record Edit(long targetSentTimestamp, Data dataMessage) {
|
||||
|
||||
@ -709,15 +709,21 @@ public final class IncomingMessageHandler {
|
||||
}
|
||||
}
|
||||
|
||||
var groupId = GroupUtils.getGroupId(groupContext);
|
||||
var group = context.getGroupHelper().getGroup(groupId);
|
||||
final var message = content.getDataMessage().orElse(null);
|
||||
|
||||
final var recipientId = account.getRecipientResolver().resolveRecipient(source);
|
||||
|
||||
final var groupId = GroupUtils.getGroupId(groupContext);
|
||||
final var group = context.getGroupHelper().getGroup(groupId);
|
||||
|
||||
if (message != null && message.getAdminDelete().isPresent() && (group == null || !group.isAdmin(recipientId))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (group == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
final var message = content.getDataMessage().orElse(null);
|
||||
|
||||
final var recipientId = account.getRecipientResolver().resolveRecipient(source);
|
||||
if (!group.isMember(recipientId) && !(
|
||||
group.isPendingMember(recipientId) && message != null && message.isGroupV2Update()
|
||||
)) {
|
||||
|
||||
@ -224,6 +224,11 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
|
||||
final var unpinMessage = message.unpinMessage().get();
|
||||
printUnpinMessage(writer.indentedWriter(), unpinMessage);
|
||||
}
|
||||
if (message.adminDelete().isPresent()) {
|
||||
writer.println("Admin Delete:");
|
||||
final var adminDelete = message.adminDelete().get();
|
||||
printAdminDelete(writer.indentedWriter(), adminDelete);
|
||||
}
|
||||
}
|
||||
|
||||
private void printEditMessage(PlainTextWriter writer, MessageEnvelope.Edit message) {
|
||||
@ -648,6 +653,11 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
|
||||
writer.println("Target timestamp: {}", DateUtils.formatTimestamp(unpinMessage.targetSentTimestamp()));
|
||||
}
|
||||
|
||||
private void printAdminDelete(final PlainTextWriter writer, final MessageEnvelope.Data.AdminDelete adminDelete) {
|
||||
writer.println("Target author: {}", formatContact(adminDelete.targetAuthor()));
|
||||
writer.println("Target timestamp: {}", DateUtils.formatTimestamp(adminDelete.targetSentTimestamp()));
|
||||
}
|
||||
|
||||
private String formatContact(RecipientAddress address) {
|
||||
final var number = address.getLegacyIdentifier();
|
||||
final var name = m.getContactOrProfileName(RecipientIdentifier.Single.fromAddress(address));
|
||||
|
||||
@ -979,6 +979,7 @@ public class DbusManagerImpl implements Manager {
|
||||
List.of(),
|
||||
List.of(),
|
||||
Optional.empty(),
|
||||
Optional.empty(),
|
||||
Optional.empty())),
|
||||
Optional.empty(),
|
||||
Optional.empty(),
|
||||
@ -1027,6 +1028,7 @@ public class DbusManagerImpl implements Manager {
|
||||
List.of(),
|
||||
List.of(),
|
||||
Optional.empty(),
|
||||
Optional.empty(),
|
||||
Optional.empty()))),
|
||||
Optional.empty(),
|
||||
Optional.empty(),
|
||||
@ -1107,6 +1109,7 @@ public class DbusManagerImpl implements Manager {
|
||||
List.of(),
|
||||
List.of(),
|
||||
Optional.empty(),
|
||||
Optional.empty(),
|
||||
Optional.empty())),
|
||||
Optional.empty(),
|
||||
Optional.empty())),
|
||||
|
||||
21
src/main/java/org/asamk/signal/json/JsonAdminDelete.java
Normal file
21
src/main/java/org/asamk/signal/json/JsonAdminDelete.java
Normal file
@ -0,0 +1,21 @@
|
||||
package org.asamk.signal.json;
|
||||
|
||||
import org.asamk.signal.manager.api.MessageEnvelope;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public record JsonAdminDelete(
|
||||
@Deprecated String targetAuthor, String targetAuthorNumber, String targetAuthorUuid, long targetSentTimestamp
|
||||
) {
|
||||
|
||||
static JsonAdminDelete from(MessageEnvelope.Data.AdminDelete adminDelete) {
|
||||
final var address = adminDelete.targetAuthor();
|
||||
final var targetAuthor = address.getLegacyIdentifier();
|
||||
final var targetAuthorNumber = address.number().orElse(null);
|
||||
final var targetAuthorUuid = address.uuid().map(UUID::toString).orElse(null);
|
||||
final var targetSentTimestamp = adminDelete.targetSentTimestamp();
|
||||
|
||||
return new JsonAdminDelete(targetAuthor, targetAuthorNumber, targetAuthorUuid, targetSentTimestamp);
|
||||
}
|
||||
}
|
||||
|
||||
@ -29,7 +29,8 @@ record JsonDataMessage(
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL) JsonGroupInfo groupInfo,
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL) JsonStoryContext storyContext,
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL) JsonPinMessage pinMessage,
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL) JsonUnpinMessage unpinMessage
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL) JsonUnpinMessage unpinMessage,
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL) JsonAdminDelete adminDelete
|
||||
) {
|
||||
|
||||
static JsonDataMessage from(MessageEnvelope.Data dataMessage, Manager m) {
|
||||
@ -75,6 +76,7 @@ record JsonDataMessage(
|
||||
.toList() : null;
|
||||
final var pinMessage = dataMessage.pinMessage().map(JsonPinMessage::from).orElse(null);
|
||||
final var unpinMessage = dataMessage.unpinMessage().map(JsonUnpinMessage::from).orElse(null);
|
||||
final var adminDelete = dataMessage.adminDelete().map(JsonAdminDelete::from).orElse(null);
|
||||
|
||||
return new JsonDataMessage(timestamp,
|
||||
message,
|
||||
@ -97,6 +99,7 @@ record JsonDataMessage(
|
||||
groupInfo,
|
||||
storyContext,
|
||||
pinMessage,
|
||||
unpinMessage);
|
||||
unpinMessage,
|
||||
adminDelete);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2225,6 +2225,9 @@
|
||||
{
|
||||
"type": "org.asamk.signal.dbus.DbusSignalImpl$DbusSignalIdentityImpl"
|
||||
},
|
||||
{
|
||||
"type": "org.asamk.signal.json.JsonAdminDelete"
|
||||
},
|
||||
{
|
||||
"type": "org.asamk.signal.json.JsonAttachment",
|
||||
"allDeclaredFields": true,
|
||||
@ -5920,6 +5923,10 @@
|
||||
"type": "org.signal.libsignal.protocol.state.internal.PreKeyStore",
|
||||
"jniAccessible": true
|
||||
},
|
||||
{
|
||||
"type": "org.signal.libsignal.protocol.state.internal.SignedPreKeyStore",
|
||||
"jniAccessible": true
|
||||
},
|
||||
{
|
||||
"type": "org.signal.libsignal.usernames.BadDiscriminatorCharacterException",
|
||||
"jniAccessible": true,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user