61 lines
1.4 KiB
Java
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());
|
|
}
|
|
}
|