mirror of
				https://github.com/KokaKiwi/BarInsta
				synced 2025-10-30 19:15:35 +00:00 
			
		
		
		
	Re-add ProfileFragmentViewModel params and fix tests
This commit is contained in:
		
							parent
							
								
									52826ad28c
								
							
						
					
					
						commit
						751259d430
					
				| @ -85,6 +85,14 @@ class ProfileFragment : Fragment(), OnRefreshListener, ConfirmDialogFragmentCall | ||||
|     private lateinit var appStateViewModel: AppStateViewModel | ||||
|     private lateinit var viewModel: ProfileFragmentViewModel | ||||
| 
 | ||||
|     private val userRepository by lazy { UserRepository.getInstance() } | ||||
|     private val friendshipRepository by lazy { FriendshipRepository.getInstance() } | ||||
|     private val storiesRepository by lazy { StoriesRepository.getInstance() } | ||||
|     private val mediaRepository by lazy { MediaRepository.getInstance() } | ||||
|     private val graphQLRepository by lazy { GraphQLRepository.getInstance() } | ||||
|     private val favoriteRepository by lazy { FavoriteRepository.getInstance(requireContext()) } | ||||
|     private val directMessagesRepository by lazy { DirectMessagesRepository.getInstance() } | ||||
| 
 | ||||
|     private val confirmDialogFragmentRequestCode = 100 | ||||
|     private val ppOptsDialogRequestCode = 101 | ||||
|     private val bioDialogRequestCode = 102 | ||||
| @ -309,7 +317,15 @@ class ProfileFragment : Fragment(), OnRefreshListener, ConfirmDialogFragmentCall | ||||
|         viewModel = ViewModelProvider( | ||||
|             this, | ||||
|             ProfileFragmentViewModelFactory( | ||||
|                 FavoriteRepository.getInstance(requireContext()), | ||||
|                 csrfToken, | ||||
|                 deviceUuid, | ||||
|                 userRepository, | ||||
|                 friendshipRepository, | ||||
|                 storiesRepository, | ||||
|                 mediaRepository, | ||||
|                 graphQLRepository, | ||||
|                 favoriteRepository, | ||||
|                 directMessagesRepository, | ||||
|                 if (isLoggedIn) DirectMessagesManager else null, | ||||
|                 this, | ||||
|                 arguments | ||||
|  | ||||
| @ -16,12 +16,9 @@ import awais.instagrabber.repositories.responses.User | ||||
| import awais.instagrabber.repositories.responses.UserProfileContextLink | ||||
| import awais.instagrabber.repositories.responses.directmessages.RankedRecipient | ||||
| import awais.instagrabber.repositories.responses.stories.Story | ||||
| import awais.instagrabber.utils.Constants | ||||
| import awais.instagrabber.utils.ControlledRunner | ||||
| import awais.instagrabber.utils.Event | ||||
| import awais.instagrabber.utils.getCsrfTokenFromCookie | ||||
| import awais.instagrabber.utils.SingleRunner | ||||
| import awais.instagrabber.utils.Utils | ||||
| import awais.instagrabber.utils.extensions.TAG | ||||
| import awais.instagrabber.utils.extensions.isReallyPrivate | ||||
| import awais.instagrabber.viewmodels.ProfileFragmentViewModel.ProfileAction.* | ||||
| @ -34,20 +31,18 @@ import java.time.LocalDateTime | ||||
| 
 | ||||
| class ProfileFragmentViewModel( | ||||
|     private val state: SavedStateHandle, | ||||
|     private val favoriteRepository: FavoriteRepository?, | ||||
|     private val csrfToken: String?, | ||||
|     private val deviceUuid: String?, | ||||
|     private val userRepository: UserRepository, | ||||
|     private val friendshipRepository: FriendshipRepository, | ||||
|     private val storiesRepository: StoriesRepository, | ||||
|     private val mediaRepository: MediaRepository, | ||||
|     private val graphQLRepository: GraphQLRepository, | ||||
|     private val favoriteRepository: FavoriteRepository, | ||||
|     private val directMessagesRepository: DirectMessagesRepository, | ||||
|     private val messageManager: DirectMessagesManager?, | ||||
|     ioDispatcher: CoroutineDispatcher, | ||||
| ) : ViewModel() { | ||||
|     private val cookie: String = Utils.settingsHelper.getString(Constants.COOKIE) | ||||
|     private val csrfToken: String? = getCsrfTokenFromCookie(cookie) | ||||
|     private val deviceUuid: String = Utils.settingsHelper.getString(Constants.DEVICE_UUID) | ||||
|     private val userRepository: UserRepository by lazy { UserRepository.getInstance() } | ||||
|     private val friendshipRepository: FriendshipRepository by lazy { FriendshipRepository.getInstance() } | ||||
|     private val storiesRepository: StoriesRepository by lazy { StoriesRepository.getInstance() } | ||||
|     private val mediaRepository: MediaRepository by lazy { MediaRepository.getInstance() } | ||||
|     private val graphQLRepository: GraphQLRepository by lazy { GraphQLRepository.getInstance() } | ||||
|     private val directMessagesRepository: DirectMessagesRepository by lazy { DirectMessagesRepository.getInstance() } | ||||
| 
 | ||||
|     private val _currentUser = MutableLiveData<Resource<User?>>(Resource.loading(null)) | ||||
|     private val _isFavorite = MutableLiveData(false) | ||||
|     private val profileAction = MutableLiveData(INIT) | ||||
| @ -247,7 +242,7 @@ class ProfileFragmentViewModel( | ||||
| 
 | ||||
|     private suspend fun checkAndUpdateFavorite(fetchedUser: User) { | ||||
|         try { | ||||
|             val favorite = favoriteRepository!!.getFavorite(fetchedUser.username, FavoriteType.USER) | ||||
|             val favorite = favoriteRepository.getFavorite(fetchedUser.username, FavoriteType.USER) | ||||
|             if (favorite == null) { | ||||
|                 _isFavorite.postValue(false) | ||||
|                 return | ||||
| @ -295,7 +290,7 @@ class ProfileFragmentViewModel( | ||||
|         viewModelScope.launch(Dispatchers.IO) { | ||||
|             toggleFavoriteControlledRunner.afterPrevious { | ||||
|                 try { | ||||
|                     val favorite = favoriteRepository!!.getFavorite(username, FavoriteType.USER) | ||||
|                     val favorite = favoriteRepository.getFavorite(username, FavoriteType.USER) | ||||
|                     if (favorite == null) { | ||||
|                         // insert | ||||
|                         favoriteRepository.insertOrUpdateFavorite( | ||||
| @ -330,7 +325,7 @@ class ProfileFragmentViewModel( | ||||
|                     val currentUserId = currentUser.value?.data?.pk ?: return@afterPrevious | ||||
|                     val targetUserId = profile.value?.data?.pk ?: return@afterPrevious | ||||
|                     val csrfToken = csrfToken ?: return@afterPrevious | ||||
|                     val deviceUuid = deviceUuid | ||||
|                     val deviceUuid = deviceUuid ?: return@afterPrevious | ||||
|                     if (following) { | ||||
|                         if (!confirmed) { | ||||
|                             _eventLiveData.postValue(Event(ShowConfirmUnfollowDialog)) | ||||
| @ -369,7 +364,7 @@ class ProfileFragmentViewModel( | ||||
|                     val currentUserId = currentUser.value?.data?.pk ?: return@afterPrevious | ||||
|                     val targetUserId = profile.value?.data?.pk ?: return@afterPrevious | ||||
|                     val csrfToken = csrfToken ?: return@afterPrevious | ||||
|                     val deviceUuid = deviceUuid | ||||
|                     val deviceUuid = deviceUuid ?: return@afterPrevious | ||||
|                     val username = profile.value?.data?.username ?: return@afterPrevious | ||||
|                     val thread = directMessagesRepository.createThread( | ||||
|                         csrfToken, | ||||
| @ -403,7 +398,7 @@ class ProfileFragmentViewModel( | ||||
|                     val profile = profile.value?.data ?: return@afterPrevious | ||||
|                     friendshipRepository.toggleRestrict( | ||||
|                         csrfToken ?: return@afterPrevious, | ||||
|                         deviceUuid, | ||||
|                         deviceUuid ?: return@afterPrevious, | ||||
|                         profile.pk, | ||||
|                         !(profile.friendshipStatus?.isRestricted ?: false), | ||||
|                     ) | ||||
| @ -425,7 +420,7 @@ class ProfileFragmentViewModel( | ||||
|                     friendshipRepository.changeBlock( | ||||
|                         csrfToken ?: return@afterPrevious, | ||||
|                         currentUser.value?.data?.pk ?: return@afterPrevious, | ||||
|                         deviceUuid, | ||||
|                         deviceUuid ?: return@afterPrevious, | ||||
|                         profile.friendshipStatus?.blocking ?: return@afterPrevious, | ||||
|                         profile.pk | ||||
|                     ) | ||||
| @ -447,7 +442,7 @@ class ProfileFragmentViewModel( | ||||
|                     friendshipRepository.changeMute( | ||||
|                         csrfToken ?: return@afterPrevious, | ||||
|                         currentUser.value?.data?.pk ?: return@afterPrevious, | ||||
|                         deviceUuid, | ||||
|                         deviceUuid ?: return@afterPrevious, | ||||
|                         profile.friendshipStatus?.isMutingReel ?: return@afterPrevious, | ||||
|                         profile.pk, | ||||
|                         true | ||||
| @ -470,7 +465,7 @@ class ProfileFragmentViewModel( | ||||
|                     friendshipRepository.changeMute( | ||||
|                         csrfToken ?: return@afterPrevious, | ||||
|                         currentUser.value?.data?.pk ?: return@afterPrevious, | ||||
|                         deviceUuid, | ||||
|                         deviceUuid ?: return@afterPrevious, | ||||
|                         profile.friendshipStatus?.muting ?: return@afterPrevious, | ||||
|                         profile.pk, | ||||
|                         false | ||||
| @ -492,7 +487,7 @@ class ProfileFragmentViewModel( | ||||
|                     friendshipRepository.removeFollower( | ||||
|                         csrfToken ?: return@afterPrevious, | ||||
|                         currentUser.value?.data?.pk ?: return@afterPrevious, | ||||
|                         deviceUuid, | ||||
|                         deviceUuid ?: return@afterPrevious, | ||||
|                         profile.value?.data?.pk ?: return@afterPrevious | ||||
|                     ) | ||||
|                     profileAction.postValue(REFRESH_FRIENDSHIP) | ||||
| @ -601,7 +596,15 @@ class ProfileFragmentViewModel( | ||||
| 
 | ||||
| @Suppress("UNCHECKED_CAST") | ||||
| class ProfileFragmentViewModelFactory( | ||||
|     private val favoriteRepository: FavoriteRepository?, | ||||
|     private val csrfToken: String?, | ||||
|     private val deviceUuid: String?, | ||||
|     private val userRepository: UserRepository, | ||||
|     private val friendshipRepository: FriendshipRepository, | ||||
|     private val storiesRepository: StoriesRepository, | ||||
|     private val mediaRepository: MediaRepository, | ||||
|     private val graphQLRepository: GraphQLRepository, | ||||
|     private val favoriteRepository: FavoriteRepository, | ||||
|     private val directMessagesRepository: DirectMessagesRepository, | ||||
|     private val messageManager: DirectMessagesManager?, | ||||
|     owner: SavedStateRegistryOwner, | ||||
|     defaultArgs: Bundle? = null, | ||||
| @ -613,7 +616,15 @@ class ProfileFragmentViewModelFactory( | ||||
|     ): T { | ||||
|         return ProfileFragmentViewModel( | ||||
|             handle, | ||||
|             csrfToken, | ||||
|             deviceUuid, | ||||
|             userRepository, | ||||
|             friendshipRepository, | ||||
|             storiesRepository, | ||||
|             mediaRepository, | ||||
|             graphQLRepository, | ||||
|             favoriteRepository, | ||||
|             directMessagesRepository, | ||||
|             messageManager, | ||||
|             Dispatchers.IO, | ||||
|         ) as T | ||||
|  | ||||
| @ -8,9 +8,7 @@ import awais.instagrabber.models.enums.FavoriteType | ||||
| import awais.instagrabber.repositories.* | ||||
| import awais.instagrabber.repositories.responses.* | ||||
| import awais.instagrabber.repositories.responses.directmessages.* | ||||
| import awais.instagrabber.repositories.responses.stories.ArchiveResponse | ||||
| import awais.instagrabber.repositories.responses.stories.ReelsTrayResponse | ||||
| import awais.instagrabber.repositories.responses.stories.StoryStickerResponse | ||||
| import awais.instagrabber.repositories.responses.stories.* | ||||
| 
 | ||||
| open class UserServiceAdapter : UserService { | ||||
|     override suspend fun getUserInfo(uid: Long): WrappedUser { | ||||
| @ -47,7 +45,7 @@ open class FriendshipServiceAdapter : FriendshipService { | ||||
| } | ||||
| 
 | ||||
| open class StoriesServiceAdapter : StoriesService { | ||||
|     override suspend fun fetch(mediaId: Long): String { | ||||
|     override suspend fun fetch(mediaId: Long): StoryMediaResponse { | ||||
|         TODO("Not yet implemented") | ||||
|     } | ||||
| 
 | ||||
| @ -63,11 +61,19 @@ open class StoriesServiceAdapter : StoriesService { | ||||
|         TODO("Not yet implemented") | ||||
|     } | ||||
| 
 | ||||
|     override suspend fun getUserStory(url: String): String { | ||||
|     override suspend fun getReelsMedia(id: String): ReelsMediaResponse { | ||||
|         TODO("Not yet implemented") | ||||
|     } | ||||
| 
 | ||||
|     override suspend fun respondToSticker(storyId: String, stickerId: String, action: String, form: Map<String, String>): StoryStickerResponse { | ||||
|     override suspend fun getStories(type: String, id: String): ReelsResponse { | ||||
|         TODO("Not yet implemented") | ||||
|     } | ||||
| 
 | ||||
|     override suspend fun getUserStories(id: Long): ReelsResponse { | ||||
|         TODO("Not yet implemented") | ||||
|     } | ||||
| 
 | ||||
|     override suspend fun respondToSticker(storyId: Long, stickerId: Long, action: String, form: Map<String, String>): StoryStickerResponse { | ||||
|         TODO("Not yet implemented") | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -15,7 +15,6 @@ import awais.instagrabber.repositories.requests.StoryViewerOptions | ||||
| import awais.instagrabber.repositories.responses.FriendshipStatus | ||||
| import awais.instagrabber.repositories.responses.User | ||||
| import awais.instagrabber.repositories.responses.stories.Story | ||||
| import awais.instagrabber.repositories.responses.stories.StoryMedia | ||||
| import awais.instagrabber.webservices.* | ||||
| import kotlinx.coroutines.ExperimentalCoroutinesApi | ||||
| import org.json.JSONException | ||||
| @ -320,13 +319,13 @@ internal class ProfileFragmentViewModelTest { | ||||
|                 "username" to testPublicUser.username | ||||
|             ) | ||||
|         ) | ||||
|         val testUserStories = listOf(StoryMedia()) | ||||
|         val testUserStories = Story() | ||||
|         val testUserHighlights = listOf(Story()) | ||||
|         val userRepository = object : UserRepository(UserServiceAdapter()) { | ||||
|             override suspend fun getUsernameInfo(username: String): User = testPublicUser | ||||
|         } | ||||
|         val storiesRepository = object : StoriesRepository(StoriesServiceAdapter()) { | ||||
|             override suspend fun getStories(options: StoryViewerOptions): List<StoryMedia> = testUserStories | ||||
|             override suspend fun getStories(options: StoryViewerOptions): Story = testUserStories | ||||
|             override suspend fun fetchHighlights(profileId: Long): List<Story> = testUserHighlights | ||||
|         } | ||||
|         val viewModel = ProfileFragmentViewModel( | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user