Skip to content

Commit 2065a6b

Browse files
author
Minh Nguyen Duc Tuan
committed
feat: Add cookie handling and integrate ytdlp library for improved video streaming
1 parent 9da099a commit 2065a6b

14 files changed

Lines changed: 1559 additions & 161 deletions

File tree

app/src/main/java/com/maxrave/simpmusic/ui/component/LiquidGlassAppBottomNavigationBar.kt

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.maxrave.simpmusic.ui.component
22

33
import android.annotation.SuppressLint
4+
import android.net.http.SslCertificate.restoreState
5+
import android.net.http.SslCertificate.saveState
46
import androidx.annotation.StringRes
57
import androidx.compose.animation.AnimatedVisibility
68
import androidx.compose.animation.core.spring
@@ -28,6 +30,7 @@ import androidx.compose.material.icons.filled.Search
2830
import androidx.compose.material.icons.outlined.Home
2931
import androidx.compose.material.icons.outlined.Search
3032
import androidx.compose.material.icons.rounded.Home
33+
import androidx.compose.material.icons.rounded.LibraryMusic
3134
import androidx.compose.material.icons.rounded.Search
3235
import androidx.compose.material3.Button
3336
import androidx.compose.material3.ButtonDefaults
@@ -52,6 +55,7 @@ import androidx.compose.ui.Alignment
5255
import androidx.compose.ui.Modifier
5356
import androidx.compose.ui.graphics.Color
5457
import androidx.compose.ui.layout.layoutId
58+
import androidx.compose.ui.layout.onGloballyPositioned
5559
import androidx.compose.ui.platform.LocalDensity
5660
import androidx.compose.ui.res.stringResource
5761
import androidx.compose.ui.unit.dp
@@ -60,6 +64,7 @@ import androidx.constraintlayout.compose.ConstraintSet
6064
import androidx.constraintlayout.compose.Dimension
6165
import androidx.constraintlayout.compose.Visibility
6266
import androidx.lifecycle.compose.collectAsStateWithLifecycle
67+
import androidx.lifecycle.viewmodel.compose.viewModel
6368
import androidx.navigation.NavController
6469
import androidx.navigation.NavDestination.Companion.hasRoute
6570
import androidx.navigation.NavDestination.Companion.hierarchy
@@ -146,9 +151,25 @@ fun LiquidGlassAppBottomNavigationBar(
146151
isExpanded = !isInSearchDestination
147152
}
148153

149-
val constraintSet by remember {
150-
derivedStateOf {
154+
var updateConstraints by remember {
155+
mutableStateOf(true)
156+
}
157+
158+
var constraintSet by remember {
159+
mutableStateOf(
151160
decoupledConstraints(isShowMiniPlayer, isExpanded)
161+
)
162+
}
163+
164+
LaunchedEffect(isShowMiniPlayer, isExpanded) {
165+
constraintSet = decoupledConstraints(isShowMiniPlayer, isExpanded)
166+
updateConstraints = false
167+
}
168+
169+
LaunchedEffect(updateConstraints) {
170+
if (updateConstraints) {
171+
constraintSet = decoupledConstraints(isShowMiniPlayer, isExpanded)
172+
updateConstraints = false
152173
}
153174
}
154175

@@ -191,7 +212,9 @@ fun LiquidGlassAppBottomNavigationBar(
191212
} else {
192213
Modifier.wrapContentSize()
193214
},
194-
),
215+
).onGloballyPositioned {
216+
updateConstraints = true
217+
},
195218
contentPadding =
196219
PaddingValues(
197220
horizontal = if (isExpanded) 4.dp else 0.dp,
@@ -341,15 +364,15 @@ fun LiquidGlassAppBottomNavigationBar(
341364
) {
342365
Icon(
343366
when (selectedIndex) {
344-
BottomNavScreen.Home.ordinal -> Icons.Outlined.Home
367+
BottomNavScreen.Home.ordinal -> Icons.Rounded.Home
345368
BottomNavScreen.Search.ordinal ->
346369
when (previousScreen) {
347-
BottomNavScreen.Home -> Icons.Outlined.Home
348-
BottomNavScreen.Library -> Icons.Filled.LibraryMusic
370+
BottomNavScreen.Home -> Icons.Rounded.Home
371+
BottomNavScreen.Library -> Icons.Rounded.LibraryMusic
349372
else -> Icons.Filled.Search
350373
}
351374

352-
BottomNavScreen.Library.ordinal -> Icons.Filled.LibraryMusic
375+
BottomNavScreen.Library.ordinal -> Icons.Rounded.LibraryMusic
353376
else -> Icons.Outlined.Home
354377
},
355378
"",
@@ -419,7 +442,6 @@ private fun decoupledConstraints(
419442
isExpanded: Boolean,
420443
): ConstraintSet =
421444
ConstraintSet {
422-
Logger.w(TAG, "decoupledConstraints: isExpanded: $isExpanded, isMiniplayerShow: $isMiniplayerShow")
423445
val toolbar = createRefFor("toolbar")
424446
constrain(toolbar) {
425447
bottom.linkTo(parent.bottom)

app/src/main/java/com/maxrave/simpmusic/viewModel/SettingsViewModel.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import com.maxrave.common.SETTINGS_FILENAME
2525
import com.maxrave.common.VIDEO_QUALITY
2626
import com.maxrave.domain.data.entities.DownloadState
2727
import com.maxrave.domain.data.entities.GoogleAccountEntity
28+
import com.maxrave.domain.extension.toNetScapeString
2829
import com.maxrave.domain.manager.DataStoreManager
2930
import com.maxrave.domain.mediaservice.handler.DownloadHandler
3031
import com.maxrave.domain.repository.AccountRepository
@@ -1218,6 +1219,10 @@ class SettingsViewModel(
12181219
"AccountThumbUrl",
12191220
accountInfo.thumbnails.lastOrNull()?.url ?: "",
12201221
)
1222+
val cookieItem = commonRepository.getCookiesFromInternalDatabase(Config.YOUTUBE_MUSIC_MAIN_URL)
1223+
commonRepository.writeTextToFile(cookieItem.toNetScapeString(), (application.filesDir / "ytdlp-cookie.txt").path).let {
1224+
Logger.d("getAllGoogleAccount", "addAccount: write cookie file: $it")
1225+
}
12211226
accountRepository
12221227
.insertGoogleAccount(
12231228
GoogleAccountEntity(
@@ -1226,6 +1231,7 @@ class SettingsViewModel(
12261231
thumbnailUrl = accountInfo.thumbnails.lastOrNull()?.url ?: "",
12271232
cache = cookie,
12281233
isUsed = true,
1234+
netscapeCookie = cookieItem.toNetScapeString()
12291235
),
12301236
).firstOrNull()
12311237
?.let {
@@ -1273,6 +1279,9 @@ class SettingsViewModel(
12731279
?.let {
12741280
Logger.w("getAllGoogleAccount", "set used: $it")
12751281
}
1282+
acc.netscapeCookie?.let { commonRepository.writeTextToFile(it, (application.filesDir / "ytdlp-cookie.txt").path) }.let {
1283+
Logger.d("getAllGoogleAccount", "addAccount: write cookie file: $it")
1284+
}
12761285
dataStoreManager.setCookie(acc.cache ?: "")
12771286
dataStoreManager.setLoggedIn(true)
12781287
delay(500)

0 commit comments

Comments
 (0)