From a22af8303a987905a3a6fb5ab78af11a2dc05b58 Mon Sep 17 00:00:00 2001 From: AsamK Date: Sun, 14 Sep 2025 18:24:07 +0200 Subject: [PATCH] Force a group refresh when using listGroups command with groupId Fixes #1802 --- .../main/java/org/asamk/signal/manager/Manager.java | 2 ++ .../org/asamk/signal/manager/helper/GroupHelper.java | 10 ++++++++++ .../org/asamk/signal/manager/internal/ManagerImpl.java | 5 +++++ .../org/asamk/signal/commands/ListGroupsCommand.java | 6 +----- .../java/org/asamk/signal/dbus/DbusManagerImpl.java | 10 ++++++++++ 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/lib/src/main/java/org/asamk/signal/manager/Manager.java b/lib/src/main/java/org/asamk/signal/manager/Manager.java index ccb661e1..c5ad447f 100644 --- a/lib/src/main/java/org/asamk/signal/manager/Manager.java +++ b/lib/src/main/java/org/asamk/signal/manager/Manager.java @@ -162,6 +162,8 @@ public interface Manager extends Closeable { List getGroups(); + List getGroups(Collection groupIds); + SendGroupMessageResults quitGroup( GroupId groupId, Set groupAdmins diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java index 5917787d..efc5f84e 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java @@ -92,6 +92,16 @@ public class GroupHelper { return groups; } + public List getGroups(Collection groupIds) { + final var groups = account.getGroupStore() + .getGroups() + .stream() + .filter(g -> groupIds.contains(g.getGroupId())) + .toList(); + groups.forEach(group -> fillOrUpdateGroup(group, true)); + return groups; + } + public boolean isGroupBlocked(final GroupId groupId) { var group = getGroup(groupId); return group != null && group.isBlocked(); diff --git a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java index 0a51515c..47b44b16 100644 --- a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java @@ -541,6 +541,11 @@ public class ManagerImpl implements Manager { return context.getGroupHelper().getGroups().stream().map(this::toGroup).toList(); } + @Override + public List getGroups(Collection groupIds) { + return context.getGroupHelper().getGroups(groupIds).stream().map(this::toGroup).toList(); + } + private Group toGroup(final GroupInfo groupInfo) { if (groupInfo == null) { return null; diff --git a/src/main/java/org/asamk/signal/commands/ListGroupsCommand.java b/src/main/java/org/asamk/signal/commands/ListGroupsCommand.java index 62bb4f14..77fe22eb 100644 --- a/src/main/java/org/asamk/signal/commands/ListGroupsCommand.java +++ b/src/main/java/org/asamk/signal/commands/ListGroupsCommand.java @@ -81,13 +81,9 @@ public class ListGroupsCommand implements JsonRpcLocalCommand { final Manager m, final OutputWriter outputWriter ) throws CommandException { - var groups = m.getGroups(); - final var groupIdStrings = ns.getList("group-id"); final var groupIds = CommandUtil.getGroupIds(groupIdStrings); - if (!groupIds.isEmpty()) { - groups = groups.stream().filter(g -> groupIds.contains(g.groupId())).toList(); - } + var groups = groupIds.isEmpty() ? m.getGroups() : m.getGroups(groupIds); switch (outputWriter) { case JsonWriter jsonWriter -> { diff --git a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java index 5658d0d3..9a037a4e 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java @@ -272,6 +272,16 @@ public class DbusManagerImpl implements Manager { return groups.stream().map(Signal.StructGroup::getObjectPath).map(this::getGroup).toList(); } + @Override + public List getGroups(final Collection groupIds) { + final var groups = signal.listGroups(); + return groups.stream() + .map(Signal.StructGroup::getObjectPath) + .map(this::getGroup) + .filter(g -> groupIds.contains(g.groupId())) + .toList(); + } + @Override public SendGroupMessageResults quitGroup( final GroupId groupId,