From c44749ac16b252d8ab8e4bf87dc92a8e5b454a29 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Sat, 23 Jan 2021 17:50:04 +0100 Subject: [PATCH] Only update the logging tab if it is selected --- .../ctbrec/ui/tabs/logging/LoggingTab.java | 41 +++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/client/src/main/java/ctbrec/ui/tabs/logging/LoggingTab.java b/client/src/main/java/ctbrec/ui/tabs/logging/LoggingTab.java index ec7fe254..1fd2a770 100644 --- a/client/src/main/java/ctbrec/ui/tabs/logging/LoggingTab.java +++ b/client/src/main/java/ctbrec/ui/tabs/logging/LoggingTab.java @@ -5,6 +5,7 @@ import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Collections; import java.util.LinkedList; +import java.util.List; import java.util.stream.Collectors; import org.slf4j.Logger; @@ -20,6 +21,7 @@ import ch.qos.logback.classic.spi.StackTraceElementProxy; import ctbrec.event.EventBusHolder; import ctbrec.ui.controls.CustomMouseBehaviorContextMenu; import ctbrec.ui.controls.SearchBox; +import ctbrec.ui.tabs.TabSelectionListener; import javafx.application.Platform; import javafx.beans.property.SimpleStringProperty; import javafx.collections.FXCollections; @@ -37,27 +39,36 @@ import javafx.scene.input.ContextMenuEvent; import javafx.scene.input.MouseEvent; import javafx.scene.layout.BorderPane; -public class LoggingTab extends Tab { +public class LoggingTab extends Tab implements TabSelectionListener { private static final int HISTORY_LENGTH = 10_000; private SearchBox filter = new SearchBox(); private TableView table = new TableView<>(); private ObservableList history = FXCollections.observableList(Collections.synchronizedList(new LinkedList<>())); private ObservableList filteredEvents = FXCollections.observableArrayList(); + private List eventBuffer = new LinkedList<>(); private DateTimeFormatter timeFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; private volatile boolean tabClosed = false; + private volatile boolean tabSelected = false; private ContextMenu popup; private Object eventBustSubscriber = new Object() { @Subscribe public void publishLoggingEevent(LoggingEvent event) { if (!tabClosed) { - Platform.runLater(() -> { - history.add(event); - if (history.size() > HISTORY_LENGTH - 1) { - history.remove(0); + if (tabSelected) { + Platform.runLater(() -> { + history.add(event); + if (history.size() > HISTORY_LENGTH - 1) { + history.remove(0); + } + filter(); + }); + } else { + eventBuffer.add(event); + if (eventBuffer.size() > HISTORY_LENGTH - 1) { + eventBuffer.remove(0); } - filter(); - }); + } } } }; @@ -200,4 +211,20 @@ public class LoggingTab extends Tab { private void subscribeToEventBus() { EventBusHolder.BUS.register(eventBustSubscriber); } + + @Override + public void selected() { + history.addAll(eventBuffer); + tabSelected = true; + while (history.size() > HISTORY_LENGTH - 1) { + history.remove(0); + } + filter(); + eventBuffer.clear(); + } + + @Override + public void deselected() { + tabSelected = false; + } }