Allow sender to specify whether msg should trigger APN fallback
// FREEBIE
This commit is contained in:
parent
3c9963065d
commit
856e5eca4c
|
@ -217,7 +217,7 @@ public class MessageController {
|
|||
messageBuilder.setRelay(source.getRelay().get());
|
||||
}
|
||||
|
||||
pushSender.sendMessage(destinationAccount, destinationDevice, messageBuilder.build());
|
||||
pushSender.sendMessage(destinationAccount, destinationDevice, messageBuilder.build(), incomingMessage.isSilent());
|
||||
} catch (NotPushRegisteredException e) {
|
||||
if (destinationDevice.isMaster()) throw new NoSuchUserException(e);
|
||||
else logger.debug("Not registered", e);
|
||||
|
|
|
@ -45,6 +45,9 @@ public class IncomingMessage {
|
|||
@JsonProperty
|
||||
private long timestamp; // deprecated
|
||||
|
||||
@JsonProperty
|
||||
private boolean silent = false;
|
||||
|
||||
|
||||
public String getDestination() {
|
||||
return destination;
|
||||
|
@ -73,4 +76,8 @@ public class IncomingMessage {
|
|||
public String getContent() {
|
||||
return content;
|
||||
}
|
||||
|
||||
public boolean isSilent() {
|
||||
return silent;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,7 +68,7 @@ public class PushSender implements Managed {
|
|||
});
|
||||
}
|
||||
|
||||
public void sendMessage(final Account account, final Device device, final Envelope message)
|
||||
public void sendMessage(final Account account, final Device device, final Envelope message, final boolean silent)
|
||||
throws NotPushRegisteredException
|
||||
{
|
||||
if (device.getGcmId() == null && device.getApnId() == null && !device.getFetchesMessages()) {
|
||||
|
@ -79,11 +79,11 @@ public class PushSender implements Managed {
|
|||
executor.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
sendSynchronousMessage(account, device, message);
|
||||
sendSynchronousMessage(account, device, message, silent);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
sendSynchronousMessage(account, device, message);
|
||||
sendSynchronousMessage(account, device, message, silent);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -99,9 +99,9 @@ public class PushSender implements Managed {
|
|||
return webSocketSender;
|
||||
}
|
||||
|
||||
private void sendSynchronousMessage(Account account, Device device, Envelope message) {
|
||||
private void sendSynchronousMessage(Account account, Device device, Envelope message, boolean silent) {
|
||||
if (device.getGcmId() != null) sendGcmMessage(account, device, message);
|
||||
else if (device.getApnId() != null) sendApnMessage(account, device, message);
|
||||
else if (device.getApnId() != null) sendApnMessage(account, device, message, silent);
|
||||
else if (device.getFetchesMessages()) sendWebSocketMessage(account, device, message);
|
||||
else throw new AssertionError();
|
||||
}
|
||||
|
@ -125,11 +125,11 @@ public class PushSender implements Managed {
|
|||
}
|
||||
}
|
||||
|
||||
private void sendApnMessage(Account account, Device device, Envelope outgoingMessage) {
|
||||
private void sendApnMessage(Account account, Device device, Envelope outgoingMessage, boolean silent) {
|
||||
DeliveryStatus deliveryStatus = webSocketSender.sendMessage(account, device, outgoingMessage, WebsocketSender.Type.APN);
|
||||
|
||||
if (!deliveryStatus.isDelivered() && outgoingMessage.getType() != Envelope.Type.RECEIPT) {
|
||||
boolean fallback = !outgoingMessage.getSource().equals(account.getNumber());
|
||||
boolean fallback = !silent && !outgoingMessage.getSource().equals(account.getNumber());
|
||||
sendApnNotification(account, device, deliveryStatus.getMessageQueueDepth(), fallback);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,7 +68,7 @@ public class ReceiptSender {
|
|||
}
|
||||
|
||||
for (Device destinationDevice : destinationDevices) {
|
||||
pushSender.sendMessage(destinationAccount, destinationDevice, message.build());
|
||||
pushSender.sendMessage(destinationAccount, destinationDevice, message.build(), true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -112,7 +112,7 @@ public class FederatedControllerTest {
|
|||
|
||||
assertThat("Good Response", response.getStatus(), is(equalTo(204)));
|
||||
|
||||
verify(pushSender).sendMessage(any(Account.class), any(Device.class), any(MessageProtos.Envelope.class));
|
||||
verify(pushSender).sendMessage(any(Account.class), any(Device.class), any(MessageProtos.Envelope.class), eq(false));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -104,7 +104,7 @@ public class MessageControllerTest {
|
|||
|
||||
assertThat("Good Response", response.getStatus(), is(equalTo(200)));
|
||||
|
||||
verify(pushSender, times(1)).sendMessage(any(Account.class), any(Device.class), any(Envelope.class));
|
||||
verify(pushSender, times(1)).sendMessage(any(Account.class), any(Device.class), any(Envelope.class), eq(false));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -157,7 +157,7 @@ public class MessageControllerTest {
|
|||
|
||||
assertThat("Good Response Code", response.getStatus(), is(equalTo(200)));
|
||||
|
||||
verify(pushSender, times(2)).sendMessage(any(Account.class), any(Device.class), any(Envelope.class));
|
||||
verify(pushSender, times(2)).sendMessage(any(Account.class), any(Device.class), any(Envelope.class), eq(false));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -18,8 +18,6 @@ import org.whispersystems.textsecuregcm.storage.AccountsManager;
|
|||
import org.whispersystems.textsecuregcm.storage.Device;
|
||||
import org.whispersystems.textsecuregcm.tests.util.AuthHelper;
|
||||
|
||||
import javax.ws.rs.client.Entity;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
@ -80,7 +78,7 @@ public class ReceiptControllerTest {
|
|||
|
||||
assertThat(response.getStatus() == 204);
|
||||
|
||||
verify(pushSender, times(1)).sendMessage(any(Account.class), any(Device.class), any(Envelope.class));
|
||||
verify(pushSender, times(1)).sendMessage(any(Account.class), any(Device.class), any(Envelope.class), eq(true));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -95,7 +93,7 @@ public class ReceiptControllerTest {
|
|||
|
||||
assertThat(response.getStatus() == 204);
|
||||
|
||||
verify(pushSender, times(2)).sendMessage(any(Account.class), any(Device.class), any(Envelope.class));
|
||||
verify(pushSender, times(2)).sendMessage(any(Account.class), any(Device.class), any(Envelope.class), eq(true));
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue