2022-02-24 17:40:28 +00:00
|
|
|
package org.thoughtcrime.securesms.mediasend.v2.text.send
|
|
|
|
|
|
|
|
import androidx.lifecycle.LiveData
|
|
|
|
import androidx.lifecycle.ViewModel
|
|
|
|
import androidx.lifecycle.ViewModelProvider
|
2022-03-09 17:11:56 +00:00
|
|
|
import io.reactivex.rxjava3.core.Observable
|
2022-02-24 17:40:28 +00:00
|
|
|
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
|
|
|
import io.reactivex.rxjava3.kotlin.plusAssign
|
|
|
|
import io.reactivex.rxjava3.kotlin.subscribeBy
|
2022-03-09 17:11:56 +00:00
|
|
|
import io.reactivex.rxjava3.subjects.PublishSubject
|
2022-02-24 17:40:28 +00:00
|
|
|
import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey
|
2022-03-09 17:11:56 +00:00
|
|
|
import org.thoughtcrime.securesms.database.model.IdentityRecord
|
|
|
|
import org.thoughtcrime.securesms.linkpreview.LinkPreview
|
2022-02-24 17:40:28 +00:00
|
|
|
import org.thoughtcrime.securesms.mediasend.v2.text.TextStoryPostCreationState
|
|
|
|
import org.thoughtcrime.securesms.util.livedata.Store
|
|
|
|
|
|
|
|
class TextStoryPostSendViewModel(private val repository: TextStoryPostSendRepository) : ViewModel() {
|
|
|
|
|
|
|
|
private val store = Store(TextStoryPostSendState.INIT)
|
2022-03-09 17:11:56 +00:00
|
|
|
private val untrustedIdentitySubject = PublishSubject.create<List<IdentityRecord>>()
|
2022-02-24 17:40:28 +00:00
|
|
|
private val disposables = CompositeDisposable()
|
|
|
|
|
|
|
|
val state: LiveData<TextStoryPostSendState> = store.stateLiveData
|
2022-03-09 17:11:56 +00:00
|
|
|
val untrustedIdentities: Observable<List<IdentityRecord>> = untrustedIdentitySubject
|
2022-02-24 17:40:28 +00:00
|
|
|
|
|
|
|
override fun onCleared() {
|
|
|
|
disposables.clear()
|
|
|
|
}
|
|
|
|
|
2022-03-17 18:26:47 +00:00
|
|
|
fun onSending() {
|
2022-02-24 17:40:28 +00:00
|
|
|
store.update {
|
|
|
|
TextStoryPostSendState.SENDING
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fun onSendCancelled() {
|
|
|
|
store.update {
|
|
|
|
TextStoryPostSendState.INIT
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-03-09 17:11:56 +00:00
|
|
|
fun onSend(contactSearchKeys: Set<ContactSearchKey>, textStoryPostCreationState: TextStoryPostCreationState, linkPreview: LinkPreview?) {
|
2022-02-24 17:40:28 +00:00
|
|
|
store.update {
|
|
|
|
TextStoryPostSendState.SENDING
|
|
|
|
}
|
|
|
|
|
2022-03-09 17:11:56 +00:00
|
|
|
disposables += repository.send(contactSearchKeys, textStoryPostCreationState, linkPreview).subscribeBy(
|
|
|
|
onSuccess = {
|
|
|
|
when (it) {
|
|
|
|
is TextStoryPostSendResult.Success -> {
|
|
|
|
store.update { TextStoryPostSendState.SENT }
|
|
|
|
}
|
|
|
|
is TextStoryPostSendResult.UntrustedRecordsError -> {
|
|
|
|
untrustedIdentitySubject.onNext(it.untrustedRecords)
|
|
|
|
store.update { TextStoryPostSendState.INIT }
|
|
|
|
}
|
|
|
|
}
|
2022-02-24 17:40:28 +00:00
|
|
|
},
|
|
|
|
onError = {
|
|
|
|
// TODO [stories] -- Error of some sort.
|
|
|
|
store.update { TextStoryPostSendState.INIT }
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
class Factory(private val repository: TextStoryPostSendRepository) : ViewModelProvider.Factory {
|
2022-05-18 18:05:17 +00:00
|
|
|
override fun <T : ViewModel> create(modelClass: Class<T>): T {
|
2022-02-24 17:40:28 +00:00
|
|
|
return modelClass.cast(TextStoryPostSendViewModel(repository)) as T
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|