diff --git a/app/src/main/kotlin/com/subtracks/data/db/LibraryDao.kt b/app/src/main/kotlin/com/subtracks/data/db/LibraryDao.kt index e7ede2be..d0cbc2c9 100644 --- a/app/src/main/kotlin/com/subtracks/data/db/LibraryDao.kt +++ b/app/src/main/kotlin/com/subtracks/data/db/LibraryDao.kt @@ -709,9 +709,12 @@ interface LibraryDao { "LEFT JOIN albums ON albums.sourceId = songs.sourceId AND albums.id = songs.albumId " + "JOIN song_downloads d ON d.sourceId = songs.sourceId AND d.songId = songs.id " + "WHERE songs.sourceId = :sourceId AND d.status = 'Completed' " + - "ORDER BY d.downloadedAt DESC, songs.title COLLATE NOCASE, songs.id", + "ORDER BY d.downloadedAt DESC, songs.title COLLATE NOCASE, songs.id LIMIT :limit", ) - fun downloadedSongs(sourceId: Long): Flow> + fun downloadedSongs( + sourceId: Long, + limit: Int, + ): Flow> @Query( "SELECT songs.id FROM songs " + diff --git a/app/src/main/kotlin/com/subtracks/data/repo/LibraryRepository.kt b/app/src/main/kotlin/com/subtracks/data/repo/LibraryRepository.kt index f0b8eca2..dc364623 100644 --- a/app/src/main/kotlin/com/subtracks/data/repo/LibraryRepository.kt +++ b/app/src/main/kotlin/com/subtracks/data/repo/LibraryRepository.kt @@ -88,7 +88,10 @@ class LibraryRepository( fun starredSongs(sourceId: Long): Flow> = pager(60) { db.libraryDao().starredSongs(sourceId) } - fun downloadedSongs(sourceId: Long): Flow> = db.libraryDao().downloadedSongs(sourceId) + fun downloadedSongs( + sourceId: Long, + limit: Int, + ): Flow> = db.libraryDao().downloadedSongs(sourceId, limit) fun downloadedSongsPage(sourceId: Long): Flow> = pager(60) { db.libraryDao().homeDownloadedSongs(sourceId) } diff --git a/app/src/main/kotlin/com/subtracks/ui/home/HomeViewModel.kt b/app/src/main/kotlin/com/subtracks/ui/home/HomeViewModel.kt index 604df50f..74548806 100644 --- a/app/src/main/kotlin/com/subtracks/ui/home/HomeViewModel.kt +++ b/app/src/main/kotlin/com/subtracks/ui/home/HomeViewModel.kt @@ -31,6 +31,7 @@ import kotlinx.coroutines.launch const val HOME_ROW_LIMIT = 10 const val HOME_STARRED_LIMIT = 5 +const val HOME_DOWNLOADED_LIMIT = 5 data class HomeFeed( val recentlyPlayedAlbums: List = emptyList(), @@ -81,9 +82,7 @@ class HomeViewModel( }.cachedIn(viewModelScope) val downloadedSongs: Flow> = - activeSource - .flatMapLatest { libraryRepository.downloadedSongs(it) } - .map { it.take(HOME_STARRED_LIMIT) } + activeSource.flatMapLatest { libraryRepository.downloadedSongs(it, HOME_DOWNLOADED_LIMIT) } val feed: StateFlow = libraryRepository.activeSourceId diff --git a/app/src/test/kotlin/com/subtracks/data/db/LibraryHomeDaoTest.kt b/app/src/test/kotlin/com/subtracks/data/db/LibraryHomeDaoTest.kt index 9ca9e555..6c1edcc8 100644 --- a/app/src/test/kotlin/com/subtracks/data/db/LibraryHomeDaoTest.kt +++ b/app/src/test/kotlin/com/subtracks/data/db/LibraryHomeDaoTest.kt @@ -188,7 +188,7 @@ class LibraryHomeDaoTest { downloads.upsert(SongDownload(sourceId, "s2", DownloadStatus.Queued)) downloads.upsert(SongDownload(sourceId, "s3", DownloadStatus.Completed)) - val downloaded = dao.downloadedSongs(sourceId).first() + val downloaded = dao.downloadedSongs(sourceId, limit = 5).first() assertEquals(listOf("s1", "s3"), downloaded.map { it.song.id }) assertEquals("cover-1", downloaded.first().coverArt) assertEquals(listOf("s1", "s3"), dao.downloadedSongIds(sourceId)) @@ -256,7 +256,8 @@ class LibraryHomeDaoTest { downloads.upsert(SongDownload(sourceId, "s3", DownloadStatus.Completed, downloadedAt = 300)) downloads.upsert(SongDownload(sourceId, "s2", DownloadStatus.Completed, downloadedAt = 200)) - assertEquals(listOf("s3", "s2", "s1"), dao.downloadedSongs(sourceId).first().map { it.song.id }) + assertEquals(listOf("s3", "s2", "s1"), dao.downloadedSongs(sourceId, limit = 5).first().map { it.song.id }) + assertEquals(listOf("s3", "s2"), dao.downloadedSongs(sourceId, limit = 2).first().map { it.song.id }) assertEquals(listOf("s3", "s2", "s1"), dao.downloadedSongIds(sourceId)) assertEquals(2L, dao.downloadedSongOrdinal(sourceId, "s1")) }