From 15f6052bdb9d5ddef83c76a5a461b4d7d6eaed41 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 13 Jun 2019 08:14:33 +0200 Subject: [PATCH] fix opening guilds. Fixes #1185 --- .../habitica/extensions/RxJava-Extensions.kt | 16 ++++++++-------- .../ui/fragments/social/GuildFragment.kt | 2 ++ .../habitica/ui/viewmodels/GroupViewModel.kt | 16 ++++++++-------- .../ui/viewmodels/NotificationsViewModel.kt | 2 +- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/RxJava-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/RxJava-Extensions.kt index 76397dee8..e07b58243 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/RxJava-Extensions.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/RxJava-Extensions.kt @@ -7,8 +7,8 @@ import io.reactivex.Single fun > Flowable.filterOptionalDoOnEmpty(function: () -> Unit): Flowable { - return this.filter { !it.isEmpty } - .doOnNext { function() } + return this.doOnNext { if (it.isEmpty) function() } + .filter { !it.isEmpty } .map { it.value } } @@ -18,8 +18,8 @@ fun > Flowable.filterMapEmpty(): Flowable { } fun > Observable.filterOptionalDoOnEmpty(function: () -> Unit): Observable { - return this.filter { !it.isEmpty } - .doOnNext { function() } + return this.doOnNext { if (it.isEmpty) function() } + .filter { !it.isEmpty } .map { it.value } } @@ -29,8 +29,8 @@ fun > Observable.filterMapEmpty(): Observable { } fun > Single.filterOptionalDoOnEmpty(function: () -> Unit): Maybe { - return this.filter { !it.isEmpty } - .doAfterSuccess { function() } + return this.doAfterSuccess { if (it.isEmpty) function() } + .filter { !it.isEmpty } .map { it.value } } @@ -40,8 +40,8 @@ fun > Single.filterMapEmpty(): Maybe { } fun > Maybe.filterOptionalDoOnEmpty(function: () -> Unit): Maybe { - return this.filter { !it.isEmpty } - .doAfterSuccess { function() } + return this.doAfterSuccess { if (it.isEmpty) function() } + .filter { !it.isEmpty } .map { it.value } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.kt index 507b4fc1d..338462cee 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.kt @@ -66,6 +66,8 @@ class GuildFragment : BaseMainFragment() { if (viewModel.groupID == "f2db2a7f-13c5-454d-b3ee-ea1f5089e601") { context?.let { FirebaseAnalytics.getInstance(it).logEvent("opened_no_party_guild", null) } } + + viewModel.retrieveGroup { } } private fun setFragments() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt index 492f0a56e..5d3dff991 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt @@ -24,7 +24,6 @@ import io.realm.RealmResults import java.util.* import javax.inject.Inject - enum class GroupViewType(internal val order: String) { PARTY("party"), GUILD("guild"), @@ -53,6 +52,7 @@ open class GroupViewModel : BaseViewModel() { } protected val groupIDSubject = BehaviorSubject.create>() + val groupIDFlowable = groupIDSubject.toFlowable(BackpressureStrategy.BUFFER) var gotNewMessages: Boolean = false init { @@ -95,7 +95,7 @@ open class GroupViewModel : BaseViewModel() { fun getIsMemberData(): LiveData = isMemberData private fun loadGroupFromLocal() { - disposable.add(groupIDSubject.toFlowable(BackpressureStrategy.LATEST) + disposable.add(groupIDFlowable .filterOptionalDoOnEmpty { group.value = null } .flatMap { socialRepository.getGroup(it) } .observeOn(AndroidSchedulers.mainThread()) @@ -103,8 +103,8 @@ open class GroupViewModel : BaseViewModel() { } private fun loadLeaderFromLocal() { - disposable.add(groupIDSubject.toFlowable(BackpressureStrategy.LATEST) - .filterOptionalDoOnEmpty { group.value = null } + disposable.add(groupIDFlowable + .filterOptionalDoOnEmpty { leader.value = null } .flatMap { socialRepository.getGroup(it) } .distinctUntilChanged { group1, group2 -> group1.id == group2.id } .flatMap { socialRepository.getMember(it.leaderID) } @@ -113,8 +113,8 @@ open class GroupViewModel : BaseViewModel() { } private fun loadMembershipFromLocal() { - disposable.add(groupIDSubject.toFlowable(BackpressureStrategy.LATEST) - .filterOptionalDoOnEmpty { group.value = null } + disposable.add(groupIDFlowable + .filterOptionalDoOnEmpty { isMemberData.value = null } .flatMap { socialRepository.getGroupMemberships() } .observeOn(AndroidSchedulers.mainThread()) .subscribe(Consumer { @@ -123,13 +123,13 @@ open class GroupViewModel : BaseViewModel() { } fun getChatMessages(): Flowable> { - return groupIDSubject.toFlowable(BackpressureStrategy.BUFFER) + return groupIDFlowable .filterMapEmpty() .flatMapMaybe { socialRepository.getGroupChat(it).firstElement() } } fun retrieveGroup(function: (() -> Unit)?) { - disposable.add(socialRepository.retrieveGroup("party") + disposable.add(socialRepository.retrieveGroup(groupID ?: "") .filter { groupViewType == GroupViewType.PARTY } .flatMap { group1 -> socialRepository.retrieveGroupMembers(group1.id, true) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/NotificationsViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/NotificationsViewModel.kt index 6c1a19469..aaddd0d54 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/NotificationsViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/NotificationsViewModel.kt @@ -258,7 +258,7 @@ open class NotificationsViewModel : BaseViewModel() { } } - fun clickGroupInvitation(notification: Notification, navController: MainNavigationController) { + private fun clickGroupInvitation(notification: Notification, navController: MainNavigationController) { when (notification.type) { Notification.Type.GUILD_INVITATION.type -> { val bundle = Bundle()