Tray Icon

This commit is contained in:
Aria Moradi
2021-02-04 18:02:46 +03:30
parent 61aee2e784
commit 98bd664ab6
4 changed files with 65 additions and 1 deletions

View File

@@ -81,6 +81,10 @@ dependencies {
implementation ("org.jetbrains.exposed:exposed-jdbc:$exposed_version") implementation ("org.jetbrains.exposed:exposed-jdbc:$exposed_version")
implementation ("com.h2database:h2:1.4.199") implementation ("com.h2database:h2:1.4.199")
// tray icon
implementation("com.dorkbox:SystemTray:3.17")
// AndroidCompat // AndroidCompat
implementation(project(":AndroidCompat")) implementation(project(":AndroidCompat"))

View File

@@ -18,10 +18,12 @@ import ir.armor.tachidesk.util.getSource
import ir.armor.tachidesk.util.getSourceList import ir.armor.tachidesk.util.getSourceList
import ir.armor.tachidesk.util.getThumbnail import ir.armor.tachidesk.util.getThumbnail
import ir.armor.tachidesk.util.installAPK import ir.armor.tachidesk.util.installAPK
import ir.armor.tachidesk.util.openInBrowser
import ir.armor.tachidesk.util.removeExtension import ir.armor.tachidesk.util.removeExtension
import ir.armor.tachidesk.util.sourceFilters import ir.armor.tachidesk.util.sourceFilters
import ir.armor.tachidesk.util.sourceGlobalSearch import ir.armor.tachidesk.util.sourceGlobalSearch
import ir.armor.tachidesk.util.sourceSearch import ir.armor.tachidesk.util.sourceSearch
import ir.armor.tachidesk.util.systemTray
import org.kodein.di.DI import org.kodein.di.DI
import org.kodein.di.conf.global import org.kodein.di.conf.global
import xyz.nulldev.androidcompat.AndroidCompat import xyz.nulldev.androidcompat.AndroidCompat
@@ -48,6 +50,7 @@ class Main {
// make sure everything we need exists // make sure everything we need exists
applicationSetup() applicationSetup()
val tray = systemTray()
registerConfigModules() registerConfigModules()
@@ -58,17 +61,22 @@ class Main {
// start app // start app
androidCompat.startApp(App()) androidCompat.startApp(App())
// Thread(getMangaUpdateQueueThread).start() var hasWebUiBundled: Boolean = false
val app = Javalin.create { config -> val app = Javalin.create { config ->
try { try {
this::class.java.classLoader.getResource("/react/index.html") this::class.java.classLoader.getResource("/react/index.html")
hasWebUiBundled = true
config.addStaticFiles("/react") config.addStaticFiles("/react")
config.addSinglePageRoot("/", "/react/index.html") config.addSinglePageRoot("/", "/react/index.html")
} catch (e: RuntimeException) { } catch (e: RuntimeException) {
println("Warning: react build files are missing.") println("Warning: react build files are missing.")
hasWebUiBundled = false
} }
}.start(4567) }.start(4567)
if (hasWebUiBundled) {
openInBrowser()
}
app.before() { ctx -> app.before() { ctx ->
// allow the client which is running on another port // allow the client which is running on another port

View File

@@ -4,9 +4,17 @@ package ir.armor.tachidesk.util
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
import dorkbox.systemTray.MenuItem
import dorkbox.systemTray.SystemTray
import dorkbox.systemTray.SystemTray.TrayType
import dorkbox.util.CacheUtil
import dorkbox.util.Desktop
import ir.armor.tachidesk.Config import ir.armor.tachidesk.Config
import ir.armor.tachidesk.Main
import ir.armor.tachidesk.database.makeDataBaseTables import ir.armor.tachidesk.database.makeDataBaseTables
import java.awt.event.ActionListener
import java.io.File import java.io.File
import java.io.IOException
fun applicationSetup() { fun applicationSetup() {
// make dirs we need // make dirs we need
@@ -17,3 +25,47 @@ fun applicationSetup() {
makeDataBaseTables() makeDataBaseTables()
} }
fun openInBrowser() {
Desktop.browseURL("http://127.0.0.1:4567")
}
val icon = Main::class.java.getResource("/icon/icon_round.png")
fun systemTray(): SystemTray? {
// ref: https://github.com/dorkbox/SystemTray/blob/master/test/dorkbox/TestTray.java
SystemTray.DEBUG = true; // for test apps, we always want to run in debug mode
if (System.getProperty("os.name").startsWith("Windows"))
SystemTray.FORCE_TRAY_TYPE = TrayType.Swing
CacheUtil.clear()
val systemTray = SystemTray.get() ?: return null
val mainMenu = systemTray.menu
mainMenu.add(
MenuItem(
"Open Tachidesk",
ActionListener {
try {
Desktop.browseURL("http://127.0.0.1:4567")
} catch (e1: IOException) {
e1.printStackTrace()
}
}
)
)
// systemTray.setTooltip("Tachidesk")
systemTray.setImage(icon)
// systemTray.status = "No Mail"
systemTray.getMenu().add(
MenuItem("Quit") {
systemTray.shutdown()
System.exit(0)
}
)
return systemTray
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB