mirror of
https://github.com/oxyroid/M3UAndroid.git
synced 2025-05-19 20:36:34 +08:00
fix: renovate conflict.
This commit is contained in:
@ -187,4 +187,5 @@ dependencies {
|
||||
implementation(libs.minabox)
|
||||
implementation(libs.net.mm2d.mmupnp.mmupnp)
|
||||
implementation(libs.haze)
|
||||
implementation(libs.haze.materials)
|
||||
}
|
||||
|
@ -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)
|
||||
) {
|
||||
|
@ -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)
|
||||
)
|
||||
}
|
@ -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) }) {
|
||||
|
@ -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(
|
||||
|
@ -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 {
|
||||
|
@ -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()) {
|
||||
|
@ -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()
|
||||
)
|
||||
},
|
||||
|
@ -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 ->
|
||||
|
@ -125,4 +125,5 @@ dependencies {
|
||||
implementation(libs.minabox)
|
||||
implementation(libs.net.mm2d.mmupnp.mmupnp)
|
||||
implementation(libs.haze)
|
||||
implementation(libs.haze.materials)
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ android {
|
||||
create("liteCodec") { dimension = "codec" }
|
||||
}
|
||||
|
||||
testOptions.managedDevices.devices {
|
||||
testOptions.managedDevices.allDevices {
|
||||
create<ManagedVirtualDevice>("Pixel5Api31") {
|
||||
device = "Pixel 5"
|
||||
apiLevel = 34
|
||||
|
@ -28,7 +28,7 @@ android {
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
testOptions.managedDevices.devices {
|
||||
testOptions.managedDevices.allDevices {
|
||||
create<ManagedVirtualDevice>("tvApi34") {
|
||||
device = "Television (1080p)"
|
||||
apiLevel = 34
|
||||
|
@ -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(
|
||||
|
@ -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 }
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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" }
|
||||
|
||||
|
3
gradle/wrapper/gradle-wrapper.properties
vendored
3
gradle/wrapper/gradle-wrapper.properties
vendored
@ -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
|
||||
|
Reference in New Issue
Block a user