TransferBot/src/main/java/it/cavallium/MonoFxUtils.java
2020-10-20 00:31:11 +02:00

61 lines
1.4 KiB
Java

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 <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();
});
});
});
}
public static <T extends TdApi.Object> Mono<T> orElseLogSkipError(TdResult<T> optional) {
if (optional.failed()) {
App.getLogService().append(Level.ERROR, "Received TDLib error: " + optional.cause());
return Mono.empty();
}
return Mono.just(optional.result());
}
}