Add setIgnoreAttachments method

This commit is contained in:
AsamK 2021-10-21 21:01:48 +02:00
parent 3636023cb8
commit f5ba7894ae
6 changed files with 32 additions and 33 deletions

View file

@ -194,13 +194,11 @@ public interface Manager extends Closeable {
void requestAllSyncData() throws IOException;
void receiveMessages(
long timeout,
TimeUnit unit,
boolean returnOnTimeout,
boolean ignoreAttachments,
ReceiveMessageHandler handler
long timeout, TimeUnit unit, boolean returnOnTimeout, ReceiveMessageHandler handler
) throws IOException;
void setIgnoreAttachments(boolean ignoreAttachments);
boolean hasCaughtUpWithOldMessages();
boolean isContactBlocked(RecipientIdentifier.Single recipient);

View file

@ -135,6 +135,7 @@ public class ManagerImpl implements Manager {
private final Context context;
private boolean hasCaughtUpWithOldMessages = false;
private boolean ignoreAttachments = false;
ManagerImpl(
SignalAccount account,
@ -824,10 +825,10 @@ public class ManagerImpl implements Manager {
return registeredUsers;
}
private void retryFailedReceivedMessages(ReceiveMessageHandler handler, boolean ignoreAttachments) {
private void retryFailedReceivedMessages(ReceiveMessageHandler handler) {
Set<HandleAction> queuedActions = new HashSet<>();
for (var cachedMessage : account.getMessageCache().getCachedMessages()) {
var actions = retryFailedReceivedMessage(handler, ignoreAttachments, cachedMessage);
var actions = retryFailedReceivedMessage(handler, cachedMessage);
if (actions != null) {
queuedActions.addAll(actions);
}
@ -836,7 +837,7 @@ public class ManagerImpl implements Manager {
}
private List<HandleAction> retryFailedReceivedMessage(
final ReceiveMessageHandler handler, final boolean ignoreAttachments, final CachedMessage cachedMessage
final ReceiveMessageHandler handler, final CachedMessage cachedMessage
) {
var envelope = cachedMessage.loadEnvelope();
if (envelope == null) {
@ -873,13 +874,9 @@ public class ManagerImpl implements Manager {
@Override
public void receiveMessages(
long timeout,
TimeUnit unit,
boolean returnOnTimeout,
boolean ignoreAttachments,
ReceiveMessageHandler handler
long timeout, TimeUnit unit, boolean returnOnTimeout, ReceiveMessageHandler handler
) throws IOException {
retryFailedReceivedMessages(handler, ignoreAttachments);
retryFailedReceivedMessages(handler);
Set<HandleAction> queuedActions = new HashSet<>();
@ -980,6 +977,11 @@ public class ManagerImpl implements Manager {
queuedActions.clear();
}
@Override
public void setIgnoreAttachments(final boolean ignoreAttachments) {
this.ignoreAttachments = ignoreAttachments;
}
@Override
public boolean hasCaughtUpWithOldMessages() {
return hasCaughtUpWithOldMessages;

View file

@ -55,6 +55,7 @@ public class DaemonCommand implements MultiLocalCommand {
final Namespace ns, final Manager m, final OutputWriter outputWriter
) throws CommandException {
boolean ignoreAttachments = Boolean.TRUE.equals(ns.getBoolean("ignore-attachments"));
m.setIgnoreAttachments(ignoreAttachments);
DBusConnection.DBusBusType busType;
if (Boolean.TRUE.equals(ns.getBoolean("system"))) {
@ -65,7 +66,7 @@ public class DaemonCommand implements MultiLocalCommand {
try (var conn = DBusConnection.getConnection(busType)) {
var objectPath = DbusConfig.getObjectPath();
var t = run(conn, objectPath, m, outputWriter, ignoreAttachments);
var t = run(conn, objectPath, m, outputWriter);
conn.requestBusName(DbusConfig.getBusname());
@ -94,9 +95,10 @@ public class DaemonCommand implements MultiLocalCommand {
try (var conn = DBusConnection.getConnection(busType)) {
final var signalControl = new DbusSignalControlImpl(c, m -> {
m.setIgnoreAttachments(ignoreAttachments);
try {
final var objectPath = DbusConfig.getObjectPath(m.getSelfNumber());
return run(conn, objectPath, m, outputWriter, ignoreAttachments);
return run(conn, objectPath, m, outputWriter);
} catch (DBusException e) {
logger.error("Failed to export object", e);
return null;
@ -118,7 +120,7 @@ public class DaemonCommand implements MultiLocalCommand {
}
private Thread run(
DBusConnection conn, String objectPath, Manager m, OutputWriter outputWriter, boolean ignoreAttachments
DBusConnection conn, String objectPath, Manager m, OutputWriter outputWriter
) throws DBusException {
final var signal = new DbusSignalImpl(m, conn, objectPath);
conn.exportObject(signal);
@ -133,7 +135,7 @@ public class DaemonCommand implements MultiLocalCommand {
final var receiveMessageHandler = outputWriter instanceof JsonWriter
? new JsonDbusReceiveMessageHandler(m, (JsonWriter) outputWriter, conn, objectPath)
: new DbusReceiveMessageHandler(m, (PlainTextWriter) outputWriter, conn, objectPath);
m.receiveMessages(1, TimeUnit.HOURS, false, ignoreAttachments, receiveMessageHandler);
m.receiveMessages(1, TimeUnit.HOURS, false, receiveMessageHandler);
break;
} catch (IOException e) {
logger.warn("Receiving messages failed, retrying", e);

View file

@ -66,6 +66,7 @@ public class JsonRpcDispatcherCommand implements LocalCommand {
final Namespace ns, final Manager m, final OutputWriter outputWriter
) throws CommandException {
final boolean ignoreAttachments = Boolean.TRUE.equals(ns.getBoolean("ignore-attachments"));
m.setIgnoreAttachments(ignoreAttachments);
final var objectMapper = Util.createJsonObjectMapper();
final var jsonRpcSender = new JsonRpcSender((JsonWriter) outputWriter);
@ -73,7 +74,7 @@ public class JsonRpcDispatcherCommand implements LocalCommand {
final var receiveThread = receiveMessages(s -> jsonRpcSender.sendRequest(JsonRpcRequest.forNotification(
"receive",
objectMapper.valueToTree(s),
null)), m, ignoreAttachments);
null)), m);
// Maybe this should be handled inside the Manager
while (!m.hasCaughtUpWithOldMessages()) {
@ -167,14 +168,12 @@ public class JsonRpcDispatcherCommand implements LocalCommand {
command.handleCommand(requestParams, m, outputWriter);
}
private Thread receiveMessages(
JsonWriter jsonWriter, Manager m, boolean ignoreAttachments
) {
private Thread receiveMessages(JsonWriter jsonWriter, Manager m) {
final var thread = new Thread(() -> {
while (!Thread.interrupted()) {
try {
final var receiveMessageHandler = new JsonReceiveMessageHandler(m, jsonWriter);
m.receiveMessages(1, TimeUnit.HOURS, false, ignoreAttachments, receiveMessageHandler);
m.receiveMessages(1, TimeUnit.HOURS, false, receiveMessageHandler);
break;
} catch (IOException e) {
logger.warn("Receiving messages failed, retrying", e);

View file

@ -148,14 +148,11 @@ public class ReceiveCommand implements ExtendedDbusCommand, LocalCommand {
timeout = 3600;
}
boolean ignoreAttachments = Boolean.TRUE.equals(ns.getBoolean("ignore-attachments"));
m.setIgnoreAttachments(ignoreAttachments);
try {
final var handler = outputWriter instanceof JsonWriter ? new JsonReceiveMessageHandler(m,
(JsonWriter) outputWriter) : new ReceiveMessageHandler(m, (PlainTextWriter) outputWriter);
m.receiveMessages((long) (timeout * 1000),
TimeUnit.MILLISECONDS,
returnOnTimeout,
ignoreAttachments,
handler);
m.receiveMessages((long) (timeout * 1000), TimeUnit.MILLISECONDS, returnOnTimeout, handler);
} catch (IOException e) {
throw new IOErrorException("Error while receiving messages: " + e.getMessage(), e);
}

View file

@ -425,15 +425,16 @@ public class DbusManagerImpl implements Manager {
@Override
public void receiveMessages(
final long timeout,
final TimeUnit unit,
final boolean returnOnTimeout,
final boolean ignoreAttachments,
final ReceiveMessageHandler handler
final long timeout, final TimeUnit unit, final boolean returnOnTimeout, final ReceiveMessageHandler handler
) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void setIgnoreAttachments(final boolean ignoreAttachments) {
throw new UnsupportedOperationException();
}
@Override
public boolean hasCaughtUpWithOldMessages() {
throw new UnsupportedOperationException();