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

Minor bugfixes and improvements

parent d1df014c
No related branches found
No related tags found
No related merge requests found
......@@ -13,12 +13,10 @@ class QuasselBacklogStorage(private val db: QuasselDatabase) : BacklogStorage {
for ((bufferId, bufferMessages) in messages.sortedBy { it.messageId }.groupBy { it.bufferInfo.bufferId }) {
val lastMessageId = db.message().findLastByBufferId(bufferId)?.messageId
val firstMessage = bufferMessages.firstOrNull()
if (lastMessageId != null && firstMessage != null) {
if (lastMessageId < firstMessage.messageId) {
if (lastMessageId == null || firstMessage == null || lastMessageId < firstMessage.messageId) {
db.message().clearMessages(bufferId)
}
}
}
for (message in messages) {
db.message().save(
......
......@@ -211,6 +211,7 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
)
chatList.layoutManager = LinearLayoutManager(context)
chatList.itemAnimator = DefaultItemAnimator()
chatList.setItemViewCacheSize(10)
return view
}
......
......@@ -68,5 +68,9 @@ class MessageAdapter(context: Context) :
messageRenderer.init(viewHolder, messageType, hasHighlight)
return viewHolder
}
operator fun get(position: Int): QuasselDatabase.DatabaseMessage? {
return getItem(position)
}
}
......@@ -15,18 +15,20 @@ import android.view.ViewGroup
import butterknife.BindView
import butterknife.ButterKnife
import de.kuschku.libquassel.protocol.BufferId
import de.kuschku.libquassel.session.Backend
import de.kuschku.libquassel.session.SessionManager
import de.kuschku.quasseldroid_ng.R
import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase
import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread
import de.kuschku.quasseldroid_ng.util.helper.invoke
import de.kuschku.quasseldroid_ng.util.helper.switchMap
import de.kuschku.quasseldroid_ng.util.helper.toggle
import de.kuschku.quasseldroid_ng.util.helper.*
import de.kuschku.quasseldroid_ng.util.service.ServiceBoundFragment
class MessageListFragment : ServiceBoundFragment() {
val currentBuffer: MutableLiveData<LiveData<BufferId?>?> = MutableLiveData()
private val buffer = currentBuffer.switchMap { it }
private val sessionManager: LiveData<SessionManager?> = backend.map(Backend::sessionManager)
private val handler = AndroidHandlerThread("Chat")
private lateinit var database: QuasselDatabase
......@@ -64,6 +66,7 @@ class MessageListFragment : ServiceBoundFragment() {
val linearLayoutManager = LinearLayoutManager(context)
linearLayoutManager.reverseLayout = true
messageList.layoutManager = linearLayoutManager
messageList.setItemViewCacheSize(20)
messageList.addOnScrollListener(
object : RecyclerView.OnScrollListener() {
......@@ -85,6 +88,20 @@ class MessageListFragment : ServiceBoundFragment() {
.build()
}
sessionManager.zip(buffer).zip(data).observe(
this, Observer {
handler.post {
val session = it?.first?.first
val buffer = it?.first?.second
val bufferSyncer = session?.bufferSyncer
if (buffer != null && bufferSyncer != null) {
bufferSyncer.requestMarkBufferAsRead(buffer)
}
}
}
)
data.observe(
this, Observer { list ->
val findFirstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition()
......
......@@ -5,7 +5,7 @@ import de.kuschku.libquassel.util.compatibility.LoggingHandler
object AndroidLoggingHandler : LoggingHandler() {
override fun isLoggable(logLevel: LogLevel, tag: String): Boolean {
return true || Log.isLoggable(tag, priority(logLevel))
return Log.isLoggable(tag, priority(logLevel))
}
override fun log(logLevel: LogLevel, tag: String, message: String?, throwable: Throwable?) {
......
package de.kuschku.libquassel.protocol.primitive.serializer
import de.kuschku.libquassel.protocol.Quassel_Features
import de.kuschku.libquassel.util.helpers.hexDump
import de.kuschku.libquassel.util.nio.ChainedByteBuffer
import java.nio.ByteBuffer
import java.nio.CharBuffer
......@@ -46,6 +47,7 @@ abstract class StringSerializer(
}
override fun serialize(buffer: ChainedByteBuffer, data: String?, features: Quassel_Features) {
try {
if (data == null) {
IntSerializer.serialize(buffer, -1, features)
} else {
......@@ -58,18 +60,28 @@ abstract class StringSerializer(
for (i in 0 until trailingNullBytes)
buffer.put(0)
}
} catch (e: Throwable) {
throw RuntimeException(data, e)
}
}
fun serialize(data: String?): ByteBuffer = if (data == null) {
ByteBuffer.allocate(0)
fun serialize(data: String?): ByteBuffer {
try {
if (data == null) {
return ByteBuffer.allocate(0)
} else {
val charBuffer = charBuffer(data.length)
charBuffer.put(data)
charBuffer.flip()
encoder.encode(charBuffer)
return encoder.encode(charBuffer)
}
} catch (e: Throwable) {
throw RuntimeException(data, e)
}
}
fun deserializeAll(buffer: ByteBuffer): String? {
try {
val len = buffer.remaining()
return if (len == -1) {
null
......@@ -83,9 +95,14 @@ abstract class StringSerializer(
charBuffer.flip()
charBuffer.toString()
}
} catch (e: Throwable) {
buffer.hexDump()
throw RuntimeException(e)
}
}
override fun deserialize(buffer: ByteBuffer, features: Quassel_Features): String? {
try {
val len = IntSerializer.deserialize(buffer, features)
return if (len == -1) {
null
......@@ -99,5 +116,9 @@ abstract class StringSerializer(
charBuffer.flip()
charBuffer.toString()
}
} catch (e: Throwable) {
buffer.hexDump()
throw RuntimeException(e)
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment