Skip to content
Snippets Groups Projects
Commit fa249db4 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Set lastSeenMsgId correctly

parent 63f0318c
Branches
Tags
No related merge requests found
...@@ -72,6 +72,9 @@ abstract class QuasselDatabase : RoomDatabase() { ...@@ -72,6 +72,9 @@ abstract class QuasselDatabase : RoomDatabase() {
@Query("SELECT * FROM message WHERE bufferId = :bufferId ORDER BY messageId DESC LIMIT 1") @Query("SELECT * FROM message WHERE bufferId = :bufferId ORDER BY messageId DESC LIMIT 1")
fun findLastByBufferId(bufferId: Int): DatabaseMessage? fun findLastByBufferId(bufferId: Int): DatabaseMessage?
@Query("SELECT * FROM message WHERE bufferId = :bufferId ORDER BY messageId DESC LIMIT 1")
fun lastMsgId(bufferId: Int): LiveData<DatabaseMessage>
@Query("SELECT * FROM message WHERE bufferId = :bufferId ORDER BY messageId ASC LIMIT 1") @Query("SELECT * FROM message WHERE bufferId = :bufferId ORDER BY messageId ASC LIMIT 1")
fun findFirstByBufferId(bufferId: Int): DatabaseMessage? fun findFirstByBufferId(bufferId: Int): DatabaseMessage?
......
...@@ -102,21 +102,27 @@ class MessageListFragment : ServiceBoundFragment() { ...@@ -102,21 +102,27 @@ class MessageListFragment : ServiceBoundFragment() {
} }
handler.post { handler.post {
viewModel.sessionManager.zip(viewModel.getBuffer(), data).observe( val lastMessageId = viewModel.getBuffer().switchMapNotNull {
database.message().lastMsgId(it)
}
var previousMessageId = -1
viewModel.sessionManager.zip(lastMessageId).observe(
this, Observer { this, Observer {
val previous = lastBuffer ?: -1 val previous = lastBuffer ?: -1
val firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition() val firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition()
val messageId = adapter[firstVisibleItemPosition]?.messageId val firstVisibleMessageId = adapter[firstVisibleItemPosition]?.messageId
handler.post { handler.post {
val session = it?.first val session = it?.first
val buffer = it?.second val message = it?.second
val bufferSyncer = session?.bufferSyncer val bufferSyncer = session?.bufferSyncer
if (buffer != null && bufferSyncer != null) { if (message != null && bufferSyncer != null && previousMessageId != message.messageId) {
markAsRead(bufferSyncer, buffer, messageId) markAsRead(bufferSyncer, message.bufferId, message.messageId)
if (buffer != previous) { if (message.bufferId != previous) {
onBufferChange(previous, buffer, messageId, bufferSyncer) onBufferChange(previous, message.bufferId, firstVisibleMessageId, bufferSyncer)
} }
lastBuffer = buffer lastBuffer = message.bufferId
previousMessageId = message.messageId
} }
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment