Skip to content

Commit

Permalink
DROID-2644 models + channels
Browse files Browse the repository at this point in the history
  • Loading branch information
konstantiniiv committed Jul 12, 2024
1 parent a8be6f3 commit 3e3ec58
Show file tree
Hide file tree
Showing 7 changed files with 171 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,15 @@ enum class SpaceMemberPermissions(
OWNER(2),
NO_PERMISSIONS(3);

fun isOwner() : Boolean {
fun isOwner(): Boolean {
return this == OWNER
}

fun isOwnerOrEditor() : Boolean {
fun isOwnerOrEditor(): Boolean {
return this == OWNER || this == WRITER
}

fun isAtLeastReader() : Boolean {
fun isAtLeastReader(): Boolean {
return this == OWNER || this == WRITER || this == READER
}
}
Expand All @@ -56,6 +56,46 @@ enum class SpaceAccessType(val code: Int) {

sealed class SpaceInviteError : Exception() {
class SpaceNotFound : SpaceInviteError()
class SpaceDeleted: SpaceInviteError()
class InvalidInvite: SpaceInviteError()
class SpaceDeleted : SpaceInviteError()
class InvalidInvite : SpaceInviteError()
}

data class SpaceSyncUpdate(
val id: String,
val status: SpaceSyncStatus,
val network: SpaceSyncNetwork,
val error: SpaceSyncError?,
val syncingObjectsCounter: Long
)

enum class SpaceSyncStatus {
SYNCED,
SYNCING,
ERROR,
OFFLINE
}

enum class SpaceSyncNetwork {
ANYTYPE,
SELF_HOST,
LOCAL_ONLY
}

enum class SpaceSyncError {
NULL,
STORAGE_LIMIT_EXCEED,
INCOMPATIBLE_VERSION,
NETWORK_ERROR
}

data class P2PStatusUpdate(
val spaceId: String,
val status: P2PStatus,
val devicesCounter: Long
)

enum class P2PStatus {
NOT_CONNECTED,
NOT_POSSIBLE,
CONNECTED
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.anytypeio.anytype.data.auth.status

import com.anytypeio.anytype.core_models.multiplayer.P2PStatusUpdate
import kotlinx.coroutines.flow.Flow

interface SpaceP2PStatusRemoteChannel {
fun observe(activeSpaceId: String): Flow<List<P2PStatusUpdate>>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.anytypeio.anytype.data.auth.status

import com.anytypeio.anytype.core_models.multiplayer.SpaceSyncUpdate
import kotlinx.coroutines.flow.Flow

interface SpaceStatusRemoteChannel {
fun observe(activeSpaceId: String): Flow<List<SpaceSyncUpdate>>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.anytypeio.anytype.middleware.interactor

import com.anytypeio.anytype.core_models.multiplayer.P2PStatusUpdate
import com.anytypeio.anytype.data.auth.status.SpaceP2PStatusRemoteChannel
import com.anytypeio.anytype.middleware.EventProxy
import com.anytypeio.anytype.middleware.mappers.toCoreModel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.mapNotNull

class SpaceP2PStatusChannel(private val events: EventProxy) : SpaceP2PStatusRemoteChannel {

override fun observe(activeSpaceId: String): Flow<List<P2PStatusUpdate>> {
return events.flow().mapNotNull { emission ->
emission.messages.mapNotNull { message ->
when {
message.p2pStatusUpdate != null -> {
val event = message.p2pStatusUpdate
checkNotNull(event)
if (event.spaceId == activeSpaceId) {
P2PStatusUpdate(
spaceId = event.spaceId,
status = event.status.toCoreModel(),
devicesCounter = event.devicesCounter
)
} else {
null
}
}

else -> null
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.anytypeio.anytype.middleware.interactor

import com.anytypeio.anytype.core_models.multiplayer.SpaceSyncUpdate
import com.anytypeio.anytype.data.auth.status.SpaceStatusRemoteChannel
import com.anytypeio.anytype.middleware.EventProxy
import com.anytypeio.anytype.middleware.mappers.toCoreModel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.mapNotNull

class SpaceSyncStatusChannel(private val events: EventProxy) : SpaceStatusRemoteChannel {

override fun observe(activeSpaceId: String): Flow<List<SpaceSyncUpdate>> {
return events.flow().mapNotNull { emission ->
emission.messages.mapNotNull { message ->
when {
message.spaceSyncStatusUpdate != null -> {
val event = message.spaceSyncStatusUpdate
checkNotNull(event)
if (event.id == activeSpaceId) {
SpaceSyncUpdate(
id = event.id,
status = event.status.toCoreModel(),
network = event.network.toCoreModel(),
error = event.error.toCoreModel(),
syncingObjectsCounter = event.syncingObjectsCounter
)
} else {
null
}
}

else -> null
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,9 @@ typealias MMembershipTierDataPeriodType = anytype.model.MembershipTierData.Perio
typealias MNameServiceNameType = anytype.model.NameserviceNameType
typealias MEmailVerificationStatus = anytype.model.Membership.EmailVerificationStatus
typealias MDetail = anytype.model.Detail

typealias MSpaceSyncStatus = anytype.Event.Space.Status
typealias MSpaceSyncNetwork = anytype.Event.Space.Network
typealias MSpaceSyncError = anytype.Event.Space.SyncError

typealias MP2PStatus = anytype.Event.P2PStatus.Status
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,15 @@ import com.anytypeio.anytype.core_models.membership.MembershipPaymentMethod
import com.anytypeio.anytype.core_models.membership.MembershipPeriodType
import com.anytypeio.anytype.core_models.membership.MembershipTierData
import com.anytypeio.anytype.core_models.membership.NameServiceNameType
import com.anytypeio.anytype.core_models.multiplayer.P2PStatus
import com.anytypeio.anytype.core_models.multiplayer.SpaceMemberPermissions
import com.anytypeio.anytype.core_models.multiplayer.SpaceSyncError
import com.anytypeio.anytype.core_models.multiplayer.SpaceSyncNetwork
import com.anytypeio.anytype.core_models.multiplayer.SpaceSyncStatus
import com.anytypeio.anytype.core_models.primitives.SpaceId
import com.anytypeio.anytype.core_models.restrictions.DataViewRestriction
import com.anytypeio.anytype.core_models.restrictions.DataViewRestrictions
import com.anytypeio.anytype.core_models.restrictions.ObjectRestriction
import com.anytypeio.anytype.core_utils.ext.orNull
import com.anytypeio.anytype.middleware.interactor.toCoreModels
import com.google.gson.GsonBuilder

Expand Down Expand Up @@ -1066,4 +1069,31 @@ fun MEmailVerificationStatus.toCoreModel(): EmailVerificationStatus {
fun MNameServiceNameType.toCoreModel(): NameServiceNameType = when (this) {
NameserviceNameType.AnyName -> NameServiceNameType.ANY_NAME
}
//endregion
//endregion

//region SYNC STATUS
fun MSpaceSyncStatus.toCoreModel(): SpaceSyncStatus = when (this) {
MSpaceSyncStatus.Synced -> SpaceSyncStatus.SYNCED
MSpaceSyncStatus.Syncing -> SpaceSyncStatus.SYNCING
MSpaceSyncStatus.Error -> SpaceSyncStatus.ERROR
MSpaceSyncStatus.Offline -> SpaceSyncStatus.OFFLINE
}

fun MSpaceSyncNetwork.toCoreModel(): SpaceSyncNetwork = when (this) {
anytype.Event.Space.Network.Anytype -> SpaceSyncNetwork.ANYTYPE
anytype.Event.Space.Network.SelfHost -> SpaceSyncNetwork.SELF_HOST
anytype.Event.Space.Network.LocalOnly -> SpaceSyncNetwork.LOCAL_ONLY
}

fun MSpaceSyncError.toCoreModel(): SpaceSyncError = when (this) {
MSpaceSyncError.Null -> SpaceSyncError.NULL
MSpaceSyncError.StorageLimitExceed -> SpaceSyncError.STORAGE_LIMIT_EXCEED
MSpaceSyncError.IncompatibleVersion -> SpaceSyncError.INCOMPATIBLE_VERSION
MSpaceSyncError.NetworkError -> SpaceSyncError.NETWORK_ERROR
}

fun MP2PStatus.toCoreModel(): P2PStatus = when (this) {
MP2PStatus.NotConnected -> P2PStatus.NOT_CONNECTED
MP2PStatus.NotPossible -> P2PStatus.NOT_POSSIBLE
MP2PStatus.Connected -> P2PStatus.CONNECTED
}

0 comments on commit 3e3ec58

Please sign in to comment.