Skip to content

Commit c71bb0d

Browse files
committed
Use Java Timer instead of akka scheduler
1 parent 58bdd6d commit c71bb0d

File tree

3 files changed

+37
-16
lines changed

3 files changed

+37
-16
lines changed

build.sbt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ lazy val trayUtil = (project in file("tray-util"))
102102
name := "LoctioStart",
103103
commonSettings,
104104
flyingSaucersSettings,
105-
libraryDependencies += "com.typesafe.akka" %% "akka-actor-typed" % "2.7.0",
106105
libraryDependencies += "com.softwaremill.sttp.client3" %% "okhttp-backend" % "3.9.7",
107106
libraryDependencies += "com.twelvemonkeys.imageio" % "imageio-bmp" % "3.10.1",
108107
libraryDependencies += "org.scala-lang.modules" %% "scala-swing" % "3.0.0",

tray-util/src/main/scala/com/github/opengrabeso/loctio/MouseIdleTime.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ object MouseIdleTime {
3030

3131
private var lastState: WatchedState = currentState()
3232

33-
Start.system.scheduler.scheduleAtFixedRate(Duration(5, duration.SECONDS), Duration(5, duration.SECONDS)) { () =>
33+
Start.scheduler.scheduleAtFixedRate(Duration(5, duration.SECONDS), Duration(5, duration.SECONDS)) { () =>
3434
val s = currentState()
3535
synchronized {
3636
if (s != lastState) {

tray-util/src/main/scala/com/github/opengrabeso/loctio/Start.scala

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,23 @@
11
package com.github.opengrabeso.loctio
22

3-
import java.awt.{AWTException, Desktop}
3+
import java.awt.{Desktop, AWTException}
44
import java.net.URL
55
import java.time.{ZoneId, ZonedDateTime}
66
import java.time.format._
7-
import java.util.Locale
8-
9-
import akka.actor.{ActorSystem, Cancellable}
7+
import java.util.{Locale, Timer, TimerTask}
108
import com.github.opengrabeso.loctio.common.PublicIpAddress
119
import com.github.opengrabeso.github.model.Notification
1210
import com.github.opengrabeso.github.rest.AuthorizedAPI
1311
import com.github.opengrabeso.github.{RestAPIClient => GitHubAPIClient}
12+
1413
import javax.swing.SwingUtilities
1514
import javax.imageio.ImageIO
16-
import java.awt.{Image, SystemTray, TrayIcon}
17-
15+
import java.awt.{TrayIcon, SystemTray, Image}
1816
import io.udash.rest.SttpRestClient
1917
import rest.{RestAPI, RestAPIClient}
2018

2119
import scala.concurrent.duration.Duration
22-
import scala.concurrent.{Await, Future, Promise, duration}
20+
import scala.concurrent.{duration, Await, ExecutionContext, Future, Promise}
2321
import scala.swing._
2422
import scala.swing.Swing._
2523
import common.ChainingSyntax._
@@ -31,15 +29,39 @@ import scala.swing.event.MouseClicked
3129

3230
object Start extends SimpleSwingApplication {
3331

34-
implicit val system: ActorSystem = ActorSystem()
32+
type Task = TimerTask
33+
34+
object scheduler {
35+
private val timer = new Timer()
3536

36-
val exitEvent = Promise[Boolean]()
37+
def scheduleOnce(delay: Duration)(task: => Unit)(implicit ec: ExecutionContext): TimerTask = {
38+
val timerTask = new TimerTask {
39+
override def run(): Unit = {
40+
ec.future(task)
41+
}
42+
}
43+
timer.schedule(timerTask, delay.toMillis)
44+
timerTask
45+
}
46+
47+
def scheduleAtFixedRate(initialDelay: Duration, period: Duration)(task: () => Unit)(implicit ec: ExecutionContext): TimerTask = {
48+
val timerTask = new TimerTask {
49+
override def run(): Unit = {
50+
ec.future {
51+
task()
52+
}
53+
}
54+
}
55+
timer.scheduleAtFixedRate(timerTask, initialDelay.toMillis, period.toMillis)
56+
timerTask
57+
}
58+
}
3759

3860
private var cfg = Config.empty
3961
private var loginName = ""
4062
private var usersReady = false
41-
private var updateSchedule: Cancellable = _
42-
private var notificationsSchedule: Cancellable = _
63+
private var updateSchedule: Task = _
64+
private var notificationsSchedule: Task = _
4365
private var serverUrl: String = _
4466

4567
var lastNotifications = Option.empty[String]
@@ -91,7 +113,7 @@ object Start extends SimpleSwingApplication {
91113
tryLocalServer(ServerLocal8080)
92114
}
93115

94-
system.scheduler.scheduleOnce(Duration(2000, duration.MILLISECONDS)) {
116+
scheduler.scheduleOnce(Duration(2000, duration.MILLISECONDS)) {
95117
serverFound.trySuccess(ServerProduction)
96118
}
97119

@@ -134,7 +156,7 @@ object Start extends SimpleSwingApplication {
134156
cancelNotifications()
135157

136158
def requestNextAfter(seconds: Int) = {
137-
notificationsSchedule = system.scheduler.scheduleOnce(Duration(seconds, duration.SECONDS)){
159+
notificationsSchedule = scheduler.scheduleOnce(Duration(seconds, duration.SECONDS)){
138160
requestNotifications(token)
139161
}(OnSwing)
140162
}
@@ -166,7 +188,7 @@ object Start extends SimpleSwingApplication {
166188
loginName = s
167189
println(s"Login as $role done $s for")
168190
// request users regularly
169-
updateSchedule = system.scheduler.scheduleAtFixedRate(Duration(0, duration.MINUTES), Duration(1, duration.MINUTES)) {() =>
191+
updateSchedule = scheduler.scheduleAtFixedRate(Duration(0, duration.MINUTES), Duration(1, duration.MINUTES)) {() =>
170192
requestUsers.at(OnSwing).foreach { case (users, tooltip) =>
171193
if (token == cfg.token) { // ignore any pending futures with a different token
172194
usersReady = true

0 commit comments

Comments
 (0)