Update App.java, LogEntry.java, and 5 more files...

This commit is contained in:
Andrea Cavalli 2020-10-19 13:59:35 +02:00
parent 824b362710
commit 39751747c3
7 changed files with 134 additions and 1 deletions

View File

@ -12,6 +12,7 @@ import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
import org.slf4j.event.Level;
/**
* JavaFX App
@ -22,6 +23,7 @@ public class App extends Application {
private static TdClusterManager clusterManager;
private static TransferService transferService;
private static LogService logService;
private static Scene scene;
@ -29,6 +31,10 @@ public class App extends Application {
public void start(Stage stage) throws IOException, CantLoadLibrary {
Init.start();
clusterManager = new TdClusterManager(null, null, Vertx.vertx(), null);
logService = new LogServiceImpl();
logService.append(Level.INFO, "Initializing");
transferService = new TransferServiceImpl(clusterManager);
transferService.setApiId(94575);
@ -37,6 +43,7 @@ public class App extends Application {
scene = new Scene(loadFXML("primary"), 800, 600);
stage.setScene(scene);
stage.show();
logService.append(Level.INFO, "Initialized");
}
@Override
@ -61,4 +68,8 @@ public class App extends Application {
public static TransferService getTransferService() {
return transferService;
}
public static LogService getLogService() {
return logService;
}
}

View File

@ -0,0 +1,65 @@
package it.cavallium;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Objects;
import java.util.StringJoiner;
import org.slf4j.event.Level;
public class LogEntry {
private final long time;
private final Level level;
private final String text;
public LogEntry(long time, Level level, String text) {
this.time = time;
this.level = level;
this.text = text;
}
public Level getLevel() {
return level;
}
public long getTime() {
return time;
}
public String getText() {
return text;
}
@Override
public String toString() {
return LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault()).toString() + " [" + level + "] " + text;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
LogEntry logEntry = (LogEntry) o;
if (time != logEntry.time) {
return false;
}
if (level != logEntry.level) {
return false;
}
return Objects.equals(text, logEntry.text);
}
@Override
public int hashCode() {
int result = (int) (time ^ (time >>> 32));
result = 31 * result + (level != null ? level.hashCode() : 0);
result = 31 * result + (text != null ? text.hashCode() : 0);
return result;
}
}

View File

@ -0,0 +1,14 @@
package it.cavallium;
import java.util.List;
import org.slf4j.event.Level;
import reactor.core.publisher.Flux;
public interface LogService {
Flux<LogEntry> listenUpdates();
void append(Level level, String message);
int getMaxSize();
}

View File

@ -0,0 +1,31 @@
package it.cavallium;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import org.slf4j.event.Level;
import reactor.core.publisher.Flux;
import reactor.core.publisher.ReplayProcessor;
public class LogServiceImpl implements LogService {
private static final int SIZE = 1000;
private ReplayProcessor<LogEntry> logs = ReplayProcessor.create(SIZE);
@Override
public Flux<LogEntry> listenUpdates() {
return logs.hide();
}
@Override
public void append(Level level, String message) {
logs.onNext(new LogEntry(System.currentTimeMillis(), level, message));
}
@Override
public int getMaxSize() {
return SIZE;
}
}

View File

@ -33,6 +33,7 @@ public class PrimaryController {
@FXML private ListView<Text> userbotsList;
@FXML private ComboBox<BaseChatInfo> sourceGroupCombo;
@FXML private ComboBox<BaseChatInfo> destGroupCombo;
@FXML private ListView<LogEntry> log;
@FXML
protected void initialize() {
@ -55,6 +56,15 @@ public class PrimaryController {
for (BaseChatInfo destSupergroups : App.getTransferService().getAdminSupergroups(false, true)) {
destItems.add(destSupergroups);
}
App.getLogService().listenUpdates().subscribeOn(Schedulers.boundedElastic()).flatMap(logString -> MonoFxUtils.runLater(() -> {
if (log.getItems().size() >= App.getLogService().getMaxSize()) {
log.getItems().remove(0);
}
log.getItems().add(logString);
log.scrollTo(logString);
return Mono.empty();
})).subscribe();
}
private void disableClicks() {

View File

@ -29,7 +29,9 @@ import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import org.apache.logging.log4j.LogManager;
import org.reactivestreams.Publisher;
import org.slf4j.LoggerFactory;
import org.warp.commonutils.error.InitializationException;
import reactor.core.publisher.EmitterProcessor;
import reactor.core.publisher.Flux;

View File

@ -127,7 +127,7 @@
</Text>
</top>
<center>
<ListView prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
<ListView fx:id="log" BorderPane.alignment="CENTER" style="-fx-font-size: 8"/>
</center>
</BorderPane>
</items>