Skip to content

Commit 2a4d6ae

Browse files
committed
Only push broadcasts to subscribers.
1 parent a23f5d8 commit 2a4d6ae

File tree

2 files changed

+22
-20
lines changed

2 files changed

+22
-20
lines changed

kernel/api/src/main/java/org/sakaiproject/messaging/api/UserNotificationTransferBean.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@
1919

2020
import java.time.Instant;
2121

22-
import lombok.AllArgsConstructor;
23-
import lombok.NoArgsConstructor;
24-
import lombok.Data;
25-
2622
public class UserNotificationTransferBean {
2723

2824
public String from;

kernel/kernel-impl/src/main/java/org/sakaiproject/messaging/impl/UserMessagingServiceImpl.java

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,25 @@
1616
package org.sakaiproject.messaging.impl;
1717

1818
import com.fasterxml.jackson.databind.ObjectMapper;
19+
1920
import lombok.Setter;
2021
import lombok.extern.slf4j.Slf4j;
22+
2123
import nl.martijndwars.webpush.Notification;
2224
import nl.martijndwars.webpush.PushService;
2325
import nl.martijndwars.webpush.Subscription;
2426
import nl.martijndwars.webpush.Utils;
27+
2528
import org.apache.commons.lang3.StringUtils;
2629
import org.apache.commons.text.StringEscapeUtils;
2730
import org.apache.http.HttpResponse;
31+
2832
import org.bouncycastle.jce.ECNamedCurveTable;
2933
import org.bouncycastle.jce.interfaces.ECPrivateKey;
3034
import org.bouncycastle.jce.interfaces.ECPublicKey;
3135
import org.bouncycastle.jce.provider.BouncyCastleProvider;
3236
import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec;
37+
3338
import org.sakaiproject.component.api.ServerConfigurationService;
3439
import org.sakaiproject.email.api.DigestService;
3540
import org.sakaiproject.email.api.EmailService;
@@ -66,8 +71,11 @@
6671
import org.sakaiproject.user.api.UserNotDefinedException;
6772
import org.sakaiproject.util.ResourceLoader;
6873
import org.sakaiproject.util.api.FormattedText;
74+
6975
import org.springframework.beans.factory.annotation.Autowired;
7076
import org.springframework.beans.factory.annotation.Qualifier;
77+
import org.springframework.data.domain.Page;
78+
import org.springframework.data.domain.PageRequest;
7179
import org.springframework.transaction.TransactionStatus;
7280
import org.springframework.transaction.annotation.Transactional;
7381
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
@@ -80,7 +88,6 @@
8088
import java.security.KeyPair;
8189
import java.security.KeyPairGenerator;
8290
import java.security.Security;
83-
import java.time.Duration;
8491
import java.time.Instant;
8592
import java.util.ArrayList;
8693
import java.util.Base64;
@@ -580,31 +587,30 @@ private void pushToAllUsers(UserNotificationTransferBean bean) {
580587

581588
executor.execute(() -> {
582589

583-
int pageSize = 100;
584-
int first = 1;
585-
int last = first + pageSize;
586-
int total = userDirectoryService.countUsers();
587-
int done = 0;
588-
589590
UserNotificationTransferBean un = new UserNotificationTransferBean();
590591
un.from = bean.from;
591592
un.event = bean.event;
592593
un.ref = bean.ref;
593594
un.title = bean.title;
594595

595-
while (done < total) {
596+
int pageNumber = 0;
597+
int pageSize = 1;
596598

597-
List<User> users = userDirectoryService.getUsers(first, last);
599+
Map<String, String> done = new HashMap<>();
600+
Page<PushSubscription> page = pushSubscriptionRepository.findAll(PageRequest.of(pageNumber, pageSize));
601+
while (page.getTotalElements() > 0) {
602+
page.getContent().forEach(ps -> {
598603

599-
users.forEach(u -> {
600-
601-
un.to = u.getId();
602-
push(decorateNotification(un));
604+
String userId = ps.getUserId();
605+
if (!done.containsKey(userId)) {
606+
un.to = ps.getUserId();
607+
push(decorateNotification(un));
608+
done.put(userId, "");
609+
}
603610
});
604611

605-
first = last + 1;
606-
last = first + pageSize;
607-
done += users.size();
612+
pageNumber += 1;
613+
page = pushSubscriptionRepository.findAll(PageRequest.of(pageNumber, pageSize));
608614
}
609615
});
610616
}

0 commit comments

Comments
 (0)