From 604194293c89f0d9d41ba28525f7f64c063827e6 Mon Sep 17 00:00:00 2001 From: benthecarman Date: Thu, 27 May 2021 11:17:32 -0700 Subject: [PATCH] Replace GUI balance thread with a akka scheduler (#3174) * Replace GUI balance thread with a akka scheduler * Make actory system a param --- .../org/bitcoins/bundle/gui/BundleGUI.scala | 4 ++++ .../src/main/scala/org/bitcoins/gui/GUI.scala | 4 ++++ .../scala/org/bitcoins/gui/WalletGUI.scala | 5 ++++- .../org/bitcoins/gui/WalletGUIModel.scala | 22 +++++++++---------- project/Deps.scala | 4 +++- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/app/bundle/src/main/scala/org/bitcoins/bundle/gui/BundleGUI.scala b/app/bundle/src/main/scala/org/bitcoins/bundle/gui/BundleGUI.scala index 249e2be3c4..94079bf3f3 100644 --- a/app/bundle/src/main/scala/org/bitcoins/bundle/gui/BundleGUI.scala +++ b/app/bundle/src/main/scala/org/bitcoins/bundle/gui/BundleGUI.scala @@ -1,5 +1,6 @@ package org.bitcoins.bundle.gui +import akka.actor.ActorSystem import com.typesafe.config.Config import org.bitcoins.db.AppConfig import org.bitcoins.db.AppConfig.DEFAULT_BITCOIN_S_DATADIR @@ -30,6 +31,9 @@ object BundleGUI extends WalletGUI with JFXApp { }.showAndWait() }) + implicit val system: ActorSystem = ActorSystem( + s"bitcoin-s-gui-${System.currentTimeMillis()}") + lazy val args = parameters.raw // Set log location diff --git a/app/gui/src/main/scala/org/bitcoins/gui/GUI.scala b/app/gui/src/main/scala/org/bitcoins/gui/GUI.scala index d4cb5be53a..0d8871b3fa 100644 --- a/app/gui/src/main/scala/org/bitcoins/gui/GUI.scala +++ b/app/gui/src/main/scala/org/bitcoins/gui/GUI.scala @@ -1,5 +1,6 @@ package org.bitcoins.gui +import akka.actor.ActorSystem import org.bitcoins.cli.CliCommand.GetInfo import org.bitcoins.cli.ConsoleCli import org.bitcoins.commons.jsonmodels.BitcoinSServerInfo @@ -17,6 +18,9 @@ import scala.util._ object GUI extends WalletGUI with JFXApp { + implicit val system: ActorSystem = ActorSystem( + s"bitcoin-s-gui-${System.currentTimeMillis()}") + // Catch unhandled exceptions on FX Application thread Thread .currentThread() diff --git a/app/gui/src/main/scala/org/bitcoins/gui/WalletGUI.scala b/app/gui/src/main/scala/org/bitcoins/gui/WalletGUI.scala index e33c4a1e51..73d6bb7766 100644 --- a/app/gui/src/main/scala/org/bitcoins/gui/WalletGUI.scala +++ b/app/gui/src/main/scala/org/bitcoins/gui/WalletGUI.scala @@ -1,5 +1,6 @@ package org.bitcoins.gui +import akka.actor.ActorSystem import org.bitcoins.gui.dlc.DLCPane import scalafx.beans.property.StringProperty import scalafx.geometry._ @@ -10,6 +11,8 @@ abstract class WalletGUI { def glassPane: VBox + implicit val system: ActorSystem + private lazy val statusLabel = new Label { maxWidth = Double.MaxValue padding = Insets(0, 10, 10, 10) @@ -17,7 +20,7 @@ abstract class WalletGUI { } def fetchStartingData(): Unit = { - model.startBalanceThread() + model.startWalletInfoScheduler() model.updateFeeRate() dlcPane.model.setUp() } diff --git a/app/gui/src/main/scala/org/bitcoins/gui/WalletGUIModel.scala b/app/gui/src/main/scala/org/bitcoins/gui/WalletGUIModel.scala index 4d39061e0f..7a25973c09 100644 --- a/app/gui/src/main/scala/org/bitcoins/gui/WalletGUIModel.scala +++ b/app/gui/src/main/scala/org/bitcoins/gui/WalletGUIModel.scala @@ -1,21 +1,23 @@ package org.bitcoins.gui +import akka.actor.{ActorSystem, Cancellable} import org.bitcoins.cli.CliCommand._ import org.bitcoins.cli.ConsoleCli import org.bitcoins.core.currency.{Bitcoins, Satoshis} import org.bitcoins.core.protocol.BitcoinAddress import org.bitcoins.core.wallet.fee.FeeUnit import org.bitcoins.gui.dialog._ -import org.bitcoins.gui.dialog.{GetNewAddressDialog, SendDialog} import org.bitcoins.gui.util.GUIUtil +import scalafx.application.Platform import scalafx.beans.property.{ObjectProperty, StringProperty} import scalafx.scene.control.Alert import scalafx.scene.control.Alert.AlertType import scalafx.stage.Window +import scala.concurrent.duration.DurationInt import scala.util.{Failure, Success, Try} -class WalletGUIModel() { +class WalletGUIModel()(implicit system: ActorSystem) { var taskRunner: TaskRunner = _ // Sadly, it is a Java "pattern" to pass null into @@ -23,23 +25,19 @@ class WalletGUIModel() { lazy val parentWindow: ObjectProperty[Window] = ObjectProperty[Window](null.asInstanceOf[Window]) - private case object UpdateBalanceRunnable extends Runnable { + private case object UpdateWalletInfoRunnable extends Runnable { override def run(): Unit = { - while (true) { + Platform.runLater { updateBalance() - // wait 10 seconds - Thread.sleep(10000) } } } - lazy val updateBalanceThread = new Thread(UpdateBalanceRunnable) - def startBalanceThread(): Unit = { - updateBalanceThread.setDaemon(true) - updateBalanceThread.setName( - s"bitcoin-s-gui-balance-${System.currentTimeMillis()}") - updateBalanceThread.start() + def startWalletInfoScheduler(): Cancellable = { + import system.dispatcher + system.scheduler.scheduleAtFixedRate(0.seconds, 10.seconds)( + UpdateWalletInfoRunnable) } def updateFeeRate(): Try[FeeUnit] = { diff --git a/project/Deps.scala b/project/Deps.scala index 06e46950ba..35170158af 100644 --- a/project/Deps.scala +++ b/project/Deps.scala @@ -408,7 +408,9 @@ object Deps { ) } - val gui = List(Compile.breezeViz, Compile.scalaFx) ++ Compile.javaFxDeps + val gui = List(Compile.akkaActor, + Compile.breezeViz, + Compile.scalaFx) ++ Compile.javaFxDeps val server = Def.setting { List(