mirror of
https://github.com/AsamK/signal-cli
synced 2025-08-29 10:30:38 +00:00
parent
17596795c2
commit
5a97b9e134
3 changed files with 45 additions and 27 deletions
|
@ -79,6 +79,12 @@ public class GroupHelper {
|
||||||
return getGroup(groupId, false);
|
return getGroup(groupId, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<GroupInfo> getGroups() {
|
||||||
|
final var groups = account.getGroupStore().getGroups();
|
||||||
|
groups.forEach(group -> fillOrUpdateGroup(group, false));
|
||||||
|
return groups;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isGroupBlocked(final GroupId groupId) {
|
public boolean isGroupBlocked(final GroupId groupId) {
|
||||||
var group = getGroup(groupId);
|
var group = getGroup(groupId);
|
||||||
return group != null && group.isBlocked();
|
return group != null && group.isBlocked();
|
||||||
|
@ -382,34 +388,46 @@ public class GroupHelper {
|
||||||
|
|
||||||
private GroupInfo getGroup(GroupId groupId, boolean forceUpdate) {
|
private GroupInfo getGroup(GroupId groupId, boolean forceUpdate) {
|
||||||
final var group = account.getGroupStore().getGroup(groupId);
|
final var group = account.getGroupStore().getGroup(groupId);
|
||||||
if (group instanceof GroupInfoV2 groupInfoV2) {
|
fillOrUpdateGroup(group, forceUpdate);
|
||||||
if (forceUpdate || (!groupInfoV2.isPermissionDenied() && groupInfoV2.getGroup() == null)) {
|
|
||||||
final var groupSecretParams = GroupSecretParams.deriveFromMasterKey(groupInfoV2.getMasterKey());
|
|
||||||
DecryptedGroup decryptedGroup;
|
|
||||||
try {
|
|
||||||
decryptedGroup = context.getGroupV2Helper().getDecryptedGroup(groupSecretParams);
|
|
||||||
} catch (NotAGroupMemberException e) {
|
|
||||||
groupInfoV2.setPermissionDenied(true);
|
|
||||||
decryptedGroup = null;
|
|
||||||
}
|
|
||||||
if (decryptedGroup != null) {
|
|
||||||
try {
|
|
||||||
storeProfileKeysFromHistory(groupSecretParams, groupInfoV2, decryptedGroup);
|
|
||||||
} catch (NotAGroupMemberException ignored) {
|
|
||||||
}
|
|
||||||
storeProfileKeysFromMembers(decryptedGroup);
|
|
||||||
final var avatar = decryptedGroup.avatar;
|
|
||||||
if (!avatar.isEmpty()) {
|
|
||||||
downloadGroupAvatar(groupInfoV2.getGroupId(), groupSecretParams, avatar);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
groupInfoV2.setGroup(decryptedGroup);
|
|
||||||
account.getGroupStore().updateGroup(group);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return group;
|
return group;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void fillOrUpdateGroup(final GroupInfo group, final boolean forceUpdate) {
|
||||||
|
if (!(group instanceof GroupInfoV2 groupInfoV2)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!forceUpdate && (groupInfoV2.isPermissionDenied() || groupInfoV2.getGroup() != null)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final var groupSecretParams = GroupSecretParams.deriveFromMasterKey(groupInfoV2.getMasterKey());
|
||||||
|
DecryptedGroup decryptedGroup;
|
||||||
|
try {
|
||||||
|
decryptedGroup = context.getGroupV2Helper().getDecryptedGroup(groupSecretParams);
|
||||||
|
} catch (NotAGroupMemberException e) {
|
||||||
|
groupInfoV2.setPermissionDenied(true);
|
||||||
|
account.getGroupStore().updateGroup(group);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (decryptedGroup == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
storeProfileKeysFromHistory(groupSecretParams, groupInfoV2, decryptedGroup);
|
||||||
|
} catch (NotAGroupMemberException ignored) {
|
||||||
|
}
|
||||||
|
storeProfileKeysFromMembers(decryptedGroup);
|
||||||
|
final var avatar = decryptedGroup.avatar;
|
||||||
|
if (!avatar.isEmpty()) {
|
||||||
|
downloadGroupAvatar(groupInfoV2.getGroupId(), groupSecretParams, avatar);
|
||||||
|
}
|
||||||
|
groupInfoV2.setGroup(decryptedGroup);
|
||||||
|
account.getGroupStore().updateGroup(group);
|
||||||
|
}
|
||||||
|
|
||||||
private void downloadGroupAvatar(GroupIdV2 groupId, GroupSecretParams groupSecretParams, String cdnKey) {
|
private void downloadGroupAvatar(GroupIdV2 groupId, GroupSecretParams groupSecretParams, String cdnKey) {
|
||||||
try {
|
try {
|
||||||
context.getAvatarStore()
|
context.getAvatarStore()
|
||||||
|
|
|
@ -261,7 +261,7 @@ public class SendHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
final var groupId = messageSendLogEntry.groupId().get();
|
final var groupId = messageSendLogEntry.groupId().get();
|
||||||
final var group = account.getGroupStore().getGroup(groupId);
|
final var group = context.getGroupHelper().getGroup(groupId);
|
||||||
|
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
logger.debug("Could not find a matching group for the groupId {}! Skipping message send.",
|
logger.debug("Could not find a matching group for the groupId {}! Skipping message send.",
|
||||||
|
|
|
@ -511,7 +511,7 @@ public class ManagerImpl implements Manager {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Group> getGroups() {
|
public List<Group> getGroups() {
|
||||||
return account.getGroupStore().getGroups().stream().map(this::toGroup).toList();
|
return context.getGroupHelper().getGroups().stream().map(this::toGroup).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Group toGroup(final GroupInfo groupInfo) {
|
private Group toGroup(final GroupInfo groupInfo) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue