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

Hide avatar and nick if the same user is sending consecutive messages

parent 4bed28c9
No related branches found
No related tags found
No related merge requests found
...@@ -12,12 +12,13 @@ data class DisplayMessage( ...@@ -12,12 +12,13 @@ data class DisplayMessage(
) { ) {
data class Tag( data class Tag(
val id: MsgId, val id: MsgId,
val isFollowUp: Boolean,
val isSelected: Boolean, val isSelected: Boolean,
val isExpanded: Boolean, val isExpanded: Boolean,
val isMarkerLine: Boolean val isMarkerLine: Boolean
) )
val tag = Tag(content.messageId, isSelected, isExpanded, isMarkerLine) val tag = Tag(content.messageId, content.followUp, isSelected, isExpanded, isMarkerLine)
val avatarUrl = content.sender.let { val avatarUrl = content.sender.let {
Regex("[us]id(\\d+)").matchEntire(HostmaskHelper.user(it))?.groupValues?.lastOrNull()?.let { Regex("[us]id(\\d+)").matchEntire(HostmaskHelper.user(it))?.groupValues?.lastOrNull()?.let {
"https://www.irccloud.com/avatar-redirect/$it" "https://www.irccloud.com/avatar-redirect/$it"
......
...@@ -184,6 +184,11 @@ class MessageAdapter( ...@@ -184,6 +184,11 @@ class MessageAdapter(
this.itemView.isSelected = message.isSelected this.itemView.isSelected = message.isSelected
if (message.isFollowUp) {
name?.visibility = View.GONE
avatar?.visibility = View.GONE
}
avatar?.let { avatarView -> avatar?.let { avatarView ->
GlideApp.with(itemView) GlideApp.with(itemView)
.load(message.avatarUrl) .load(message.avatarUrl)
......
...@@ -161,6 +161,7 @@ class QuasselMessageRenderer @Inject constructor( ...@@ -161,6 +161,7 @@ class QuasselMessageRenderer @Inject constructor(
combined = SpanFormatter.format("%s: %s", nick, content), combined = SpanFormatter.format("%s: %s", nick, content),
avatarUrl = message.avatarUrl, avatarUrl = message.avatarUrl,
fallbackDrawable = TextDrawable.builder().buildRound(initial, senderColor), fallbackDrawable = TextDrawable.builder().buildRound(initial, senderColor),
isFollowUp = message.content.followUp,
isMarkerLine = message.isMarkerLine, isMarkerLine = message.isMarkerLine,
isExpanded = message.isExpanded, isExpanded = message.isExpanded,
isSelected = message.isSelected isSelected = message.isSelected
......
...@@ -29,15 +29,20 @@ ...@@ -29,15 +29,20 @@
android:typeface="monospace" android:typeface="monospace"
tools:text="@sample/messages.json/data/time" /> tools:text="@sample/messages.json/data/time" />
<ImageView <FrameLayout
android:id="@+id/avatar" android:layout_width="@dimen/avatar_size"
android:layout_width="40dp" android:layout_height="wrap_content"
android:layout_height="40dp"
android:layout_marginBottom="@dimen/message_vertical" android:layout_marginBottom="@dimen/message_vertical"
android:layout_marginEnd="@dimen/message_horizontal" android:layout_marginEnd="@dimen/message_horizontal"
android:layout_marginRight="@dimen/message_horizontal" android:layout_marginRight="@dimen/message_horizontal"
android:layout_marginTop="@dimen/message_vertical" android:layout_marginTop="@dimen/message_vertical">
<ImageView
android:id="@+id/avatar"
android:layout_width="@dimen/avatar_size"
android:layout_height="@dimen/avatar_size"
android:visibility="gone" /> android:visibility="gone" />
</FrameLayout>
<LinearLayout <LinearLayout
android:layout_width="0dip" android:layout_width="0dip"
......
...@@ -29,7 +29,8 @@ class QuasselBacklogStorage(private val db: QuasselDatabase) : BacklogStorage { ...@@ -29,7 +29,8 @@ class QuasselBacklogStorage(private val db: QuasselDatabase) : BacklogStorage {
bufferId = message.bufferInfo.bufferId, bufferId = message.bufferInfo.bufferId,
sender = message.sender, sender = message.sender,
senderPrefixes = message.senderPrefixes, senderPrefixes = message.senderPrefixes,
content = message.content content = message.content,
followUp = false
) )
) )
} }
......
...@@ -17,7 +17,7 @@ import de.kuschku.quasseldroid.persistence.QuasselDatabase.Filtered ...@@ -17,7 +17,7 @@ import de.kuschku.quasseldroid.persistence.QuasselDatabase.Filtered
import io.reactivex.Flowable import io.reactivex.Flowable
import org.threeten.bp.Instant import org.threeten.bp.Instant
@Database(entities = [DatabaseMessage::class, Filtered::class], version = 3) @Database(entities = [DatabaseMessage::class, Filtered::class], version = 4)
@TypeConverters(DatabaseMessage.MessageTypeConverters::class) @TypeConverters(DatabaseMessage.MessageTypeConverters::class)
abstract class QuasselDatabase : RoomDatabase() { abstract class QuasselDatabase : RoomDatabase() {
abstract fun message(): MessageDao abstract fun message(): MessageDao
...@@ -32,7 +32,8 @@ abstract class QuasselDatabase : RoomDatabase() { ...@@ -32,7 +32,8 @@ abstract class QuasselDatabase : RoomDatabase() {
var bufferId: Int, var bufferId: Int,
var sender: String, var sender: String,
var senderPrefixes: String, var senderPrefixes: String,
var content: String var content: String,
var followUp: Boolean
) { ) {
class MessageTypeConverters { class MessageTypeConverters {
@TypeConverter @TypeConverter
...@@ -169,7 +170,15 @@ abstract class QuasselDatabase : RoomDatabase() { ...@@ -169,7 +170,15 @@ abstract class QuasselDatabase : RoomDatabase() {
"CREATE TABLE filtered(bufferId INTEGER, accountId INTEGER, filtered INTEGER, PRIMARY KEY(accountId, bufferId));" "CREATE TABLE filtered(bufferId INTEGER, accountId INTEGER, filtered INTEGER, PRIMARY KEY(accountId, bufferId));"
) )
} }
}).build() },
object : Migration(3, 4) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL(
"ALTER TABLE message ADD followUp INT DEFAULT 0 NOT NULL;"
)
}
}
).build()
} }
} }
} }
...@@ -202,7 +211,17 @@ FROM ...@@ -202,7 +211,17 @@ FROM
bufferId, bufferId,
sender, sender,
senderPrefixes, senderPrefixes,
content content,
sender = coalesce((SELECT sender
FROM message m
WHERE m.messageId < message.messageId
AND bufferId = ?
AND type & ~? > 0
AND date(datetime(m.time / 1000, 'unixepoch', 'localtime')) =
date(datetime(message.time / 1000, 'unixepoch', 'localtime'))
ORDER BY m.messageId
DESC
LIMIT 1), 0) AS followUp
FROM message FROM message
WHERE bufferId = ? WHERE bufferId = ?
AND type & ~? > 0 AND type & ~? > 0
...@@ -215,10 +234,13 @@ FROM ...@@ -215,10 +234,13 @@ FROM
? AS bufferId, ? AS bufferId,
'' AS sender, '' AS sender,
'' AS senderPrefixes, '' AS senderPrefixes,
'' AS content '' AS content,
0 AS followUp
FROM message FROM message
WHERE bufferId = ? WHERE bufferId = ?
AND type & ~? > 0 AND type & ~? > 0
) t ) t
ORDER BY time DESC, messageId DESC ORDER BY TIME
""", arrayOf(bufferId, type, bufferId, bufferId, type))) DESC, messageId
\ No newline at end of file DESC
""", arrayOf(bufferId, type, bufferId, type, bufferId, bufferId, type)))
\ No newline at end of file
...@@ -10,6 +10,7 @@ class FormattedMessage( ...@@ -10,6 +10,7 @@ class FormattedMessage(
val combined: CharSequence, val combined: CharSequence,
val fallbackDrawable: Drawable? = null, val fallbackDrawable: Drawable? = null,
val avatarUrl: String? = null, val avatarUrl: String? = null,
val isFollowUp: Boolean = false,
val isSelected: Boolean, val isSelected: Boolean,
val isExpanded: Boolean, val isExpanded: Boolean,
val isMarkerLine: Boolean val isMarkerLine: Boolean
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment