Remove shadow types used for CardData from Android types

This commit is contained in:
Jackson Harper
2023-05-05 15:25:22 +08:00
parent 571955865e
commit 8ac5b4c8f1
10 changed files with 0 additions and 230 deletions

View File

@ -1,126 +0,0 @@
package app.omnivore.omnivore.dataService
import androidx.lifecycle.LiveData
import androidx.lifecycle.MediatorLiveData
import app.omnivore.omnivore.persistence.entities.SavedItemCardDataWithLabels
import app.omnivore.omnivore.persistence.entities.SavedItemLabel
import app.omnivore.omnivore.ui.library.SavedItemFilter
import app.omnivore.omnivore.ui.library.SavedItemSortFilter
fun DataService.libraryLiveData(
primaryFilter: SavedItemFilter,
sortFilter: SavedItemSortFilter,
labels: List<SavedItemLabel>
): LiveData<List<SavedItemCardDataWithLabels>> {
val mediatorLiveData = MediatorLiveData<List<SavedItemCardDataWithLabels>>()
val queryParams = LibraryLiveDataQueryParams.make(primaryFilter)
val libraryLiveData = when (sortFilter) {
SavedItemSortFilter.NEWEST -> db.savedItemDao().getLibraryLiveData(
archiveFilter = queryParams.archiveFilter
)
SavedItemSortFilter.OLDEST -> db.savedItemDao().getLibraryLiveDataSortedByOldest(
archiveFilter = queryParams.archiveFilter
)
SavedItemSortFilter.RECENTLY_READ -> db.savedItemDao().getLibraryLiveDataSortedByRecentlyRead(
archiveFilter = queryParams.archiveFilter
)
SavedItemSortFilter.RECENTLY_PUBLISHED -> db.savedItemDao().getLibraryLiveDataSortedByRecentlyPublished(
archiveFilter = queryParams.archiveFilter
)
}
mediatorLiveData.addSource(libraryLiveData) { result ->
when (primaryFilter) {
SavedItemFilter.INBOX -> {
mediatorLiveData.value = result
}
SavedItemFilter.READ_LATER -> {
mediatorLiveData.value = result.filter { item ->
!item.labels.any { it.name.lowercase() == "newsletter" }
}
}
SavedItemFilter.NEWSLETTERS -> {
mediatorLiveData.value = result.filter { item ->
item.labels.any { it.name.lowercase() == "newsletter" }
}
}
SavedItemFilter.RECOMMENDED -> {
mediatorLiveData.value = result // TODO: "recommendations.@count > 0"
}
SavedItemFilter.ALL -> {
mediatorLiveData.value = result
}
SavedItemFilter.ARCHIVED -> {
mediatorLiveData.value = result
}
SavedItemFilter.HAS_HIGHLIGHTS -> {
mediatorLiveData.value = result // TODO: "highlights.@count > 0"
}
SavedItemFilter.FILES -> {
mediatorLiveData.value = result.filter { item ->
item.cardData.contentReader == "PDF"
}
}
}
if (labels.isNotEmpty()) {
mediatorLiveData.value = (mediatorLiveData.value ?: listOf()).filter {
it.labels.intersect(labels.toSet()).any()
}
}
}
return mediatorLiveData
}
private data class LibraryLiveDataQueryParams(
val archiveFilter: Int
) {
companion object {
fun make(savedItemFilter: SavedItemFilter): LibraryLiveDataQueryParams {
return when (savedItemFilter) {
SavedItemFilter.INBOX -> {
LibraryLiveDataQueryParams(
archiveFilter = 1, // Filter out items marked as archive
)
}
SavedItemFilter.READ_LATER -> {
LibraryLiveDataQueryParams(
archiveFilter = 1, // Filter out items marked as archive
)
}
SavedItemFilter.NEWSLETTERS -> {
LibraryLiveDataQueryParams(
archiveFilter = 1, // Filter out items marked as archive
)
}
SavedItemFilter.RECOMMENDED -> {
LibraryLiveDataQueryParams(
archiveFilter = 1, // Filter out items marked as archive
)
}
SavedItemFilter.ALL -> {
LibraryLiveDataQueryParams(
archiveFilter = 2, // Don't filter anything out (2 will not match anything)
)
}
SavedItemFilter.ARCHIVED -> {
LibraryLiveDataQueryParams(
archiveFilter = 0, // Filter out items not marked as archived
)
}
SavedItemFilter.HAS_HIGHLIGHTS -> {
LibraryLiveDataQueryParams(
archiveFilter = 1, // Filter out items marked as archive
)
}
SavedItemFilter.FILES -> {
LibraryLiveDataQueryParams(
archiveFilter = 1, // Filter out items marked as archive
)
}
}
}
}
}

View File

@ -1,12 +1,7 @@
package app.omnivore.omnivore.networking
import app.omnivore.omnivore.graphql.generated.SearchQuery
import app.omnivore.omnivore.graphql.generated.TypeaheadSearchQuery
import app.omnivore.omnivore.persistence.entities.SavedItem
import app.omnivore.omnivore.persistence.entities.SavedItemCardData
import app.omnivore.omnivore.persistence.entities.SavedItemLabel
import app.omnivore.omnivore.persistence.entities.TypeaheadCardData
import com.apollographql.apollo3.api.Optional
data class SearchQueryResponse(
val cursor: String?,

View File

@ -2,12 +2,7 @@ package app.omnivore.omnivore.persistence.entities
import androidx.core.net.toUri
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.room.*
import app.omnivore.omnivore.BuildConfig
import app.omnivore.omnivore.graphql.generated.SearchQuery
import app.omnivore.omnivore.models.ServerSyncStatus
import app.omnivore.omnivore.ui.library.SavedItemSortFilter
import java.util.*
@Entity
@ -69,30 +64,6 @@ data class SavedItem(
}
}
data class SavedItemCardData(
val savedItemId: String,
val slug: String,
val publisherURLString: String?,
val title: String,
val author: String?,
val imageURLString: String?,
val isArchived: Boolean,
val pageURLString: String,
val contentReader: String?,
val savedAt: String,
val readingProgress: Double,
val wordsCount: Int?
) {
fun publisherDisplayName(): String? {
return publisherURLString?.toUri()?.host
}
fun isPDF(): Boolean {
val hasPDFSuffix = pageURLString.endsWith("pdf")
return contentReader == "PDF" || hasPDFSuffix
}
}
data class TypeaheadCardData(
val savedItemId: String,
val slug: String,
@ -126,42 +97,6 @@ interface SavedItemDao {
@Update
fun update(savedItem: SavedItem)
@Transaction
@Query(
"SELECT ${SavedItemQueryConstants.columns} " +
"FROM SavedItem " +
"WHERE serverSyncStatus != 2 AND isArchived != :archiveFilter " +
"ORDER BY savedAt DESC"
)
fun getLibraryLiveData(archiveFilter: Int): LiveData<List<SavedItemCardDataWithLabels>>
@Transaction
@Query(
"SELECT ${SavedItemQueryConstants.columns} " +
"FROM SavedItem " +
"WHERE serverSyncStatus != 2 AND isArchived != :archiveFilter " +
"ORDER BY savedAt ASC"
)
fun getLibraryLiveDataSortedByOldest(archiveFilter: Int): LiveData<List<SavedItemCardDataWithLabels>>
@Transaction
@Query(
"SELECT ${SavedItemQueryConstants.columns} " +
"FROM SavedItem " +
"WHERE serverSyncStatus != 2 AND isArchived != :archiveFilter " +
"ORDER BY readAt DESC, savedAt DESC"
)
fun getLibraryLiveDataSortedByRecentlyRead(archiveFilter: Int): LiveData<List<SavedItemCardDataWithLabels>>
@Transaction
@Query(
"SELECT ${SavedItemQueryConstants.columns} " +
"FROM SavedItem " +
"WHERE serverSyncStatus != 2 AND isArchived != :archiveFilter " +
"ORDER BY publishDate DESC"
)
fun getLibraryLiveDataSortedByRecentlyPublished(archiveFilter: Int): LiveData<List<SavedItemCardDataWithLabels>>
@Transaction
@Query(
"SELECT ${SavedItemQueryConstants.libraryColumns} " +

View File

@ -44,25 +44,6 @@ data class SavedItemAndSavedItemLabelCrossRef(
val savedItemId: String
)
data class SavedItemWithLabels(
@Embedded val savedItem: SavedItem,
@Relation(
parentColumn = "savedItemId",
entityColumn = "savedItemLabelId",
associateBy = Junction(SavedItemAndSavedItemLabelCrossRef::class)
)
val labels: List<SavedItemLabel>
)
data class SavedItemCardDataWithLabels(
@Embedded val cardData: SavedItemCardData,
@Relation(
parentColumn = "savedItemId",
entityColumn = "savedItemLabelId",
associateBy = Junction(SavedItemAndSavedItemLabelCrossRef::class)
)
val labels: List<SavedItemLabel>
)
@Dao
interface SavedItemAndSavedItemLabelCrossRefDao {

View File

@ -3,13 +3,11 @@ package app.omnivore.omnivore.ui.library
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.material.icons.outlined.Close
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.*
import androidx.compose.runtime.*
@ -19,14 +17,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.input.ImeAction
import androidx.lifecycle.MutableLiveData
import androidx.navigation.NavHostController
import app.omnivore.omnivore.R
import app.omnivore.omnivore.persistence.entities.SavedItemCardData
import app.omnivore.omnivore.persistence.entities.SavedItemCardDataWithLabels
import app.omnivore.omnivore.persistence.entities.SavedItemWithLabelsAndHighlights
@OptIn(ExperimentalMaterial3Api::class)

View File

@ -33,8 +33,6 @@ import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
import app.omnivore.omnivore.R
import app.omnivore.omnivore.Routes
import app.omnivore.omnivore.persistence.entities.SavedItemCardData
import app.omnivore.omnivore.persistence.entities.SavedItemCardDataWithLabels
import app.omnivore.omnivore.persistence.entities.SavedItemWithLabelsAndHighlights
import app.omnivore.omnivore.ui.components.LabelsSelectionSheet
import app.omnivore.omnivore.ui.savedItemViews.SavedItemCard

View File

@ -1,7 +1,6 @@
package app.omnivore.omnivore.ui.library
import androidx.lifecycle.MutableLiveData
import app.omnivore.omnivore.persistence.entities.SavedItemCardData
import app.omnivore.omnivore.persistence.entities.SavedItemWithLabelsAndHighlights
interface SavedItemViewModel {

View File

@ -22,8 +22,6 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
import app.omnivore.omnivore.R
import app.omnivore.omnivore.persistence.entities.SavedItemCardData
import app.omnivore.omnivore.persistence.entities.SavedItemCardDataWithLabels
import app.omnivore.omnivore.persistence.entities.SavedItemWithLabelsAndHighlights
import app.omnivore.omnivore.ui.reader.WebReaderLoadingContainerActivity
import app.omnivore.omnivore.persistence.entities.TypeaheadCardData

View File

@ -21,8 +21,6 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.*
import app.omnivore.omnivore.R
import app.omnivore.omnivore.persistence.entities.SavedItemCardData
import app.omnivore.omnivore.persistence.entities.SavedItemLabel
import app.omnivore.omnivore.persistence.entities.SavedItemWithLabelsAndHighlights
import app.omnivore.omnivore.ui.components.LabelChipColors
import app.omnivore.omnivore.ui.library.LibraryViewModel

View File

@ -17,8 +17,6 @@ import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.*
import app.omnivore.omnivore.persistence.entities.SavedItemCardData
import app.omnivore.omnivore.persistence.entities.SavedItemLabel
import app.omnivore.omnivore.persistence.entities.TypeaheadCardData
import app.omnivore.omnivore.ui.components.LabelChipColors
import app.omnivore.omnivore.ui.library.SavedItemAction