mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-29 22:03:55 +01:00
Replace temporary experimental fixes part 3
This commit is contained in:
parent
fcc427e724
commit
73c16aea41
2 changed files with 54 additions and 9 deletions
|
|
@ -356,7 +356,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
|
|||
// justExperimenting = new JustExperimenting(this);
|
||||
|
||||
initNetworkBroadCastReceiver();
|
||||
presenter = new NearbyParentFragmentPresenter(bookmarkLocationDao, placesRepository);
|
||||
presenter = new NearbyParentFragmentPresenter(bookmarkLocationDao, placesRepository, nearbyController);
|
||||
progressDialog = new ProgressDialog(getActivity());
|
||||
progressDialog.setCancelable(false);
|
||||
progressDialog.setMessage("Saving in progress...");
|
||||
|
|
|
|||
|
|
@ -24,15 +24,21 @@ import kotlinx.coroutines.Dispatchers
|
|||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.channels.Channel
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.ensureActive
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.osmdroid.views.overlay.Marker
|
||||
import timber.log.Timber
|
||||
import java.lang.reflect.InvocationHandler
|
||||
import java.lang.reflect.Method
|
||||
import java.lang.reflect.Proxy
|
||||
|
||||
class NearbyParentFragmentPresenter
|
||||
(val bookmarkLocationDao: BookmarkLocationsDao, val placesRepository: PlacesRepository) :
|
||||
(
|
||||
val bookmarkLocationDao: BookmarkLocationsDao,
|
||||
val placesRepository: PlacesRepository,
|
||||
val nearbyController: NearbyController
|
||||
) :
|
||||
NearbyParentFragmentContract.UserActions,
|
||||
WikidataP18EditListener, LocationUpdateListener {
|
||||
|
||||
|
|
@ -48,7 +54,7 @@ class NearbyParentFragmentPresenter
|
|||
private var loadPlacesDataAyncJob: Job? = null
|
||||
private object LoadPlacesAsyncOptions {
|
||||
val batchSize = 3
|
||||
val connectionCount = 5
|
||||
val connectionCount = 3
|
||||
}
|
||||
|
||||
private var schedulePlacesUpdateJob: Job? = null
|
||||
|
|
@ -247,7 +253,9 @@ class NearbyParentFragmentPresenter
|
|||
schedulePlacesUpdate(updatedGroups)
|
||||
}
|
||||
val fetchPlacesChannel = Channel<List<Int>>(Channel.UNLIMITED);
|
||||
var totalBatches = 0
|
||||
for (i in indicesToUpdate.indices step LoadPlacesAsyncOptions.batchSize) {
|
||||
++totalBatches
|
||||
fetchPlacesChannel.send(
|
||||
indicesToUpdate.slice(
|
||||
i until (i + LoadPlacesAsyncOptions.batchSize).coerceAtMost(
|
||||
|
|
@ -256,9 +264,50 @@ class NearbyParentFragmentPresenter
|
|||
)
|
||||
)
|
||||
}
|
||||
fetchPlacesChannel.close()
|
||||
val collectResults = Channel<List<Pair<Int, MarkerPlaceGroup>>>(totalBatches);
|
||||
repeat(LoadPlacesAsyncOptions.connectionCount) {
|
||||
launch(Dispatchers.IO) {
|
||||
|
||||
for (indices in fetchPlacesChannel) {
|
||||
ensureActive()
|
||||
try {
|
||||
val fetchedPlaces =
|
||||
nearbyController.getPlaces(indices.map { updatedGroups[it].place })
|
||||
collectResults.send(
|
||||
fetchedPlaces.mapIndexed { index, place ->
|
||||
Pair(indices[index], MarkerPlaceGroup(
|
||||
bookmarkLocationDao.findBookmarkLocation(place),
|
||||
place
|
||||
))
|
||||
}
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
Timber.tag("NearbyPinDetails").e(e);
|
||||
collectResults.send(indices.map { Pair(it, updatedGroups[it]) })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var collectCount = 0
|
||||
for (resultList in collectResults) {
|
||||
for ((index, fetchedPlaceGroup) in resultList) {
|
||||
val existingPlace = updatedGroups[index].place
|
||||
val finalPlaceGroup = MarkerPlaceGroup(
|
||||
fetchedPlaceGroup.isBookmarked,
|
||||
fetchedPlaceGroup.place.apply {
|
||||
location = existingPlace.location
|
||||
distance = existingPlace.distance
|
||||
isMonument = existingPlace.isMonument
|
||||
}
|
||||
)
|
||||
updatedGroups[index] = finalPlaceGroup
|
||||
launch {
|
||||
placesRepository.save(finalPlaceGroup.place)
|
||||
}
|
||||
}
|
||||
schedulePlacesUpdate(updatedGroups)
|
||||
if (collectCount++ == totalBatches) {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -394,11 +443,7 @@ class NearbyParentFragmentPresenter
|
|||
mylocation.setLongitude(nearbyParentFragmentView.getLastMapFocus().longitude)
|
||||
val distance = mylocation.distanceTo(dest_location)
|
||||
|
||||
return if (distance > 2000.0 * 3 / 4) {
|
||||
false
|
||||
} else {
|
||||
true
|
||||
}
|
||||
return (distance <= 2000.0 * 3 / 4)
|
||||
}
|
||||
|
||||
fun onMapReady() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue