2021-06-05 10:36:00 +00:00
|
|
|
package awais.instagrabber.viewmodels
|
|
|
|
|
2021-06-09 00:09:40 +00:00
|
|
|
import android.os.Bundle
|
2021-06-05 10:36:00 +00:00
|
|
|
import androidx.lifecycle.*
|
2021-06-09 00:09:40 +00:00
|
|
|
import androidx.savedstate.SavedStateRegistryOwner
|
2021-06-12 04:04:55 +00:00
|
|
|
import awais.instagrabber.db.repositories.AccountRepository
|
2021-06-12 04:22:49 +00:00
|
|
|
import awais.instagrabber.db.repositories.FavoriteRepository
|
2021-06-15 17:27:58 +00:00
|
|
|
import awais.instagrabber.managers.DirectMessagesManager
|
|
|
|
import awais.instagrabber.models.enums.BroadcastItemType
|
2021-06-13 11:52:03 +00:00
|
|
|
import awais.instagrabber.models.Resource
|
2021-06-05 10:36:00 +00:00
|
|
|
import awais.instagrabber.repositories.responses.User
|
2021-06-15 17:27:58 +00:00
|
|
|
import awais.instagrabber.repositories.responses.directmessages.RankedRecipient
|
2021-06-12 03:43:15 +00:00
|
|
|
import awais.instagrabber.webservices.*
|
2021-06-05 10:36:00 +00:00
|
|
|
|
|
|
|
class ProfileFragmentViewModel(
|
|
|
|
state: SavedStateHandle,
|
2021-06-09 00:09:40 +00:00
|
|
|
userRepository: UserRepository,
|
2021-06-10 08:03:24 +00:00
|
|
|
friendshipRepository: FriendshipRepository,
|
2021-06-11 23:54:00 +00:00
|
|
|
storiesRepository: StoriesRepository,
|
2021-06-12 01:07:31 +00:00
|
|
|
mediaRepository: MediaRepository,
|
2021-06-12 03:43:15 +00:00
|
|
|
graphQLRepository: GraphQLRepository,
|
2021-06-12 04:04:55 +00:00
|
|
|
accountRepository: AccountRepository,
|
2021-06-12 04:22:49 +00:00
|
|
|
favoriteRepository: FavoriteRepository,
|
2021-06-05 10:36:00 +00:00
|
|
|
) : ViewModel() {
|
2021-06-13 11:52:03 +00:00
|
|
|
private val _profile = MutableLiveData<Resource<User?>>(Resource.loading(null))
|
|
|
|
private val _isLoggedIn = MutableLiveData(false)
|
2021-06-15 17:27:58 +00:00
|
|
|
private var messageManager: DirectMessagesManager? = null
|
2021-06-05 10:36:00 +00:00
|
|
|
|
2021-06-13 11:52:03 +00:00
|
|
|
val profile: LiveData<Resource<User?>> = _profile
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Username of profile without '`@`'
|
|
|
|
*/
|
|
|
|
val username: LiveData<String> = Transformations.map(profile) {
|
|
|
|
return@map when (it.status) {
|
|
|
|
Resource.Status.LOADING, Resource.Status.ERROR -> ""
|
|
|
|
Resource.Status.SUCCESS -> it.data?.username ?: ""
|
|
|
|
}
|
|
|
|
}
|
|
|
|
val isLoggedIn: LiveData<Boolean> = _isLoggedIn
|
|
|
|
|
|
|
|
var currentUser: Resource<User?>? = null
|
|
|
|
set(value) {
|
|
|
|
_isLoggedIn.postValue(value?.data != null)
|
|
|
|
// if no profile, and value is valid, set it as profile
|
|
|
|
val profileValue = profile.value
|
|
|
|
if (
|
|
|
|
profileValue?.status != Resource.Status.LOADING
|
|
|
|
&& profileValue?.data == null
|
|
|
|
&& value?.status == Resource.Status.SUCCESS
|
|
|
|
&& value.data != null
|
|
|
|
) {
|
|
|
|
_profile.postValue(Resource.success(value.data))
|
|
|
|
}
|
|
|
|
field = value
|
|
|
|
}
|
2021-06-05 10:36:00 +00:00
|
|
|
|
|
|
|
init {
|
2021-06-13 11:52:03 +00:00
|
|
|
// Log.d(TAG, "${state.keys()} $userRepository $friendshipRepository $storiesRepository $mediaRepository")
|
|
|
|
val usernameFromState = state.get<String?>("username")
|
|
|
|
if (usernameFromState.isNullOrBlank()) {
|
|
|
|
_profile.postValue(Resource.success(null))
|
|
|
|
}
|
2021-06-09 00:09:40 +00:00
|
|
|
}
|
2021-06-15 17:27:58 +00:00
|
|
|
|
|
|
|
fun shareDm(result: RankedRecipient) {
|
|
|
|
if (messageManager == null) {
|
|
|
|
messageManager = DirectMessagesManager
|
|
|
|
}
|
|
|
|
// messageManager?.sendMedia(result, mediaId, BroadcastItemType.PROFILE, viewModelScope)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun shareDm(recipients: Set<RankedRecipient>) {
|
|
|
|
if (messageManager == null) {
|
|
|
|
messageManager = DirectMessagesManager
|
|
|
|
}
|
|
|
|
// messageManager?.sendMedia(recipients, mediaId, BroadcastItemType.PROFILE, viewModelScope)
|
|
|
|
}
|
2021-06-09 00:09:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Suppress("UNCHECKED_CAST")
|
|
|
|
class ProfileFragmentViewModelFactory(
|
|
|
|
private val userRepository: UserRepository,
|
2021-06-10 08:03:24 +00:00
|
|
|
private val friendshipRepository: FriendshipRepository,
|
2021-06-11 23:54:00 +00:00
|
|
|
private val storiesRepository: StoriesRepository,
|
2021-06-12 01:07:31 +00:00
|
|
|
private val mediaRepository: MediaRepository,
|
2021-06-12 03:43:15 +00:00
|
|
|
private val graphQLRepository: GraphQLRepository,
|
2021-06-12 04:04:55 +00:00
|
|
|
private val accountRepository: AccountRepository,
|
2021-06-12 04:22:49 +00:00
|
|
|
private val favoriteRepository: FavoriteRepository,
|
2021-06-09 00:09:40 +00:00
|
|
|
owner: SavedStateRegistryOwner,
|
|
|
|
defaultArgs: Bundle? = null,
|
|
|
|
) : AbstractSavedStateViewModelFactory(owner, defaultArgs) {
|
|
|
|
override fun <T : ViewModel> create(
|
|
|
|
key: String,
|
|
|
|
modelClass: Class<T>,
|
|
|
|
handle: SavedStateHandle,
|
|
|
|
): T {
|
2021-06-11 23:54:00 +00:00
|
|
|
return ProfileFragmentViewModel(
|
|
|
|
handle,
|
|
|
|
userRepository,
|
|
|
|
friendshipRepository,
|
2021-06-12 01:07:31 +00:00
|
|
|
storiesRepository,
|
|
|
|
mediaRepository,
|
2021-06-12 03:43:15 +00:00
|
|
|
graphQLRepository,
|
2021-06-12 04:04:55 +00:00
|
|
|
accountRepository,
|
2021-06-12 04:22:49 +00:00
|
|
|
favoriteRepository,
|
2021-06-11 23:54:00 +00:00
|
|
|
) as T
|
2021-06-05 10:36:00 +00:00
|
|
|
}
|
|
|
|
}
|