Fix deleting inbox messages. Fix es #1050

This commit is contained in:
Phillip Thelen 2018-11-12 15:13:11 +01:00
parent ab730a0723
commit 6e2bed6779
7 changed files with 31 additions and 4 deletions

View file

@ -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);

View file

@ -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>>

View file

@ -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())

View file

@ -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)
}
}

View file

@ -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>)
}

View file

@ -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) {

View file

@ -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() {