diff --git a/commafeed-client/src/app/types.ts b/commafeed-client/src/app/types.ts index dba79a7d..f76364a4 100644 --- a/commafeed-client/src/app/types.ts +++ b/commafeed-client/src/app/types.ts @@ -304,7 +304,6 @@ export interface SubscribeRequest { url: string title: string categoryId?: string - pushNotificationsEnabled: boolean } export interface TagRequest { diff --git a/commafeed-client/src/components/content/add/Subscribe.tsx b/commafeed-client/src/components/content/add/Subscribe.tsx index 86c87d41..973fa28c 100644 --- a/commafeed-client/src/components/content/add/Subscribe.tsx +++ b/commafeed-client/src/components/content/add/Subscribe.tsx @@ -11,7 +11,6 @@ import { useAppDispatch } from "@/app/store" import { reloadTree } from "@/app/tree/thunks" import type { FeedInfoRequest, SubscribeRequest } from "@/app/types" import { Alert } from "@/components/Alert" -import { ReceivePushNotificationsChechbox } from "@/components/ReceivePushNotificationsChechbox" import { CategorySelect } from "./CategorySelect" export function Subscribe() { @@ -29,7 +28,6 @@ export function Subscribe() { url: "", title: "", categoryId: Constants.categories.all.id, - pushNotificationsEnabled: false, }, }) @@ -105,9 +103,6 @@ export function Subscribe() { Feed URL} {...step1Form.getInputProps("url")} disabled /> Feed name} {...step1Form.getInputProps("title")} required autoFocus /> Category} {...step1Form.getInputProps("categoryId")} clearable /> - diff --git a/commafeed-server/src/main/java/com/commafeed/backend/opml/OPMLImporter.java b/commafeed-server/src/main/java/com/commafeed/backend/opml/OPMLImporter.java index 4729eee3..ac575c5b 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/opml/OPMLImporter.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/opml/OPMLImporter.java @@ -77,7 +77,7 @@ public class OPMLImporter { } // make sure we continue with the import process even if a feed failed try { - feedSubscriptionService.subscribe(user, outline.getXmlUrl(), name, parent, position, false); + feedSubscriptionService.subscribe(user, outline.getXmlUrl(), name, parent, position); } catch (Exception e) { log.error("error while importing {}: {}", outline.getXmlUrl(), e.getMessage()); } diff --git a/commafeed-server/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java b/commafeed-server/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java index 7b109594..4a5d1e48 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java @@ -49,7 +49,7 @@ public class FeedSubscriptionService { }); } - public long subscribe(User user, String url, String title, FeedCategory category, int position, boolean pushNotificationsEnabled) { + public long subscribe(User user, String url, String title, FeedCategory category, int position) { Integer maxFeedsPerUser = config.database().cleanup().maxFeedsPerUser(); if (maxFeedsPerUser > 0 && feedSubscriptionDAO.count(user) >= maxFeedsPerUser) { String message = String.format("You cannot subscribe to more feeds on this CommaFeed instance (max %s feeds per user)", @@ -73,7 +73,6 @@ public class FeedSubscriptionService { sub.setCategory(category); sub.setPosition(position); sub.setTitle(FeedUtils.truncate(title, 128)); - sub.setPushNotificationsEnabled(pushNotificationsEnabled); return feedSubscriptionDAO.merge(sub).getId(); } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/SubscribeRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/SubscribeRequest.java index 743279cd..2b1bdc42 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/SubscribeRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/SubscribeRequest.java @@ -27,8 +27,4 @@ public class SubscribeRequest implements Serializable { @Schema(description = "id of the user category to place the feed in") @Size(max = 128) private String categoryId; - - @Schema(description = "whether to send push notifications for new entries of this feed") - private boolean pushNotificationsEnabled; - } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java index 795f6256..d74eee9a 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java @@ -365,8 +365,7 @@ public class FeedREST { FeedInfo info = fetchFeedInternal(prependHttp(req.getUrl())); User user = authenticationContext.getCurrentUser(); - long subscriptionId = feedSubscriptionService.subscribe(user, info.getUrl(), req.getTitle(), category, 0, - req.isPushNotificationsEnabled()); + long subscriptionId = feedSubscriptionService.subscribe(user, info.getUrl(), req.getTitle(), category, 0); return Response.ok(subscriptionId).build(); } catch (Exception e) { log.error("Failed to subscribe to URL {}: {}", req.getUrl(), e.getMessage(), e); @@ -385,7 +384,7 @@ public class FeedREST { Preconditions.checkNotNull(url); FeedInfo info = fetchFeedInternal(prependHttp(url)); User user = authenticationContext.getCurrentUser(); - feedSubscriptionService.subscribe(user, info.getUrl(), info.getTitle(), null, 0, false); + feedSubscriptionService.subscribe(user, info.getUrl(), info.getTitle(), null, 0); } catch (Exception e) { log.info("Could not subscribe to url {} : {}", url, e.getMessage()); } diff --git a/commafeed-server/src/test/java/com/commafeed/backend/opml/OPMLImporterTest.java b/commafeed-server/src/test/java/com/commafeed/backend/opml/OPMLImporterTest.java index 2f49f5bb..1193bc3f 100644 --- a/commafeed-server/src/test/java/com/commafeed/backend/opml/OPMLImporterTest.java +++ b/commafeed-server/src/test/java/com/commafeed/backend/opml/OPMLImporterTest.java @@ -46,8 +46,7 @@ class OPMLImporterTest { importer.importOpml(user, xml); Mockito.verify(feedSubscriptionService) - .subscribe(Mockito.eq(user), Mockito.anyString(), Mockito.anyString(), Mockito.any(FeedCategory.class), Mockito.anyInt(), - Mockito.anyBoolean()); + .subscribe(Mockito.eq(user), Mockito.anyString(), Mockito.anyString(), Mockito.any(FeedCategory.class), Mockito.anyInt()); } } diff --git a/commafeed-server/src/test/java/com/commafeed/integration/BaseIT.java b/commafeed-server/src/test/java/com/commafeed/integration/BaseIT.java index 09852af9..5aff6e3a 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/BaseIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/BaseIT.java @@ -123,15 +123,10 @@ public abstract class BaseIT { } protected Long subscribe(String feedUrl, String categoryId) { - return subscribe(feedUrl, categoryId, false); - } - - protected Long subscribe(String feedUrl, String categoryId, boolean pushNotificationsEnabled) { SubscribeRequest subscribeRequest = new SubscribeRequest(); subscribeRequest.setUrl(feedUrl); subscribeRequest.setTitle("my title for this feed"); subscribeRequest.setCategoryId(categoryId); - subscribeRequest.setPushNotificationsEnabled(pushNotificationsEnabled); return RestAssured.given() .body(subscribeRequest) .contentType(ContentType.JSON) diff --git a/commafeed-server/src/test/java/com/commafeed/integration/PushNotificationIT.java b/commafeed-server/src/test/java/com/commafeed/integration/PushNotificationIT.java index 0e837ef0..ac4c7546 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/PushNotificationIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/PushNotificationIT.java @@ -1,7 +1,9 @@ package com.commafeed.integration; +import java.io.IOException; import java.time.Duration; +import org.apache.hc.core5.http.HttpStatus; import org.awaitility.Awaitility; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -13,6 +15,8 @@ import org.mockserver.verify.VerificationTimes; import com.commafeed.TestConstants; import com.commafeed.backend.model.UserSettings.PushNotificationType; import com.commafeed.frontend.model.Settings; +import com.commafeed.frontend.model.Subscription; +import com.commafeed.frontend.model.request.FeedModificationRequest; import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; @@ -33,7 +37,7 @@ class PushNotificationIT extends BaseIT { } @Test - void receivedPushNotifications() { + void receivedPushNotifications() throws IOException { // mock ntfy server HttpRequest ntfyPost = HttpRequest.request().withMethod("POST").withPath("/ntfy/integration-test"); getMockServerClient().when(ntfyPost).respond(HttpResponse.response().withStatusCode(200)); @@ -45,8 +49,22 @@ class PushNotificationIT extends BaseIT { settings.getPushNotificationSettings().setTopic("integration-test"); RestAssured.given().body(settings).contentType(ContentType.JSON).post("rest/user/settings").then().statusCode(200); - // subscribe with push notifications enabled - subscribe(getFeedUrl(), null, true); + // subscribe + Long subscriptionId = subscribeAndWaitForEntries(getFeedUrl()); + Subscription subscription = getSubscription(subscriptionId); + + // enable push notifications + FeedModificationRequest req = new FeedModificationRequest(); + req.setId(subscriptionId); + req.setName(subscription.getName()); + req.setCategoryId(subscription.getCategoryId()); + req.setPosition(1); + req.setPushNotificationsEnabled(true); + RestAssured.given().body(req).contentType(ContentType.JSON).post("rest/feed/modify").then().statusCode(HttpStatus.SC_OK); + + // receive two additional entries, those will trigger two push notifications + feedNowReturnsMoreEntries(); + forceRefreshAllFeeds(); // await push notification for the two entries in the feed Awaitility.await()