Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewrite download service #435

Draft
wants to merge 14 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
12 changes: 8 additions & 4 deletions androidApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import org.xmlpull.v1.XmlPullParserFactory
import java.io.FileInputStream
import java.util.Properties
import com.android.build.api.dsl.ApplicationVariantDimension
import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
import plugin.spmp.SpMpDeps
import plugin.spmp.getDeps

Expand Down Expand Up @@ -57,7 +58,9 @@ kotlin {
val androidMain by getting {
dependencies {
implementation(project(":shared"))
implementation(deps.get("dev.toastbits.composekit:library"))
for (dependency in deps.getAllComposeKit()) {
implementation(dependency)
}
}
}
}
Expand Down Expand Up @@ -166,16 +169,17 @@ android {
implementation(project(":shared"))

// Widget
implementation("androidx.glance:glance-appwidget:1.1.0")
implementation("androidx.glance:glance-material3:1.1.0")
val glance_version = "1.1.1"
implementation("androidx.glance:glance-appwidget:$glance_version")
implementation("androidx.glance:glance-material3:$glance_version")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
implementation(compose.runtime)
// implementation(compose.foundation)
// implementation(compose.materialIconsExtended)
// implementation(compose.ui)
// implementation(compose.material)
implementation(compose.material3)
// implementation(compose.components.resources)
implementation(compose.components.resources)
}
manifest {
srcFile("src/main/AndroidManifest.xml")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import androidx.compose.runtime.setValue
import androidx.core.view.WindowCompat
import com.toasterofbread.spmp.model.appaction.shortcut.ShortcutState
import com.toasterofbread.spmp.platform.AppContext
import dev.toastbits.composekit.platform.ApplicationContext
import dev.toastbits.composekit.context.ApplicationContext
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,33 +18,41 @@ import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.core.view.WindowCompat
import androidx.glance.GlanceId
import androidx.glance.appwidget.GlanceAppWidgetManager
import com.toasterofbread.spmp.platform.AppContext
import com.toasterofbread.spmp.platform.observeUiLanguage
import com.toasterofbread.spmp.service.playercontroller.PlayerState
import com.toasterofbread.spmp.ui.layout.nowplaying.ThemeMode
import com.toasterofbread.spmp.widget.action.TypeWidgetClickAction
import com.toasterofbread.spmp.widget.configuration.SpMpWidgetConfiguration
import com.toasterofbread.spmp.widget.configuration.type.TypeWidgetConfig
import com.toasterofbread.spmp.widget.configuration.ui.screen.WidgetConfigurationScreen
import dev.toastbits.composekit.navigation.Screen
import dev.toastbits.composekit.components.utils.modifier.background
import dev.toastbits.composekit.context.ApplicationContext
import dev.toastbits.composekit.navigation.compositionlocal.LocalNavigator
import dev.toastbits.composekit.navigation.navigator.BaseNavigator
import dev.toastbits.composekit.navigation.navigator.CurrentScreen
import dev.toastbits.composekit.navigation.navigator.ExtendableNavigator
import dev.toastbits.composekit.navigation.navigator.Navigator
import dev.toastbits.composekit.platform.ApplicationContext
import dev.toastbits.composekit.platform.LocalContext
import dev.toastbits.composekit.utils.common.plus
import dev.toastbits.composekit.utils.modifier.background
import dev.toastbits.composekit.navigation.screen.Screen
import dev.toastbits.composekit.theme.core.model.NamedTheme
import dev.toastbits.composekit.theme.core.model.SerialisableTheme
import dev.toastbits.composekit.theme.core.model.ThemeReference
import dev.toastbits.composekit.theme.core.provider.ContextThemeProvider
import dev.toastbits.composekit.theme.core.provider.ThemeProvider
import dev.toastbits.composekit.theme.core.ui.LocalThemeProvider
import dev.toastbits.composekit.util.composable.plus
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.serialization.encodeToString
import org.jetbrains.compose.resources.stringResource
import spmp.shared.generated.resources.Res
import spmp.shared.generated.resources.widget_application_theme_label

class WidgetConfigurationActivity: ComponentActivity() {
private var app_widget_id: Int = AppWidgetManager.INVALID_APPWIDGET_ID
Expand Down Expand Up @@ -103,7 +111,7 @@ class WidgetConfigurationActivity: ComponentActivity() {
widget_type = widget_type
)
}
val navigator: Navigator = ExtendableNavigator(configuration_screen)
val navigator: Navigator = BaseNavigator(configuration_screen, isTopLevel = true)

WindowCompat.setDecorFitsSystemWindows(window, false)
window.setFlags(
Expand All @@ -113,11 +121,10 @@ class WidgetConfigurationActivity: ComponentActivity() {

setContent {
val composable_coroutine_scope: CoroutineScope = rememberCoroutineScope()
val np_theme_mode: ThemeMode by context.settings.theme.NOWPLAYING_THEME_MODE.observe()
val swipe_sensitivity: Float by context.settings.player.EXPAND_SWIPE_SENSITIVITY.observe()
val np_theme_mode: ThemeMode by context.settings.Theme.NOWPLAYING_THEME_MODE.observe()
val swipe_sensitivity: Float by context.settings.Player.EXPAND_SWIPE_SENSITIVITY.observe()

CompositionLocalProvider(
LocalContext provides context,
LocalNavigator provides navigator,
LocalPlayerState providesComputed {
SpMp._player_state?.also { return@providesComputed it }
Expand All @@ -129,20 +136,34 @@ class WidgetConfigurationActivity: ComponentActivity() {
return@providesComputed dummy_player_state!!
}
) {
if (!context.theme.Update()) {
return@CompositionLocalProvider
}

val ui_language: String by context.observeUiLanguage()

SpMp.Theme(context, ui_language) {
Scaffold { inner_padding ->
navigator.CurrentScreen(
Modifier
.fillMaxSize()
.background { context.theme.background },
inner_padding + PaddingValues(20.dp)
)
SpMp.Theme(context) {
val themeProvider: ThemeProvider = LocalThemeProvider.current
val applicationTheme: ThemeReference by context.settings.Theme.CURRENT_THEME.observe()
val applicationThemeName: String = stringResource(Res.string.widget_application_theme_label)

CompositionLocalProvider(
LocalThemeProvider provides object : ContextThemeProvider(context) {
override fun getCustomTheme(index: Int): SerialisableTheme? =
if (index == -1)
NamedTheme(
NamedTheme.Type.CUSTOM,
applicationThemeName,
applicationTheme.getTheme(themeProvider)
)
else themeProvider.getCustomTheme(index)

override fun getCustomThemes(): List<NamedTheme> =
themeProvider.getCustomThemes()
}
) {
Scaffold { inner_padding ->
navigator.CurrentScreen(
Modifier
.fillMaxSize()
.background { context.theme.background },
inner_padding + PaddingValues(20.dp)
)
}
}
}
}
Expand Down Expand Up @@ -176,13 +197,15 @@ class WidgetConfigurationActivity: ComponentActivity() {
}
},
onSetDefaultBaseConfig = { new_base_configuration ->
context.settings.widget.DEFAULT_BASE_WIDGET_CONFIGURATION.set(new_base_configuration)
coroutine_scope.launch {
context.settings.Widget.DEFAULT_BASE_WIDGET_CONFIGURATION.set(new_base_configuration)
}
},
onSetDefaultTypeConfig = { new_type_configuration ->
coroutine_scope.launch {
val types: Map<SpMpWidgetType, TypeWidgetConfig<out TypeWidgetClickAction>> =
context.settings.widget.DEFAULT_TYPE_WIDGET_CONFIGURATIONS.get()
context.settings.widget.DEFAULT_TYPE_WIDGET_CONFIGURATIONS.set(
context.settings.Widget.DEFAULT_TYPE_WIDGET_CONFIGURATIONS.get()
context.settings.Widget.DEFAULT_TYPE_WIDGET_CONFIGURATIONS.set(
types.toMutableMap().apply {
set(widget_type, new_type_configuration)
}
Expand Down
24 changes: 20 additions & 4 deletions buildSrc/src/main/kotlin/plugins/spmp/Dependencies.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,21 @@ class SpMpDeps(extra: Map<String, Any>) {
throw RuntimeException("No dependency found matching artifact '$artifact")
}

fun getAllComposeKit(): List<String> =
listOf(
"dev.toastbits:composekit-application",
"dev.toastbits:composekit-commonsettings",
"dev.toastbits:composekit-components",
"dev.toastbits:composekit-context",
"dev.toastbits:composekit-navigation",
"dev.toastbits:composekit-settings",
"dev.toastbits:composekit-settingsitem-presentation",
"dev.toastbits:composekit-theme-core",
"dev.toastbits:composekit-theme-config",
"dev.toastbits:composekit-util",
"dev.toastbits:composekit-utilKt"
).map { get(it, "dev.toastbits:composekit") }

val dependencies: Map<String, DependencyInfo> =
mapOf(
"dev.toastbits:spms" to DependencyInfo(
Expand All @@ -44,8 +59,8 @@ class SpMpDeps(extra: Map<String, Any>) {
license = "GPL-3.0",
license_url = "https://github.com/toasterofbread/spmp-server/blob/6dde651ffc102d604ac7ecd5ac7471b1572fd2e6/LICENSE"
),
"dev.toastbits.composekit" to DependencyInfo(
version = "64b947f17e",
"dev.toastbits:composekit" to DependencyInfo(
version = "0.1.0-rc1",
name = "ComposeKit",
author = "toasterofbread",
url = "https://github.com/toasterofbread/composekit",
Expand Down Expand Up @@ -86,7 +101,7 @@ class SpMpDeps(extra: Map<String, Any>) {
license_url = "https://github.com/Kotlin/kotlinx.serialization/blob/51cb8e8e556983fc83a565d5f04bb089363453e0/LICENSE.txt"
),
"org.jetbrains.compose" to DependencyInfo(
version = "1.6.2",
version = "1.8.0-alpha01",
name = "Compose Multiplatform",
author = "JetBrains",
url = "https://github.com/JetBrains/compose-multiplatform",
Expand Down Expand Up @@ -142,7 +157,7 @@ class SpMpDeps(extra: Map<String, Any>) {
license_url = "https://github.com/MohamedRejeb/Ksoup/blob/5f07e799c95e518d80caf70fc586ddcc649e1315/LICENSE"
),
"com.github.toasterofbread.ComposeReorderable" to DependencyInfo(
version = "349bdb3a2a",
version = "77c7652169",
name = "ComposeReorderable",
author = "aclassen",
url = "https://github.com/aclassen/ComposeReorderable",
Expand All @@ -151,6 +166,7 @@ class SpMpDeps(extra: Map<String, Any>) {
fork_url = "https://github.com/toasterofbread/ComposeReorderable/",
// redirect = "org.burnoutcrew.composereorderable:reorderable"
),

"com.github.SvenWoltmann:color-thief-java" to DependencyInfo(
version = "v1.1.2",
name = "Color Thief Java",
Expand Down
4 changes: 3 additions & 1 deletion desktopApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,9 @@ kotlin {
implementation(compose.components.resources)
implementation(project(":shared"))

implementation(deps.get("dev.toastbits.composekit:library"))
for (dependency in deps.getAllComposeKit()) {
implementation(dependency)
}

implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:1.6.4")

Expand Down
6 changes: 3 additions & 3 deletions desktopApp/src/jvmMain/kotlin/main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ fun main(args: Array<String>) {

SpMp.init(context)

val force_software_renderer: Boolean = runBlocking { context.settings.platform.FORCE_SOFTWARE_RENDERER.get() }
val force_software_renderer: Boolean = runBlocking { context.settings.Platform.FORCE_SOFTWARE_RENDERER.get() }
if (force_software_renderer) {
System.setProperty("skiko.renderApi", "SOFTWARE")
}
Expand Down Expand Up @@ -73,7 +73,7 @@ fun main(args: Array<String>) {
}

lateinit var window: ComposeWindow
val enable_window_transparency: Boolean = runBlocking { context.settings.theme.ENABLE_WINDOW_TRANSPARENCY.get() }
val enable_window_transparency: Boolean = runBlocking { context.settings.Theme.ENABLE_WINDOW_TRANSPARENCY.get() }

val shortcut_state: ShortcutState = ShortcutState()
var player: PlayerState? = null
Expand Down Expand Up @@ -125,7 +125,7 @@ fun main(args: Array<String>) {
window.background = java.awt.Color(0, 0, 0, 0)
}

val startup_command: String = context.settings.platform.STARTUP_COMMAND.get()
val startup_command: String = context.settings.Platform.STARTUP_COMMAND.get()
if (startup_command.isBlank()) {
return@LaunchedEffect
}
Expand Down
3 changes: 3 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
vulkan-loader
xorg.libXtst
apksigcopier
gtk3

# Webview
at-spi2-atk
Expand Down Expand Up @@ -108,6 +109,8 @@
lib_paths=($(echo $NIX_LDFLAGS | grep -oP '(?<=-rpath\s| -L)[^ ]+'))
lib_paths_str=$(IFS=:; echo "''${lib_paths[*]}")
export LD_LIBRARY_PATH="$lib_paths_str:$LD_LIBRARY_PATH"

export XDG_DATA_DIRS="$XDG_DATA_DIRS:${pkgs.gtk3}/share/gsettings-schemas/gtk+3-3.24.42"
'';
};
};
Expand Down
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ android.suppressUnsupportedCompileSdk=34,35
org.jetbrains.compose.experimental.wasm.enabled=true

# Plugin versions
kotlin.version=2.0.21
kotlin.version=2.1.0
agp.version=8.4.1
compose.version=1.7.0-rc01
compose.version=1.8.0-alpha01
sqldelight.version=2.0.2

# Nix
Expand Down
1 change: 1 addition & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)
repositories {
mavenLocal()
maven("https://maven.toastbits.dev/")

google()
mavenCentral()
Expand Down
4 changes: 3 additions & 1 deletion shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,11 @@ kotlin {
implementation(compose.components.resources)

implementation(deps.get("dev.toastbits:spms"))
implementation(deps.get("dev.toastbits.composekit:library"))
implementation(deps.get("dev.toastbits.ytmkt:ytmkt"))
implementation(deps.get("dev.toastbits.kana-kt:kanakt"))
for (dependency in deps.getAllComposeKit()) {
implementation(dependency)
}

implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0-RC")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
Expand Down
Loading
Loading