You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

135 lines
4.4 KiB

package com.keylesspalace.tusky.viewdata
import android.text.Spanned
import com.keylesspalace.tusky.entity.Account
import com.keylesspalace.tusky.entity.Attachment
import com.keylesspalace.tusky.entity.Card
import com.keylesspalace.tusky.entity.Emoji
import java.util.*
abstract class ChatViewData {
abstract fun getViewDataId() : Int
abstract fun deepEquals(o: ChatViewData) : Boolean
class Concrete(val account : Account,
val id: String,
val unread: Long,
val lastMessage: ChatMessageViewData.Concrete?,
val updatedAt: Date ) : ChatViewData() {
override fun getViewDataId(): Int {
return id.hashCode()
}
override fun deepEquals(o: ChatViewData): Boolean {
if (o !is Concrete) return false
return Objects.equals(o.account, account)
&& Objects.equals(o.id, id)
&& o.unread == unread
&& (lastMessage == o.lastMessage || (lastMessage != null && o.lastMessage != null && o.lastMessage.deepEquals(lastMessage)))
&& Objects.equals(o.updatedAt, updatedAt)
}
override fun hashCode(): Int {
return Objects.hash(account, id, unread, lastMessage, updatedAt)
}
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
return deepEquals(other as Concrete)
}
}
class Placeholder(val id: String, val isLoading: Boolean) : ChatViewData() {
override fun getViewDataId(): Int {
return id.hashCode()
}
override fun deepEquals(o: ChatViewData): Boolean {
if( o !is Placeholder ) return false
return o.isLoading == isLoading && o.id == id
}
override fun hashCode(): Int {
var result = if (isLoading) 1 else 0
result = 31 * result + id.hashCode()
return result
}
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
return deepEquals(other as Placeholder)
}
}
}
abstract class ChatMessageViewData {
abstract fun getViewDataId() : Int
abstract fun deepEquals(o: ChatMessageViewData) : Boolean
class Concrete(val id: String,
val content: Spanned?,
val chatId: String,
val accountId: String,
val createdAt: Date,
val attachment: Attachment?,
val emojis: List<Emoji>,
val card: Card?) : ChatMessageViewData()
{
override fun getViewDataId(): Int {
return id.hashCode()
}
override fun deepEquals(o: ChatMessageViewData): Boolean {
if( o !is Concrete ) return false
return Objects.equals(o.id, id)
&& Objects.equals(o.content, content)
&& Objects.equals(o.chatId, chatId)
&& Objects.equals(o.accountId, accountId)
&& Objects.equals(o.createdAt, createdAt)
&& Objects.equals(o.attachment, attachment)
&& Objects.equals(o.emojis, emojis)
&& Objects.equals(o.card, card)
}
override fun hashCode() : Int {
return Objects.hash(id, content, chatId, accountId, createdAt, attachment, card)
}
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
return deepEquals(other as Concrete)
}
}
class Placeholder(val id: String, val isLoading: Boolean) : ChatMessageViewData() {
override fun getViewDataId(): Int {
return id.hashCode()
}
override fun deepEquals(o: ChatMessageViewData): Boolean {
if( o !is Placeholder) return false
return o.isLoading == isLoading && o.id == id
}
override fun hashCode(): Int {
var result = if (isLoading) 1 else 0
result = 31 * result + id.hashCode()
return result
}
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
return deepEquals(other as Placeholder)
}
}
}