Update to android room3

This commit is contained in:
Kgothatso Ngako
2026-05-02 00:05:38 +02:00
parent f465e9f9c0
commit 0531248457
54 changed files with 219 additions and 225 deletions

View File

@@ -2,8 +2,8 @@ package ac.cord.auxiliary.compose.database.builder
import ac.cord.auxiliary.compose.PlatformContext
import ac.cord.auxiliary.compose.database.AuxDatabase
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room3.Room
import androidx.room3.RoomDatabase
actual object PlatformDatabaseBuilder {
actual fun getDatabaseBuilder(platformContext: PlatformContext): RoomDatabase.Builder<AuxDatabase> {

View File

@@ -36,11 +36,11 @@ import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest
import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventResult
import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent
import ac.cord.auxiliary.compose.database.model.Zap
import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import androidx.room.immediateTransaction
import androidx.room.useWriterConnection
import androidx.room3.Database
import androidx.room3.RoomDatabase
import androidx.room3.TypeConverters
import androidx.room3.immediateTransaction
import androidx.room3.useWriterConnection
import kotlin.time.Instant
val GENESIS_AT = Instant.fromEpochMilliseconds(1231006505000L)

View File

@@ -1,6 +1,6 @@
package ac.cord.auxiliary.compose.database
import androidx.room.RoomDatabaseConstructor
import androidx.room3.RoomDatabaseConstructor
@Suppress("KotlinNoActualForExpect", "NO_ACTUAL_FOR_EXPECT")
expect object AuxDatabaseConstructor: RoomDatabaseConstructor<AuxDatabase> {

View File

@@ -2,7 +2,7 @@ package ac.cord.auxiliary.compose.database.builder
import ac.cord.auxiliary.compose.PlatformContext
import ac.cord.auxiliary.compose.database.AuxDatabase
import androidx.room.RoomDatabase
import androidx.room3.RoomDatabase
import androidx.sqlite.driver.bundled.BundledSQLiteDriver
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO

View File

@@ -3,7 +3,8 @@ package ac.cord.auxiliary.compose.database.converters
import ac.cord.auxiliary.compose.database.model.typealiases.SynchronizationFilterArray
import ac.cord.auxiliary.compose.database.model.typealiases.HexArray
import ac.cord.auxiliary.compose.database.model.typealiases.KindArray
import androidx.room.TypeConverter
import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter
import androidx.room3.TypeConverter
import co.touchlab.kermit.Logger
import com.vitorpamplona.quartz.nip01Core.core.TagArray
import kotlinx.serialization.json.Json
@@ -23,20 +24,20 @@ class AuxConverters {
}
@TypeConverter
fun fromTagArray(value: TagArray?): String? {
fun fromTagArray(value: Array<Array<String>>?): String? {
// Returns null if the value is null, otherwise serializes to JSON string
return value?.let { Json.encodeToString(it) }
}
@TypeConverter
fun toTagArray(value: String?): TagArray? {
fun toTagArray(value: String?): Array<Array<String>>? {
// Decodes the JSON string back into the nested array structure
return value?.let { Json.decodeFromString<TagArray>(it) }
return value?.let { Json.decodeFromString<Array<Array<String>>>(it) }
}
@TypeConverter
fun fromHexArray(value: HexArray?): String? = try {
fun fromHexArray(value: Array<String>?): String? = try {
return value?.let {
Json.encodeToString(it).lowercase()
}
@@ -46,9 +47,9 @@ class AuxConverters {
}
@TypeConverter
fun toHexArray(value: String?): HexArray? = try {
fun toHexArray(value: String?): Array<String>? = try {
return value?.let {
Json.decodeFromString<HexArray>(it)
Json.decodeFromString<Array<String>>(it)
}
} catch (e: Throwable) {
logger.e("Failed to convert to HexArray $value", e)
@@ -56,7 +57,7 @@ class AuxConverters {
}
@TypeConverter
fun fromKindArray(value: KindArray?): String? = try {
fun fromKindArray(value: Array<Int>?): String? = try {
return value?.let {
Json.encodeToString(it)
}
@@ -66,9 +67,9 @@ class AuxConverters {
}
@TypeConverter
fun toKindArray(value: String?): KindArray? = try {
fun toKindArray(value: String?): Array<Int>? = try {
return value?.let {
Json.decodeFromString<KindArray>(it)
Json.decodeFromString<Array<Int>>(it)
}
} catch (e: Throwable) {
logger.e("Failed to convert to KindArray $value", e)
@@ -76,7 +77,7 @@ class AuxConverters {
}
@TypeConverter
fun fromFilterArray(value: SynchronizationFilterArray?): String? = try {
fun fromFilterArray(value: Array<SynchronizationFilter>?): String? = try {
return value?.let {
Json.encodeToString(value)
}
@@ -86,9 +87,9 @@ class AuxConverters {
}
@TypeConverter
fun toFilterArray(value: String?): SynchronizationFilterArray? = try {
fun toFilterArray(value: String?): Array<SynchronizationFilter>? = try {
return value?.let {
Json.decodeFromString<SynchronizationFilterArray>(it)
Json.decodeFromString<Array<SynchronizationFilter>>(it)
}
} catch (e: Throwable) {
logger.e("Failed to convert to FilterArray $value", e)

View File

@@ -1,9 +1,9 @@
package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventReceipt
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Query
import androidx.room3.Upsert
import kotlinx.coroutines.flow.Flow
@Dao

View File

@@ -2,9 +2,9 @@ package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventRequest
import ac.cord.auxiliary.compose.database.model.intermdiate.LocalBroadcastNostrEventRequest
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Query
import androidx.room3.Upsert
import kotlinx.coroutines.flow.Flow
@Dao

View File

@@ -1,11 +1,11 @@
package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.Connection
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Delete
import androidx.room3.Insert
import androidx.room3.Query
import androidx.room3.Upsert
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlinx.coroutines.flow.Flow

View File

@@ -1,10 +1,10 @@
package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.InReplyToRelation
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Insert
import androidx.room3.Query
import androidx.room3.Upsert
@Dao
interface InReplyToRelationDao {

View File

@@ -3,11 +3,11 @@ package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.Mention
import ac.cord.auxiliary.compose.database.model.Post
import ac.cord.auxiliary.compose.database.model.intermdiate.LocalPost
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy.Companion.IGNORE
import androidx.room.Query
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Insert
import androidx.room3.OnConflictStrategy.Companion.IGNORE
import androidx.room3.Query
import androidx.room3.Upsert
@Dao
interface MentionDao {

View File

@@ -12,9 +12,9 @@ import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest
import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent
import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter
import ac.cord.auxiliary.compose.nostr.Relays
import androidx.room.Dao
import androidx.room.Transaction
import androidx.room.useWriterConnection
import androidx.room3.Dao
import androidx.room3.Transaction
import androidx.room3.useWriterConnection
import co.touchlab.kermit.Logger
import com.vitorpamplona.quartz.nip01Core.metadata.MetadataEvent
import com.vitorpamplona.quartz.nip01Core.tags.events.taggedEvents

View File

@@ -2,13 +2,13 @@ package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.NostrEvent
import ac.cord.auxiliary.compose.database.model.intermdiate.LocalNostrEvent
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy.Companion.IGNORE
import androidx.room.Query
import androidx.room.RawQuery
import androidx.room.RoomRawQuery
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Insert
import androidx.room3.OnConflictStrategy.Companion.IGNORE
import androidx.room3.Query
import androidx.room3.RawQuery
import androidx.room3.RoomRawQuery
import androidx.room3.Upsert
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.Kind
import fr.acinq.bitcoin.PublicKey
@@ -16,28 +16,28 @@ import kotlinx.coroutines.flow.Flow
@Dao
interface NostrEventDao {
@Query("SELECT * FROM NostrEvent WHERE kind in (:kinds) AND savedAt < strftime('%s', 'now') ORDER BY createdAt DESC")
@Query("SELECT * FROM NostrEvent WHERE kind in (:kinds) ORDER BY createdAt DESC")
fun observeNostrEvents(kinds: Array<Kind>): Flow<List<LocalNostrEvent>>
@Query("SELECT * FROM NostrEvent WHERE content LIKE '%' || :search || '%' AND kind in (:kinds) AND savedAt < strftime('%s', 'now') ORDER BY createdAt DESC")
@Query("SELECT * FROM NostrEvent WHERE content LIKE '%' || :search || '%' AND kind in (:kinds) ORDER BY createdAt DESC")
fun observeFilteredNostrEvents(
kinds: Array<Kind>,
search: String
): Flow<List<LocalNostrEvent>>
@Query("SELECT * FROM NostrEvent WHERE kind in (:kinds) AND id in (:ids) AND savedAt < strftime('%s', 'now') ORDER BY createdAt DESC")
@Query("SELECT * FROM NostrEvent WHERE kind in (:kinds) AND id in (:ids) ORDER BY createdAt DESC")
fun observeFilteredNostrEvents(
kinds: Array<Kind>,
ids: Array<HexKey>,
): Flow<List<LocalNostrEvent>>
@Query("SELECT * FROM NostrEvent WHERE kind in (:kinds) AND pubKey in (:authors) AND savedAt < strftime('%s', 'now') ORDER BY createdAt DESC LIMIT 50")
@Query("SELECT * FROM NostrEvent WHERE kind in (:kinds) AND pubKey in (:authors) ORDER BY createdAt DESC LIMIT 50")
fun observeAuthoredNostrEvents(
kinds: Array<Kind>,
authors: Array<HexKey>,
): Flow<List<LocalNostrEvent>>
@Query("SELECT * FROM NostrEvent WHERE tags LIKE '%' || :publicKey || '%' AND kind in (:kinds) AND savedAt < strftime('%s', 'now') ORDER BY createdAt DESC")
@Query("SELECT * FROM NostrEvent WHERE tags LIKE '%' || :publicKey || '%' AND kind in (:kinds) ORDER BY createdAt DESC")
fun observePublicKeyMentionedNostrEvents(
kinds: Array<Kind>,
publicKey: HexKey
@@ -48,7 +48,7 @@ interface NostrEventDao {
query: RoomRawQuery
): Flow<List<LocalNostrEvent>>
@Query("SELECT * FROM NostrEvent WHERE kind in (:kinds) AND savedAt < strftime('%s', 'now') ORDER BY savedAt DESC")
@Query("SELECT * FROM NostrEvent WHERE kind in (:kinds) ORDER BY savedAt DESC")
fun getAllNostrEvents(kinds: Array<Kind>): List<NostrEvent>
@Query("SELECT * FROM NostrEvent WHERE id = :id")

View File

@@ -2,10 +2,10 @@ package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.Post
import ac.cord.auxiliary.compose.database.model.intermdiate.LocalPost
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Insert
import androidx.room3.Query
import androidx.room3.Upsert
@Dao
interface PostDao {

View File

@@ -4,11 +4,11 @@ import ac.cord.auxiliary.compose.database.model.Profile
import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfile
import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfileWithFollowers
import ac.cord.auxiliary.compose.database.model.intermdiate.LocalProfileWithFollowing
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy.Companion.IGNORE
import androidx.room.Query
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Insert
import androidx.room3.OnConflictStrategy.Companion.IGNORE
import androidx.room3.Query
import androidx.room3.Upsert
import kotlinx.coroutines.flow.Flow
@Dao

View File

@@ -1,10 +1,10 @@
package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.QuotedRelation
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Insert
import androidx.room3.Query
import androidx.room3.Upsert
@Dao
interface QuotedRelationDao {

View File

@@ -1,9 +1,9 @@
package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.Reaction
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Query
import androidx.room3.Upsert
import kotlinx.coroutines.flow.Flow
@Dao

View File

@@ -1,10 +1,10 @@
package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.RecentSearch
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Query
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Delete
import androidx.room3.Query
import androidx.room3.Upsert
import kotlinx.coroutines.flow.Flow
@Dao

View File

@@ -1,9 +1,9 @@
package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.Relay
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Query
import androidx.room3.Upsert
import kotlinx.coroutines.flow.Flow
@Dao

View File

@@ -1,9 +1,9 @@
package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.RepostedRelation
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Query
import androidx.room3.Upsert
@Dao
interface RepostedRelationDao {

View File

@@ -1,10 +1,10 @@
package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Insert
import androidx.room3.Query
import androidx.room3.Upsert
import kotlinx.coroutines.flow.Flow
import kotlin.time.Clock
import kotlin.time.Instant

View File

@@ -1,8 +1,8 @@
package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventResult
import androidx.room.Dao
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Upsert
@Dao
interface SynchronizeNostrEventResultDao {

View File

@@ -2,9 +2,9 @@ package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent
import ac.cord.auxiliary.compose.database.model.intermdiate.LocalAccount
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Query
import androidx.room3.Upsert
import kotlinx.coroutines.flow.Flow
@Dao

View File

@@ -1,9 +1,9 @@
package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.Zap
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
import androidx.room3.Dao
import androidx.room3.Query
import androidx.room3.Upsert
import kotlinx.coroutines.flow.Flow
@Dao

View File

@@ -2,10 +2,10 @@ package ac.cord.auxiliary.compose.database.model
import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity
import ac.cord.auxiliary.compose.database.model.traits.UnsignedNostrEventEntity
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import androidx.room.PrimaryKey
import androidx.room3.Entity
import androidx.room3.ForeignKey
import androidx.room3.Index
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
@Entity(

View File

@@ -2,10 +2,10 @@ package ac.cord.auxiliary.compose.database.model
import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity
import ac.cord.auxiliary.compose.database.model.traits.UnsignedNostrEventEntity
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import androidx.room.PrimaryKey
import androidx.room3.Entity
import androidx.room3.ForeignKey
import androidx.room3.Index
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
@Entity(

View File

@@ -5,8 +5,8 @@ import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity
import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity
import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity
import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room3.Entity
import androidx.room3.ForeignKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlin.time.Clock
import kotlin.time.Instant

View File

@@ -5,10 +5,10 @@ import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity
import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity
import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity
import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import androidx.room.PrimaryKey
import androidx.room3.Entity
import androidx.room3.ForeignKey
import androidx.room3.Index
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlin.time.Clock
import kotlin.time.Instant

View File

@@ -5,8 +5,8 @@ import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity
import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity
import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity
import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room3.Entity
import androidx.room3.ForeignKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlin.time.Clock
import kotlin.time.Instant

View File

@@ -8,10 +8,10 @@ import ac.cord.auxiliary.compose.database.model.traits.UnsignedNostrEventEntity
import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter
import ac.cord.auxiliary.compose.ui.composable.widgets.content.ContentParser
import ac.cord.auxiliary.compose.ui.composable.widgets.content.ContentSegment
import androidx.room.Entity
import androidx.room.Ignore
import androidx.room.Index
import androidx.room.PrimaryKey
import androidx.room3.Entity
import androidx.room3.Ignore
import androidx.room3.Index
import androidx.room3.PrimaryKey
import co.touchlab.kermit.Logger
import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.core.HexKey
@@ -52,7 +52,7 @@ data class NostrEvent(
val id: String,
val pubKey: HexKey,
val kind: Kind,
val tags: TagArray,
val tags: Array<Array<String>>,
val content: String,
val sig: HexKey,

View File

@@ -8,10 +8,10 @@ import ac.cord.auxiliary.compose.database.model.traits.ReplyingToEntity
import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity
import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity
import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import androidx.room.PrimaryKey
import androidx.room3.Entity
import androidx.room3.ForeignKey
import androidx.room3.Index
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlin.time.Clock
import kotlin.time.Instant

View File

@@ -26,10 +26,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.focusModifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import androidx.room.PrimaryKey
import androidx.room3.Entity
import androidx.room3.ForeignKey
import androidx.room3.Index
import androidx.room3.PrimaryKey
import kotlin.time.Clock
import kotlin.time.Instant

View File

@@ -5,10 +5,10 @@ import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity
import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity
import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity
import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import androidx.room.PrimaryKey
import androidx.room3.Entity
import androidx.room3.ForeignKey
import androidx.room3.Index
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlin.time.Clock
import kotlin.time.Instant

View File

@@ -8,10 +8,10 @@ import ac.cord.auxiliary.compose.database.model.traits.ReplyingToEntity
import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity
import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity
import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import androidx.room.PrimaryKey
import androidx.room3.Entity
import androidx.room3.ForeignKey
import androidx.room3.Index
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlin.time.Clock
import kotlin.time.Instant

View File

@@ -2,8 +2,9 @@ package ac.cord.auxiliary.compose.database.model
import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity
import ac.cord.auxiliary.compose.database.model.typealiases.SynchronizationFilterArray
import androidx.room.Entity
import androidx.room.PrimaryKey
import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter
import androidx.room3.Entity
import androidx.room3.PrimaryKey
import kotlin.time.Clock
import kotlin.time.Instant
@@ -12,7 +13,7 @@ data class RecentSearch(
@PrimaryKey
val query: String,
val synchronizationFilters: SynchronizationFilterArray? = null,
val synchronizationFilters: Array<SynchronizationFilter>? = null,
override val createdAt: Instant = Clock.System.now(),
override val updatedAt: Instant = createdAt,

View File

@@ -1,6 +1,6 @@
package ac.cord.auxiliary.compose.database.model
import androidx.room.Entity
import androidx.room3.Entity
@Entity(
primaryKeys = ["publicKey", "type", "url"]

View File

@@ -5,10 +5,10 @@ import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity
import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity
import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity
import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import androidx.room.PrimaryKey
import androidx.room3.Entity
import androidx.room3.ForeignKey
import androidx.room3.Index
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlin.time.Clock
import kotlin.time.Instant

View File

@@ -4,10 +4,11 @@ import ac.cord.auxiliary.compose.database.model.traits.OptionalNostrEventEntity
import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity
import ac.cord.auxiliary.compose.database.model.traits.UnsignedNostrEventEntity
import ac.cord.auxiliary.compose.database.model.typealiases.SynchronizationFilterArray
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import androidx.room.PrimaryKey
import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter
import androidx.room3.Entity
import androidx.room3.ForeignKey
import androidx.room3.Index
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlin.time.Clock
import kotlin.time.Instant
@@ -45,7 +46,7 @@ data class SynchronizeNostrEventRequest(
val level: Int,
val synchronizationFilters: SynchronizationFilterArray,
val synchronizationFilters: Array<SynchronizationFilter>,
override val nostrEventId: HexKey? = null,
override val unsignedNostrEventId: Long? = null,

View File

@@ -2,10 +2,10 @@ package ac.cord.auxiliary.compose.database.model
import ac.cord.auxiliary.compose.database.model.traits.OptionalNostrEventEntity
import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import androidx.room.PrimaryKey
import androidx.room3.Entity
import androidx.room3.ForeignKey
import androidx.room3.Index
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlin.time.Clock
import kotlin.time.Instant

View File

@@ -4,9 +4,9 @@ import ac.cord.auxiliary.compose.database.model.traits.BroadcastableEntity
import ac.cord.auxiliary.compose.database.model.traits.LocalStoreEntity
import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity
import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity
import androidx.room.Entity
import androidx.room.Index
import androidx.room.PrimaryKey
import androidx.room3.Entity
import androidx.room3.Index
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.Kind
import com.vitorpamplona.quartz.nip01Core.core.TagArray
@@ -26,8 +26,8 @@ data class UnsignedNostrEvent(
val pubKey: HexKey,
val kind: Kind,
val tags: TagArray,
val privateTags: TagArray? = null,
val tags: Array<Array<String>>,
val privateTags: Array<Array<String>>? = null,
val content: String,
val signedAt: Instant? = null,

View File

@@ -6,10 +6,10 @@ import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity
import ac.cord.auxiliary.compose.database.model.traits.SoftDeletableEntity
import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity
import ac.cord.auxiliary.compose.database.model.traits.UserViewableEntity
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import androidx.room.PrimaryKey
import androidx.room3.Entity
import androidx.room3.ForeignKey
import androidx.room3.Index
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlin.time.Clock
import kotlin.time.Instant

View File

@@ -6,8 +6,8 @@ import ac.cord.auxiliary.compose.database.model.NostrEvent
import ac.cord.auxiliary.compose.database.model.Profile
import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest
import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent
import androidx.room.Embedded
import androidx.room.Relation
import androidx.room3.Embedded
import androidx.room3.Relation
data class LocalAccount(
@Embedded val unsignedNostrEvent: UnsignedNostrEvent?,

View File

@@ -2,8 +2,8 @@ package ac.cord.auxiliary.compose.database.model.intermdiate
import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventRequest
import ac.cord.auxiliary.compose.database.model.NostrEvent
import androidx.room.Embedded
import androidx.room.Relation
import androidx.room3.Embedded
import androidx.room3.Relation
data class LocalBroadcastNostrEventRequest(
@Embedded val broadcastNostrEventRequest: BroadcastNostrEventRequest,

View File

@@ -20,8 +20,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.room.Embedded
import androidx.room.Relation
import androidx.room3.Embedded
import androidx.room3.Relation
data class LocalInReplyToNostrEvent(
@Embedded val inReplyToRelation: InReplyToRelation,

View File

@@ -2,8 +2,8 @@ package ac.cord.auxiliary.compose.database.model.intermdiate
import ac.cord.auxiliary.compose.database.model.Mention
import ac.cord.auxiliary.compose.database.model.Profile
import androidx.room.Embedded
import androidx.room.Relation
import androidx.room3.Embedded
import androidx.room3.Relation
data class LocalMention(
@Embedded val mention: Mention,

View File

@@ -21,10 +21,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.room.Embedded
import androidx.room.Ignore
import androidx.room.Junction
import androidx.room.Relation
import androidx.room3.Embedded
import androidx.room3.Ignore
import androidx.room3.Junction
import androidx.room3.Relation
data class LocalNostrEvent(
@Embedded val nostrEvent: NostrEvent,

View File

@@ -2,8 +2,8 @@ package ac.cord.auxiliary.compose.database.model.intermdiate
import ac.cord.auxiliary.compose.database.model.Post
import ac.cord.auxiliary.compose.database.model.Profile
import androidx.room.Embedded
import androidx.room.Relation
import androidx.room3.Embedded
import androidx.room3.Relation
data class LocalPost(
@Embedded val post: Post,

View File

@@ -2,8 +2,8 @@ package ac.cord.auxiliary.compose.database.model.intermdiate
import ac.cord.auxiliary.compose.database.model.NostrEvent
import ac.cord.auxiliary.compose.database.model.Profile
import androidx.room.Embedded
import androidx.room.Relation
import androidx.room3.Embedded
import androidx.room3.Relation
data class LocalProfile(
@Embedded val nostrEvent: NostrEvent,

View File

@@ -3,9 +3,9 @@ package ac.cord.auxiliary.compose.database.model.intermdiate
import ac.cord.auxiliary.compose.database.model.Connection
import ac.cord.auxiliary.compose.database.model.NostrEvent
import ac.cord.auxiliary.compose.database.model.Profile
import androidx.room.Embedded
import androidx.room.Junction
import androidx.room.Relation
import androidx.room3.Embedded
import androidx.room3.Junction
import androidx.room3.Relation
data class LocalProfileWithFollowers(
@Embedded val nostrEvent: NostrEvent,

View File

@@ -3,9 +3,9 @@ package ac.cord.auxiliary.compose.database.model.intermdiate
import ac.cord.auxiliary.compose.database.model.Connection
import ac.cord.auxiliary.compose.database.model.NostrEvent
import ac.cord.auxiliary.compose.database.model.Profile
import androidx.room.Embedded
import androidx.room.Junction
import androidx.room.Relation
import androidx.room3.Embedded
import androidx.room3.Junction
import androidx.room3.Relation
data class LocalProfileWithFollowing(
@Embedded val nostrEvent: NostrEvent,

View File

@@ -20,8 +20,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.room.Embedded
import androidx.room.Relation
import androidx.room3.Embedded
import androidx.room3.Relation
data class LocalQuotedNostrEvent(
@Embedded val quotedRelation: QuotedRelation,

View File

@@ -20,8 +20,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.room.Embedded
import androidx.room.Relation
import androidx.room3.Embedded
import androidx.room3.Relation
data class LocalRepostedNostrEvent(
@Embedded val repostedRelation: RepostedRelation,

View File

@@ -58,6 +58,8 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlin.collections.emptyMap
import kotlin.collections.plus
import kotlin.time.Clock
@@ -75,6 +77,8 @@ class DatabaseNostrRepository(
val logger = Logger.withTag(TAG)
private val storeNostrEventMutex = Mutex()
override suspend fun observeProfile(publicKey: HexKey): Flow<LocalAccount?> {
return database.unsignedNostrEventDao().observeProfile(publicKey)
}
@@ -399,40 +403,20 @@ class DatabaseNostrRepository(
synchronizeNostrEventRequest: SynchronizeNostrEventRequest,
synchronizationRelayURLs: List<String>
) {
val triggerDelay = 5.seconds
val delayedFlowTriggerNostrEvent = nostrEvent.copy(
savedAt = Instant.fromEpochSeconds(
Clock.System.now().epochSeconds + triggerDelay.inWholeSeconds
storeNostrEventMutex.withLock {
database.nostrDao().storeNostrEvent(
nostrEvent,
synchronizationRelayURLs = synchronizationRelayURLs,
level = synchronizeNostrEventRequest.level
)
)
logger.d("savedAt: ${nostrEvent.savedAt}")
logger.d("SavedAt: ${delayedFlowTriggerNostrEvent.savedAt}")
database.nostrDao().storeNostrEvent(
delayedFlowTriggerNostrEvent,
synchronizationRelayURLs = synchronizationRelayURLs,
level = synchronizeNostrEventRequest.level
)
database.synchronizeNostrEventRequestDao().upsert(
synchronizeNostrEventRequest.copy(
nostrEventId = nostrEvent.id,
status = "processed"
database.synchronizeNostrEventRequestDao().upsert(
synchronizeNostrEventRequest.copy(
nostrEventId = nostrEvent.id,
status = "processed"
)
)
)
// Might not even need this delay
// scope.launch {
// delay(triggerDelay)
// database.nostrEventDao().upsert(
// nostrEvent
// )
// }
// Trigger the nostrEvent to appear in the feed...
delay(triggerDelay)
database.nostrEventDao().upsert(
nostrEvent
)
}
}
override suspend fun queueSynchronizeNostrEvent(