2022-09-30 05:32:07 +02:00
|
|
|
package org.thoughtcrime.securesms.groups
|
|
|
|
|
|
|
|
import androidx.lifecycle.LiveData
|
|
|
|
import androidx.lifecycle.MutableLiveData
|
|
|
|
import androidx.lifecycle.ViewModel
|
|
|
|
import androidx.lifecycle.viewModelScope
|
|
|
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
|
|
|
import kotlinx.coroutines.launch
|
2023-09-07 09:33:24 +02:00
|
|
|
import network.loki.messenger.R
|
2022-09-30 05:32:07 +02:00
|
|
|
import org.session.libsession.utilities.TextSecurePreferences
|
|
|
|
import org.session.libsession.utilities.recipients.Recipient
|
2023-09-07 09:33:24 +02:00
|
|
|
import org.thoughtcrime.securesms.database.Storage
|
2022-09-30 05:32:07 +02:00
|
|
|
import javax.inject.Inject
|
|
|
|
|
|
|
|
@HiltViewModel
|
|
|
|
class CreateGroupViewModel @Inject constructor(
|
2023-09-07 09:33:24 +02:00
|
|
|
private val textSecurePreferences: TextSecurePreferences,
|
|
|
|
private val storage: Storage,
|
2022-09-30 05:32:07 +02:00
|
|
|
) : ViewModel() {
|
|
|
|
|
|
|
|
private val _recipients = MutableLiveData<List<Recipient>>()
|
|
|
|
val recipients: LiveData<List<Recipient>> = _recipients
|
|
|
|
|
2023-09-08 04:42:53 +02:00
|
|
|
private val _viewState = MutableLiveData(CreateGroupFragment.ViewState.DEFAULT)
|
2023-09-07 09:33:24 +02:00
|
|
|
val viewState: LiveData<CreateGroupFragment.ViewState> = _viewState
|
|
|
|
|
2022-09-30 05:32:07 +02:00
|
|
|
init {
|
|
|
|
viewModelScope.launch {
|
2023-09-07 09:33:24 +02:00
|
|
|
// threadDb.approvedConversationList.use { openCursor ->
|
|
|
|
// val reader = threadDb.readerFor(openCursor)
|
|
|
|
// val recipients = mutableListOf<Recipient>()
|
|
|
|
// while (true) {
|
|
|
|
// recipients += reader.next?.recipient ?: break
|
|
|
|
// }
|
|
|
|
// withContext(Dispatchers.Main) {
|
|
|
|
// _recipients.value = recipients
|
|
|
|
// .filter { !it.isGroupRecipient && it.hasApprovedMe() && it.address.serialize() != textSecurePreferences.getLocalNumber() }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-09-13 02:12:35 +02:00
|
|
|
fun tryCreateGroup(createGroupState: CreateGroupState): Recipient? {
|
2023-09-18 09:26:34 +02:00
|
|
|
_viewState.postValue(CreateGroupFragment.ViewState(true, null))
|
2023-09-07 09:33:24 +02:00
|
|
|
|
2023-09-08 04:42:53 +02:00
|
|
|
val name = createGroupState.groupName
|
|
|
|
val description = createGroupState.groupDescription
|
|
|
|
val members = createGroupState.members
|
|
|
|
|
2023-09-18 09:26:34 +02:00
|
|
|
// do some validation
|
2023-09-08 04:42:53 +02:00
|
|
|
if (name.isEmpty()) {
|
2023-09-13 02:12:35 +02:00
|
|
|
_viewState.postValue(
|
2023-09-18 09:26:34 +02:00
|
|
|
CreateGroupFragment.ViewState(false, R.string.error)
|
2023-09-07 09:33:24 +02:00
|
|
|
)
|
2023-09-13 02:12:35 +02:00
|
|
|
return null
|
2022-09-30 05:32:07 +02:00
|
|
|
}
|
2023-09-07 09:33:24 +02:00
|
|
|
// TODO: add future validation for empty group ? we'll add ourselves anyway ig
|
|
|
|
|
|
|
|
// make a group
|
2023-09-18 09:26:34 +02:00
|
|
|
val newGroup = storage.createNewGroup(name, description, members) // TODO: handle optional
|
|
|
|
if (!newGroup.isPresent) {
|
|
|
|
_viewState.postValue(CreateGroupFragment.ViewState(isLoading = false, null))
|
|
|
|
}
|
2023-09-13 02:12:35 +02:00
|
|
|
return newGroup.orNull()
|
2022-09-30 05:32:07 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fun filter(query: String): List<Recipient> {
|
|
|
|
return _recipients.value?.filter {
|
|
|
|
it.address.serialize().contains(query, ignoreCase = true) || it.name?.contains(query, ignoreCase = true) == true
|
|
|
|
} ?: emptyList()
|
|
|
|
}
|
|
|
|
}
|