TransferBot/src/main/java/it/cavallium/MonoFxUtils.java

50 lines
1.1 KiB
Java
Raw Normal View History

2020-10-17 01:54:06 +02:00
package it.cavallium;
import java.util.Optional;
import java.util.function.Supplier;
import javafx.application.Platform;
import javafx.scene.control.Dialog;
import reactor.core.publisher.Mono;
public class MonoFxUtils {
public static <T> Mono<T> showAndWait(Dialog<T> dialog) {
return Mono.create(sink -> {
Platform.runLater(() -> {
dialog.setOnHidden(event -> {
if (dialog.getResult() != null) {
sink.success(dialog.getResult());
} else {
sink.success();
}
});
dialog.show();
});
});
}
public static <T> Mono<Optional<T>> showAndWaitOpt(Dialog<T> dialog) {
return Mono.create(sink -> {
Platform.runLater(() -> {
dialog.setOnHidden(event -> {
sink.success(Optional.<T>ofNullable(dialog.getResult()));
});
dialog.show();
});
});
}
public static <T> Mono<T> runLater(Supplier<Mono<T>> mono) {
return Mono.create(sink -> {
Platform.runLater(() -> {
mono.get().subscribe(value -> {
sink.success(value);
}, e -> {
sink.error(e);
}, () -> {
sink.success();
});
});
});
}
}