Skip to content

Commit d04408b

Browse files
committed
refactor: better file names & dao
1 parent 8d90131 commit d04408b

File tree

91 files changed

+1134
-967
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

91 files changed

+1134
-967
lines changed

app/src/main/java/io/github/zyrouge/symphony/services/AppMeta.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.github.zyrouge.symphony.services
22

33
import io.github.zyrouge.symphony.BuildConfig
4-
import io.github.zyrouge.symphony.utils.HttpClient
4+
import io.github.zyrouge.symphony.utils.DefaultHttpClient
55
import io.github.zyrouge.symphony.utils.Logger
66
import okhttp3.CacheControl
77
import okhttp3.Request
@@ -46,7 +46,7 @@ object AppMeta {
4646
.url(latestReleaseUrl)
4747
.cacheControl(CacheControl.FORCE_NETWORK)
4848
.build()
49-
val res = HttpClient.newCall(req).execute()
49+
val res = DefaultHttpClient.newCall(req).execute()
5050
val content = res.body?.string() ?: ""
5151
val json = JSONObject(content)
5252
val tagName = json.getString("tag_name")
@@ -68,7 +68,7 @@ object AppMeta {
6868
.url(latestReleaseUrl)
6969
.cacheControl(CacheControl.FORCE_NETWORK)
7070
.build()
71-
val res = HttpClient.newCall(req).execute()
71+
val res = DefaultHttpClient.newCall(req).execute()
7272
val content = res.body?.string() ?: ""
7373
val json = JSONArray(content)
7474
for (i in 0 until json.length()) {

app/src/main/java/io/github/zyrouge/symphony/services/Settings.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import io.github.zyrouge.symphony.ui.view.NowPlayingControlsLayout
1919
import io.github.zyrouge.symphony.ui.view.NowPlayingLyricsLayout
2020
import io.github.zyrouge.symphony.ui.view.home.ForYou
2121
import io.github.zyrouge.symphony.utils.ImagePreserver
22-
import io.github.zyrouge.symphony.utils.StringListUtils
22+
import io.github.zyrouge.symphony.utils.StringSorter
2323
import kotlinx.coroutines.flow.MutableStateFlow
2424
import kotlinx.coroutines.flow.asStateFlow
2525
import kotlinx.coroutines.flow.update
@@ -234,8 +234,8 @@ class Settings(private val symphony: Symphony) {
234234
val lastUsedArtistSongsSortReverse = BooleanEntry("last_used_artist_songs_sort_reverse", false)
235235
val lastUsedTreePathSortBy = EnumEntry(
236236
"last_used_tree_path_sort_by",
237-
enumEntries<StringListUtils.SortBy>(),
238-
StringListUtils.SortBy.NAME,
237+
enumEntries<StringSorter.SortBy>(),
238+
StringSorter.SortBy.NAME,
239239
)
240240
val lastUsedTreePathSortReverse = BooleanEntry("last_used_tree_path_sort_reverse", false)
241241
val lastUsedFoldersHorizontalGridColumns = IntEntry(

app/src/main/java/io/github/zyrouge/symphony/services/database/Database.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ class Database(symphony: Symphony) {
1717
val mediaTreeLyricFilesIdGenerator = KeyGenerator.TimeCounterRandomMix()
1818
val playlistsIdGenerator = KeyGenerator.TimeCounterRandomMix()
1919
val playlistSongMappingIdGenerator = KeyGenerator.TimeCounterRandomMix()
20+
val songQueueSongMappingIdGenerator = KeyGenerator.TimeCounterRandomMix()
21+
val songQueueIdGenerator = KeyGenerator.TimeCounterRandomMix()
2022

2123
val albums get() = persistent.albums()
2224
val albumArtistMapping get() = persistent.albumArtistMapping()

app/src/main/java/io/github/zyrouge/symphony/services/database/store/AlbumArtistMappingStore.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import androidx.room.OnConflictStrategy
66
import io.github.zyrouge.symphony.services.groove.entities.AlbumArtistMapping
77

88
@Dao
9-
interface AlbumArtistMappingStore {
9+
abstract class AlbumArtistMappingStore {
1010
@Insert(onConflict = OnConflictStrategy.REPLACE)
11-
suspend fun upsert(vararg entities: AlbumArtistMapping)
11+
abstract suspend fun upsert(vararg entities: AlbumArtistMapping)
1212
}

app/src/main/java/io/github/zyrouge/symphony/services/database/store/AlbumComposerMappingStore.kt

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,19 @@ import io.github.zyrouge.symphony.services.groove.entities.AlbumComposerMapping
77
import io.github.zyrouge.symphony.services.groove.repositories.SongRepository
88

99
@Dao
10-
interface AlbumComposerMappingStore {
10+
abstract class AlbumComposerMappingStore {
1111
@Insert(onConflict = OnConflictStrategy.REPLACE)
12-
suspend fun upsert(vararg entities: AlbumComposerMapping)
13-
}
12+
abstract suspend fun upsert(vararg entities: AlbumComposerMapping)
1413

15-
fun AlbumComposerMappingStore.valuesMappedAsFlow(
16-
songStore: SongStore,
17-
id: String,
18-
sortBy: SongRepository.SortBy,
19-
sortReverse: Boolean,
20-
) = songStore.valuesAsFlow(
21-
sortBy,
22-
sortReverse,
23-
additionalClauseBeforeJoins = "JOIN ${AlbumComposerMapping.TABLE}.${AlbumComposerMapping.COLUMN_COMPOSER_ID} = ? ",
24-
additionalArgsBeforeJoins = arrayOf(id),
25-
)
14+
fun valuesMappedAsFlow(
15+
songStore: SongStore,
16+
id: String,
17+
sortBy: SongRepository.SortBy,
18+
sortReverse: Boolean,
19+
) = songStore.valuesAsFlow(
20+
sortBy,
21+
sortReverse,
22+
additionalClauseBeforeJoins = "JOIN ${AlbumComposerMapping.TABLE}.${AlbumComposerMapping.COLUMN_COMPOSER_ID} = ? ",
23+
additionalArgsBeforeJoins = arrayOf(id),
24+
)
25+
}

app/src/main/java/io/github/zyrouge/symphony/services/database/store/AlbumSongMappingStore.kt

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,33 @@ import io.github.zyrouge.symphony.services.groove.repositories.SongRepository
1111
import kotlinx.coroutines.flow.Flow
1212

1313
@Dao
14-
interface AlbumSongMappingStore {
14+
abstract class AlbumSongMappingStore {
1515
@Insert(onConflict = OnConflictStrategy.REPLACE)
16-
suspend fun upsert(vararg entities: AlbumSongMapping)
16+
abstract suspend fun upsert(vararg entities: AlbumSongMapping)
1717

1818
@RawQuery(observedEntities = [SongArtworkIndex::class, AlbumSongMapping::class])
19-
fun findTop4SongArtworksAsFlowRaw(query: SimpleSQLiteQuery): Flow<List<SongArtworkIndex>>
20-
}
19+
protected abstract fun findTop4SongArtworksAsFlow(query: SimpleSQLiteQuery): Flow<List<SongArtworkIndex>>
2120

22-
fun AlbumSongMappingStore.valuesMappedAsFlow(
23-
songStore: SongStore,
24-
id: String,
25-
sortBy: SongRepository.SortBy,
26-
sortReverse: Boolean,
27-
) = songStore.valuesAsFlow(
28-
sortBy,
29-
sortReverse,
30-
additionalClauseBeforeJoins = "JOIN ${AlbumSongMapping.TABLE}.${AlbumSongMapping.COLUMN_ALBUM_ID} = ? ",
31-
additionalArgsBeforeJoins = arrayOf(id),
32-
)
21+
fun findTop4SongArtworksAsFlow(albumId: String): Flow<List<SongArtworkIndex>> {
22+
val query = "SELECT ${SongArtworkIndex.TABLE}.* " +
23+
"FROM ${SongArtworkIndex.TABLE} " +
24+
"LEFT JOIN ${AlbumSongMapping.TABLE} ON ${AlbumSongMapping.TABLE}.${AlbumSongMapping.COLUMN_ALBUM_ID} = ? AND ${AlbumSongMapping.TABLE}.${AlbumSongMapping.COLUMN_SONG_ID} = ${SongArtworkIndex.TABLE}.${SongArtworkIndex.COLUMN_SONG_ID} " +
25+
"WHERE ${SongArtworkIndex.TABLE}.${SongArtworkIndex.COLUMN_FILE} != null " +
26+
"ORDER BY DESC " +
27+
"LIMIT 4"
28+
val args = arrayOf(albumId)
29+
return findTop4SongArtworksAsFlow(SimpleSQLiteQuery(query, args))
30+
}
3331

34-
fun AlbumSongMappingStore.findTop4SongArtworksAsFlow(albumId: String): Flow<List<SongArtworkIndex>> {
35-
val query = "SELECT ${SongArtworkIndex.TABLE}.* " +
36-
"FROM ${SongArtworkIndex.TABLE} " +
37-
"LEFT JOIN ${AlbumSongMapping.TABLE} ON ${AlbumSongMapping.TABLE}.${AlbumSongMapping.COLUMN_ALBUM_ID} = ? AND ${AlbumSongMapping.TABLE}.${AlbumSongMapping.COLUMN_SONG_ID} = ${SongArtworkIndex.TABLE}.${SongArtworkIndex.COLUMN_SONG_ID} " +
38-
"WHERE ${SongArtworkIndex.TABLE}.${SongArtworkIndex.COLUMN_FILE} != null " +
39-
"ORDER BY DESC " +
40-
"LIMIT 4"
41-
val args = arrayOf(albumId)
42-
return findTop4SongArtworksAsFlowRaw(SimpleSQLiteQuery(query, args))
32+
fun valuesMappedAsFlow(
33+
songStore: SongStore,
34+
id: String,
35+
sortBy: SongRepository.SortBy,
36+
sortReverse: Boolean,
37+
) = songStore.valuesAsFlow(
38+
sortBy,
39+
sortReverse,
40+
additionalClauseBeforeJoins = "JOIN ${AlbumSongMapping.TABLE}.${AlbumSongMapping.COLUMN_ALBUM_ID} = ? ",
41+
additionalArgsBeforeJoins = arrayOf(id),
42+
)
4343
}

app/src/main/java/io/github/zyrouge/symphony/services/database/store/AlbumStore.kt

Lines changed: 60 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package io.github.zyrouge.symphony.services.database.store
22

33
import androidx.room.Dao
44
import androidx.room.Insert
5-
import androidx.room.Query
65
import androidx.room.RawQuery
76
import androidx.room.Update
87
import androidx.sqlite.db.SimpleSQLiteQuery
@@ -15,68 +14,74 @@ import io.github.zyrouge.symphony.services.groove.repositories.AlbumRepository
1514
import kotlinx.coroutines.flow.Flow
1615

1716
@Dao
18-
interface AlbumStore {
17+
abstract class AlbumStore {
1918
@Insert
20-
suspend fun insert(vararg entities: Album): List<String>
19+
abstract suspend fun insert(vararg entities: Album): List<String>
2120

2221
@Update
23-
suspend fun update(vararg entities: Album): Int
22+
abstract suspend fun update(vararg entities: Album): Int
2423

25-
@Query("SELECT * FROM ${Album.TABLE} WHERE ${Album.COLUMN_NAME} = :name LIMIT 1")
26-
fun findByName(name: String): Album?
24+
@RawQuery
25+
protected abstract fun findByName(query: SimpleSQLiteQuery): Album?
2726

28-
@RawQuery(observedEntities = [Album::class, AlbumArtistMapping::class, AlbumSongMapping::class])
29-
fun findByIdAsFlowRaw(query: SupportSQLiteQuery): Flow<Album.AlongAttributes?>
27+
fun findByName(name: String): Album? {
28+
val query = "SELECT * FROM ${Album.TABLE} WHERE ${Album.COLUMN_NAME} = ? LIMIT 1"
29+
val args = arrayOf(name)
30+
return findByName(SimpleSQLiteQuery(query, args))
31+
}
3032

3133
@RawQuery(observedEntities = [Album::class, AlbumArtistMapping::class, AlbumSongMapping::class])
32-
fun valuesAsFlowRaw(query: SupportSQLiteQuery): Flow<List<Album.AlongAttributes>>
33-
}
34+
protected abstract fun findByIdAsFlow(query: SupportSQLiteQuery): Flow<Album.AlongAttributes?>
3435

35-
fun AlbumStore.findByIdAsFlow(id: String): Flow<Album.AlongAttributes?> {
36-
val query = "SELECT ${Album.TABLE}.*, " +
37-
"COUNT(${AlbumSongMapping.TABLE}.${AlbumSongMapping.COLUMN_SONG_ID}) as ${Album.AlongAttributes.EMBEDDED_TRACKS_COUNT}, " +
38-
"COUNT(${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.COLUMN_ARTIST_ID}) as ${Album.AlongAttributes.EMBEDDED_ARTISTS_COUNT} " +
39-
"FROM ${Album.TABLE} " +
40-
"LEFT JOIN ${AlbumSongMapping.TABLE} ON ${AlbumSongMapping.TABLE}.${AlbumSongMapping.COLUMN_ALBUM_ID} = ${Album.TABLE}.${Album.COLUMN_ID} " +
41-
"LEFT JOIN ${AlbumArtistMapping.TABLE} ON ${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.COLUMN_ALBUM_ID} = ${Album.TABLE}.${Album.COLUMN_ID} " +
42-
"WHERE ${Album.COLUMN_ID} = ? " +
43-
"LIMIT 1"
44-
val args = arrayOf(id)
45-
return findByIdAsFlowRaw(SimpleSQLiteQuery(query, args))
46-
}
36+
fun findByIdAsFlow(id: String): Flow<Album.AlongAttributes?> {
37+
val query = "SELECT ${Album.TABLE}.*, " +
38+
"COUNT(${AlbumSongMapping.TABLE}.${AlbumSongMapping.COLUMN_SONG_ID}) as ${Album.AlongAttributes.EMBEDDED_TRACKS_COUNT}, " +
39+
"COUNT(${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.COLUMN_ARTIST_ID}) as ${Album.AlongAttributes.EMBEDDED_ARTISTS_COUNT} " +
40+
"FROM ${Album.TABLE} " +
41+
"LEFT JOIN ${AlbumSongMapping.TABLE} ON ${AlbumSongMapping.TABLE}.${AlbumSongMapping.COLUMN_ALBUM_ID} = ${Album.TABLE}.${Album.COLUMN_ID} " +
42+
"LEFT JOIN ${AlbumArtistMapping.TABLE} ON ${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.COLUMN_ALBUM_ID} = ${Album.TABLE}.${Album.COLUMN_ID} " +
43+
"WHERE ${Album.COLUMN_ID} = ? " +
44+
"LIMIT 1"
45+
val args = arrayOf(id)
46+
return findByIdAsFlow(SimpleSQLiteQuery(query, args))
47+
}
48+
49+
@RawQuery(observedEntities = [Album::class, AlbumArtistMapping::class, AlbumSongMapping::class])
50+
protected abstract fun valuesAsFlow(query: SupportSQLiteQuery): Flow<List<Album.AlongAttributes>>
4751

48-
fun AlbumStore.valuesAsFlow(
49-
sortBy: AlbumRepository.SortBy,
50-
sortReverse: Boolean,
51-
artistId: String? = null,
52-
): Flow<List<Album.AlongAttributes>> {
53-
val aliasFirstArtist = "firstArtist"
54-
val embeddedArtistName = "firstArtistName"
55-
val orderBy = when (sortBy) {
56-
AlbumRepository.SortBy.CUSTOM -> "${Album.TABLE}.${Album.COLUMN_ID}"
57-
AlbumRepository.SortBy.ALBUM_NAME -> "${Album.TABLE}.${Album.COLUMN_NAME}"
58-
AlbumRepository.SortBy.ARTIST_NAME -> embeddedArtistName
59-
AlbumRepository.SortBy.YEAR -> "${Album.TABLE}.${Album.COLUMN_START_YEAR}"
60-
AlbumRepository.SortBy.TRACKS_COUNT -> Album.AlongAttributes.EMBEDDED_TRACKS_COUNT
61-
AlbumRepository.SortBy.ARTISTS_COUNT -> Album.AlongAttributes.EMBEDDED_ARTISTS_COUNT
52+
fun valuesAsFlow(
53+
sortBy: AlbumRepository.SortBy,
54+
sortReverse: Boolean,
55+
artistId: String? = null,
56+
): Flow<List<Album.AlongAttributes>> {
57+
val aliasFirstArtist = "firstArtist"
58+
val embeddedArtistName = "firstArtistName"
59+
val orderBy = when (sortBy) {
60+
AlbumRepository.SortBy.CUSTOM -> "${Album.TABLE}.${Album.COLUMN_ID}"
61+
AlbumRepository.SortBy.ALBUM_NAME -> "${Album.TABLE}.${Album.COLUMN_NAME}"
62+
AlbumRepository.SortBy.ARTIST_NAME -> embeddedArtistName
63+
AlbumRepository.SortBy.YEAR -> "${Album.TABLE}.${Album.COLUMN_START_YEAR}"
64+
AlbumRepository.SortBy.TRACKS_COUNT -> Album.AlongAttributes.EMBEDDED_TRACKS_COUNT
65+
AlbumRepository.SortBy.ARTISTS_COUNT -> Album.AlongAttributes.EMBEDDED_ARTISTS_COUNT
66+
}
67+
val orderDirection = if (sortReverse) "DESC" else "ASC"
68+
val artistQuery = "SELECT" +
69+
"TOP 1 ${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.COLUMN_ARTIST_ID} " +
70+
"FROM ${AlbumArtistMapping.TABLE} " +
71+
"WHERE ${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.COLUMN_ALBUM_ID} = ${Album.COLUMN_ID} " +
72+
"ORDER BY ${AlbumArtistMapping.COLUMN_IS_ALBUM_ARTIST} DESC"
73+
val albumArtistMappingJoin = "" +
74+
(if (artistId != null) "${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.COLUMN_ARTIST_ID} = ? " else "") +
75+
"${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.COLUMN_ALBUM_ID} = ${Album.TABLE}.${Album.COLUMN_ID}"
76+
val query = "SELECT ${Album.TABLE}.*, " +
77+
"COUNT(${AlbumSongMapping.TABLE}.${AlbumSongMapping.COLUMN_SONG_ID}) as ${Album.AlongAttributes.EMBEDDED_TRACKS_COUNT}, " +
78+
"COUNT(${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.COLUMN_ARTIST_ID}) as ${Album.AlongAttributes.EMBEDDED_ARTISTS_COUNT}, " +
79+
"$aliasFirstArtist.${Artist.COLUMN_NAME} as $embeddedArtistName" +
80+
"FROM ${Album.TABLE} " +
81+
"LEFT JOIN ${AlbumSongMapping.TABLE} ON ${AlbumSongMapping.TABLE}.${AlbumSongMapping.COLUMN_ALBUM_ID} = ${Album.TABLE}.${Album.COLUMN_ID} " +
82+
"LEFT JOIN ${AlbumArtistMapping.TABLE} ON $albumArtistMappingJoin " +
83+
"LEFT JOIN ${Artist.TABLE} $aliasFirstArtist ON ${Artist.TABLE}.${Artist.COLUMN_ID} = ($artistQuery) " +
84+
"ORDER BY $orderBy $orderDirection"
85+
return valuesAsFlow(SimpleSQLiteQuery(query))
6286
}
63-
val orderDirection = if (sortReverse) "DESC" else "ASC"
64-
val artistQuery = "SELECT" +
65-
"TOP 1 ${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.COLUMN_ARTIST_ID} " +
66-
"FROM ${AlbumArtistMapping.TABLE} " +
67-
"WHERE ${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.COLUMN_ALBUM_ID} = ${Album.COLUMN_ID} " +
68-
"ORDER BY ${AlbumArtistMapping.COLUMN_IS_ALBUM_ARTIST} DESC"
69-
val albumArtistMappingJoin = "" +
70-
(if (artistId != null) "${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.COLUMN_ARTIST_ID} = ? " else "") +
71-
"${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.COLUMN_ALBUM_ID} = ${Album.TABLE}.${Album.COLUMN_ID}"
72-
val query = "SELECT ${Album.TABLE}.*, " +
73-
"COUNT(${AlbumSongMapping.TABLE}.${AlbumSongMapping.COLUMN_SONG_ID}) as ${Album.AlongAttributes.EMBEDDED_TRACKS_COUNT}, " +
74-
"COUNT(${AlbumArtistMapping.TABLE}.${AlbumArtistMapping.COLUMN_ARTIST_ID}) as ${Album.AlongAttributes.EMBEDDED_ARTISTS_COUNT}, " +
75-
"$aliasFirstArtist.${Artist.COLUMN_NAME} as $embeddedArtistName" +
76-
"FROM ${Album.TABLE} " +
77-
"LEFT JOIN ${AlbumSongMapping.TABLE} ON ${AlbumSongMapping.TABLE}.${AlbumSongMapping.COLUMN_ALBUM_ID} = ${Album.TABLE}.${Album.COLUMN_ID} " +
78-
"LEFT JOIN ${AlbumArtistMapping.TABLE} ON $albumArtistMappingJoin " +
79-
"LEFT JOIN ${Artist.TABLE} $aliasFirstArtist ON ${Artist.TABLE}.${Artist.COLUMN_ID} = ($artistQuery) " +
80-
"ORDER BY $orderBy $orderDirection"
81-
return valuesAsFlowRaw(SimpleSQLiteQuery(query))
8287
}

app/src/main/java/io/github/zyrouge/symphony/services/database/store/ArtistSongMappingStore.kt

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,33 @@ import io.github.zyrouge.symphony.services.groove.repositories.SongRepository
1111
import kotlinx.coroutines.flow.Flow
1212

1313
@Dao
14-
interface ArtistSongMappingStore {
14+
abstract class ArtistSongMappingStore {
1515
@Insert(onConflict = OnConflictStrategy.REPLACE)
16-
suspend fun upsert(vararg entities: ArtistSongMapping)
16+
abstract suspend fun upsert(vararg entities: ArtistSongMapping)
1717

1818
@RawQuery(observedEntities = [SongArtworkIndex::class, ArtistSongMapping::class])
19-
fun findTop4SongArtworksAsFlowRaw(query: SimpleSQLiteQuery): Flow<List<SongArtworkIndex>>
20-
}
19+
protected abstract fun findTop4SongArtworksAsFlow(query: SimpleSQLiteQuery): Flow<List<SongArtworkIndex>>
2120

22-
fun ArtistSongMappingStore.valuesMappedAsFlow(
23-
songStore: SongStore,
24-
id: String,
25-
sortBy: SongRepository.SortBy,
26-
sortReverse: Boolean,
27-
) = songStore.valuesAsFlow(
28-
sortBy,
29-
sortReverse,
30-
additionalClauseBeforeJoins = "JOIN ${ArtistSongMapping.TABLE}.${ArtistSongMapping.COLUMN_ARTIST_ID} = ? ",
31-
additionalArgsBeforeJoins = arrayOf(id),
32-
)
21+
fun findTop4SongArtworksAsFlow(artistId: String): Flow<List<SongArtworkIndex>> {
22+
val query = "SELECT ${SongArtworkIndex.TABLE}.* " +
23+
"FROM ${SongArtworkIndex.TABLE} " +
24+
"LEFT JOIN ${ArtistSongMapping.TABLE} ON ${ArtistSongMapping.TABLE}.${ArtistSongMapping.COLUMN_ARTIST_ID} = ? AND ${ArtistSongMapping.TABLE}.${ArtistSongMapping.COLUMN_SONG_ID} = ${SongArtworkIndex.TABLE}.${SongArtworkIndex.COLUMN_SONG_ID} " +
25+
"WHERE ${SongArtworkIndex.TABLE}.${SongArtworkIndex.COLUMN_FILE} != null " +
26+
"ORDER BY DESC " +
27+
"LIMIT 4"
28+
val args = arrayOf(artistId)
29+
return findTop4SongArtworksAsFlow(SimpleSQLiteQuery(query, args))
30+
}
3331

34-
fun ArtistSongMappingStore.findTop4SongArtworksAsFlow(artistId: String): Flow<List<SongArtworkIndex>> {
35-
val query = "SELECT ${SongArtworkIndex.TABLE}.* " +
36-
"FROM ${SongArtworkIndex.TABLE} " +
37-
"LEFT JOIN ${ArtistSongMapping.TABLE} ON ${ArtistSongMapping.TABLE}.${ArtistSongMapping.COLUMN_ARTIST_ID} = ? AND ${ArtistSongMapping.TABLE}.${ArtistSongMapping.COLUMN_SONG_ID} = ${SongArtworkIndex.TABLE}.${SongArtworkIndex.COLUMN_SONG_ID} " +
38-
"WHERE ${SongArtworkIndex.TABLE}.${SongArtworkIndex.COLUMN_FILE} != null " +
39-
"ORDER BY DESC " +
40-
"LIMIT 4"
41-
val args = arrayOf(artistId)
42-
return findTop4SongArtworksAsFlowRaw(SimpleSQLiteQuery(query, args))
32+
fun valuesMappedAsFlow(
33+
songStore: SongStore,
34+
id: String,
35+
sortBy: SongRepository.SortBy,
36+
sortReverse: Boolean,
37+
) = songStore.valuesAsFlow(
38+
sortBy,
39+
sortReverse,
40+
additionalClauseBeforeJoins = "JOIN ${ArtistSongMapping.TABLE}.${ArtistSongMapping.COLUMN_ARTIST_ID} = ? ",
41+
additionalArgsBeforeJoins = arrayOf(id),
42+
)
4343
}

0 commit comments

Comments
 (0)