Merge pull request #2221 from nextcloud/chore/1549/roomMigration3

Migrate contacts and creation of talk rooms from requery to room
This commit is contained in:
Andy Scherzinger 2022-07-16 16:30:14 +02:00 committed by GitHub
commit 26ce9ee868
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 56 deletions

View File

@ -32,8 +32,8 @@ import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.interfaces.DraweeController;
import com.nextcloud.talk.R;
import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.data.user.model.User;
import com.nextcloud.talk.databinding.RvItemContactBinding;
import com.nextcloud.talk.models.database.UserEntity;
import com.nextcloud.talk.models.json.participants.Participant;
import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.DisplayUtils;
@ -57,15 +57,15 @@ public class ContactItem extends AbstractFlexibleItem<ContactItem.ContactItemVie
public static final String PARTICIPANT_SOURCE_USERS = "users";
private final Participant participant;
private final UserEntity userEntity;
private final User user;
private GenericTextHeaderItem header;
public boolean isOnline = true;
public ContactItem(Participant participant,
UserEntity userEntity,
User user,
GenericTextHeaderItem genericTextHeaderItem) {
this.participant = participant;
this.userEntity = userEntity;
this.user = user;
this.header = genericTextHeaderItem;
}
@ -179,7 +179,7 @@ public class ContactItem extends AbstractFlexibleItem<ContactItem.ContactItemVie
.setOldController(holder.binding.avatarDraweeView.getController())
.setAutoPlayAnimations(true)
.setImageRequest(DisplayUtils.getImageRequestForUrl(
ApiUtils.getUrlForGuestAvatar(userEntity.getBaseUrl(),
ApiUtils.getUrlForGuestAvatar(user.getBaseUrl(),
displayName,
false)))
.build();
@ -191,7 +191,7 @@ public class ContactItem extends AbstractFlexibleItem<ContactItem.ContactItemVie
.setOldController(holder.binding.avatarDraweeView.getController())
.setAutoPlayAnimations(true)
.setImageRequest(DisplayUtils.getImageRequestForUrl(
ApiUtils.getUrlForAvatar(userEntity.getBaseUrl(),
ApiUtils.getUrlForAvatar(user.getBaseUrl(),
participant.getCalculatedActorId(),
false)))
.build();

View File

@ -52,12 +52,11 @@ import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedA
import com.nextcloud.talk.controllers.base.NewBaseController
import com.nextcloud.talk.controllers.bottomsheet.ConversationOperationEnum
import com.nextcloud.talk.controllers.util.viewBinding
import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.databinding.ControllerContactsRvBinding
import com.nextcloud.talk.events.OpenConversationEvent
import com.nextcloud.talk.jobs.AddParticipantsToConversation
import com.nextcloud.talk.models.RetrofitBucket
import com.nextcloud.talk.models.database.CapabilitiesUtil
import com.nextcloud.talk.models.database.UserEntity
import com.nextcloud.talk.models.json.autocomplete.AutocompleteOverall
import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser
import com.nextcloud.talk.models.json.conversations.Conversation
@ -65,10 +64,11 @@ import com.nextcloud.talk.models.json.conversations.RoomOverall
import com.nextcloud.talk.models.json.converters.EnumActorTypeConverter
import com.nextcloud.talk.models.json.participants.Participant
import com.nextcloud.talk.ui.dialog.ContactsBottomDialog
import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.ConductorRemapping
import com.nextcloud.talk.utils.bundle.BundleKeys
import com.nextcloud.talk.utils.database.user.UserUtils
import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.SelectableAdapter
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
@ -95,7 +95,7 @@ class ContactsController(args: Bundle) :
private val binding: ControllerContactsRvBinding by viewBinding(ControllerContactsRvBinding::bind)
@Inject
lateinit var userUtils: UserUtils
lateinit var userManager: UserManager
@Inject
lateinit var eventBus: EventBus
@ -104,7 +104,7 @@ class ContactsController(args: Bundle) :
lateinit var ncApi: NcApi
private var credentials: String? = null
private var currentUser: UserEntity? = null
private var currentUser: User? = null
private var contactsQueryDisposable: Disposable? = null
private var cacheQueryDisposable: Disposable? = null
private var adapter: FlexibleAdapter<*>? = null
@ -168,7 +168,7 @@ class ContactsController(args: Bundle) :
override fun onViewBound(view: View) {
super.onViewBound(view)
currentUser = userUtils.currentUser
currentUser = userManager.currentUser.blockingGet()
if (currentUser != null) {
credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token)
}
@ -285,7 +285,7 @@ class ContactsController(args: Bundle) :
Parcels.wrap(roomOverall.ocs!!.data!!)
)
ConductorRemapping.remapChatController(
router, currentUser!!.id,
router, currentUser!!.id!!,
roomOverall.ocs!!.data!!.token!!, bundle, true
)
}
@ -311,12 +311,12 @@ class ContactsController(args: Bundle) :
}
private fun addParticipantsToConversation() {
val userIdsArray: Array<String> = selectedUserIds.toTypedArray<String>()
val groupIdsArray: Array<String> = selectedGroupIds.toTypedArray<String>()
val emailsArray: Array<String> = selectedEmails.toTypedArray<String>()
val circleIdsArray: Array<String> = selectedCircleIds.toTypedArray<String>()
val userIdsArray: Array<String> = selectedUserIds.toTypedArray()
val groupIdsArray: Array<String> = selectedGroupIds.toTypedArray()
val emailsArray: Array<String> = selectedEmails.toTypedArray()
val circleIdsArray: Array<String> = selectedCircleIds.toTypedArray()
val data = Data.Builder()
data.putLong(BundleKeys.KEY_INTERNAL_USER_ID, currentUser!!.id)
data.putLong(BundleKeys.KEY_INTERNAL_USER_ID, currentUser!!.id!!)
data.putString(BundleKeys.KEY_TOKEN, conversationToken)
data.putStringArray(BundleKeys.KEY_SELECTED_USERS, userIdsArray)
data.putStringArray(BundleKeys.KEY_SELECTED_GROUPS, groupIdsArray)
@ -402,13 +402,13 @@ class ContactsController(args: Bundle) :
if (!isAddingParticipantsView) {
// groups
shareTypesList.add("1")
} else if (CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails")) {
} else if (CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails")) {
// groups
shareTypesList.add("1")
// emails
shareTypesList.add("4")
}
if (CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "circles-support")) {
if (CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "circles-support")) {
// circles
shareTypesList.add("7")
}
@ -732,7 +732,7 @@ class ContactsController(args: Bundle) :
@Subscribe(threadMode = ThreadMode.MAIN)
fun onMessageEvent(openConversationEvent: OpenConversationEvent) {
ConductorRemapping.remapChatController(
router, currentUser!!.id,
router, currentUser!!.id!!,
openConversationEvent.conversation!!.token!!,
openConversationEvent.bundle!!, true
)
@ -759,8 +759,8 @@ class ContactsController(args: Bundle) :
private fun updateSelection(contactItem: ContactItem) {
contactItem.model.selected = !contactItem.model.selected
updateSelectionLists(contactItem.model)
if (CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "last-room-activity") &&
!CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails") &&
if (CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "last-room-activity") &&
!CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails") &&
isValidGroupSelection(contactItem, contactItem.model, adapter)
) {
val currentItems: List<ContactItem> = adapter?.currentItems as List<ContactItem>
@ -817,7 +817,7 @@ class ContactsController(args: Bundle) :
)
ConductorRemapping.remapChatController(
router,
currentUser!!.id,
currentUser!!.id!!,
roomOverall.ocs!!.data!!.token!!,
bundle,
true

View File

@ -30,19 +30,17 @@ import android.view.View
import autodagger.AutoInjector
import com.bluelinelabs.conductor.RouterTransaction
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler
import com.bluelinelabs.logansquare.LoganSquare
import com.nextcloud.talk.R
import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.controllers.base.NewBaseController
import com.nextcloud.talk.controllers.util.viewBinding
import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.databinding.ControllerOperationsMenuBinding
import com.nextcloud.talk.events.ConversationsListFetchDataEvent
import com.nextcloud.talk.events.OpenConversationEvent
import com.nextcloud.talk.models.RetrofitBucket
import com.nextcloud.talk.models.database.CapabilitiesUtil
import com.nextcloud.talk.models.database.UserEntity
import com.nextcloud.talk.models.json.capabilities.Capabilities
import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall
import com.nextcloud.talk.models.json.conversations.Conversation
@ -50,6 +48,7 @@ import com.nextcloud.talk.models.json.conversations.Conversation.ConversationTyp
import com.nextcloud.talk.models.json.conversations.RoomOverall
import com.nextcloud.talk.models.json.generic.GenericOverall
import com.nextcloud.talk.models.json.participants.AddParticipantOverall
import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.NoSupportedApiException
@ -66,7 +65,7 @@ import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_ID
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SERVER_CAPABILITIES
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_USER_ENTITY
import com.nextcloud.talk.utils.database.user.UserUtils
import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder
import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers
@ -90,14 +89,14 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
lateinit var ncApi: NcApi
@Inject
lateinit var userUtils: UserUtils
lateinit var userManager: UserManager
@Inject
lateinit var eventBus: EventBus
private val operation: ConversationOperationEnum?
private var conversation: Conversation? = null
private var currentUser: UserEntity? = null
private var currentUser: User? = null
private val callPassword: String
private val callUrl: String
private var baseUrl: String? = null
@ -116,7 +115,7 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
override fun onViewBound(view: View) {
super.onViewBound(view)
sharedApplication!!.componentApplication.inject(this)
currentUser = userUtils.currentUser
currentUser = userManager.currentUser.blockingGet()
if (!TextUtils.isEmpty(callUrl) && callUrl.contains("/call")) {
conversationToken = callUrl.substring(callUrl.lastIndexOf("/") + 1)
@ -144,11 +143,11 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
@Throws(IOException::class)
private fun useBundledCapabilitiesForGuest() {
currentUser = UserEntity()
currentUser = User()
currentUser!!.baseUrl = baseUrl
currentUser!!.userId = "?"
try {
currentUser!!.capabilities = LoganSquare.serialize(serverCapabilities)
currentUser!!.capabilities = serverCapabilities
} catch (e: IOException) {
Log.e("OperationsMenu", "Failed to serialize capabilities")
throw e
@ -172,12 +171,11 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
}
override fun onNext(capabilitiesOverall: CapabilitiesOverall) {
currentUser = UserEntity()
currentUser = User()
currentUser!!.baseUrl = baseUrl
currentUser!!.userId = "?"
try {
currentUser!!.capabilities = LoganSquare
.serialize(capabilitiesOverall.ocs!!.data!!.capabilities)
currentUser!!.capabilities = capabilitiesOverall.ocs!!.data!!.capabilities
} catch (e: IOException) {
Log.e("OperationsMenu", "Failed to serialize capabilities")
}
@ -469,12 +467,7 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
try {
bundle.putParcelable(
KEY_SERVER_CAPABILITIES,
Parcels.wrap<Capabilities>(
LoganSquare.parse<Capabilities>(
currentUser!!.capabilities,
Capabilities::class.java
)
)
Parcels.wrap<Capabilities>(currentUser!!.capabilities)
)
} catch (e: IOException) {
Log.e(TAG, "Failed to parse capabilities for guest")
@ -604,7 +597,7 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
}
@kotlin.Throws(NoSupportedApiException::class)
private fun checkCapabilities(currentUser: UserEntity) {
private fun checkCapabilities(currentUser: User) {
ApiUtils.getConversationApiVersion(currentUser, intArrayOf(ApiUtils.APIv4, 1))
ApiUtils.getCallApiVersion(currentUser, intArrayOf(ApiUtils.APIv4, 1))
ApiUtils.getChatApiVersion(currentUser, intArrayOf(1))
@ -619,7 +612,7 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
}
val apiVersion = ApiUtils.getConversationApiVersion(currentUser, API_CONVERSATION_VERSIONS)
if (localInvitedUsers!!.size > 0 || localInvitedGroups.size > 0 &&
CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails")
CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails")
) {
addGroupsToConversation(localInvitedUsers, localInvitedGroups, apiVersion)
addUsersToConversation(localInvitedUsers, localInvitedGroups, apiVersion)
@ -676,7 +669,7 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
) {
var retrofitBucket: RetrofitBucket
if (localInvitedGroups!!.size > 0 &&
CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails")
CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails")
) {
for (i in localInvitedGroups.indices) {
val groupId = localInvitedGroups[i]

View File

@ -51,15 +51,15 @@ import org.parceler.Parcels
private const val TAG = "ProfileBottomSheet"
class ProfileBottomSheet(val ncApi: NcApi, val userEntity: User, val router: Router) {
class ProfileBottomSheet(val ncApi: NcApi, val userModel: User, val router: Router) {
private val allowedAppIds = listOf(SPREED.stringValue, PROFILE.stringValue, EMAIL.stringValue)
fun showFor(user: String, context: Context) {
ncApi.hoverCard(
ApiUtils.getCredentials(userEntity.username, userEntity.token),
ApiUtils.getUrlForHoverCard(userEntity.baseUrl, user)
ApiUtils.getCredentials(userModel.username, userModel.token),
ApiUtils.getUrlForHoverCard(userModel.baseUrl, user)
).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(object : Observer<HoverCardOverall> {
override fun onSubscribe(d: Disposable) {
@ -68,7 +68,8 @@ class ProfileBottomSheet(val ncApi: NcApi, val userEntity: User, val router: Rou
override fun onNext(hoverCardOverall: HoverCardOverall) {
bottomSheet(
hoverCardOverall.ocs!!.data!!.actions!!, hoverCardOverall.ocs!!.data!!.displayName!!,
hoverCardOverall.ocs!!.data!!.actions!!,
hoverCardOverall.ocs!!.data!!.displayName!!,
user,
context
)
@ -124,16 +125,16 @@ class ProfileBottomSheet(val ncApi: NcApi, val userEntity: User, val router: Rou
private fun talkTo(userId: String) {
val apiVersion =
ApiUtils.getConversationApiVersion(userEntity, intArrayOf(ApiUtils.APIv4, 1))
ApiUtils.getConversationApiVersion(userModel, intArrayOf(ApiUtils.APIv4, 1))
val retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom(
apiVersion,
userEntity.baseUrl,
userModel.baseUrl,
"1",
null,
userId,
null
)
val credentials = ApiUtils.getCredentials(userEntity.username, userEntity.token)
val credentials = ApiUtils.getCredentials(userModel.username, userModel.token)
ncApi.createRoom(
credentials,
retrofitBucket.url, retrofitBucket.queryMap
@ -147,7 +148,7 @@ class ProfileBottomSheet(val ncApi: NcApi, val userEntity: User, val router: Rou
override fun onNext(roomOverall: RoomOverall) {
val bundle = Bundle()
bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, userEntity)
bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, userModel)
bundle.putString(BundleKeys.KEY_ROOM_TOKEN, roomOverall.ocs!!.data!!.token)
bundle.putString(BundleKeys.KEY_ROOM_ID, roomOverall.ocs!!.data!!.roomId)
@ -155,7 +156,7 @@ class ProfileBottomSheet(val ncApi: NcApi, val userEntity: User, val router: Rou
ncApi.getRoom(
credentials,
ApiUtils.getUrlForRoom(
apiVersion, userEntity.baseUrl,
apiVersion, userModel.baseUrl,
roomOverall.ocs!!.data!!.token
)
)
@ -172,7 +173,7 @@ class ProfileBottomSheet(val ncApi: NcApi, val userEntity: User, val router: Rou
Parcels.wrap(roomOverall.ocs!!.data)
)
ConductorRemapping.remapChatController(
router, userEntity.id!!,
router, userModel.id!!,
roomOverall.ocs!!.data!!.token!!, bundle, true
)
}

View File

@ -1 +1 @@
152
151