- Checks if the file still exists before discarding a duplicate event.
- Adding a per list EOSE
This commit is contained in:
@@ -736,20 +736,24 @@ object LocalCache {
|
|||||||
note.addRelay(relay)
|
note.addRelay(relay)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val file = File(Amethyst.instance.applicationContext.externalCacheDir, "NIP95")
|
||||||
|
|
||||||
|
if (!file.exists()) {
|
||||||
|
try {
|
||||||
|
val cachePath = File(Amethyst.instance.applicationContext.externalCacheDir, "NIP95")
|
||||||
|
cachePath.mkdirs()
|
||||||
|
val stream = FileOutputStream(File(cachePath, event.id))
|
||||||
|
stream.write(event.decode())
|
||||||
|
stream.close()
|
||||||
|
Log.e("EventLogger", "Saved to disk as ${File(cachePath, event.id).toUri()}")
|
||||||
|
} catch (e: IOException) {
|
||||||
|
Log.e("FileSotrageEvent", "FileStorageEvent save to disk error: " + event.id, e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Already processed this event.
|
// Already processed this event.
|
||||||
if (note.event != null) return
|
if (note.event != null) return
|
||||||
|
|
||||||
try {
|
|
||||||
val cachePath = File(Amethyst.instance.applicationContext.externalCacheDir, "NIP95")
|
|
||||||
cachePath.mkdirs()
|
|
||||||
val stream = FileOutputStream(File(cachePath, event.id))
|
|
||||||
stream.write(event.decode())
|
|
||||||
stream.close()
|
|
||||||
Log.e("EventLogger", "Saved to disk as ${File(cachePath, event.id).toUri()}")
|
|
||||||
} catch (e: IOException) {
|
|
||||||
Log.e("FileSotrageEvent", "FileStorageEvent save to disk error: " + event.id, e)
|
|
||||||
}
|
|
||||||
|
|
||||||
// this is an invalid event. But we don't need to keep the data in memory.
|
// this is an invalid event. But we don't need to keep the data in memory.
|
||||||
val eventNoData = FileStorageEvent(event.id, event.pubKey, event.createdAt, event.tags, "", event.sig)
|
val eventNoData = FileStorageEvent(event.id, event.pubKey, event.createdAt, event.tags, "", event.sig)
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ object NostrAccountDataSource : NostrDataSource("AccountData") {
|
|||||||
filter = JsonFilter(
|
filter = JsonFilter(
|
||||||
kinds = listOf(ReportEvent.kind),
|
kinds = listOf(ReportEvent.kind),
|
||||||
authors = listOf(account.userProfile().pubkeyHex),
|
authors = listOf(account.userProfile().pubkeyHex),
|
||||||
since = latestEOSEs.users[account.userProfile()]?.relayList
|
since = latestEOSEs.users[account.userProfile()]?.followList?.get(account.defaultNotificationFollowList)?.relayList
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -96,12 +96,12 @@ object NostrAccountDataSource : NostrDataSource("AccountData") {
|
|||||||
),
|
),
|
||||||
tags = mapOf("p" to listOf(account.userProfile().pubkeyHex)),
|
tags = mapOf("p" to listOf(account.userProfile().pubkeyHex)),
|
||||||
limit = 400,
|
limit = 400,
|
||||||
since = latestEOSEs.users[account.userProfile()]?.relayList
|
since = latestEOSEs.users[account.userProfile()]?.followList?.get(account.defaultNotificationFollowList)?.relayList
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
val accountChannel = requestNewChannel { time, relayUrl ->
|
val accountChannel = requestNewChannel { time, relayUrl ->
|
||||||
latestEOSEs.addOrUpdate(account.userProfile(), relayUrl, time)
|
latestEOSEs.addOrUpdate(account.userProfile(), account.defaultNotificationFollowList, relayUrl, time)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updateChannelFilters() {
|
override fun updateChannelFilters() {
|
||||||
|
|||||||
@@ -15,13 +15,14 @@ object NostrChatroomListDataSource : NostrDataSource("MailBoxFeed") {
|
|||||||
lateinit var account: Account
|
lateinit var account: Account
|
||||||
|
|
||||||
val latestEOSEs = EOSEAccount()
|
val latestEOSEs = EOSEAccount()
|
||||||
|
val chatRoomList = "ChatroomList"
|
||||||
|
|
||||||
fun createMessagesToMeFilter() = TypedFilter(
|
fun createMessagesToMeFilter() = TypedFilter(
|
||||||
types = setOf(FeedType.PRIVATE_DMS),
|
types = setOf(FeedType.PRIVATE_DMS),
|
||||||
filter = JsonFilter(
|
filter = JsonFilter(
|
||||||
kinds = listOf(PrivateDmEvent.kind),
|
kinds = listOf(PrivateDmEvent.kind),
|
||||||
tags = mapOf("p" to listOf(account.userProfile().pubkeyHex)),
|
tags = mapOf("p" to listOf(account.userProfile().pubkeyHex)),
|
||||||
since = latestEOSEs.users[account.userProfile()]?.relayList
|
since = latestEOSEs.users[account.userProfile()]?.followList?.get(chatRoomList)?.relayList
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -30,7 +31,7 @@ object NostrChatroomListDataSource : NostrDataSource("MailBoxFeed") {
|
|||||||
filter = JsonFilter(
|
filter = JsonFilter(
|
||||||
kinds = listOf(PrivateDmEvent.kind),
|
kinds = listOf(PrivateDmEvent.kind),
|
||||||
authors = listOf(account.userProfile().pubkeyHex),
|
authors = listOf(account.userProfile().pubkeyHex),
|
||||||
since = latestEOSEs.users[account.userProfile()]?.relayList
|
since = latestEOSEs.users[account.userProfile()]?.followList?.get(chatRoomList)?.relayList
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -39,7 +40,7 @@ object NostrChatroomListDataSource : NostrDataSource("MailBoxFeed") {
|
|||||||
filter = JsonFilter(
|
filter = JsonFilter(
|
||||||
kinds = listOf(ChannelCreateEvent.kind, ChannelMetadataEvent.kind),
|
kinds = listOf(ChannelCreateEvent.kind, ChannelMetadataEvent.kind),
|
||||||
authors = listOf(account.userProfile().pubkeyHex),
|
authors = listOf(account.userProfile().pubkeyHex),
|
||||||
since = latestEOSEs.users[account.userProfile()]?.relayList
|
since = latestEOSEs.users[account.userProfile()]?.followList?.get(chatRoomList)?.relayList
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -48,7 +49,7 @@ object NostrChatroomListDataSource : NostrDataSource("MailBoxFeed") {
|
|||||||
filter = JsonFilter(
|
filter = JsonFilter(
|
||||||
kinds = listOf(ChannelCreateEvent.kind),
|
kinds = listOf(ChannelCreateEvent.kind),
|
||||||
ids = account.followingChannels.toList(),
|
ids = account.followingChannels.toList(),
|
||||||
since = latestEOSEs.users[account.userProfile()]?.relayList
|
since = latestEOSEs.users[account.userProfile()]?.followList?.get(chatRoomList)?.relayList
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -72,7 +73,7 @@ object NostrChatroomListDataSource : NostrDataSource("MailBoxFeed") {
|
|||||||
filter = JsonFilter(
|
filter = JsonFilter(
|
||||||
kinds = listOf(ChannelMessageEvent.kind),
|
kinds = listOf(ChannelMessageEvent.kind),
|
||||||
tags = mapOf("e" to listOf(it)),
|
tags = mapOf("e" to listOf(it)),
|
||||||
since = latestEOSEs.users[account.userProfile()]?.relayList,
|
since = latestEOSEs.users[account.userProfile()]?.followList?.get(chatRoomList)?.relayList,
|
||||||
limit = 25 // Remember to consider spam that is being removed from the UI
|
limit = 25 // Remember to consider spam that is being removed from the UI
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -80,7 +81,7 @@ object NostrChatroomListDataSource : NostrDataSource("MailBoxFeed") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val chatroomListChannel = requestNewChannel { time, relayUrl ->
|
val chatroomListChannel = requestNewChannel { time, relayUrl ->
|
||||||
latestEOSEs.addOrUpdate(account.userProfile(), relayUrl, time)
|
latestEOSEs.addOrUpdate(account.userProfile(), chatRoomList, relayUrl, time)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updateChannelFilters() {
|
override fun updateChannelFilters() {
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ object NostrHomeDataSource : NostrDataSource("HomeFeed") {
|
|||||||
kinds = listOf(TextNoteEvent.kind, LongTextNoteEvent.kind, PollNoteEvent.kind, HighlightEvent.kind),
|
kinds = listOf(TextNoteEvent.kind, LongTextNoteEvent.kind, PollNoteEvent.kind, HighlightEvent.kind),
|
||||||
authors = followSet,
|
authors = followSet,
|
||||||
limit = 400,
|
limit = 400,
|
||||||
since = latestEOSEs.users[account.userProfile()]?.relayList
|
since = latestEOSEs.users[account.userProfile()]?.followList?.get(account.defaultHomeFollowList)?.relayList
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -79,13 +79,13 @@ object NostrHomeDataSource : NostrDataSource("HomeFeed") {
|
|||||||
}.flatten()
|
}.flatten()
|
||||||
),
|
),
|
||||||
limit = 100,
|
limit = 100,
|
||||||
since = latestEOSEs.users[account.userProfile()]?.relayList
|
since = latestEOSEs.users[account.userProfile()]?.followList?.get(account.defaultHomeFollowList)?.relayList
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val followAccountChannel = requestNewChannel { time, relayUrl ->
|
val followAccountChannel = requestNewChannel { time, relayUrl ->
|
||||||
latestEOSEs.addOrUpdate(account.userProfile(), relayUrl, time)
|
latestEOSEs.addOrUpdate(account.userProfile(), account.defaultHomeFollowList, relayUrl, time)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updateChannelFilters() {
|
override fun updateChannelFilters() {
|
||||||
|
|||||||
@@ -19,13 +19,28 @@ class EOSERelayList(var relayList: Map<String, EOSETime> = emptyMap()) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class EOSEAccount(var users: Map<User, EOSERelayList> = emptyMap()) {
|
class EOSEFollowList(var followList: Map<String, EOSERelayList> = emptyMap()) {
|
||||||
fun addOrUpdate(user: User, relayUrl: String, time: Long) {
|
fun addOrUpdate(listCode: String, relayUrl: String, time: Long) {
|
||||||
val relayList = users[user]
|
val relayList = followList[listCode]
|
||||||
if (relayList == null) {
|
if (relayList == null) {
|
||||||
users = users + mapOf(user to EOSERelayList(mapOf(relayUrl to EOSETime(time))))
|
val newList = EOSERelayList()
|
||||||
|
newList.addOrUpdate(relayUrl, time)
|
||||||
|
followList = followList + mapOf(listCode to newList)
|
||||||
} else {
|
} else {
|
||||||
relayList.addOrUpdate(relayUrl, time)
|
relayList.addOrUpdate(relayUrl, time)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class EOSEAccount(var users: Map<User, EOSEFollowList> = emptyMap()) {
|
||||||
|
fun addOrUpdate(user: User, listCode: String, relayUrl: String, time: Long) {
|
||||||
|
val followList = users[user]
|
||||||
|
if (followList == null) {
|
||||||
|
val newList = EOSEFollowList()
|
||||||
|
newList.addOrUpdate(listCode, relayUrl, time)
|
||||||
|
users = users + mapOf(user to newList)
|
||||||
|
} else {
|
||||||
|
followList.addOrUpdate(listCode, relayUrl, time)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user