*/
boolean trustIdentityAllKeys(RecipientIdentifier.Single recipient) throws UnregisteredRecipientException;
+ void addAddressChangedListener(Runnable listener);
+
void addClosedListener(Runnable listener);
@Override
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(
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(() -> {
return updated;
}
+ @Override
+ public void addAddressChangedListener(final Runnable listener) {
+ synchronized (addressChangedListeners) {
+ addressChangedListeners.add(listener);
+ }
+ }
+
@Override
public void addClosedListener(final Runnable listener) {
synchronized (closedListeners) {
}
} catch (DBusException ignored) {
}
- connection.unExportObject(path);
});
final var initThreads = c.getManagers()
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();
throw new UnsupportedOperationException();
}
+ @Override
+ public void addAddressChangedListener(final Runnable listener) {
+ }
+
@Override
public void addClosedListener(final Runnable listener) {
synchronized (closedListeners) {
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;
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;
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();
m.removeReceiveHandler(dbusMessageHandler);
dbusMessageHandler = null;
}
+ unExportObjects();
+ }
+
+ private void unExportObjects() {
unExportDevices();
unExportGroups();
unExportConfiguration();
+ connection.unExportObject(this.objectPath);
}
@Override