Skip to content

Commit

Permalink
Fix duplicated events, fix kinds filter
Browse files Browse the repository at this point in the history
  • Loading branch information
greenart7c3 committed Jul 24, 2024
1 parent 957e412 commit 7ba4d63
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ interface EventDao {
@Transaction
fun deleteOldestByKind(kind: Int, pubkey: String)

@Query("SELECT * FROM EventEntity WHERE kind >= 20000 AND kind < 30000")
fun getEphemeralEvents(): List<EventWithTags>

@Query(
"""
SELECT EventEntity.id
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.greenart7c3.citrine.server

import android.util.Log
import androidx.sqlite.db.SimpleSQLiteQuery
import com.greenart7c3.citrine.database.AppDatabase
import com.greenart7c3.citrine.database.EventWithTags
Expand Down Expand Up @@ -50,17 +51,35 @@ object EventRepository {
}

if (filter.kinds.isNotEmpty()) {
whereClause.add("EventEntity.kind IN (?)")
params.add(filter.kinds.joinToString(","))
whereClause.add(
filter.kinds.joinToString(" OR ", prefix = "(", postfix = ")") {
"EventEntity.kind = ?"
},
)
params.addAll(filter.kinds)
}

if (filter.tags.isNotEmpty()) {
filter.tags.filterValues { it.isNotEmpty() }.forEach { tag ->
whereClause.add(
"TagEntity.col0Name = ? AND TagEntity.col1Value in (?)",
)
val tags = filter.tags.filterValues { it.isNotEmpty() }
var tagQuery = ""
tags.forEach { tag ->
tagQuery = "EXISTS (SELECT TagEntity.pkEvent FROM TagEntity WHERE EventEntity.id = TagEntity.pkEvent"
tagQuery += " AND TagEntity.col0Name = ? AND ("
params.add(tag.key)
params.add(tag.value.map { "'$it'" }.toString().removePrefix("[").removeSuffix("]"))

var count2 = 0
tag.value.forEach {
if (count2 == 0) {
count2++
} else {
tagQuery += " OR "
}
tagQuery += " TagEntity.col1Value = ?"
params.add(it)
}
tagQuery += "))"

whereClause.add(tagQuery)
}
}

Expand All @@ -69,7 +88,6 @@ object EventRepository {
var query = """
SELECT EventEntity.*
FROM EventEntity EventEntity
LEFT JOIN TagEntity TagEntity ON EventEntity.id = TagEntity.pkEvent
$predicatesSql
ORDER BY EventEntity.createdAt DESC
"""
Expand Down Expand Up @@ -105,6 +123,7 @@ object EventRepository {
events.forEach {
val event = it.toEvent()
if (!event.isExpired()) {
Log.d("event", "sending event ${event.id} subscription ${subscription.id} filter $filter")
subscription.connection.session.send(
subscription.objectMapper.writeValueAsString(
listOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,7 @@ class WebSocketServerService : Service() {
private fun eventsToDelete(database: AppDatabase) {
GlobalScope.launch(Dispatchers.IO) {
if (Settings.deleteEphemeralEvents) {
val ephemeralEvents = EventRepository.query(
database,
EventFilter(
kinds = (20000 until 30000).toSet(),
),
)
val ephemeralEvents = database.eventDao().getEphemeralEvents()
Log.d("timer", "Deleting ${ephemeralEvents.size} ephemeral events")
database.eventDao().delete(ephemeralEvents.map { it.event.id })
}
Expand Down

0 comments on commit 7ba4d63

Please sign in to comment.