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

@ -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