|
@@ -3,10 +3,11 @@ package io.legado.app.ui.book.readRecord
|
|
|
import androidx.lifecycle.ViewModel
|
|
import androidx.lifecycle.ViewModel
|
|
|
import androidx.lifecycle.viewModelScope
|
|
import androidx.lifecycle.viewModelScope
|
|
|
import cn.hutool.core.date.DateUtil
|
|
import cn.hutool.core.date.DateUtil
|
|
|
-import io.legado.app.constant.PreferKey
|
|
|
|
|
import io.legado.app.data.entities.readRecord.ReadRecord
|
|
import io.legado.app.data.entities.readRecord.ReadRecord
|
|
|
import io.legado.app.data.entities.readRecord.ReadRecordDetail
|
|
import io.legado.app.data.entities.readRecord.ReadRecordDetail
|
|
|
import io.legado.app.data.entities.readRecord.ReadRecordSession
|
|
import io.legado.app.data.entities.readRecord.ReadRecordSession
|
|
|
|
|
+import io.legado.app.data.local.preferences.LocalPreferencesKeys
|
|
|
|
|
+import io.legado.app.data.local.preferences.LocalPreferencesRepository
|
|
|
import io.legado.app.data.repository.BookRepository
|
|
import io.legado.app.data.repository.BookRepository
|
|
|
import io.legado.app.data.repository.ReadRecordRepository
|
|
import io.legado.app.data.repository.ReadRecordRepository
|
|
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
|
@@ -15,15 +16,13 @@ import kotlinx.coroutines.flow.SharingStarted
|
|
|
import kotlinx.coroutines.flow.StateFlow
|
|
import kotlinx.coroutines.flow.StateFlow
|
|
|
import kotlinx.coroutines.flow.asStateFlow
|
|
import kotlinx.coroutines.flow.asStateFlow
|
|
|
import kotlinx.coroutines.flow.combine
|
|
import kotlinx.coroutines.flow.combine
|
|
|
|
|
+import kotlinx.coroutines.flow.first
|
|
|
import kotlinx.coroutines.flow.flatMapLatest
|
|
import kotlinx.coroutines.flow.flatMapLatest
|
|
|
import kotlinx.coroutines.flow.stateIn
|
|
import kotlinx.coroutines.flow.stateIn
|
|
|
import kotlinx.coroutines.launch
|
|
import kotlinx.coroutines.launch
|
|
|
import java.time.LocalDate
|
|
import java.time.LocalDate
|
|
|
import java.time.format.DateTimeFormatter
|
|
import java.time.format.DateTimeFormatter
|
|
|
import java.util.Date
|
|
import java.util.Date
|
|
|
-import splitties.init.appCtx
|
|
|
|
|
-import io.legado.app.utils.getPrefString
|
|
|
|
|
-import io.legado.app.utils.putPrefString
|
|
|
|
|
|
|
|
|
|
data class ReadRecordUiState(
|
|
data class ReadRecordUiState(
|
|
|
val isLoading: Boolean = true,
|
|
val isLoading: Boolean = true,
|
|
@@ -46,14 +45,23 @@ enum class DisplayMode {
|
|
|
@OptIn(ExperimentalCoroutinesApi::class)
|
|
@OptIn(ExperimentalCoroutinesApi::class)
|
|
|
class ReadRecordViewModel(
|
|
class ReadRecordViewModel(
|
|
|
private val repository: ReadRecordRepository,
|
|
private val repository: ReadRecordRepository,
|
|
|
- private val bookRepository: BookRepository
|
|
|
|
|
|
|
+ private val bookRepository: BookRepository,
|
|
|
|
|
+ private val localPreferencesRepository: LocalPreferencesRepository
|
|
|
) : ViewModel() {
|
|
) : ViewModel() {
|
|
|
|
|
|
|
|
- private val _displayMode = MutableStateFlow(
|
|
|
|
|
- runCatching { DisplayMode.valueOf(appCtx.getPrefString(PreferKey.readRecordDisplayMode) ?: DisplayMode.AGGREGATE.name) }
|
|
|
|
|
- .getOrDefault(DisplayMode.AGGREGATE)
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ private val _displayMode = MutableStateFlow(DisplayMode.AGGREGATE)
|
|
|
val displayMode = _displayMode.asStateFlow()
|
|
val displayMode = _displayMode.asStateFlow()
|
|
|
|
|
+
|
|
|
|
|
+ init {
|
|
|
|
|
+ viewModelScope.launch {
|
|
|
|
|
+ val saved = localPreferencesRepository.getPreference(
|
|
|
|
|
+ LocalPreferencesKeys.READ_RECORD_DISPLAY_MODE, DisplayMode.AGGREGATE.name
|
|
|
|
|
+ ).first()
|
|
|
|
|
+ _displayMode.value = runCatching { DisplayMode.valueOf(saved) }
|
|
|
|
|
+ .getOrDefault(DisplayMode.AGGREGATE)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private val _searchKey = MutableStateFlow("")
|
|
private val _searchKey = MutableStateFlow("")
|
|
|
private val _selectedDate = MutableStateFlow<LocalDate?>(null)
|
|
private val _selectedDate = MutableStateFlow<LocalDate?>(null)
|
|
|
val readRecordEnabled: StateFlow<Boolean> = repository.readRecordEnabled
|
|
val readRecordEnabled: StateFlow<Boolean> = repository.readRecordEnabled
|
|
@@ -137,7 +145,11 @@ class ReadRecordViewModel(
|
|
|
|
|
|
|
|
fun setDisplayMode(mode: DisplayMode) {
|
|
fun setDisplayMode(mode: DisplayMode) {
|
|
|
_displayMode.value = mode
|
|
_displayMode.value = mode
|
|
|
- appCtx.putPrefString(PreferKey.readRecordDisplayMode, mode.name)
|
|
|
|
|
|
|
+ viewModelScope.launch {
|
|
|
|
|
+ localPreferencesRepository.updatePreference(
|
|
|
|
|
+ LocalPreferencesKeys.READ_RECORD_DISPLAY_MODE, mode.name
|
|
|
|
|
+ )
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
fun setSelectedDate(date: LocalDate?) {
|
|
fun setSelectedDate(date: LocalDate?) {
|