diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/components/LabelCreationDialog.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/components/LabelCreationDialog.kt index 8c3adb263..7bc4c9ab8 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/components/LabelCreationDialog.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/components/LabelCreationDialog.kt @@ -135,6 +135,10 @@ object LabelSwatchHelper { return listOf(shuffledSwatches.last()) + webSwatchHexes + shuffledSwatches.dropLast(1) } + fun random(): String { + return webSwatchHexes.random() + } + private val webSwatchHexes = listOf( "#FF5D99", "#7CFF7B", diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/components/LabelsSelectionSheet.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/components/LabelsSelectionSheet.kt index e8f0abef0..6d64c6501 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/components/LabelsSelectionSheet.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/components/LabelsSelectionSheet.kt @@ -52,6 +52,10 @@ import app.omnivore.omnivore.ui.library.LibraryViewModel import com.dokar.chiptextfield.* import com.google.accompanist.flowlayout.FlowRow import kotlinx.coroutines.delay +import java.time.LocalDate +import java.time.ZoneOffset +import java.time.format.DateTimeFormatter +import java.util.* //@Composable @@ -257,9 +261,10 @@ fun LabelsSelectionSheetContent( ?: SavedItemLabel( savedItemLabelId = "", name = name.text, - color = "#FFFFFF", - createdAt = "", labelDescription = "", + color = "#FFFFFF", // LabelSwatchHelper.random(), + createdAt = LocalDate.now().atStartOfDay().atOffset(ZoneOffset.UTC).format( + DateTimeFormatter.ISO_DATE_TIME), serverSyncStatus = ServerSyncStatus.NEEDS_CREATION.rawValue ) } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt index bffdf8923..d08496186 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt @@ -9,9 +9,11 @@ import app.omnivore.omnivore.* import app.omnivore.omnivore.dataService.* import app.omnivore.omnivore.graphql.generated.type.CreateLabelInput import app.omnivore.omnivore.graphql.generated.type.SetLabelsInput +import app.omnivore.omnivore.models.ServerSyncStatus import app.omnivore.omnivore.networking.* import app.omnivore.omnivore.persistence.entities.* import com.apollographql.apollo3.api.Optional +import com.apollographql.apollo3.api.Optional.Companion.presentIfNotNull import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.* import kotlinx.coroutines.channels.Channel @@ -283,6 +285,22 @@ class LibraryViewModel @Inject constructor( fun updateSavedItemLabels(savedItemID: String, labels: List) { viewModelScope.launch { withContext(Dispatchers.IO) { + val synced = labels.filter { it.serverSyncStatus == ServerSyncStatus.IS_SYNCED.rawValue } + val unsynced = labels.filter { it.serverSyncStatus != ServerSyncStatus.IS_SYNCED.rawValue } + + var labelIds = mutableListOf() + labelIds.addAll(synced.map { it.savedItemLabelId }) + + unsynced.forEach { label -> + val result = networker.createNewLabel(CreateLabelInput( + name = label.name, + color = presentIfNotNull(label.color), + description = presentIfNotNull(label.labelDescription), + )) + result?.let { + labelIds.add(it.id) + } + } val input = SetLabelsInput(labelIds = labels.map { it.savedItemLabelId }, pageId = savedItemID) val networkResult = networker.updateLabelsForSavedItem(input)