package it.cavallium; import it.tdlight.jni.TdApi; import it.tdlight.tdlibsession.td.TdResult; import java.util.Optional; import java.util.function.Supplier; import javafx.application.Platform; import javafx.scene.control.Dialog; import org.slf4j.event.Level; import reactor.core.publisher.Mono; public class MonoFxUtils { public static Mono showAndWait(Dialog 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 Mono> showAndWaitOpt(Dialog dialog) { return Mono.create(sink -> { Platform.runLater(() -> { dialog.setOnHidden(event -> { sink.success(Optional.ofNullable(dialog.getResult())); }); dialog.show(); }); }); } public static Mono runLater(Supplier> mono) { return Mono.create(sink -> { Platform.runLater(() -> { mono.get().subscribe(value -> { sink.success(value); }, e -> { sink.error(e); }, () -> { sink.success(); }); }); }); } public static Mono orElseLogSkipError(TdResult optional) { if (optional.failed()) { App.getLogService().append(Level.ERROR, "Received TDLib error: " + optional.cause()); return Mono.empty(); } return Mono.just(optional.result()); } }