Reexport dbus objects when self number changes

This commit is contained in:
AsamK 2022-02-11 17:59:02 +01:00
parent 796f4d0d96
commit f207c2abc3
5 changed files with 36 additions and 9 deletions

View file

@ -261,6 +261,8 @@ public interface Manager extends Closeable {
*/
boolean trustIdentityAllKeys(RecipientIdentifier.Single recipient) throws UnregisteredRecipientException;
void addAddressChangedListener(Runnable listener);
void addClosedListener(Runnable listener);
@Override

View file

@ -109,6 +109,7 @@ class ManagerImpl implements Manager {
private final Set<ReceiveMessageHandler> weakHandlers = new HashSet<>();
private final Set<ReceiveMessageHandler> messageHandlers = new HashSet<>();
private final List<Runnable> closedListeners = new ArrayList<>();
private final List<Runnable> addressChangedListeners = new ArrayList<>();
private final CompositeDisposable disposable = new CompositeDisposable();
ManagerImpl(
@ -139,12 +140,12 @@ class ManagerImpl implements Manager {
final var attachmentStore = new AttachmentStore(pathConfig.attachmentsPath());
final var stickerPackStore = new StickerPackStore(pathConfig.stickerPacksPath());
this.context = new Context(account,
accountFileUpdater,
dependencies,
avatarStore,
attachmentStore,
stickerPackStore);
this.context = new Context(account, (number, aci) -> {
accountFileUpdater.updateAccountIdentifiers(number, aci);
synchronized (addressChangedListeners) {
addressChangedListeners.forEach(Runnable::run);
}
}, dependencies, avatarStore, attachmentStore, stickerPackStore);
this.context.getAccountHelper().setUnregisteredListener(this::close);
this.context.getReceiveHelper().setAuthenticationFailureListener(this::close);
this.context.getReceiveHelper().setCaughtUpWithOldMessagesListener(() -> {
@ -998,6 +999,13 @@ class ManagerImpl implements Manager {
return updated;
}
@Override
public void addAddressChangedListener(final Runnable listener) {
synchronized (addressChangedListeners) {
addressChangedListeners.add(listener);
}
}
@Override
public void addClosedListener(final Runnable listener) {
synchronized (closedListeners) {

View file

@ -314,7 +314,6 @@ public class DaemonCommand implements MultiLocalCommand, LocalCommand {
}
} catch (DBusException ignored) {
}
connection.unExportObject(path);
});
final var initThreads = c.getManagers()
@ -370,7 +369,6 @@ public class DaemonCommand implements MultiLocalCommand, LocalCommand {
final DBusConnection conn, final String objectPath, final Manager m, final boolean noReceiveOnStart
) throws DBusException {
final var signal = new DbusSignalImpl(m, conn, objectPath, noReceiveOnStart);
conn.exportObject(signal);
final var initThread = new Thread(signal::initObjects);
initThread.setName("dbus-init");
initThread.start();

View file

@ -621,6 +621,10 @@ public class DbusManagerImpl implements Manager {
throw new UnsupportedOperationException();
}
@Override
public void addAddressChangedListener(final Runnable listener) {
}
@Override
public void addClosedListener(final Runnable listener) {
synchronized (closedListeners) {

View file

@ -3,7 +3,6 @@ package org.asamk.signal.dbus;
import org.asamk.Signal;
import org.asamk.signal.BaseConfig;
import org.asamk.signal.manager.Manager;
import org.asamk.signal.manager.api.StickerPackInvalidException;
import org.asamk.signal.manager.api.AttachmentInvalidException;
import org.asamk.signal.manager.api.Identity;
import org.asamk.signal.manager.api.InactiveGroupLinkException;
@ -16,6 +15,7 @@ import org.asamk.signal.manager.api.Pair;
import org.asamk.signal.manager.api.RecipientIdentifier;
import org.asamk.signal.manager.api.SendMessageResult;
import org.asamk.signal.manager.api.SendMessageResults;
import org.asamk.signal.manager.api.StickerPackInvalidException;
import org.asamk.signal.manager.api.TypingAction;
import org.asamk.signal.manager.api.UnregisteredRecipientException;
import org.asamk.signal.manager.api.UpdateGroup;
@ -79,12 +79,22 @@ public class DbusSignalImpl implements Signal {
this.connection = connection;
this.objectPath = objectPath;
this.noReceiveOnStart = noReceiveOnStart;
m.addAddressChangedListener(() -> {
unExportObjects();
exportObjects();
});
}
public void initObjects() {
exportObjects();
if (!noReceiveOnStart) {
subscribeReceive();
}
}
private void exportObjects() {
exportObject(this);
updateDevices();
updateGroups();
@ -96,9 +106,14 @@ public class DbusSignalImpl implements Signal {
m.removeReceiveHandler(dbusMessageHandler);
dbusMessageHandler = null;
}
unExportObjects();
}
private void unExportObjects() {
unExportDevices();
unExportGroups();
unExportConfiguration();
connection.unExportObject(this.objectPath);
}
@Override