diff --git a/app/src/main/java/code/name/monkey/retromusic/db/PlaylistDao.kt b/app/src/main/java/code/name/monkey/retromusic/db/PlaylistDao.kt index 64db1ae43..860d0652c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/PlaylistDao.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/PlaylistDao.kt @@ -59,8 +59,8 @@ interface PlaylistDao { @Delete suspend fun deletePlaylistSongs(songs: List) - @Query("SELECT * FROM SongEntity WHERE playlist_creator_id= :playlistId") - fun favoritesSongsLiveData(playlistId: Long): LiveData> + @Query("SELECT * FROM SongEntity ,(SELECT playlist_id FROM PlaylistEntity WHERE playlist_name= :playlistName LIMIT 1) AS playlist WHERE playlist_creator_id= playlist.playlist_id") + fun favoritesSongsLiveData(playlistName: String): LiveData> @Query("SELECT * FROM SongEntity WHERE playlist_creator_id= :playlistId") fun favoritesSongs(playlistId: Long): List diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt index b230a22c4..c201a5278 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt @@ -24,24 +24,14 @@ import code.name.monkey.retromusic.model.* import code.name.monkey.retromusic.model.smartplaylist.NotPlayedPlaylist import code.name.monkey.retromusic.network.LastFMService import code.name.monkey.retromusic.network.Result -import code.name.monkey.retromusic.network.Result.* +import code.name.monkey.retromusic.network.Result.Error +import code.name.monkey.retromusic.network.Result.Success import code.name.monkey.retromusic.network.model.LastFmAlbum import code.name.monkey.retromusic.network.model.LastFmArtist -import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.logD import code.name.monkey.retromusic.util.logE -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.flow interface Repository { - fun songsFlow(): Flow>> - fun albumsFlow(): Flow>> - fun artistsFlow(): Flow>> - fun playlistsFlow(): Flow>> - fun genresFlow(): Flow>> fun historySong(): List fun favorites(): LiveData> fun observableHistorySongs(): LiveData> @@ -70,14 +60,10 @@ interface Repository { suspend fun topAlbumsHome(): Home suspend fun recentAlbumsHome(): Home suspend fun favoritePlaylistHome(): Home - suspend fun suggestionsHome(): Home suspend fun suggestions(): List suspend fun genresHome(): Home suspend fun playlists(): Home suspend fun homeSections(): List - - @ExperimentalCoroutinesApi - suspend fun homeSectionsFlow(): Flow>> suspend fun playlist(playlistId: Long): Playlist suspend fun fetchPlaylistWithSongs(): List suspend fun playlistSongs(playlistWithSongs: PlaylistWithSongs): List @@ -127,10 +113,9 @@ class RealRepository( private val searchRepository: RealSearchRepository, private val topPlayedRepository: TopPlayedRepository, private val roomRepository: RoomRepository, - private val localDataRepository: LocalDataRepository + private val localDataRepository: LocalDataRepository, ) : Repository { - override suspend fun deleteSongs(songs: List) = roomRepository.deleteSongs(songs) override suspend fun contributor(): List = localDataRepository.contributors() @@ -191,7 +176,7 @@ class RealRepository( override suspend fun artistInfo( name: String, lang: String?, - cache: String? + cache: String?, ): Result { return try { Success(lastFMService.artistInfo(name, lang, cache)) @@ -203,7 +188,7 @@ class RealRepository( override suspend fun albumInfo( artist: String, - album: String + album: String, ): Result { return try { val lastFmAlbum = lastFMService.albumInfo(artist, album) @@ -214,33 +199,6 @@ class RealRepository( } } - @ExperimentalCoroutinesApi - override suspend fun homeSectionsFlow(): Flow>> { - val homes = MutableStateFlow>>(value = Loading) - val homeSections = mutableListOf() - val sections = listOf( - topArtistsHome(), - topAlbumsHome(), - recentArtistsHome(), - recentAlbumsHome(), - suggestionsHome(), - favoritePlaylistHome(), - genresHome() - ) - for (section in sections) { - if (section.arrayList.isNotEmpty()) { - logD("${section.homeSection} -> ${section.arrayList.size}") - homeSections.add(section) - } - } - if (homeSections.isEmpty()) { - homes.value = Error(Exception(Throwable("No items"))) - } else { - homes.value = Success(homeSections) - } - return homes - } - override suspend fun homeSections(): List { val homeSections = mutableListOf() val sections: List = listOf( @@ -357,27 +315,6 @@ class RealRepository( override fun favorites(): LiveData> = roomRepository.favoritePlaylistLiveData(context.getString(R.string.favorites)) - var suggestions = Home( - listOf(), SUGGESTIONS, - R.string.suggestion_songs - ) - - override suspend fun suggestionsHome(): Home { - if (!PreferenceUtil.homeSuggestions) return Home( - listOf(), - SUGGESTIONS, - R.string.suggestion_songs - ) - // Don't reload Suggestions everytime - if (suggestions.arrayList.isEmpty()) { - val songs = NotPlayedPlaylist().songs().shuffled().takeIf { - it.size > 9 - } ?: emptyList() - suggestions = Home(songs, SUGGESTIONS, R.string.suggestion_songs) - } - return suggestions - } - override suspend fun suggestions(): List { return NotPlayedPlaylist().songs().shuffled().takeIf { it.size > 9 @@ -420,54 +357,4 @@ class RealRepository( } return Home(songs, FAVOURITES, R.string.favorites) } - - override fun songsFlow(): Flow>> = flow { - emit(Loading) - val data = songRepository.songs() - if (data.isEmpty()) { - emit(Error(Exception(Throwable("No items")))) - } else { - emit(Success(data)) - } - } - - override fun albumsFlow(): Flow>> = flow { - emit(Loading) - val data = albumRepository.albums() - if (data.isEmpty()) { - emit(Error(Exception(Throwable("No items")))) - } else { - emit(Success(data)) - } - } - - override fun artistsFlow(): Flow>> = flow { - emit(Loading) - val data = artistRepository.artists() - if (data.isEmpty()) { - emit(Error(Exception(Throwable("No items")))) - } else { - emit(Success(data)) - } - } - - override fun playlistsFlow(): Flow>> = flow { - emit(Loading) - val data = playlistRepository.playlists() - if (data.isEmpty()) { - emit(Error(Exception(Throwable("No items")))) - } else { - emit(Success(data)) - } - } - - override fun genresFlow(): Flow>> = flow { - emit(Loading) - val data = genreRepository.genres() - if (data.isEmpty()) { - emit(Error(Exception(Throwable("No items")))) - } else { - emit(Success(data)) - } - } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt index 31b3dfc5c..876b876a8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt @@ -144,9 +144,7 @@ class RealRoomRepository( override fun historySongs(): List = historyDao.historySongs() override fun favoritePlaylistLiveData(favorite: String): LiveData> = - playlistDao.favoritesSongsLiveData( - playlistDao.playlist(favorite).first().playListId - ) + playlistDao.favoritesSongsLiveData(favorite) override suspend fun favoritePlaylistSongs(favorite: String): List = if (playlistDao.playlist(favorite).isNotEmpty()) playlistDao.favoritesSongs(