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:
parent
18065caf5b
commit
c1d6b1712b
@ -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()) }
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -68,4 +68,6 @@ abstract class Database : RoomDatabase() {
|
||||
|
||||
abstract fun mediathekShowDao(): MediathekShowDao
|
||||
|
||||
abstract fun searchDao(): SearchDao
|
||||
|
||||
}
|
||||
|
@ -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>
|
||||
}
|
||||
|
@ -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>
|
||||
|
||||
}
|
@ -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%")
|
||||
}
|
||||
}
|
||||
|
@ -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%")
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user