From 9a3ed38fe61044a0e2efdd149f62cc5154ecbcec Mon Sep 17 00:00:00 2001 From: jarnedemeulemeester Date: Thu, 11 May 2023 17:11:55 +0200 Subject: [PATCH] feat: implement search for offline mode Also fixes the crash when searching in offline mode --- .../dev/jdtech/jellyfin/database/ServerDatabaseDao.kt | 9 +++++++++ .../jellyfin/repository/JellyfinRepositoryOfflineImpl.kt | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt b/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt index 94979101..0a98ca7e 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt @@ -260,4 +260,13 @@ abstract class ServerDatabaseDao { @Query("UPDATE userdata SET toBeSynced = :toBeSynced WHERE itemId = :itemId AND userId = :userId") abstract fun setUserDataToBeSynced(userId: UUID, itemId: UUID, toBeSynced: Boolean) + + @Query("SELECT * FROM movies WHERE serverId = :serverId AND name LIKE '%' || :name || '%'") + abstract fun searchMovies(serverId: String, name: String): List + + @Query("SELECT * FROM shows WHERE serverId = :serverId AND name LIKE '%' || :name || '%'") + abstract fun searchShows(serverId: String, name: String): List + + @Query("SELECT * FROM episodes WHERE serverId = :serverId AND name LIKE '%' || :name || '%'") + abstract fun searchEpisodes(serverId: String, name: String): List } diff --git a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt index 115f997d..0be119a2 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt @@ -112,7 +112,12 @@ class JellyfinRepositoryOfflineImpl( } override suspend fun getSearchItems(searchQuery: String): List { - TODO("Not yet implemented") + return withContext(Dispatchers.IO) { + val movies = database.searchMovies(appPreferences.currentServer!!, searchQuery).map { it.toFindroidMovie(database, jellyfinApi.userId!!) } + val shows = database.searchShows(appPreferences.currentServer!!, searchQuery).map { it.toFindroidShow(database, jellyfinApi.userId!!) } + val episodes = database.searchEpisodes(appPreferences.currentServer!!, searchQuery).map { it.toFindroidEpisode(database, jellyfinApi.userId!!) } + movies + shows + episodes + } } override suspend fun getResumeItems(): List {