@@ -54,7 +54,7 @@ abstract class SongQueueSongMappingStore {
5454 }
5555
5656 @RawQuery
57- protected abstract fun findByNextIdRaw (query : SupportSQLiteQuery ): Song .AlongSongQueueMapping ?
57+ protected abstract fun findByNextId (query : SupportSQLiteQuery ): Song .AlongSongQueueMapping ?
5858
5959 fun findByNextId (queueId : String , nextId : String? ): Song .AlongSongQueueMapping ? {
6060 val query = " SELECT ${Song .TABLE } .*, " +
@@ -63,11 +63,24 @@ abstract class SongQueueSongMappingStore {
6363 " WHERE ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_QUEUE_ID } = ? AND ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_NEXT_ID } = ? " +
6464 " LEFT JOIN ${Song .TABLE } ON ${Song .TABLE } .${Song .COLUMN_ID } = ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_SONG_ID } "
6565 val args = arrayOf(queueId, nextId)
66- return findByNextIdRaw (SimpleSQLiteQuery (query, args))
66+ return findByNextId (SimpleSQLiteQuery (query, args))
6767 }
6868
6969 @RawQuery
70- protected abstract fun findHeadRaw (query : SupportSQLiteQuery ): Song .AlongSongQueueMapping ?
70+ protected abstract fun findBySongId (query : SupportSQLiteQuery ): Song .AlongSongQueueMapping ?
71+
72+ fun findBySongId (queueId : String , songId : String? ): Song .AlongSongQueueMapping ? {
73+ val query = " SELECT ${Song .TABLE } .*, " +
74+ " ${SongQueueSongMapping .TABLE } .* " +
75+ " FROM ${SongQueueSongMapping .TABLE } " +
76+ " WHERE ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_QUEUE_ID } = ? AND ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_SONG_ID } = ? " +
77+ " LEFT JOIN ${Song .TABLE } ON ${Song .TABLE } .${Song .COLUMN_ID } = ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_SONG_ID } "
78+ val args = arrayOf(queueId, songId)
79+ return findBySongId(SimpleSQLiteQuery (query, args))
80+ }
81+
82+ @RawQuery
83+ protected abstract fun findHead (query : SupportSQLiteQuery ): Song .AlongSongQueueMapping ?
7184
7285 fun findHead (queueId : String ): Song .AlongSongQueueMapping ? {
7386 val query = " SELECT ${Song .TABLE } .*, " +
@@ -76,10 +89,25 @@ abstract class SongQueueSongMappingStore {
7689 " WHERE ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_QUEUE_ID } = ? AND ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_IS_HEAD } = true " +
7790 " LEFT JOIN ${Song .TABLE } ON ${Song .TABLE } .${Song .COLUMN_ID } = ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_SONG_ID } "
7891 val args = arrayOf(queueId)
79- return findHeadRaw(SimpleSQLiteQuery (query, args))
92+ return findHead(SimpleSQLiteQuery (query, args))
93+ }
94+
95+ protected abstract fun entries (query : SupportSQLiteQuery ): Map <
96+ @MapColumn(SongQueueSongMapping .COLUMN_ID ) String , Song .AlongSongQueueMapping >
97+
98+ fun entries (queueId : String ): Map <
99+ String , Song .AlongSongQueueMapping > {
100+ val query = " SELECT ${Song .TABLE } .*, " +
101+ " ${SongQueueSongMapping .TABLE } .* " +
102+ " FROM ${SongQueueSongMapping .TABLE } " +
103+ " WHERE ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_QUEUE_ID } = ? " +
104+ " LEFT JOIN ${Song .TABLE } ON ${Song .TABLE } .${Song .COLUMN_ID } = ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_SONG_ID } " +
105+ " ORDER BY ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_IS_HEAD } DESC"
106+ val args = arrayOf(queueId)
107+ return entries(SimpleSQLiteQuery (query, args))
80108 }
81109
82- protected abstract fun entriesByIdsRaw (query : SupportSQLiteQuery ): Map <
110+ protected abstract fun entriesByIds (query : SupportSQLiteQuery ): Map <
83111 @MapColumn(SongQueueSongMapping .COLUMN_ID ) String , Song .AlongSongQueueMapping >
84112
85113 fun entriesByIds (queueId : String , songMappingIds : List <String >): Map <
@@ -93,10 +121,10 @@ abstract class SongQueueSongMappingStore {
93121 " LEFT JOIN ${Song .TABLE } ON ${Song .TABLE } .${Song .COLUMN_ID } = ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_SONG_ID } " +
94122 " ORDER BY ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_IS_HEAD } DESC"
95123 val args = arrayOf(queueId, * songMappingIds.toTypedArray())
96- return entriesByIdsRaw (SimpleSQLiteQuery (query, args))
124+ return entriesByIds (SimpleSQLiteQuery (query, args))
97125 }
98126
99- protected abstract fun entriesByNextIdsRaw (query : SupportSQLiteQuery ): Map <
127+ protected abstract fun entriesByNextIds (query : SupportSQLiteQuery ): Map <
100128 @MapColumn(SongQueueSongMapping .COLUMN_NEXT_ID ) String , Song .AlongSongQueueMapping >
101129
102130 fun entriesByNextIds (queueId : String , songMappingIds : List <String >): Map <
@@ -110,7 +138,24 @@ abstract class SongQueueSongMappingStore {
110138 " LEFT JOIN ${Song .TABLE } ON ${Song .TABLE } .${Song .COLUMN_ID } = ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_SONG_ID } " +
111139 " ORDER BY ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_IS_HEAD } DESC"
112140 val args = arrayOf(queueId, * songMappingIds.toTypedArray())
113- return entriesByNextIdsRaw(SimpleSQLiteQuery (query, args))
141+ return entriesByNextIds(SimpleSQLiteQuery (query, args))
142+ }
143+
144+ protected abstract fun entriesBySongIds (query : SupportSQLiteQuery ): Map <
145+ @MapColumn(SongQueueSongMapping .COLUMN_NEXT_ID ) String , Song .AlongSongQueueMapping >
146+
147+ fun entriesBySongIds (queueId : String , songIds : List <String >): Map <
148+ String , Song .AlongSongQueueMapping > {
149+ val query = " SELECT ${Song .TABLE } .*, " +
150+ " ${SongQueueSongMapping .TABLE } .* " +
151+ " FROM ${SongQueueSongMapping .TABLE } " +
152+ " WHERE ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_QUEUE_ID } = ? " +
153+ " AND ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_SONG_ID } " +
154+ " IN (${sqlqph(songIds.size)} ) " +
155+ " LEFT JOIN ${Song .TABLE } ON ${Song .TABLE } .${Song .COLUMN_ID } = ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_SONG_ID } " +
156+ " ORDER BY ${SongQueueSongMapping .TABLE } .${SongQueueSongMapping .COLUMN_IS_HEAD } DESC"
157+ val args = arrayOf(queueId, * songIds.toTypedArray())
158+ return entriesBySongIds(SimpleSQLiteQuery (query, args))
114159 }
115160
116161 @RawQuery(observedEntities = [Song ::class , SongQueueSongMapping ::class ])
@@ -129,24 +174,32 @@ abstract class SongQueueSongMappingStore {
129174 }
130175
131176 @OptIn(ExperimentalCoroutinesApi ::class )
132- fun transformEntriesAsValuesFlow (entries : Flow <Map <String , Song .AlongSongQueueMapping >>): Flow <List <Song >> {
133- return entries.mapLatest {
134- val list = mutableListOf<Song >()
135- var head = it.firstNotNullOfOrNull {
136- when {
137- it.value.mapping.isHead -> it.value
138- else -> null
139- }
140- }
141- while (head != null ) {
142- list.add(head.entity)
143- head = it[head.mapping.nextId]
177+ fun transformEntriesAsValues (entries : Map <String , Song .AlongSongQueueMapping >): List <Song .AlongSongQueueMapping > {
178+ val list = mutableListOf<Song .AlongSongQueueMapping >()
179+ var head = entries.firstNotNullOfOrNull {
180+ when {
181+ it.value.mapping.isHead -> it.value
182+ else -> null
144183 }
145- list.toList()
146184 }
185+ while (head != null ) {
186+ list.add(head)
187+ head = entries[head.mapping.nextId]
188+ }
189+ return list.toList()
190+ }
191+
192+ @OptIn(ExperimentalCoroutinesApi ::class )
193+ fun transformEntriesAsValuesFlow (entriesFlow : Flow <Map <String , Song .AlongSongQueueMapping >>): Flow <List <Song .AlongSongQueueMapping >> {
194+ return entriesFlow.mapLatest { transformEntriesAsValues(it) }
195+ }
196+
197+ fun values (queueId : String ): List <Song .AlongSongQueueMapping > {
198+ val entries = entries(queueId)
199+ return transformEntriesAsValues(entries)
147200 }
148201
149- fun valuesAsFlow (queueId : String ): Flow <List <Song >> {
202+ fun valuesAsFlow (queueId : String ): Flow <List <Song . AlongSongQueueMapping >> {
150203 val entries = entriesAsFlow(queueId)
151204 return transformEntriesAsValuesFlow(entries)
152205 }
0 commit comments