Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ import org.fossasia.openevent.general.feedback.FeedbackViewModel
import org.fossasia.openevent.general.feedback.Feedback
import org.fossasia.openevent.general.feedback.FeedbackService
import org.fossasia.openevent.general.feedback.FeedbackApi
import org.fossasia.openevent.general.search.SearchResultsViewModel
import org.fossasia.openevent.general.speakercall.SpeakersCall
import org.fossasia.openevent.general.sessions.SessionViewModel
import org.fossasia.openevent.general.sessions.microlocation.MicroLocation
Expand Down Expand Up @@ -120,7 +121,7 @@ val commonModule = module {
single { Preference() }
single { Network() }
single { Resource() }
single { MutableConnectionLiveData() }
factory { MutableConnectionLiveData() }
factory<LocationService> { LocationServiceImpl(androidContext()) }
}

Expand Down Expand Up @@ -216,7 +217,8 @@ val viewModelModule = module {
viewModel { SignUpViewModel(get(), get(), get()) }
viewModel { EventDetailsViewModel(get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) }
viewModel { SessionViewModel(get(), get(), get()) }
viewModel { SearchViewModel(get(), get(), get(), get()) }
viewModel { SearchViewModel(get(), get()) }
viewModel { SearchResultsViewModel(get(), get(), get(), get(), get()) }
viewModel { AttendeeViewModel(get(), get(), get(), get(), get(), get(), get()) }
viewModel { SearchLocationViewModel(get(), get()) }
viewModel { SearchTimeViewModel(get()) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ import retrofit2.http.Query

interface EventApi {

@GET("events?include=event-topic")
fun getEvents(): Single<List<Event>>

@GET("events?include=event-sub-topic,event-topic,event-type,speakers-call")
fun searchEvents(@Query("sort") sort: String, @Query("filter") eventName: String): Single<List<Event>>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ class EventService(
return eventTypesApi.getEventTypes()
}

fun getSearchEvents(eventName: String, sortBy: String): Flowable<List<Event>> {
return eventApi.searchEvents(sortBy, eventName).flatMapPublisher { eventsList ->
fun getSearchEventsPaged(filter: String, sortBy: String, page: Int): Flowable<List<Event>> {
return eventApi.searchEventsPaged(sortBy, filter, page).flatMapPublisher { eventsList ->
eventsList.forEach {
it.speakersCall?.let { sc -> speakersCallDao.insertSpeakerCall(sc) }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import org.fossasia.openevent.general.databinding.ItemCardFavoriteEventBinding
* @property onFavFabClick The callback to be invoked when the favorite FAB is clicked
* @property onShareFabClick The callback to be invoked when the share FAB is clicked
*/
class FavoriteEventsRecyclerAdapter : ListAdapter<Event, FavoriteEventViewHolder>(EventsDiffCallback()) {
class FavoriteEventsListAdapter : ListAdapter<Event, FavoriteEventViewHolder>(EventsDiffCallback()) {

var onEventClick: EventClickListener? = null
var onFavFabClick: FavoriteFabClickListener? = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ import org.jetbrains.anko.design.snackbar
class FavoriteFragment : Fragment(), BottomIconDoubleClick {
private val favoriteEventViewModel by viewModel<FavoriteEventsViewModel>()
private lateinit var rootView: View
private val favoriteEventsRecyclerAdapter = FavoriteEventsRecyclerAdapter()
private val favoriteEventsRecyclerAdapter = FavoriteEventsListAdapter()

override fun onCreateView(
inflater: LayoutInflater,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.fossasia.openevent.general.search

import androidx.lifecycle.MutableLiveData
import androidx.paging.PageKeyedDataSource
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.rxkotlin.plusAssign
import org.fossasia.openevent.general.event.Event
import org.fossasia.openevent.general.event.EventService
import org.fossasia.openevent.general.utils.extensions.withDefaultSchedulers
import timber.log.Timber

class SearchEventsDataSource(
private val eventService: EventService,
private val compositeDisposable: CompositeDisposable,
private val query: String,
private val sortBy: String,
private val mutableProgress: MutableLiveData<Boolean>
) : PageKeyedDataSource<Int, Event>() {

override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Int, Event>) {
compositeDisposable += eventService.getSearchEventsPaged(query, sortBy, 1)
.take(1)
.withDefaultSchedulers()
.subscribe({ response ->
if (response.isEmpty())
mutableProgress.value = false
callback.onResult(response, null, 2)
}, { error ->
Timber.e(error, "Fail on fetching page of events")
})
}

override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Int, Event>) {
compositeDisposable += eventService.getSearchEventsPaged(query, sortBy, params.key)
.take(1)
.withDefaultSchedulers()
.subscribe({ response ->
if (response.isEmpty())
mutableProgress.value = false
callback.onResult(response, params.key + 1)
}, { error ->
Timber.e(error, "Fail on fetching page of events")
})
}

override fun loadBefore(params: LoadParams<Int>, callback: LoadCallback<Int, Event>) {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.fossasia.openevent.general.search

import androidx.lifecycle.MutableLiveData
import androidx.paging.DataSource
import io.reactivex.disposables.CompositeDisposable
import org.fossasia.openevent.general.event.Event
import org.fossasia.openevent.general.event.EventService

data class SearchEventsDataSourceFactory(
private val compositeDisposable: CompositeDisposable,
private val eventService: EventService,
private val query: String,
private val sortBy: String,
private val mutableProgress: MutableLiveData<Boolean>
) : DataSource.Factory<Int, Event>() {
override fun create(): DataSource<Int, Event> {
return SearchEventsDataSource(
eventService,
compositeDisposable,
query,
sortBy,
mutableProgress
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package org.fossasia.openevent.general.search

import org.fossasia.openevent.general.favorite.FavoriteEventViewHolder

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.paging.PagedListAdapter
import org.fossasia.openevent.general.event.Event
import org.fossasia.openevent.general.common.EventClickListener
import org.fossasia.openevent.general.common.EventsDiffCallback
import org.fossasia.openevent.general.common.FavoriteFabClickListener
import org.fossasia.openevent.general.databinding.ItemCardFavoriteEventBinding

class SearchPagedListAdapter : PagedListAdapter<Event, FavoriteEventViewHolder>(EventsDiffCallback()) {

var onEventClick: EventClickListener? = null
var onFavFabClick: FavoriteFabClickListener? = null

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteEventViewHolder {
val binding = ItemCardFavoriteEventBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return FavoriteEventViewHolder(binding)
}

override fun onBindViewHolder(holder: FavoriteEventViewHolder, position: Int) {
val event = getItem(position)
if (event != null) {
holder.apply {
bind(event, position)
eventClickListener = onEventClick
favFabClickListener = onFavFabClick
}
}
}

fun clear() {
this.submitList(null)
}
}
Loading