diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NewRecentSearchRoomDao.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NewRecentSearchRoomDao.kt index 2365fa01a..82178a35f 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NewRecentSearchRoomDao.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NewRecentSearchRoomDao.kt @@ -21,8 +21,11 @@ package org.kiwix.kiwixmobile.core.dao import androidx.room.Dao import androidx.room.Query import io.objectbox.Box +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map +import kotlinx.coroutines.launch import org.kiwix.kiwixmobile.core.dao.entities.RecentSearchEntity import org.kiwix.kiwixmobile.core.dao.entities.RecentSearchRoomEntity import org.kiwix.kiwixmobile.core.search.adapter.SearchListItem @@ -31,20 +34,37 @@ import org.kiwix.kiwixmobile.core.search.adapter.SearchListItem abstract class NewRecentSearchRoomDao { @Query( - "SELECT * FROM RecentSearchRoomEntity WHERE id LIKE :zimId ORDER BY" + + "SELECT * FROM RecentSearchRoomEntity WHERE zimId LIKE :zimId ORDER BY" + " RecentSearchRoomEntity.id DESC" ) abstract fun search(zimId: String?): Flow> - fun recentSearches(zimId: String?): Flow> { - return search(zimId = zimId).map { searchEntities -> - searchEntities.distinctBy(RecentSearchRoomEntity::searchTerm).take(NUM_RECENT_RESULTS) - .map { searchEntity -> SearchListItem.RecentSearchListItem(searchEntity.searchTerm) } + @Query( + "SELECT * FROM RecentSearchRoomEntity" + ) + abstract fun fullSearch(): Flow> + + fun recentSearches(zimId: String? = ""): Flow> { + return if (zimId != "") { + search(zimId).map { searchEntities -> + searchEntities.distinctBy(RecentSearchRoomEntity::searchTerm).take(NUM_RECENT_RESULTS) + .map { searchEntity -> SearchListItem.RecentSearchListItem(searchEntity.searchTerm) } + } + } else { + return fullSearch().map { searchEntities -> + searchEntities.distinctBy(RecentSearchRoomEntity::searchTerm) + .take(NUM_RECENT_RESULTS) + .map { searchEntity -> + org.kiwix.kiwixmobile.core.search.adapter.SearchListItem.RecentSearchListItem( + searchEntity.searchTerm + ) + } + } } } @Query("INSERT INTO RecentSearchRoomEntity(searchTerm, zimId) VALUES (:title , :id)") - abstract fun saveSearch(title: String, id: Long) + abstract fun saveSearch(title: String, id: String) @Query("DELETE FROM RecentSearchRoomEntity WHERE searchTerm=:searchTerm") abstract fun deleteSearchString(searchTerm: String) @@ -57,7 +77,9 @@ abstract class NewRecentSearchRoomDao { ) { val searchRoomEntityList = box.all searchRoomEntityList.forEach { - saveSearch(it.searchTerm, it.id) + CoroutineScope(Dispatchers.IO).launch { + saveSearch(it.searchTerm, it.id.toString()) + } } } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/data/Repository.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/data/Repository.kt index f84ce5536..d292804ca 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/data/Repository.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/data/Repository.kt @@ -27,7 +27,6 @@ import org.kiwix.kiwixmobile.core.dao.NewBookDao import org.kiwix.kiwixmobile.core.dao.NewBookmarksDao import org.kiwix.kiwixmobile.core.dao.NewLanguagesDao import org.kiwix.kiwixmobile.core.dao.NewNoteDao -import org.kiwix.kiwixmobile.core.dao.NewRecentSearchDao import org.kiwix.kiwixmobile.core.dao.NewRecentSearchRoomDao import org.kiwix.kiwixmobile.core.di.qualifiers.IO import org.kiwix.kiwixmobile.core.di.qualifiers.MainThread diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/ApplicationModule.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/ApplicationModule.kt index fbe436f5a..988ea6bb9 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/ApplicationModule.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/ApplicationModule.kt @@ -23,14 +23,12 @@ import android.app.NotificationManager import android.content.Context import android.net.ConnectivityManager import android.os.storage.StorageManager -import androidx.room.Room import dagger.Module import dagger.Provides import io.reactivex.Scheduler import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers import org.kiwix.kiwixmobile.core.NightModeConfig -import org.kiwix.kiwixmobile.core.data.local.KiwixRoomDatabase import org.kiwix.kiwixmobile.core.di.qualifiers.Computation import org.kiwix.kiwixmobile.core.di.qualifiers.IO import org.kiwix.kiwixmobile.core.di.qualifiers.MainThread @@ -99,6 +97,4 @@ class ApplicationModule { @Singleton fun provideConnectivityManager(context: Context): ConnectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager - - } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/DatabaseModule.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/DatabaseModule.kt index 030e49b53..8d063bee7 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/DatabaseModule.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/DatabaseModule.kt @@ -83,7 +83,7 @@ open class DatabaseModule { KiwixRoomDatabase.getInstance( context = context, boxStore - )// The reason we can construct a database for the repo + ) // The reason we can construct a database for the repo @Singleton @Provides diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchViewModel.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchViewModel.kt index 84f9d79d7..060552b12 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchViewModel.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchViewModel.kt @@ -33,7 +33,6 @@ import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.launch import org.kiwix.kiwixmobile.core.R import org.kiwix.kiwixmobile.core.base.SideEffect -import org.kiwix.kiwixmobile.core.dao.NewRecentSearchDao import org.kiwix.kiwixmobile.core.dao.NewRecentSearchRoomDao import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer import org.kiwix.kiwixmobile.core.search.adapter.SearchListItem @@ -155,7 +154,8 @@ class SearchViewModel @Inject constructor( SaveSearchToRecents( recentSearchDao, searchListItem, - zimReaderContainer.id + zimReaderContainer.id, + viewModelScope ) ).isSuccess _effects.trySendBlocking(OpenSearchItem(searchListItem, openInNewTab)) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/DeleteRecentSearch.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/DeleteRecentSearch.kt index 920af0977..9d85a8506 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/DeleteRecentSearch.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/DeleteRecentSearch.kt @@ -20,7 +20,6 @@ package org.kiwix.kiwixmobile.core.search.viewmodel.effects import androidx.appcompat.app.AppCompatActivity import org.kiwix.kiwixmobile.core.base.SideEffect -import org.kiwix.kiwixmobile.core.dao.NewRecentSearchDao import org.kiwix.kiwixmobile.core.dao.NewRecentSearchRoomDao import org.kiwix.kiwixmobile.core.search.adapter.SearchListItem diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/SaveSearchToRecents.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/SaveSearchToRecents.kt index e81193e72..49e9a60bd 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/SaveSearchToRecents.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/SaveSearchToRecents.kt @@ -19,17 +19,24 @@ package org.kiwix.kiwixmobile.core.search.viewmodel.effects import androidx.appcompat.app.AppCompatActivity +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import org.kiwix.kiwixmobile.core.base.SideEffect -import org.kiwix.kiwixmobile.core.dao.NewRecentSearchDao import org.kiwix.kiwixmobile.core.dao.NewRecentSearchRoomDao import org.kiwix.kiwixmobile.core.search.adapter.SearchListItem data class SaveSearchToRecents( private val recentSearchDao: NewRecentSearchRoomDao, private val searchListItem: SearchListItem, - private val id: String? + private val id: String?, + private val viewModelScope: CoroutineScope ) : SideEffect { override fun invokeWith(activity: AppCompatActivity) { - id?.let { recentSearchDao.saveSearch(searchListItem.value, it.toLong()) } + id?.let { + viewModelScope.launch(Dispatchers.IO) { + recentSearchDao.saveSearch(searchListItem.value, it) + } + } } }