mirror of
https://github.com/AsamK/signal-cli
synced 2025-08-29 02:20:39 +00:00
Reexport dbus objects when self number changes
This commit is contained in:
parent
796f4d0d96
commit
f207c2abc3
5 changed files with 36 additions and 9 deletions
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue