Skip to content

Commit

Permalink
Merge pull request #5643 from aneesh1122/Fixing-YT-related-things
Browse files Browse the repository at this point in the history
Fixing ytm related things
  • Loading branch information
fast4x authored Feb 7, 2025
2 parents 8cede04 + 0402ea4 commit 1b4ab03
Show file tree
Hide file tree
Showing 22 changed files with 612 additions and 228 deletions.
12 changes: 12 additions & 0 deletions composeApp/src/androidMain/kotlin/it/fast4x/rimusic/Database.kt
Original file line number Diff line number Diff line change
Expand Up @@ -1960,6 +1960,18 @@ interface Database {
""")
fun sortSongsPlaylistByPosition( id: Long ): Flow<List<SongEntity>>

@Query("""
SELECT DISTINCT S.*, Album.title as albumTitle, Format.contentLength as contentLength
FROM Song S
INNER JOIN songplaylistmap SP ON S.id = SP.songId
LEFT JOIN SongAlbumMap ON SongAlbumMap.songId = S.id
LEFT JOIN Album ON Album.id = SongAlbumMap.albumId
LEFT JOIN Format ON Format.songId = S.id
WHERE SP.playlistId = :id
ORDER BY SP.position
""")
fun sortSongsPlaylistByPositionNoFlow( id: Long ): List<SongEntity>

@Query("""
SELECT DISTINCT S.*, Album.title as albumTitle, Format.contentLength as contentLength
FROM Song S
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import androidx.compose.animation.AnimatedContentTransitionScope
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.core.tween
import androidx.compose.animation.togetherWith
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
Expand All @@ -27,17 +28,25 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.compositeOver
import androidx.compose.ui.layout.onPlaced
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.ExperimentalTextApi
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
import androidx.media3.common.util.UnstableApi
import androidx.navigation.NavController
import it.fast4x.rimusic.Database
import it.fast4x.rimusic.MONTHLY_PREFIX
import it.fast4x.rimusic.PINNED_PREFIX
import it.fast4x.rimusic.PIPED_PREFIX
import it.fast4x.rimusic.R
import it.fast4x.rimusic.cleanPrefix
import it.fast4x.rimusic.enums.PlaylistSortBy
import it.fast4x.rimusic.enums.SortOrder
import it.fast4x.rimusic.models.Album
Expand All @@ -52,14 +61,17 @@ import it.fast4x.rimusic.utils.rememberPreference
import it.fast4x.rimusic.utils.semiBold
import kotlinx.coroutines.Dispatchers
import it.fast4x.rimusic.colorPalette
import it.fast4x.rimusic.enums.NavRoutes
import it.fast4x.rimusic.typography
import it.fast4x.rimusic.utils.isNetworkConnected

@ExperimentalTextApi
@SuppressLint("SuspiciousIndentation")
@UnstableApi
@ExperimentalAnimationApi
@Composable
fun AlbumsItemGridMenu(
navController: NavController,
onDismiss: () -> Unit,
onSelectUnselect: (() -> Unit)? = null,
onSelect: (() -> Unit)? = null,
Expand All @@ -73,6 +85,7 @@ fun AlbumsItemGridMenu(
onPlayNext: (() -> Unit)? = null,
onEnqueue: (() -> Unit)? = null,
onAddToPlaylist: ((PlaylistPreview) -> Unit)? = null,
onGoToPlaylist: ((Long) -> Unit)? = null,
onAddToFavourites: (() -> Unit)? = null,
disableScrollingText: Boolean
) {
Expand Down Expand Up @@ -102,6 +115,7 @@ fun AlbumsItemGridMenu(
}, label = ""
) { currentIsViewingPlaylists ->
if (currentIsViewingPlaylists) {
val context = LocalContext.current
val sortBy by rememberPreference(playlistSortByKey, PlaylistSortBy.DateAdded)
val sortOrder by rememberPreference(playlistSortOrderKey, SortOrder.Descending)
val playlistPreviews by remember {
Expand All @@ -110,14 +124,16 @@ fun AlbumsItemGridMenu(

val pinnedPlaylists = playlistPreviews.filter {
it.playlist.name.startsWith(PINNED_PREFIX, 0, true)
&& if (isNetworkConnected(context)) !(it.playlist.isYoutubePlaylist && !it.playlist.isEditable) else !it.playlist.isYoutubePlaylist
}

val youtubePlaylists = playlistPreviews.filter { it.playlist.isEditable && it.playlist.isYoutubePlaylist && !it.playlist.name.startsWith(PINNED_PREFIX) }

val unpinnedPlaylists = playlistPreviews.filter {
!it.playlist.name.startsWith(PINNED_PREFIX, 0, true) &&
!it.playlist.name.startsWith(MONTHLY_PREFIX, 0, true) //&&
//!it.playlist.name.startsWith(PIPED_PREFIX, 0, true)
!it.playlist.name.startsWith(MONTHLY_PREFIX, 0, true) &&
!it.playlist.isYoutubePlaylist
}

var isCreatingNewPlaylist by rememberSaveable {
mutableStateOf(false)
}
Expand Down Expand Up @@ -191,9 +207,7 @@ fun AlbumsItemGridMenu(
pinnedPlaylists.forEach { playlistPreview ->
MenuEntry(
icon = R.drawable.add_in_playlist,
text = playlistPreview.playlist.name.substringAfter(
PINNED_PREFIX
),
text = cleanPrefix(playlistPreview.playlist.name),
secondaryText = "${playlistPreview.songCount} " + stringResource(
R.string.songs
),
Expand All @@ -205,6 +219,82 @@ fun AlbumsItemGridMenu(
playlistPreview.songCount
)
)
},
trailingContent = {
if (playlistPreview.playlist.name.startsWith(PIPED_PREFIX, 0, true))
Image(
painter = painterResource(R.drawable.piped_logo),
contentDescription = null,
colorFilter = ColorFilter.tint(colorPalette().red),
modifier = Modifier
.size(18.dp)
)
if (playlistPreview.playlist.isYoutubePlaylist) {
Image(
painter = painterResource(R.drawable.ytmusic),
contentDescription = null,
colorFilter = ColorFilter.tint(
Color.Red.copy(0.75f).compositeOver(Color.White)
),
modifier = Modifier
.size(18.dp)
)
}
IconButton(
icon = R.drawable.open,
color = colorPalette().text,
onClick = {
if (onGoToPlaylist != null) {
onGoToPlaylist(playlistPreview.playlist.id)
onDismiss()
}
navController.navigate(route = "${NavRoutes.localPlaylist.name}/${playlistPreview.playlist.id}")
},
modifier = Modifier
.size(24.dp)
)
}
)
}
}
}

if (youtubePlaylists.isNotEmpty() && isNetworkConnected(context)) {
BasicText(
text = stringResource(R.string.ytm_playlists),
style = typography().m.semiBold,
modifier = Modifier.padding(start = 20.dp, top = 5.dp)
)

onAddToPlaylist?.let { onAddToPlaylist ->
youtubePlaylists.forEach { playlistPreview ->
MenuEntry(
icon = R.drawable.add_in_playlist,
text = cleanPrefix(playlistPreview.playlist.name),
secondaryText = "${playlistPreview.songCount} " + stringResource(R.string.songs),
onClick = {
onDismiss()
onAddToPlaylist(
PlaylistPreview(
playlistPreview.playlist,
playlistPreview.songCount
)
)
},
trailingContent = {
IconButton(
icon = R.drawable.open,
color = colorPalette().text,
onClick = {
if (onGoToPlaylist != null) {
onGoToPlaylist(playlistPreview.playlist.id)
onDismiss()
}
navController.navigate(route = "${NavRoutes.localPlaylist.name}/${playlistPreview.playlist.id}")
},
modifier = Modifier
.size(24.dp)
)
}
)
}
Expand All @@ -222,9 +312,7 @@ fun AlbumsItemGridMenu(
unpinnedPlaylists.forEach { playlistPreview ->
MenuEntry(
icon = R.drawable.add_in_playlist,
text = playlistPreview.playlist.name.substringAfter(
PINNED_PREFIX
),
text = cleanPrefix(playlistPreview.playlist.name),
secondaryText = "${playlistPreview.songCount} " + stringResource(
R.string.songs
),
Expand All @@ -236,6 +324,30 @@ fun AlbumsItemGridMenu(
playlistPreview.songCount
)
)
},
trailingContent = {
if (playlistPreview.playlist.name.startsWith(PIPED_PREFIX, 0, true))
Image(
painter = painterResource(R.drawable.piped_logo),
contentDescription = null,
colorFilter = ColorFilter.tint(colorPalette().red),
modifier = Modifier
.size(18.dp)
)

IconButton(
icon = R.drawable.open,
color = colorPalette().text,
onClick = {
if (onGoToPlaylist != null) {
onGoToPlaylist(playlistPreview.playlist.id)
onDismiss()
}
navController.navigate(route = "${NavRoutes.localPlaylist.name}/${playlistPreview.playlist.id}")
},
modifier = Modifier
.size(24.dp)
)
}
)
}
Expand Down
Loading

0 comments on commit 1b4ab03

Please sign in to comment.