Skip to content

Commit

Permalink
Fixed #372 Background Playing, Fixed #254 Play track without open pla…
Browse files Browse the repository at this point in the history
…yer screen, Bump dependencies, using Compose Compiler and Kotlin 2.0.0
  • Loading branch information
maxrave-dev committed Jul 8, 2024
1 parent dab530e commit fe998dc
Show file tree
Hide file tree
Showing 34 changed files with 2,645 additions and 2,728 deletions.
2 changes: 1 addition & 1 deletion .idea/kotlinc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.navigation.safeargs)
alias(libs.plugins.hilt.android)
alias(libs.plugins.ksp)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,18 @@ import com.maxrave.simpmusic.common.Config
import com.maxrave.simpmusic.data.model.browse.album.Track
import com.maxrave.simpmusic.data.model.home.Content
import com.maxrave.simpmusic.data.model.home.HomeItem
import com.maxrave.simpmusic.data.queue.Queue
import com.maxrave.simpmusic.databinding.ItemHomeBinding
import com.maxrave.simpmusic.extension.navigateSafe
import com.maxrave.simpmusic.extension.toTrack
import com.maxrave.simpmusic.service.PlaylistType
import com.maxrave.simpmusic.service.QueueData

class HomeItemAdapter(
private var homeItemList: ArrayList<HomeItem>,
var context: Context,
val navController: NavController,
private val onLongClickListener: HomeItemContentAdapter.OnSongOrVideoLongClickListener
private val onLongClickListener: HomeItemContentAdapter.OnSongOrVideoLongClickListener,
private val setQueueData: (queue: QueueData, type: String) -> Unit
) : RecyclerView.Adapter<HomeItemAdapter.ViewHolder>() {
inner class ViewHolder(var binding: ItemHomeBinding) : RecyclerView.ViewHolder(binding.root)

Expand Down Expand Up @@ -82,17 +84,18 @@ class HomeItemAdapter(
}
itemAdapter.setOnSongClickListener(object : HomeItemContentAdapter.onSongItemClickListener {
override fun onSongItemClick(position: Int) {
val args = Bundle()
args.putString("videoId", homeItemList[holder.bindingAdapterPosition].contents[position]?.videoId)
args.putString("from", homeItem.title)
Queue.initPlaylist(
"RDAMVM${homeItemList[holder.bindingAdapterPosition].contents[position]?.videoId}", homeItem.title, Queue.PlaylistType.RADIO
)
Log.d("HomeItemAdapter", "onSongItemClick: ${homeItemList[holder.bindingAdapterPosition].contents[position]}")
val firstQueue: Track = homeItemList[holder.bindingAdapterPosition].contents[position]!!.toTrack()
Queue.setNowPlaying(firstQueue)
args.putString("type", Config.SONG_CLICK)
navController.navigateSafe(R.id.action_global_nowPlayingFragment, args)
setQueueData(
QueueData(
listTracks = arrayListOf(firstQueue),
firstPlayedTrack = firstQueue,
playlistId = "RDAMVM${homeItemList[holder.bindingAdapterPosition].contents[position]?.videoId}",
playlistName = homeItem.title,
playlistType = PlaylistType.RADIO,
continuation = null
),
Config.SONG_CLICK
)
}
})
itemAdapter.setOnPlaylistClickListener(object : HomeItemContentAdapter.onPlaylistItemClickListener{
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/java/com/maxrave/simpmusic/common/Config.kt
Original file line number Diff line number Diff line change
Expand Up @@ -384,3 +384,10 @@ const val SELECTED_LANGUAGE = "selected_language"
const val STATUS_DONE = "status_done"

const val RESTORE_SUCCESSFUL = "restore_successful"

const val LOCAL_PLAYLIST_ID_SAVED_QUEUE = "LOCAL_PLAYLIST_ID_SAVED_QUEUE"
const val LOCAL_PLAYLIST_ID_DOWNLOADED = "LOCAL_PLAYLIST_ID_DOWNLOADED"
const val LOCAL_PLAYLIST_ID_LIKED = "LOCAL_PLAYLIST_ID_LIKED"
const val LOCAL_PLAYLIST_ID = "LOCAL_PLAYLIST_ID"
const val ASC = "ASC"
const val DESC = "DESC"
104 changes: 0 additions & 104 deletions app/src/main/java/com/maxrave/simpmusic/data/queue/Queue.kt

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ import com.maxrave.simpmusic.data.parser.search.parseSearchPlaylist
import com.maxrave.simpmusic.data.parser.search.parseSearchSong
import com.maxrave.simpmusic.data.parser.search.parseSearchVideo
import com.maxrave.simpmusic.data.parser.toListThumbnail
import com.maxrave.simpmusic.data.queue.Queue
import com.maxrave.simpmusic.extension.bestMatchingIndex
import com.maxrave.simpmusic.extension.toListTrack
import com.maxrave.simpmusic.extension.toLyrics
Expand Down Expand Up @@ -756,10 +755,11 @@ class MainRepository
suspend fun getContinueTrack(
playlistId: String,
continuation: String,
): Flow<ArrayList<Track>?> =
): Flow<Pair<ArrayList<Track>?, String?>> =
flow {
runCatching {
Queue.setContinuation(playlistId, null)
var newContinuation: String? = null
newContinuation = null
YouTube.next(
if (playlistId.startsWith("RRDAMVM")) {
WatchEndpoint(videoId = playlistId.removePrefix("RRDAMVM"))
Expand All @@ -771,17 +771,11 @@ class MainRepository
.onSuccess { next ->
val data: ArrayList<SongItem> = arrayListOf()
data.addAll(next.items)
val nextContinuation = next.continuation
if (nextContinuation != null) {
Queue.setContinuation(playlistId, nextContinuation)
} else {
Queue.setContinuation(playlistId, null)
}
emit(data.toListTrack())
newContinuation = next.continuation
emit(Pair(data.toListTrack(), newContinuation))
}.onFailure { exception ->
exception.printStackTrace()
Queue.setContinuation(playlistId, null)
emit(null)
emit(Pair(null, null))
}
}
}
Expand All @@ -790,7 +784,7 @@ class MainRepository
radioId: String,
originalTrack: SongEntity? = null,
artist: ArtistEntity? = null,
): Flow<Resource<PlaylistBrowse>> =
): Flow<Resource<Pair<PlaylistBrowse, String?>>> =
flow {
runCatching {
YouTube.next(endpoint = WatchEndpoint(playlistId = radioId)).onSuccess { next ->
Expand All @@ -807,29 +801,12 @@ class MainRepository
data.addAll(nextContinue.items)
continuation = nextContinue.continuation
if (data.size >= 50) {
val nextContinuation = nextContinue.continuation
if (nextContinuation != null) {
Queue.setContinuation(radioId, nextContinuation)
}
continuation = null
count = 3
}
Log.w("Radio", "data: ${data.size}")
count++
if (count == 3) {
val nextContinuation = nextContinue.continuation
if (nextContinuation != null) {
Queue.setContinuation(radioId, nextContinuation)
}
}
}.onFailure {
if (count == 3) {
val nextContinuation = continuation
if (nextContinuation != null) {
Queue.setContinuation(radioId, nextContinuation)
}
}
continuation = null
count++
count = 3
}
}
val listTrackResult = data.toListTrack()
Expand Down Expand Up @@ -866,11 +843,11 @@ class MainRepository
year = LocalDateTime.now().year.toString(),
)
Log.w("Repository", "playlistBrowse: $playlistBrowse")
emit(Resource.Success<PlaylistBrowse>(playlistBrowse))
emit(Resource.Success<Pair<PlaylistBrowse, String?>>(Pair(playlistBrowse, continuation)))
}
.onFailure { exception ->
exception.printStackTrace()
emit(Resource.Error<PlaylistBrowse>(exception.message.toString()))
emit(Resource.Error<Pair<PlaylistBrowse, String?>>(exception.message.toString()))
}
}
}.flowOn(Dispatchers.IO)
Expand Down Expand Up @@ -1449,26 +1426,25 @@ class MainRepository
}
}.flowOn(Dispatchers.IO)

suspend fun getRelatedData(videoId: String): Flow<Resource<ArrayList<Track>>> =
suspend fun getRelatedData(videoId: String): Flow<Resource<Pair<ArrayList<Track>, String?>>> =
flow {
runCatching {
YouTube.next(WatchEndpoint(videoId = videoId))
.onSuccess { next ->
val data: ArrayList<SongItem> = arrayListOf()
data.addAll(next.items.filter { it.id != videoId }.toSet())
val nextContinuation = next.continuation
if (nextContinuation != null) {
Log.w("Queue", "nextContinuation: $nextContinuation")
Queue.setContinuation("RDAMVM$videoId", nextContinuation)
} else {
Log.w("Related", "nextContinuation: null")
Queue.setContinuation("RDAMVM$videoId", null)
}
emit(Resource.Success<ArrayList<Track>>(data.toListTrack()))
// if (nextContinuation != null) {
// Log.w("Queue", "nextContinuation: $nextContinuation")
// Queue.setContinuation("RDAMVM$videoId", nextContinuation)
// } else {
// Log.w("Related", "nextContinuation: null")
// Queue.setContinuation("RDAMVM$videoId", null)
// }
emit(Resource.Success<Pair<ArrayList<Track>, String?>>(Pair(data.toListTrack(), nextContinuation)))
}.onFailure { exception ->
exception.printStackTrace()
Queue.setContinuation("RDAMVM$videoId", null)
emit(Resource.Error<ArrayList<Track>>(exception.message.toString()))
emit(Resource.Error<Pair<ArrayList<Track>, String?>>(exception.message.toString()))
}
}
}.flowOn(Dispatchers.IO)
Expand Down
10 changes: 10 additions & 0 deletions app/src/main/java/com/maxrave/simpmusic/extension/AllExt.kt
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,16 @@ fun VideoItem.toTrack(): Track {
)
}

@UnstableApi
fun MediaItem.isSong(): Boolean {
return this.mediaMetadata.description?.contains(MergingMediaSourceFactory.isSong) == true
}

@UnstableApi
fun MediaItem.isVideo(): Boolean {
return this.mediaMetadata.description?.contains(MergingMediaSourceFactory.isVideo) == true
}

@JvmName("SongItemtoTrack")
fun List<SongItem>?.toListTrack(): ArrayList<Track> {
val listTrack = arrayListOf<Track>()
Expand Down
Loading

0 comments on commit fe998dc

Please sign in to comment.