]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java
Reexport dbus objects when self number changes
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / ManagerImpl.java
index 742be52017d1ab093b9f9d1f0f76eeba56d5319c..fa50071209c141b5bc96aeee6eccad64bfa92ecf 100644 (file)
@@ -70,7 +70,6 @@ import org.whispersystems.signalservice.api.messages.SignalServiceTypingMessage;
 import org.whispersystems.signalservice.api.util.DeviceNameUtil;
 import org.whispersystems.signalservice.api.util.InvalidNumberException;
 import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
-import org.whispersystems.signalservice.internal.util.DynamicCredentialsProvider;
 import org.whispersystems.signalservice.internal.util.Hex;
 import org.whispersystems.signalservice.internal.util.Util;
 
@@ -100,7 +99,6 @@ class ManagerImpl implements Manager {
     private final static Logger logger = LoggerFactory.getLogger(ManagerImpl.class);
 
     private SignalAccount account;
-    private final AccountFileUpdater accountFileUpdater;
     private final SignalDependencies dependencies;
     private final Context context;
 
@@ -111,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(
@@ -121,12 +120,7 @@ class ManagerImpl implements Manager {
             String userAgent
     ) {
         this.account = account;
-        this.accountFileUpdater = accountFileUpdater;
 
-        final var credentialsProvider = new DynamicCredentialsProvider(account.getAci(),
-                account.getNumber(),
-                account.getPassword(),
-                account.getDeviceId());
         final var sessionLock = new SignalSessionLock() {
             private final ReentrantLock LEGACY_LOCK = new ReentrantLock();
 
@@ -138,7 +132,7 @@ class ManagerImpl implements Manager {
         };
         this.dependencies = new SignalDependencies(serviceEnvironmentConfig,
                 userAgent,
-                credentialsProvider,
+                account.getCredentialsProvider(),
                 account.getSignalProtocolStore(),
                 executor,
                 sessionLock);
@@ -146,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(() -> {
@@ -1005,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) {