0
0
mirror of https://github.com/mediathekview/zapp.git synced 2024-09-20 04:12:14 +02:00

Move database queries related to search in own dao

This commit is contained in:
Christine Coenen 2023-08-22 09:54:59 +02:00
parent 18065caf5b
commit c1d6b1712b
7 changed files with 35 additions and 11 deletions

View File

@ -27,6 +27,7 @@ import de.christinecoenen.code.zapp.models.channels.json.JsonChannelList
import de.christinecoenen.code.zapp.persistence.Database
import de.christinecoenen.code.zapp.repositories.ChannelRepository
import de.christinecoenen.code.zapp.repositories.MediathekRepository
import de.christinecoenen.code.zapp.repositories.SearchRepository
import de.christinecoenen.code.zapp.utils.api.UserAgentInterceptor
import io.noties.markwon.Markwon
import kotlinx.coroutines.MainScope
@ -55,6 +56,7 @@ class KoinModules {
single { ChannelRepository(androidContext(), get(), get()) }
single { Database.getInstance(androidContext()) }
single { MediathekRepository(get()) }
single { SearchRepository(get()) }
single { PersistedPlaybackPositionRepository(get()) } bind IPlaybackPositionRepository::class
single {
WorkManagerDownloadController(
@ -88,7 +90,7 @@ class KoinModules {
viewModel { parameters -> MediathekListFragmentViewModel(get(), parameters.get(), parameters.get(), parameters.get()) }
viewModel { MediathekFilterViewModel() }
viewModel { ShowMenuHelperViewModel(get(), get()) }
viewModel { SearchViewModel(get(), get()) }
viewModel { SearchViewModel(get(), get(), get()) }
}
}

View File

@ -17,6 +17,7 @@ import de.christinecoenen.code.zapp.app.mediathek.ui.list.adapter.UiModel
import de.christinecoenen.code.zapp.models.shows.MediathekShow
import de.christinecoenen.code.zapp.models.shows.SortableMediathekShow
import de.christinecoenen.code.zapp.repositories.MediathekRepository
import de.christinecoenen.code.zapp.repositories.SearchRepository
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
@ -27,6 +28,7 @@ import org.joda.time.DateTime
@OptIn(ExperimentalCoroutinesApi::class)
class SearchViewModel(
private val searchRepository: SearchRepository,
private val mediathekRepository: MediathekRepository,
private val mediathekApi: IMediathekApiService
) : ViewModel() {
@ -57,7 +59,7 @@ class SearchViewModel(
if (query.isEmpty()) {
flowOf(PagingData.empty())
} else {
Pager(pagingConfig) { mediathekRepository.getLocalSearchSuggestions(query) }.flow
Pager(pagingConfig) { searchRepository.getLocalSearchSuggestions(query) }.flow
}
}
.cachedIn(viewModelScope)

View File

@ -68,4 +68,6 @@ abstract class Database : RoomDatabase() {
abstract fun mediathekShowDao(): MediathekShowDao
abstract fun searchDao(): SearchDao
}

View File

@ -141,7 +141,4 @@ interface MediathekShowDao {
@Delete
suspend fun delete(show: PersistedMediathekShow)
@Query("SELECT topic FROM PersistedMediathekShow WHERE topic LIKE :searchQuery UNION SELECT title FROM PersistedMediathekShow WHERE title LIKE :searchQuery")
fun getLocalSearchSuggestions(searchQuery: String): PagingSource<Int, String>
}

View File

@ -0,0 +1,13 @@
package de.christinecoenen.code.zapp.persistence
import androidx.paging.PagingSource
import androidx.room.Dao
import androidx.room.Query
@Dao
interface SearchDao {
@Query("SELECT topic FROM PersistedMediathekShow WHERE topic LIKE :searchQuery UNION SELECT title FROM PersistedMediathekShow WHERE title LIKE :searchQuery")
fun getLocalSearchSuggestions(searchQuery: String): PagingSource<Int, String>
}

View File

@ -229,10 +229,4 @@ class MediathekRepository(private val database: Database) {
.distinctUntilChanged()
.flowOn(Dispatchers.IO)
}
fun getLocalSearchSuggestions(searchQuery: String): PagingSource<Int, String> {
return database
.mediathekShowDao()
.getLocalSearchSuggestions("%$searchQuery%")
}
}

View File

@ -0,0 +1,14 @@
package de.christinecoenen.code.zapp.repositories
import androidx.paging.PagingSource
import de.christinecoenen.code.zapp.persistence.Database
class SearchRepository(private val database: Database) {
fun getLocalSearchSuggestions(searchQuery: String): PagingSource<Int, String> {
return database
.searchDao()
.getLocalSearchSuggestions("%$searchQuery%")
}
}