chats: implement mark as read in chat and updating on receiving new chat message
This commit is contained in:
parent
8223f0223e
commit
5a824b5112
@ -65,6 +65,7 @@ import com.mikepenz.iconics.IconicsDrawable
|
|||||||
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
|
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
|
||||||
import com.mikepenz.iconics.utils.colorInt
|
import com.mikepenz.iconics.utils.colorInt
|
||||||
import com.mikepenz.iconics.utils.sizeDp
|
import com.mikepenz.iconics.utils.sizeDp
|
||||||
|
import com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider.from
|
||||||
import com.uber.autodispose.android.lifecycle.autoDispose
|
import com.uber.autodispose.android.lifecycle.autoDispose
|
||||||
import io.reactivex.Observable
|
import io.reactivex.Observable
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
@ -233,6 +234,10 @@ class ChatActivity: BottomSheetActivity(),
|
|||||||
editText.text.clear()
|
editText.text.clear()
|
||||||
viewModel.media.value = listOf()
|
viewModel.media.value = listOf()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is ChatMessageReceivedEvent -> {
|
||||||
|
onRefresh()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -856,6 +861,17 @@ class ChatActivity: BottomSheetActivity(),
|
|||||||
when (fetchEnd) {
|
when (fetchEnd) {
|
||||||
FetchEnd.TOP -> {
|
FetchEnd.TOP -> {
|
||||||
updateMessages(msgs, fullFetch)
|
updateMessages(msgs, fullFetch)
|
||||||
|
|
||||||
|
val pos = msgs.indexOfFirst { it.isRight() }
|
||||||
|
|
||||||
|
mastodonApi.markChatAsRead(chatId, msgs[pos].asRight().id)
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.autoDispose(this, Lifecycle.Event.ON_DESTROY)
|
||||||
|
.subscribe({
|
||||||
|
Log.d(TAG, "Marked new messages as read up to ${msgs[pos].asRight().id}")
|
||||||
|
}, {
|
||||||
|
Log.d(TAG, "Failed to mark messages as read", it)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
FetchEnd.MIDDLE -> {
|
FetchEnd.MIDDLE -> {
|
||||||
replacePlaceholderWithMessages(msgs, fullFetch, pos)
|
replacePlaceholderWithMessages(msgs, fullFetch, pos)
|
||||||
|
@ -24,6 +24,7 @@ import com.keylesspalace.tusky.components.chat.ChatActivity
|
|||||||
import com.keylesspalace.tusky.db.AccountManager
|
import com.keylesspalace.tusky.db.AccountManager
|
||||||
import com.keylesspalace.tusky.di.Injectable
|
import com.keylesspalace.tusky.di.Injectable
|
||||||
import com.keylesspalace.tusky.entity.Chat
|
import com.keylesspalace.tusky.entity.Chat
|
||||||
|
import com.keylesspalace.tusky.entity.ChatMessage
|
||||||
import com.keylesspalace.tusky.entity.NewChatMessage
|
import com.keylesspalace.tusky.entity.NewChatMessage
|
||||||
import com.keylesspalace.tusky.interfaces.ActionButtonActivity
|
import com.keylesspalace.tusky.interfaces.ActionButtonActivity
|
||||||
import com.keylesspalace.tusky.interfaces.ChatActionListener
|
import com.keylesspalace.tusky.interfaces.ChatActionListener
|
||||||
@ -31,10 +32,7 @@ import com.keylesspalace.tusky.interfaces.RefreshableFragment
|
|||||||
import com.keylesspalace.tusky.interfaces.ReselectableFragment
|
import com.keylesspalace.tusky.interfaces.ReselectableFragment
|
||||||
import com.keylesspalace.tusky.network.MastodonApi
|
import com.keylesspalace.tusky.network.MastodonApi
|
||||||
import com.keylesspalace.tusky.network.TimelineCases
|
import com.keylesspalace.tusky.network.TimelineCases
|
||||||
import com.keylesspalace.tusky.repository.ChatRepository
|
import com.keylesspalace.tusky.repository.*
|
||||||
import com.keylesspalace.tusky.repository.ChatStatus
|
|
||||||
import com.keylesspalace.tusky.repository.Placeholder
|
|
||||||
import com.keylesspalace.tusky.repository.TimelineRequestMode
|
|
||||||
import com.keylesspalace.tusky.util.*
|
import com.keylesspalace.tusky.util.*
|
||||||
import com.keylesspalace.tusky.util.Either.Left
|
import com.keylesspalace.tusky.util.Either.Left
|
||||||
import com.keylesspalace.tusky.view.EndlessOnScrollListener
|
import com.keylesspalace.tusky.view.EndlessOnScrollListener
|
||||||
@ -46,6 +44,7 @@ import io.reactivex.Observable
|
|||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import kotlinx.android.synthetic.main.fragment_timeline.*
|
import kotlinx.android.synthetic.main.fragment_timeline.*
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
import java.util.*
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ -352,12 +351,36 @@ class ChatsFragment : BaseFragment(), Injectable, RefreshableFragment, Reselecta
|
|||||||
is DomainMuteEvent -> removeAllByInstance(event.instance)
|
is DomainMuteEvent -> removeAllByInstance(event.instance)
|
||||||
is StatusDeletedEvent -> deleteChatById(event.statusId)
|
is StatusDeletedEvent -> deleteChatById(event.statusId)
|
||||||
is PreferenceChangedEvent -> onPreferenceChanged(event.preferenceKey)
|
is PreferenceChangedEvent -> onPreferenceChanged(event.preferenceKey)
|
||||||
|
is ChatMessageReceivedEvent -> onRefresh() // TODO: proper update
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
eventRegistered = true
|
eventRegistered = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
private fun onChatMessageReceived(msg: ChatMessage) {
|
||||||
|
val pos = findChatPosition(msg.chatId)
|
||||||
|
if(pos == -1) {
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val oldChat = chats[pos].asRight()
|
||||||
|
val newChat = Chat(oldChat.account, oldChat.id, oldChat.unread + 1, msg, msg.createdAt)
|
||||||
|
val newViewData = ViewDataUtils.chatToViewData(newChat)
|
||||||
|
|
||||||
|
chats.removeAt(pos)
|
||||||
|
chats.add(pos, newChat.lift())
|
||||||
|
chats.sortByDescending {
|
||||||
|
if(it.isLeft()) Date(Long.MIN_VALUE)
|
||||||
|
else it.asRight().updatedAt
|
||||||
|
}
|
||||||
|
|
||||||
|
updateAdapter()
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
private fun onPreferenceChanged(key: String) {
|
private fun onPreferenceChanged(key: String) {
|
||||||
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
|
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
when (key) {
|
when (key) {
|
||||||
|
Loading…
Reference in New Issue
Block a user