From 6c68b1546164b9d470fa7c292d96af33d18c3796 Mon Sep 17 00:00:00 2001 From: David Gerber Date: Sun, 17 Nov 2024 22:06:00 +0100 Subject: [PATCH] Add route to search trend --- .../file/FileTrendNotificationService.java | 4 ++-- .../filetransfer/FileTransferRsService.java | 4 ++-- .../xrs/service/status/StatusRsService.java | 19 +++++++++++++------ .../xrs/service/turtle/TurtleRsClient.java | 2 +- .../xrs/service/turtle/TurtleRsService.java | 2 +- .../file/FileTrendNotification.java | 2 +- .../file/FileTrendViewController.java | 9 +++++---- .../xeres/ui/controller/file/TrendResult.java | 2 +- ui/src/main/resources/view/file/trend.fxml | 8 +++----- 9 files changed, 29 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/io/xeres/app/service/notification/file/FileTrendNotificationService.java b/app/src/main/java/io/xeres/app/service/notification/file/FileTrendNotificationService.java index 014fc76e..bbdd6e8c 100644 --- a/app/src/main/java/io/xeres/app/service/notification/file/FileTrendNotificationService.java +++ b/app/src/main/java/io/xeres/app/service/notification/file/FileTrendNotificationService.java @@ -26,8 +26,8 @@ @Service public class FileTrendNotificationService extends NotificationService { - public void receivedSearch(String keywords) + public void receivedSearch(String senderName, String keywords) { - sendNotification(new FileTrendNotification(keywords)); + sendNotification(new FileTrendNotification(senderName, keywords)); } } diff --git a/app/src/main/java/io/xeres/app/xrs/service/filetransfer/FileTransferRsService.java b/app/src/main/java/io/xeres/app/xrs/service/filetransfer/FileTransferRsService.java index 92003727..464e5f6c 100644 --- a/app/src/main/java/io/xeres/app/xrs/service/filetransfer/FileTransferRsService.java +++ b/app/src/main/java/io/xeres/app/xrs/service/filetransfer/FileTransferRsService.java @@ -283,9 +283,9 @@ public List receiveSearchRequest(byte[] query, int maxHits) } @Override - public void receiveSearchRequestString(String keywords) + public void receiveSearchRequestString(PeerConnection sender, String keywords) { - fileTrendNotificationService.receivedSearch(keywords); + fileTrendNotificationService.receivedSearch(sender.getLocation().getProfile().getName(), keywords); } @Override diff --git a/app/src/main/java/io/xeres/app/xrs/service/status/StatusRsService.java b/app/src/main/java/io/xeres/app/xrs/service/status/StatusRsService.java index 9e54f5fd..2368232e 100644 --- a/app/src/main/java/io/xeres/app/xrs/service/status/StatusRsService.java +++ b/app/src/main/java/io/xeres/app/xrs/service/status/StatusRsService.java @@ -19,6 +19,8 @@ package io.xeres.app.xrs.service.status; +import io.xeres.app.database.DatabaseSession; +import io.xeres.app.database.DatabaseSessionManager; import io.xeres.app.net.peer.PeerConnection; import io.xeres.app.net.peer.PeerConnectionManager; import io.xeres.app.service.LocationService; @@ -51,15 +53,17 @@ public class StatusRsService extends RsService private final PeerConnectionManager peerConnectionManager; private final LocationService locationService; private final AvailabilityNotificationService availabilityNotificationService; + private final DatabaseSessionManager databaseSessionManager; private boolean locked; - public StatusRsService(RsServiceRegistry rsServiceRegistry, PeerConnectionManager peerConnectionManager, LocationService locationService, AvailabilityNotificationService availabilityNotificationService) + public StatusRsService(RsServiceRegistry rsServiceRegistry, PeerConnectionManager peerConnectionManager, LocationService locationService, AvailabilityNotificationService availabilityNotificationService, DatabaseSessionManager databaseSessionManager) { super(rsServiceRegistry); this.peerConnectionManager = peerConnectionManager; this.locationService = locationService; this.availabilityNotificationService = availabilityNotificationService; + this.databaseSessionManager = databaseSessionManager; } @Override @@ -129,11 +133,14 @@ public void changeAvailabilityAutomatically(Availability availability) { if (!locked && availability != this.availability) { - var ownLocation = locationService.findOwnLocation().orElseThrow(); - this.availability = availability; - locationService.setAvailability(ownLocation, availability); - availabilityNotificationService.changeAvailability(ownLocation, availability); - peerConnectionManager.doForAllPeers(peerConnection -> peerConnectionManager.writeItem(peerConnection, new StatusItem(toChatStatus(availability)), this), this); + try (var session = new DatabaseSession(databaseSessionManager)) + { + var ownLocation = locationService.findOwnLocation().orElseThrow(); + this.availability = availability; + locationService.setAvailability(ownLocation, availability); + availabilityNotificationService.changeAvailability(ownLocation, availability); + peerConnectionManager.doForAllPeers(peerConnection -> peerConnectionManager.writeItem(peerConnection, new StatusItem(toChatStatus(availability)), this), this); + } } } } diff --git a/app/src/main/java/io/xeres/app/xrs/service/turtle/TurtleRsClient.java b/app/src/main/java/io/xeres/app/xrs/service/turtle/TurtleRsClient.java index 34bba894..98149e2c 100644 --- a/app/src/main/java/io/xeres/app/xrs/service/turtle/TurtleRsClient.java +++ b/app/src/main/java/io/xeres/app/xrs/service/turtle/TurtleRsClient.java @@ -73,7 +73,7 @@ public interface TurtleRsClient extends RsServiceSlave */ List receiveSearchRequest(byte[] query, int maxHits); // XXX: return a list of results (TurtleFileInfoV2.. actually it's generic stuff so service dependent) - void receiveSearchRequestString(String keywords); // XXX: experimental for now... + void receiveSearchRequestString(PeerConnection sender, String keywords); // XXX: experimental for now... /** * Called when receiving search results. diff --git a/app/src/main/java/io/xeres/app/xrs/service/turtle/TurtleRsService.java b/app/src/main/java/io/xeres/app/xrs/service/turtle/TurtleRsService.java index 7d1af894..c65108b8 100644 --- a/app/src/main/java/io/xeres/app/xrs/service/turtle/TurtleRsService.java +++ b/app/src/main/java/io/xeres/app/xrs/service/turtle/TurtleRsService.java @@ -588,7 +588,7 @@ private void handleSearchRequest(PeerConnection sender, TurtleSearchRequestItem } // XXX: experimental - turtleClients.forEach(turtleRsClient -> turtleRsClient.receiveSearchRequestString(item.getKeywords())); + turtleClients.forEach(turtleRsClient -> turtleRsClient.receiveSearchRequestString(sender, item.getKeywords())); // Do not search further if enough has been sent back already. if (searchRequest.isFull()) diff --git a/common/src/main/java/io/xeres/common/rest/notification/file/FileTrendNotification.java b/common/src/main/java/io/xeres/common/rest/notification/file/FileTrendNotification.java index c8c8fcf8..7da4e3cf 100644 --- a/common/src/main/java/io/xeres/common/rest/notification/file/FileTrendNotification.java +++ b/common/src/main/java/io/xeres/common/rest/notification/file/FileTrendNotification.java @@ -21,6 +21,6 @@ import io.xeres.common.rest.notification.Notification; -public record FileTrendNotification(String keywords) implements Notification +public record FileTrendNotification(String senderName, String keywords) implements Notification { } diff --git a/ui/src/main/java/io/xeres/ui/controller/file/FileTrendViewController.java b/ui/src/main/java/io/xeres/ui/controller/file/FileTrendViewController.java index 527373bd..6f5f0037 100644 --- a/ui/src/main/java/io/xeres/ui/controller/file/FileTrendViewController.java +++ b/ui/src/main/java/io/xeres/ui/controller/file/FileTrendViewController.java @@ -49,8 +49,8 @@ public class FileTrendViewController implements Controller, TabActivation // @FXML // private TableColumn tableHits; // -// @FXML -// private TableColumn tableFrom; +@FXML +private TableColumn tableFrom; @FXML private TableColumn tableTerms; @@ -64,6 +64,7 @@ public FileTrendViewController(NotificationClient notificationClient) public void initialize() throws IOException { tableTerms.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().keywords())); + tableFrom.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().senderName())); setupFileTrendNotifications(); } @@ -74,10 +75,10 @@ private void setupFileTrendNotifications() .doOnError(UiUtils::showAlertError) .doOnNext(sse -> Platform.runLater(() -> { assert sse.data() != null; - trendTableView.getItems().add(new TrendResult(sse.data().keywords())); + trendTableView.getItems().add(new TrendResult(sse.data().keywords(), sse.data().senderName())); if (trendTableView.getItems().size() > 255) // XXX: maybe not optimal... { - trendTableView.getItems().removeFirst(); + trendTableView.getItems().remove(0, 10); } })) .subscribe(); diff --git a/ui/src/main/java/io/xeres/ui/controller/file/TrendResult.java b/ui/src/main/java/io/xeres/ui/controller/file/TrendResult.java index a27b27c0..6c441da9 100644 --- a/ui/src/main/java/io/xeres/ui/controller/file/TrendResult.java +++ b/ui/src/main/java/io/xeres/ui/controller/file/TrendResult.java @@ -19,6 +19,6 @@ package io.xeres.ui.controller.file; -public record TrendResult(String keywords) +public record TrendResult(String keywords, String senderName) { } diff --git a/ui/src/main/resources/view/file/trend.fxml b/ui/src/main/resources/view/file/trend.fxml index e0d0fcb1..4c3e7315 100644 --- a/ui/src/main/resources/view/file/trend.fxml +++ b/ui/src/main/resources/view/file/trend.fxml @@ -20,9 +20,7 @@ --> - - - + - - + +