Jelajahi Sumber

code improvements

milan jurkulák 2 tahun lalu
induk
melakukan
e555e6a635

+ 0 - 2
build.gradle.kts

@@ -83,8 +83,6 @@ allprojects {
         implementation("nl.marc-apps:tts:2.5.0")
         implementation("nl.marc-apps:tts-compose:2.5.0")
 
-        // mjdev-desktop_1.0.0-1_amd64.deb
-
         // bar code
 //        implementation("io.github.alexzhirkevich:qrose-oned:1.0.1")
         // flow extensions

+ 4 - 1
src/main/kotlin/eu/mjdev/desktop/components/desktoppanel/applets/DesktopPanelFavoriteApps.kt

@@ -7,6 +7,8 @@ import androidx.compose.foundation.layout.wrapContentHeight
 import androidx.compose.foundation.lazy.LazyRow
 import androidx.compose.foundation.lazy.items
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.snapshots.SnapshotStateList
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
@@ -27,6 +29,7 @@ fun DesktopPanelFavoriteApps(
     iconPadding: PaddingValues = PaddingValues(4.dp),
     iconOuterPadding: PaddingValues = PaddingValues(2.dp),
     onTooltip: (item: Any?) -> Unit = {},
+    apps: SnapshotStateList<App> = remember(api.appsProvider.favoriteApps) { api.appsProvider.favoriteApps },
     onClick: (app: App) -> Unit = { app -> api.appsProvider.startApp(app) },
 ) = Box(
     modifier = modifier
@@ -36,7 +39,7 @@ fun DesktopPanelFavoriteApps(
         horizontalArrangement = Arrangement.Start,
         verticalAlignment = Alignment.CenterVertically
     ) {
-        items(api.appsProvider.favoriteApps) { app ->
+        items(apps) { app ->
             DesktopPanelIcon(
                 app = app,
                 isRunning = app.isRunning,

+ 38 - 25
src/main/kotlin/eu/mjdev/desktop/provider/AppsProvider.kt

@@ -9,6 +9,8 @@ import eu.mjdev.desktop.extensions.Locale.toLocale
 import eu.mjdev.desktop.helpers.exception.EmptyException.Companion.EmptyException
 import eu.mjdev.desktop.helpers.system.Command
 import eu.mjdev.desktop.helpers.system.Command.Companion.toList
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
 import java.io.File
 import java.util.*
 
@@ -16,6 +18,9 @@ import java.util.*
 class AppsProvider(
     val desktopProvider: DesktopProvider
 ) {
+    val scope
+        get() = desktopProvider.scope
+
     val homeDir by lazy { runCatching { File(System.getProperty("user.home")) }.getOrNull() }
 
     private val configDir by lazy { homeDir?.resolve(".config") }
@@ -59,45 +64,51 @@ class AppsProvider(
     private val iconThemes by lazy { runCatching { iconsDir?.listFiles() }.getOrNull() } // folders
     private val systemThemes by lazy { runCatching { themesDir?.listFiles() }.getOrNull() } // folders
 
-    private val autoStartDesktopFiles
-        get() = runCatching {
+    private val autoStartDesktopFiles by lazy {
+        runCatching {
             autostartDesktopFilesDir?.listFiles()?.map { DesktopFile(it) }
         }.getOrNull() ?: emptyList()
+    }
 
     // todo : probably not all here, need usr and local also
-    private val allAppsDesktopFilesLocal
-        get() = runCatching {
+    private val allAppsDesktopFilesLocal by lazy {
+        runCatching {
             allAppsDesktopFilesDir?.listFiles()?.filter {
                 it.extension == "desktop"
             }?.map { DesktopFile(it) }
         }.getOrNull() ?: emptyList()
+    }
 
-    private val allAppsDesktopFilesShared
-        get() = runCatching {
+    private val allAppsDesktopFilesShared by lazy {
+        runCatching {
             File("/usr/share/applications").listFiles()?.filter {
                 it.extension == "desktop"
             }?.map { DesktopFile(it) }
         }.getOrNull() ?: emptyList()
+    }
 
-    private val allAppsDesktopFilesFlatPack
-        get() = runCatching {
+    private val allAppsDesktopFilesFlatPack by lazy {
+        runCatching {
             File("/var/lib/flatpak/exports/share/applications/").listFiles()?.filter {
                 it.extension == "desktop"
             }?.map { DesktopFile(it) }
         }.getOrNull() ?: emptyList()
+    }
 
-    private val allAppsDesktopFilesSnap
-        get() = runCatching {
+    private val allAppsDesktopFilesSnap by lazy {
+        runCatching {
             File("/var/lib/snapd/desktop/applications/").listFiles()?.filter {
                 it.extension == "desktop"
             }?.map { DesktopFile(it) }
         }.getOrNull() ?: emptyList()
+    }
 
-    private val allAppsDesktopFiles
-        get() = (allAppsDesktopFilesLocal +
+    private val allAppsDesktopFiles by lazy {
+        (allAppsDesktopFilesLocal +
                 allAppsDesktopFilesShared +
                 allAppsDesktopFilesFlatPack +
                 allAppsDesktopFilesSnap).distinctBy { it.file.name }
+    }
 
     val currentLocale: Locale
         get() = userDirsLocale ?: Locale.ENGLISH
@@ -131,19 +142,21 @@ class AppsProvider(
     val favoriteApps = mutableStateListOf<App>()
 
     fun startApp(app: App) {
-        if (app.isRunning) {
-            app.requestWindowFocus()
-        } else {
-            app.onStarting {
-                favoriteApps.invalidate()
-            }.onStarted {
-                favoriteApps.invalidate()
-            }.onStop { result ->
-                favoriteApps.invalidate()
-                if (result != EmptyException) {
-                    result.printStackTrace()
-                }
-            }.start()
+        scope.launch(Dispatchers.IO) {
+            if (app.isRunning) {
+                app.requestWindowFocus()
+            } else {
+                app.onStarting {
+                    favoriteApps.invalidate()
+                }.onStarted {
+                    favoriteApps.invalidate()
+                }.onStop { result ->
+                    favoriteApps.invalidate()
+                    if (result != EmptyException) {
+                        result.printStackTrace()
+                    }
+                }.start()
+            }
         }
     }