DesktopConfig.kt 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package org.mjdev.desktop.data
  2. import androidx.compose.ui.graphics.Color
  3. import org.mjdev.desktop.helpers.compose.ImagesProvider
  4. import kotlinx.coroutines.CoroutineScope
  5. import kotlinx.coroutines.Dispatchers
  6. import kotlinx.coroutines.launch
  7. import org.mjdev.desktop.interfaces.ITheme
  8. import org.mjdev.desktop.interfaces.IUser
  9. import org.mjdev.desktop.providers.background.ProviderErzvo
  10. import org.mjdev.desktop.providers.background.ProviderLocal
  11. import org.mjdev.desktop.providers.background.ProviderSmug
  12. @Suppress("MemberVisibilityCanBePrivate", "unused")
  13. class DesktopConfig(
  14. val scope: CoroutineScope = CoroutineScope(Dispatchers.Default),
  15. val block: DesktopConfig.() -> Unit = {}
  16. ) {
  17. val desktopBackgrounds = mutableListOf<Any>()
  18. var theme: ITheme = ITheme.DEFAULT
  19. init {
  20. block()
  21. }
  22. fun addBackground(path: String) {
  23. desktopBackgrounds.add(path)
  24. }
  25. fun addBackground(color: Color) {
  26. desktopBackgrounds.add(color)
  27. }
  28. @Suppress("UNCHECKED_CAST")
  29. fun addBackground(
  30. provider: suspend () -> Any?,
  31. ) = scope.launch(Dispatchers.Default) {
  32. provider().also { p ->
  33. when (p) {
  34. null -> Unit
  35. is Collection<*> -> desktopBackgrounds.addAll(p as Collection<Any>)
  36. else -> desktopBackgrounds.add(p)
  37. }
  38. }
  39. }
  40. private fun addBackground(
  41. provider: ImagesProvider
  42. ) = addBackground {
  43. provider.get()
  44. }
  45. companion object {
  46. val configCache = mutableMapOf<String, DesktopConfig>()
  47. private val DEFAULT = DesktopConfig {
  48. // addBackground(ProviderSmug())
  49. addBackground(ProviderErzvo())
  50. }
  51. // todo load from user settings
  52. fun load(
  53. user: IUser
  54. ): DesktopConfig = configCache[user.userName] ?: DEFAULT.apply {
  55. theme = ITheme.load(user)
  56. configCache[user.userName] = this
  57. addBackground(ProviderLocal(user))
  58. }
  59. }
  60. }