mirror of
				https://github.com/KokaKiwi/BarInsta
				synced 2025-11-03 21:15:35 +00:00 
			
		
		
		
	Add username check to prevent unnecessary fetch in ProfileFragmentViewModel
This commit is contained in:
		
							parent
							
								
									0d35f37bbc
								
							
						
					
					
						commit
						65f46e4ca7
					
				@ -49,6 +49,8 @@ class ProfileFragmentViewModel(
 | 
				
			|||||||
    private val profileAction = MutableLiveData(INIT)
 | 
					    private val profileAction = MutableLiveData(INIT)
 | 
				
			||||||
    private val _eventLiveData = MutableLiveData<Event<ProfileEvent>?>()
 | 
					    private val _eventLiveData = MutableLiveData<Event<ProfileEvent>?>()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private var previousUsername: String? = null
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    enum class ProfileAction {
 | 
					    enum class ProfileAction {
 | 
				
			||||||
        INIT,
 | 
					        INIT,
 | 
				
			||||||
        REFRESH,
 | 
					        REFRESH,
 | 
				
			||||||
@ -98,8 +100,9 @@ class ProfileFragmentViewModel(
 | 
				
			|||||||
    val profile: LiveData<Resource<User?>> = currentUserStateUsernameActionLiveData.switchMap {
 | 
					    val profile: LiveData<Resource<User?>> = currentUserStateUsernameActionLiveData.switchMap {
 | 
				
			||||||
        val (currentUserResource, stateUsernameResource, action) = it
 | 
					        val (currentUserResource, stateUsernameResource, action) = it
 | 
				
			||||||
        liveData<Resource<User?>>(context = viewModelScope.coroutineContext + ioDispatcher) {
 | 
					        liveData<Resource<User?>>(context = viewModelScope.coroutineContext + ioDispatcher) {
 | 
				
			||||||
 | 
					            if (action == INIT && previousUsername != null && stateUsernameResource.data == previousUsername) return@liveData
 | 
				
			||||||
            if (currentUserResource.status == Resource.Status.LOADING || stateUsernameResource.status == Resource.Status.LOADING) {
 | 
					            if (currentUserResource.status == Resource.Status.LOADING || stateUsernameResource.status == Resource.Status.LOADING) {
 | 
				
			||||||
                emit(Resource.loading(null))
 | 
					                emit(Resource.loading(profileCopy.value?.data))
 | 
				
			||||||
                return@liveData
 | 
					                return@liveData
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            val currentUser = currentUserResource.data
 | 
					            val currentUser = currentUserResource.data
 | 
				
			||||||
@ -111,6 +114,7 @@ class ProfileFragmentViewModel(
 | 
				
			|||||||
            try {
 | 
					            try {
 | 
				
			||||||
                when (action) {
 | 
					                when (action) {
 | 
				
			||||||
                    INIT, REFRESH -> {
 | 
					                    INIT, REFRESH -> {
 | 
				
			||||||
 | 
					                        previousUsername = stateUsername
 | 
				
			||||||
                        val fetchedUser = profileFetchControlledRunner.cancelPreviousThenRun { fetchUser(currentUser, stateUsername) }
 | 
					                        val fetchedUser = profileFetchControlledRunner.cancelPreviousThenRun { fetchUser(currentUser, stateUsername) }
 | 
				
			||||||
                        emit(Resource.success(fetchedUser))
 | 
					                        emit(Resource.success(fetchedUser))
 | 
				
			||||||
                        if (fetchedUser != null) {
 | 
					                        if (fetchedUser != null) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user