mirror of
				https://github.com/commons-app/apps-android-commons.git
				synced 2025-10-31 14:53:59 +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
	
	 savsch
						savsch