From ccc644f9d4a6e0b5e3ec9cf728045f28ff0898b3 Mon Sep 17 00:00:00 2001 From: Sarah Gerweck Date: Sat, 4 Jun 2016 00:30:04 -0700 Subject: [PATCH] New method to observe an `Option[A]` from a future This makes it much easier to mix in an observable from a future. I'd also like to do a `Try[Option[A]]` method. --- .../scalafx/util/FutureObservable.scala | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/main/scala/org/gerweck/scalafx/util/FutureObservable.scala b/src/main/scala/org/gerweck/scalafx/util/FutureObservable.scala index 4c65b10..4d11313 100644 --- a/src/main/scala/org/gerweck/scalafx/util/FutureObservable.scala +++ b/src/main/scala/org/gerweck/scalafx/util/FutureObservable.scala @@ -46,4 +46,24 @@ object FutureObservable { prop } } + + def ofSuccessOption[A](future: Future[A])(implicit ec: ExecutionContext): ReadOnlyObjectProperty[Option[A]] = { + future.value match { + case Some(Success(a)) => + ObjectProperty(Some(a)) + + case Some(Failure(f)) => + logger.debug(s"Got failure from FutureObservable's result: $f") + ObjectProperty(None) + + case None => + val prop = ObjectProperty[Option[A]](None) + future onSuccess { case a => + runLater { + prop.value = Some(a) + } + } + prop + } + } }