diff --git a/app/src/main/java/org/fossasia/openevent/general/event/EventDetailsViewModel.kt b/app/src/main/java/org/fossasia/openevent/general/event/EventDetailsViewModel.kt index 217da7231..6d84cefb2 100644 --- a/app/src/main/java/org/fossasia/openevent/general/event/EventDetailsViewModel.kt +++ b/app/src/main/java/org/fossasia/openevent/general/event/EventDetailsViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import io.reactivex.disposables.CompositeDisposable +import io.reactivex.functions.BiFunction import io.reactivex.rxkotlin.plusAssign import org.fossasia.openevent.general.BuildConfig.MAPBOX_KEY import org.fossasia.openevent.general.R @@ -139,28 +140,17 @@ class EventDetailsViewModel( fun fetchSimilarEvents(eventId: Long, topicId: Long, location: String?) { if (eventId == -1L) return + var similarEventsFlowable = eventService.getEventsByLocation(location) if (topicId != -1L) { - compositeDisposable += eventService.getSimilarEvents(topicId) - .withDefaultSchedulers() - .distinctUntilChanged() - .subscribe({ events -> - val list = events.filter { it.id != eventId } - val oldList = mutableSimilarEvents.value - - val similarEventList = mutableSetOf() - similarEventList.addAll(list) - oldList?.let { - similarEventList.addAll(it) - } - mutableSimilarEvents.value = similarEventList - }, { - Timber.e(it, "Error fetching similar events") - mutablePopMessage.value = resource.getString(R.string.error_fetching_event_section_message, - resource.getString(R.string.similar_events)) + similarEventsFlowable = similarEventsFlowable.zipWith(eventService.getSimilarEvents(topicId), + BiFunction { firstList: List, secondList: List -> + val similarList = mutableListOf() + similarList.addAll(firstList) + similarList.addAll(secondList) + similarList }) } - - compositeDisposable += eventService.getEventsByLocation(location) + compositeDisposable += similarEventsFlowable .withDefaultSchedulers() .distinctUntilChanged() .subscribe({ events -> diff --git a/app/src/main/java/org/fossasia/openevent/general/order/OrderCompletedFragment.kt b/app/src/main/java/org/fossasia/openevent/general/order/OrderCompletedFragment.kt index fc35d44fa..b1b8cc057 100644 --- a/app/src/main/java/org/fossasia/openevent/general/order/OrderCompletedFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/order/OrderCompletedFragment.kt @@ -78,7 +78,8 @@ class OrderCompletedFragment : Fragment() { loadEventDetails(it) eventShare = it val eventTopicId = it.eventTopic?.id ?: 0 - orderCompletedViewModel.fetchSimilarEvents(safeArgs.eventId, eventTopicId) + val location = it.searchableLocationName ?: it.locationName + orderCompletedViewModel.fetchSimilarEvents(safeArgs.eventId, eventTopicId, location) }) orderCompletedViewModel.similarEvents diff --git a/app/src/main/java/org/fossasia/openevent/general/order/OrderCompletedViewModel.kt b/app/src/main/java/org/fossasia/openevent/general/order/OrderCompletedViewModel.kt index 2016da6c9..40364634d 100644 --- a/app/src/main/java/org/fossasia/openevent/general/order/OrderCompletedViewModel.kt +++ b/app/src/main/java/org/fossasia/openevent/general/order/OrderCompletedViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import io.reactivex.disposables.CompositeDisposable +import io.reactivex.functions.BiFunction import io.reactivex.rxkotlin.plusAssign import org.fossasia.openevent.general.utils.extensions.withDefaultSchedulers import org.fossasia.openevent.general.R @@ -42,29 +43,37 @@ class OrderCompletedViewModel(private val eventService: EventService, private va }) } - fun fetchSimilarEvents(eventId: Long, topicId: Long) { + fun fetchSimilarEvents(eventId: Long, topicId: Long, location: String?) { if (eventId == -1L) return - if (topicId != -1L) { - compositeDisposable += eventService.getSimilarEvents(topicId) - .withDefaultSchedulers() - .doOnSubscribe { - mutableProgress.value = true - }.subscribe({ events -> - val list = events.filter { it.id != eventId } - val oldList = mutableSimilarEvents.value + var similarEventsFlowable = eventService.getEventsByLocation(location) - val similarEventList = mutableSetOf() - similarEventList.addAll(list) - oldList?.let { - similarEventList.addAll(it) - } - mutableProgress.value = false - mutableSimilarEvents.value = similarEventList - }, { - Timber.e(it, "Error fetching similar events") + if (topicId != -1L) { + similarEventsFlowable = similarEventsFlowable.zipWith(eventService.getSimilarEvents(topicId), + BiFunction { firstList: List, secondList: List -> + val similarList = mutableListOf() + similarList.addAll(firstList) + similarList.addAll(secondList) + similarList }) } + + compositeDisposable += similarEventsFlowable + .withDefaultSchedulers() + .distinctUntilChanged() + .subscribe({ events -> + val list = events.filter { it.id != eventId } + val oldList = mutableSimilarEvents.value + val similarEventList = mutableSetOf() + similarEventList.addAll(list) + oldList?.let { + similarEventList.addAll(it) + } + mutableProgress.value = false + mutableSimilarEvents.value = similarEventList + }, { + Timber.e(it, "Error fetching similar events") + }) } fun setFavorite(eventId: Long, favorite: Boolean) { diff --git a/app/src/main/res/layout/item_card_similar_events.xml b/app/src/main/res/layout/item_card_similar_events.xml index 071fc77bd..fe69efbab 100644 --- a/app/src/main/res/layout/item_card_similar_events.xml +++ b/app/src/main/res/layout/item_card_similar_events.xml @@ -50,7 +50,6 @@ android:layout_width="@dimen/fab_width" android:layout_height="@dimen/fab_height" android:layout_marginEnd="@dimen/fab_margin_80dp" - android:layout_marginRight="@dimen/fab_margin_80dp" app:fabCustomSize="@dimen/fab_height" android:background="@android:color/white" android:scaleType="center" @@ -70,6 +69,7 @@ android:layout_marginEnd="@dimen/fab_margin_right" android:background="@android:color/white" android:scaleType="center" + app:isFavorite="@{event.favorite}" app:backgroundTint="@android:color/white" app:tint="@color/colorAccent" app:elevation="@dimen/fab_elevation"