Twidere-App-Android-Twitter.../twidere/src/main/kotlin/org/mariotaku/twidere/extension/model/ParcelableMessageConversati...

97 lines
3.8 KiB
Kotlin

package org.mariotaku.twidere.extension.model
import android.content.Context
import android.widget.ImageView
import org.mariotaku.twidere.R
import org.mariotaku.twidere.model.AccountDetails
import org.mariotaku.twidere.model.ParcelableMessage
import org.mariotaku.twidere.model.ParcelableMessageConversation
import org.mariotaku.twidere.model.ParcelableMessageConversation.ConversationType
import org.mariotaku.twidere.model.ParcelableMessageConversation.ExtrasType
import org.mariotaku.twidere.model.ParcelableUser
import org.mariotaku.twidere.model.message.conversation.TwitterOfficialConversationExtras
import org.mariotaku.twidere.util.MediaLoaderWrapper
import org.mariotaku.twidere.util.UserColorNameManager
fun ParcelableMessageConversation.applyFrom(message: ParcelableMessage, details: AccountDetails) {
account_key = details.key
account_color = details.color
message_type = message.message_type
message_timestamp = message.message_timestamp
local_timestamp = message.local_timestamp
sort_id = message.sort_id
text_unescaped = message.text_unescaped
media = message.media
spans = message.spans
message_extras = message.extras
sender_key = message.sender_key
recipient_key = message.recipient_key
is_outgoing = message.is_outgoing
request_cursor = message.request_cursor
}
val ParcelableMessageConversation.timestamp: Long
get() = if (message_timestamp > 0) message_timestamp else local_timestamp
fun ParcelableMessageConversation.getTitle(context: Context, manager: UserColorNameManager,
nameFirst: Boolean): Pair<String, String?> {
if (conversation_type == ConversationType.ONE_TO_ONE) {
val user = this.user ?: return Pair(context.getString(R.string.title_direct_messages), null)
return Pair(user.name, "@${user.screen_name}")
}
if (conversation_name != null) {
return Pair(conversation_name, null)
}
return Pair(participants.joinToString(separator = ", ") { manager.getDisplayName(it, nameFirst) }, null)
}
fun ParcelableMessageConversation.getSubtitle(context: Context): String {
val resources = context.resources
return resources.getQuantityString(R.plurals.N_message_participants, participants.size,
participants.size)
}
fun ParcelableMessageConversation.getSummaryText(context: Context, manager: UserColorNameManager,
nameFirst: Boolean): CharSequence? {
return getSummaryText(context, manager, nameFirst, message_type, message_extras, sender_key,
text_unescaped, this)
}
fun ParcelableMessageConversation.displayAvatarTo(mediaLoader: MediaLoaderWrapper, view: ImageView) {
if (conversation_type == ConversationType.ONE_TO_ONE) {
val user = this.user
if (user != null) {
mediaLoader.displayProfileImage(view, user)
} else {
mediaLoader.displayProfileImage(view, null)
}
} else {
mediaLoader.displayGroupConversationAvatar(view, conversation_avatar)
}
}
val ParcelableMessageConversation.user: ParcelableUser?
get() {
val userKey = if (is_outgoing) recipient_key else sender_key
return participants.firstOrNull { it.key == userKey }
}
val ParcelableMessageConversation.readOnly: Boolean
get() {
when (conversation_extras_type) {
ExtrasType.TWITTER_OFFICIAL -> {
return (conversation_extras as? TwitterOfficialConversationExtras)?.readOnly ?: false
}
}
return false
}
val ParcelableMessageConversation.notificationDisabled: Boolean
get() {
when (conversation_extras_type) {
ExtrasType.TWITTER_OFFICIAL -> {
return (conversation_extras as? TwitterOfficialConversationExtras)?.notificationsDisabled ?: false
}
}
return false
}