mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-20 12:49:02 +00:00
Fix deleting inbox messages. Fix es #1050
This commit is contained in:
parent
ab730a0723
commit
6e2bed6779
7 changed files with 31 additions and 4 deletions
|
|
@ -218,6 +218,9 @@ public interface ApiService {
|
|||
@DELETE("groups/{gid}/chat/{messageId}")
|
||||
Flowable<HabitResponse<Void>> deleteMessage(@Path("gid") String groupId, @Path("messageId") String messageId);
|
||||
|
||||
@DELETE("inbox/messages/{messageId}")
|
||||
Flowable<HabitResponse<Void>> deleteInboxMessage(@Path("messageId") String messageId);
|
||||
|
||||
@GET("groups/{gid}/members")
|
||||
Flowable<HabitResponse<List<Member>>> getGroupMembers(@Path("gid") String groupId, @Query("includeAllPublicFields") Boolean includeAllPublicFields);
|
||||
|
||||
|
|
|
|||
|
|
@ -138,6 +138,7 @@ interface ApiClient {
|
|||
fun postGroupChat(groupId: String, message: Map<String, String>): Flowable<PostChatMessageResult>
|
||||
|
||||
fun deleteMessage(groupId: String, messageId: String): Flowable<Void>
|
||||
fun deleteInboxMessage(id: String): Flowable<Void>
|
||||
|
||||
fun getGroupMembers(groupId: String, includeAllPublicFields: Boolean?): Flowable<List<Member>>
|
||||
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ import javax.net.ssl.SSLException
|
|||
class ApiClientImpl//private OnHabitsAPIResult mResultListener;
|
||||
//private HostConfig mConfig;
|
||||
(private val gsonConverter: GsonConverterFactory, override val hostConfig: HostConfig, private val crashlyticsProxy: CrashlyticsProxy, private val popupNotificationsManager: PopupNotificationsManager, private val context: Context) : Consumer<Throwable>, ApiClient {
|
||||
|
||||
private val retrofitAdapter: Retrofit
|
||||
|
||||
// I think we don't need the ApiClientImpl anymore we could just use ApiService
|
||||
|
|
@ -473,6 +474,9 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
|
|||
override fun deleteMessage(groupId: String, messageId: String): Flowable<Void> {
|
||||
return apiService.deleteMessage(groupId, messageId).compose(configureApiCallObserver())
|
||||
}
|
||||
override fun deleteInboxMessage(id: String): Flowable<Void> {
|
||||
return apiService.deleteInboxMessage(id).compose(configureApiCallObserver())
|
||||
}
|
||||
|
||||
override fun getGroupMembers(groupId: String, includeAllPublicFields: Boolean?): Flowable<List<Member>> {
|
||||
return apiService.getGroupMembers(groupId, includeAllPublicFields).compose(configureApiCallObserver())
|
||||
|
|
|
|||
|
|
@ -65,8 +65,11 @@ class SocialRepositoryImpl(localRepository: SocialLocalRepository, apiClient: Ap
|
|||
}
|
||||
|
||||
override fun deleteMessage(chatMessage: ChatMessage): Flowable<Void> {
|
||||
return apiClient.deleteMessage(chatMessage.groupId ?: "", chatMessage.id)
|
||||
.doOnNext { localRepository.deleteMessage(chatMessage.id) }
|
||||
return if (chatMessage.isInboxMessage) {
|
||||
apiClient.deleteInboxMessage(chatMessage.id)
|
||||
} else {
|
||||
apiClient.deleteMessage(chatMessage.groupId ?: "", chatMessage.id)
|
||||
}.doOnNext { localRepository.deleteMessage(chatMessage.id) }
|
||||
}
|
||||
|
||||
override fun postGroupChat(groupId: String, messageObject: HashMap<String, String>): Flowable<PostChatMessageResult> {
|
||||
|
|
@ -169,7 +172,7 @@ class SocialRepositoryImpl(localRepository: SocialLocalRepository, apiClient: Ap
|
|||
messages.forEach {
|
||||
it.isInboxMessage = true
|
||||
}
|
||||
localRepository.save(messages)
|
||||
localRepository.saveInboxMessages(userID, messages)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -45,4 +45,5 @@ interface SocialLocalRepository : BaseLocalRepository {
|
|||
|
||||
fun getInboxOverviewList(userId: String): Flowable<RealmResults<ChatMessage>>
|
||||
fun saveGroupMemberships(userID: String?, memberships: List<GroupMembership>)
|
||||
fun saveInboxMessages(userID: String, messages: List<ChatMessage>)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,6 +45,21 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm)
|
|||
}
|
||||
}
|
||||
|
||||
override fun saveInboxMessages(userID: String, messages: List<ChatMessage>) {
|
||||
realm.executeTransaction { realm.insertOrUpdate(messages) }
|
||||
val existingMessages = realm.where(ChatMessage::class.java).equalTo("isInboxMessage", true).findAll()
|
||||
val messagesToRemove = ArrayList<ChatMessage>()
|
||||
for (existingMessage in existingMessages) {
|
||||
val isStillMember = messages.any { existingMessage.id == it.id }
|
||||
if (!isStillMember) {
|
||||
messagesToRemove.add(existingMessage)
|
||||
}
|
||||
}
|
||||
realm.executeTransaction {
|
||||
messagesToRemove.forEach { it.deleteFromRealm() }
|
||||
}
|
||||
}
|
||||
|
||||
override fun saveGroupMemberships(userID: String?, memberships: List<GroupMembership>) {
|
||||
realm.executeTransaction { realm.insertOrUpdate(memberships) }
|
||||
if (userID != null) {
|
||||
|
|
|
|||
|
|
@ -274,7 +274,7 @@ class ChatRecyclerViewAdapter(data: OrderedRealmCollection<ChatMessage>?, autoUp
|
|||
}
|
||||
|
||||
private fun shouldShowDelete(): Boolean {
|
||||
return chatMessage?.isSystemMessage != true && (chatMessage?.uuid == userId || user?.contributor?.admin == true)
|
||||
return chatMessage?.isSystemMessage != true && (chatMessage?.uuid == userId || user?.contributor?.admin == true || chatMessage?.isInboxMessage == true)
|
||||
}
|
||||
|
||||
private fun expandMessage() {
|
||||
|
|
|
|||
Loading…
Reference in a new issue