fix: renovate conflict.

This commit is contained in:
oxy-macmini
2025-04-03 22:23:46 +08:00
parent 2d9a62e6eb
commit ad8f608de1
17 changed files with 80 additions and 102 deletions

View File

@ -187,4 +187,5 @@ dependencies {
implementation(libs.minabox)
implementation(libs.net.mm2d.mmupnp.mmupnp)
implementation(libs.haze)
implementation(libs.haze.materials)
}

View File

@ -27,7 +27,6 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Save
import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
@ -54,19 +53,18 @@ import com.m3u.data.database.model.epgUrlsOrXtreamXmlUrl
import com.m3u.data.parser.xtream.XtreamInfo
import com.m3u.data.repository.playlist.PlaylistRepository
import com.m3u.i18n.R.string
import com.m3u.smartphone.ui.material.components.Background
import com.m3u.smartphone.ui.material.components.PlaceholderField
import com.m3u.smartphone.ui.material.ktx.checkPermissionOrRationale
import com.m3u.smartphone.ui.material.model.LocalHazeState
import com.m3u.smartphone.ui.material.model.LocalSpacing
import com.m3u.smartphone.ui.business.configuration.components.AutoSyncProgrammesButton
import com.m3u.smartphone.ui.business.configuration.components.EpgManifestGallery
import com.m3u.smartphone.ui.business.configuration.components.SyncProgrammesButton
import com.m3u.smartphone.ui.business.configuration.components.XtreamPanel
import com.m3u.smartphone.ui.common.helper.LocalHelper
import com.m3u.smartphone.ui.common.helper.Metadata
import dev.chrisbanes.haze.HazeStyle
import dev.chrisbanes.haze.haze
import com.m3u.smartphone.ui.material.components.Background
import com.m3u.smartphone.ui.material.components.PlaceholderField
import com.m3u.smartphone.ui.material.ktx.checkPermissionOrRationale
import com.m3u.smartphone.ui.material.model.LocalHazeState
import com.m3u.smartphone.ui.material.model.LocalSpacing
import dev.chrisbanes.haze.hazeSource
import kotlinx.datetime.LocalDateTime
@Composable
@ -166,10 +164,7 @@ private fun PlaylistConfigurationScreen(
verticalArrangement = Arrangement.spacedBy(spacing.small),
contentPadding = contentPadding,
modifier = Modifier
.haze(
LocalHazeState.current,
HazeStyle(MaterialTheme.colorScheme.surface)
)
.hazeSource(LocalHazeState.current)
.fillMaxSize()
.padding(spacing.medium)
) {

View File

@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.rounded.Sort
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@ -28,25 +27,24 @@ import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.collectAsLazyPagingItems
import com.m3u.business.favorite.FavoriteViewModel
import com.m3u.core.architecture.preferences.hiltPreferences
import com.m3u.core.foundation.ui.thenIf
import com.m3u.core.util.basic.title
import com.m3u.core.wrapper.Sort
import com.m3u.data.database.model.Channel
import com.m3u.data.database.model.isSeries
import com.m3u.data.service.MediaCommand
import com.m3u.core.wrapper.Sort
import com.m3u.i18n.R
import com.m3u.smartphone.ui.material.ktx.interceptVolumeEvent
import com.m3u.core.foundation.ui.thenIf
import com.m3u.smartphone.ui.material.model.LocalHazeState
import com.m3u.smartphone.ui.business.favourite.components.FavoriteGallery
import com.m3u.smartphone.ui.common.helper.Action
import com.m3u.smartphone.ui.common.helper.LocalHelper
import com.m3u.smartphone.ui.common.helper.Metadata
import com.m3u.smartphone.ui.material.components.EpisodesBottomSheet
import com.m3u.smartphone.ui.material.components.MediaSheet
import com.m3u.smartphone.ui.material.components.MediaSheetValue
import com.m3u.smartphone.ui.material.components.SortBottomSheet
import com.m3u.smartphone.ui.common.helper.Action
import com.m3u.smartphone.ui.common.helper.LocalHelper
import com.m3u.smartphone.ui.common.helper.Metadata
import dev.chrisbanes.haze.HazeDefaults
import dev.chrisbanes.haze.haze
import com.m3u.smartphone.ui.material.ktx.interceptVolumeEvent
import com.m3u.smartphone.ui.material.model.LocalHazeState
import dev.chrisbanes.haze.hazeSource
import kotlinx.coroutines.launch
@Composable
@ -203,9 +201,6 @@ private fun FavoriteScreen(
rowCount = actualRowCount,
onClick = onClickChannel,
onLongClick = onLongClickChannel,
modifier = modifier.haze(
LocalHazeState.current,
HazeDefaults.style(MaterialTheme.colorScheme.surface)
)
modifier = modifier.hazeSource(LocalHazeState.current)
)
}

View File

@ -31,14 +31,13 @@ import com.m3u.data.database.model.epgUrlsOrXtreamXmlUrl
import com.m3u.data.database.model.fromLocal
import com.m3u.data.database.model.type
import com.m3u.i18n.R.string
import com.m3u.smartphone.ui.material.ktx.plus
import com.m3u.smartphone.ui.material.model.LocalHazeState
import com.m3u.smartphone.ui.material.model.LocalSpacing
import com.m3u.smartphone.ui.common.helper.LocalHelper
import com.m3u.smartphone.ui.common.helper.Metadata
import com.m3u.smartphone.ui.common.helper.useRailNav
import dev.chrisbanes.haze.HazeDefaults
import dev.chrisbanes.haze.haze
import com.m3u.smartphone.ui.material.ktx.plus
import com.m3u.smartphone.ui.material.model.LocalHazeState
import com.m3u.smartphone.ui.material.model.LocalSpacing
import dev.chrisbanes.haze.hazeSource
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlin.math.absoluteValue
@ -94,11 +93,7 @@ internal fun PlaylistGallery(
contentPadding = PaddingValues(vertical = spacing.medium) + contentPadding,
verticalArrangement = Arrangement.spacedBy(spacing.medium),
horizontalArrangement = Arrangement.spacedBy(spacing.medium),
modifier = modifier
.haze(
LocalHazeState.current,
HazeDefaults.style(currentHazeColor)
)
modifier = modifier.hazeSource(LocalHazeState.current)
) {
if (header != null) {
item(span = { GridItemSpan(rowCount) }) {

View File

@ -78,8 +78,10 @@ import androidx.lifecycle.repeatOnLifecycle
import com.google.accompanist.permissions.rememberPermissionState
import com.m3u.business.playlist.PlaylistViewModel
import com.m3u.core.architecture.preferences.hiltPreferences
import com.m3u.core.foundation.ui.thenIf
import com.m3u.core.util.basic.title
import com.m3u.core.wrapper.Event
import com.m3u.core.wrapper.Sort
import com.m3u.core.wrapper.eventOf
import com.m3u.data.database.model.Channel
import com.m3u.data.database.model.DataSource
@ -88,34 +90,31 @@ import com.m3u.data.database.model.isSeries
import com.m3u.data.database.model.isVod
import com.m3u.data.database.model.type
import com.m3u.data.service.MediaCommand
import com.m3u.core.wrapper.Sort
import com.m3u.i18n.R.string
import com.m3u.smartphone.ui.material.components.TextField
import com.m3u.smartphone.ui.material.ktx.checkPermissionOrRationale
import com.m3u.smartphone.ui.material.ktx.interceptVolumeEvent
import com.m3u.smartphone.ui.material.ktx.isAtTop
import com.m3u.smartphone.ui.material.ktx.only
import com.m3u.smartphone.ui.material.ktx.split
import com.m3u.core.foundation.ui.thenIf
import com.m3u.smartphone.ui.business.playlist.components.BackdropScaffold
import com.m3u.smartphone.ui.business.playlist.components.BackdropValue
import com.m3u.smartphone.ui.material.model.LocalHazeState
import com.m3u.smartphone.ui.material.model.LocalSpacing
import com.m3u.smartphone.ui.business.playlist.components.ChannelGallery
import com.m3u.smartphone.ui.business.playlist.components.PlaylistTabRow
import com.m3u.smartphone.ui.business.playlist.components.rememberBackdropScaffoldState
import com.m3u.smartphone.ui.common.helper.Action
import com.m3u.smartphone.ui.common.helper.Fob
import com.m3u.smartphone.ui.common.helper.LocalHelper
import com.m3u.smartphone.ui.common.helper.Metadata
import com.m3u.smartphone.ui.material.components.Destination
import com.m3u.smartphone.ui.material.components.EpisodesBottomSheet
import com.m3u.smartphone.ui.material.components.EventHandler
import com.m3u.smartphone.ui.material.components.MediaSheet
import com.m3u.smartphone.ui.material.components.MediaSheetValue
import com.m3u.smartphone.ui.material.components.SortBottomSheet
import com.m3u.smartphone.ui.common.helper.Action
import com.m3u.smartphone.ui.common.helper.Fob
import com.m3u.smartphone.ui.common.helper.LocalHelper
import com.m3u.smartphone.ui.common.helper.Metadata
import dev.chrisbanes.haze.HazeDefaults
import dev.chrisbanes.haze.haze
import com.m3u.smartphone.ui.material.components.TextField
import com.m3u.smartphone.ui.material.ktx.checkPermissionOrRationale
import com.m3u.smartphone.ui.material.ktx.interceptVolumeEvent
import com.m3u.smartphone.ui.material.ktx.isAtTop
import com.m3u.smartphone.ui.material.ktx.only
import com.m3u.smartphone.ui.material.ktx.split
import com.m3u.smartphone.ui.material.model.LocalHazeState
import com.m3u.smartphone.ui.material.model.LocalSpacing
import dev.chrisbanes.haze.hazeSource
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.launchIn
@ -524,10 +523,7 @@ private fun PlaylistScreen(
mediaSheetValue = MediaSheetValue.PlaylistScreen(it)
},
getProgrammeCurrently = getProgrammeCurrently,
modifier = Modifier.haze(
LocalHazeState.current,
HazeDefaults.style(MaterialTheme.colorScheme.surface)
)
modifier = Modifier.hazeSource(LocalHazeState.current)
)
}
Column(

View File

@ -29,6 +29,7 @@ import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@ -51,17 +52,15 @@ import androidx.compose.ui.platform.LocalHapticFeedback
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.material3.IconButton
import com.m3u.core.foundation.ui.thenIf
import com.m3u.smartphone.ui.material.effects.BackStackEntry
import com.m3u.smartphone.ui.material.effects.BackStackHandler
import com.m3u.smartphone.ui.material.ktx.Edge
import com.m3u.smartphone.ui.material.ktx.blurEdge
import com.m3u.core.foundation.ui.thenIf
import com.m3u.smartphone.ui.material.model.LocalHazeState
import com.m3u.smartphone.ui.material.model.LocalSpacing
import com.m3u.smartphone.ui.material.shape.AbsoluteSmoothCornerShape
import dev.chrisbanes.haze.HazeDefaults
import dev.chrisbanes.haze.haze
import dev.chrisbanes.haze.hazeSource
@Composable
internal fun PlaylistTabRow(
@ -174,10 +173,7 @@ internal fun PlaylistTabRow(
modifier = Modifier
.fillMaxSize()
.background(MaterialTheme.colorScheme.surface)
.haze(
LocalHazeState.current,
HazeDefaults.style(MaterialTheme.colorScheme.surface)
),
.hazeSource(LocalHazeState.current),
content = categoriesContent
)
} else {

View File

@ -8,7 +8,6 @@ import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.ChangeCircle
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffold
import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole
import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaffoldNavigator
@ -38,20 +37,19 @@ import com.m3u.data.database.model.ColorScheme
import com.m3u.data.database.model.DataSource
import com.m3u.data.database.model.Playlist
import com.m3u.i18n.R.string
import com.m3u.smartphone.ui.material.model.LocalHazeState
import com.m3u.smartphone.ui.business.setting.components.CanvasBottomSheet
import com.m3u.smartphone.ui.business.setting.fragments.AppearanceFragment
import com.m3u.smartphone.ui.business.setting.fragments.OptionalFragment
import com.m3u.smartphone.ui.business.setting.fragments.SubscriptionsFragment
import com.m3u.smartphone.ui.business.setting.fragments.preferences.PreferencesFragment
import com.m3u.smartphone.ui.material.components.Destination
import com.m3u.smartphone.ui.material.components.EventHandler
import com.m3u.smartphone.ui.material.components.SettingDestination
import com.m3u.smartphone.ui.common.helper.Fob
import com.m3u.smartphone.ui.common.helper.Metadata
import com.m3u.smartphone.ui.common.internal.Events
import dev.chrisbanes.haze.HazeDefaults
import dev.chrisbanes.haze.haze
import com.m3u.smartphone.ui.material.components.Destination
import com.m3u.smartphone.ui.material.components.EventHandler
import com.m3u.smartphone.ui.material.components.SettingDestination
import com.m3u.smartphone.ui.material.model.LocalHazeState
import dev.chrisbanes.haze.hazeSource
import kotlinx.coroutines.launch
@Composable
@ -303,10 +301,7 @@ private fun SettingScreen(
},
modifier = modifier
.fillMaxSize()
.haze(
LocalHazeState.current,
HazeDefaults.style(MaterialTheme.colorScheme.surface)
)
.hazeSource(LocalHazeState.current)
.testTag("feature:setting")
)
BackHandler(navigator.canNavigateBack()) {

View File

@ -40,21 +40,22 @@ import androidx.compose.ui.unit.offset
import androidx.compose.ui.util.fastForEach
import androidx.compose.ui.util.fastMap
import androidx.compose.ui.util.fastMaxOfOrNull
import com.m3u.smartphone.ui.material.components.Background
import com.m3u.smartphone.ui.material.effects.currentBackStackEntry
import com.m3u.smartphone.ui.material.model.LocalHazeState
import com.m3u.smartphone.ui.material.model.LocalSpacing
import com.m3u.smartphone.ui.common.internal.SmartphoneScaffoldImpl
import com.m3u.smartphone.ui.common.internal.TabletScaffoldImpl
import com.m3u.smartphone.ui.material.components.Destination
import com.m3u.smartphone.ui.material.components.FontFamilies
import com.m3u.smartphone.ui.common.helper.Fob
import com.m3u.smartphone.ui.common.helper.LocalHelper
import com.m3u.smartphone.ui.common.helper.Metadata
import com.m3u.smartphone.ui.common.helper.useRailNav
import com.m3u.smartphone.ui.common.internal.SmartphoneScaffoldImpl
import com.m3u.smartphone.ui.common.internal.TabletScaffoldImpl
import com.m3u.smartphone.ui.material.components.Background
import com.m3u.smartphone.ui.material.components.Destination
import com.m3u.smartphone.ui.material.components.FontFamilies
import com.m3u.smartphone.ui.material.effects.currentBackStackEntry
import com.m3u.smartphone.ui.material.model.LocalHazeState
import com.m3u.smartphone.ui.material.model.LocalSpacing
import dev.chrisbanes.haze.HazeState
import dev.chrisbanes.haze.HazeStyle
import dev.chrisbanes.haze.hazeChild
import dev.chrisbanes.haze.hazeEffect
import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
import dev.chrisbanes.haze.materials.HazeMaterials
@Composable
@OptIn(InternalComposeApi::class)
@ -109,6 +110,7 @@ internal fun Items(
}
}
@OptIn(ExperimentalHazeMaterialsApi::class)
@Composable
internal fun MainContent(
windowInsets: WindowInsets,
@ -190,7 +192,7 @@ internal fun MainContent(
}
},
modifier = Modifier
.hazeChild(hazeState, style = HazeStyle(blurRadius = 6.dp))
.hazeEffect(hazeState, HazeMaterials.ultraThin())
.fillMaxWidth()
)
},

View File

@ -14,20 +14,21 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.InternalComposeApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import com.m3u.smartphone.ui.common.Items
import com.m3u.smartphone.ui.common.MainContent
import com.m3u.smartphone.ui.common.NavigationItemLayout
import com.m3u.smartphone.ui.common.ScaffoldLayout
import com.m3u.smartphone.ui.common.ScaffoldRole
import com.m3u.smartphone.ui.common.helper.Metadata
import com.m3u.smartphone.ui.material.components.Background
import com.m3u.smartphone.ui.material.components.Destination
import com.m3u.smartphone.ui.material.ktx.plus
import com.m3u.smartphone.ui.material.model.LocalHazeState
import com.m3u.smartphone.ui.material.components.Destination
import com.m3u.smartphone.ui.common.helper.Metadata
import dev.chrisbanes.haze.HazeStyle
import dev.chrisbanes.haze.hazeChild
import dev.chrisbanes.haze.hazeEffect
import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
import dev.chrisbanes.haze.materials.HazeMaterials
@OptIn(ExperimentalHazeMaterialsApi::class)
@Composable
@InternalComposeApi
fun SmartphoneScaffoldImpl(
@ -46,7 +47,7 @@ fun SmartphoneScaffoldImpl(
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onBackground,
modifier = Modifier
.hazeChild(hazeState, style = HazeStyle(blurRadius = 6.dp, noiseFactor = 0.4f))
.hazeEffect(hazeState, HazeMaterials.ultraThin())
.fillMaxWidth()
) {
Items { currentRootDestination ->

View File

@ -125,4 +125,5 @@ dependencies {
implementation(libs.minabox)
implementation(libs.net.mm2d.mmupnp.mmupnp)
implementation(libs.haze)
implementation(libs.haze.materials)
}

View File

@ -36,7 +36,7 @@ android {
create("liteCodec") { dimension = "codec" }
}
testOptions.managedDevices.devices {
testOptions.managedDevices.allDevices {
create<ManagedVirtualDevice>("Pixel5Api31") {
device = "Pixel 5"
apiLevel = 34

View File

@ -28,7 +28,7 @@ android {
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
testOptions.managedDevices.devices {
testOptions.managedDevices.allDevices {
create<ManagedVirtualDevice>("tvApi34") {
device = "Television (1080p)"
apiLevel = 34

View File

@ -76,7 +76,7 @@ data class Channel(
fun Channel.copyXtreamEpisode(episode: XtreamChannelInfo.Episode): Channel {
val url = Url(url)
val newUrl = URLBuilder(url)
.apply { path(*url.pathSegments.dropLast(1).toTypedArray()) }
.apply { path(*url.rawSegments.dropLast(1).toTypedArray()) }
.appendPathSegments("${episode.id}.${episode.containerExtension}")
.build()
return copy(

View File

@ -60,7 +60,6 @@ import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import okhttp3.OkHttpClient
import okhttp3.Request
@ -583,7 +582,7 @@ internal class PlaylistRepositoryImpl @Inject constructor(
val playlist = checkNotNull(get(series.playlistUrl)) { "playlist is not exist" }
val seriesInfo = xtreamParser.getSeriesInfoOrThrow(
input = XtreamInput.decodeFromPlaylistUrl(playlist.url),
seriesId = Url(series.url).pathSegments.last().toInt()
seriesId = Url(series.url).rawSegments.last().toInt()
)
// fixme: do not flatmap
return seriesInfo.episodes.flatMap { it.value }

View File

@ -1,7 +1,7 @@
package com.m3u.data.tv.http
import com.m3u.data.tv.http.endpoint.Remotes
import com.m3u.data.tv.http.endpoint.Playlists
import com.m3u.data.tv.http.endpoint.Remotes
import com.m3u.data.tv.http.endpoint.SayHellos
import io.ktor.serialization.kotlinx.KotlinxWebsocketSerializationConverter
import io.ktor.serialization.kotlinx.json.json
@ -17,8 +17,8 @@ import io.ktor.server.websocket.WebSockets
import io.ktor.server.websocket.pingPeriod
import io.ktor.server.websocket.timeout
import kotlinx.serialization.json.Json
import java.time.Duration
import javax.inject.Inject
import kotlin.time.Duration.Companion.seconds
internal class HttpServerImpl @Inject constructor(
private val sayHellos: SayHellos,
@ -65,8 +65,8 @@ internal class HttpServerImpl @Inject constructor(
prettyPrint = true
}
contentConverter = KotlinxWebsocketSerializationConverter(json)
pingPeriod = Duration.ofSeconds(15)
timeout = Duration.ofSeconds(15)
pingPeriod = 15.seconds
timeout = 15.seconds
}
}

View File

@ -149,6 +149,7 @@ kotlinx-serialization-coverter-retrofit = { group = "com.jakewharton.retrofit",
kotlinx-datetime = { group = "org.jetbrains.kotlinx", name = "kotlinx-datetime", version.ref = "kotlinx-datetime" }
haze = { module = "dev.chrisbanes.haze:haze", version.ref = "haze" }
haze-materials = { module = "dev.chrisbanes.haze:haze-materials", version.ref = "haze" }
io-coil-kt = { group = "io.coil-kt", name = "coil", version.ref = "io-coil" }
io-coil-kt-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "io-coil" }

View File

@ -1,6 +1,7 @@
#Thu Apr 03 22:02:28 CST 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME