Migrate SignalingSettingsWorker from requery to room

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2022-07-23 16:05:48 +02:00
parent 22ef1457ee
commit 67318883d0
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B
5 changed files with 82 additions and 95 deletions

View File

@ -30,6 +30,7 @@ import com.nextcloud.talk.events.EventStatus;
import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall; import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall;
import com.nextcloud.talk.users.UserManager; import com.nextcloud.talk.users.UserManager;
import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.UserIdUtils;
import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.bundle.BundleKeys;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
@ -83,32 +84,24 @@ public class CapabilitiesWorker extends Worker {
try { try {
int rowsCount = userManager.updateOrCreateUser(user).blockingGet(); int rowsCount = userManager.updateOrCreateUser(user).blockingGet();
if (rowsCount > 0) { if (rowsCount > 0) {
eventBus.post(new EventStatus(getIdForUser(user), eventBus.post(new EventStatus(UserIdUtils.INSTANCE.getIdForUser(user),
EventStatus.EventType.CAPABILITIES_FETCH, EventStatus.EventType.CAPABILITIES_FETCH,
true)); true));
} else { } else {
Log.w(TAG, "Error updating user"); Log.w(TAG, "Error updating user");
eventBus.post(new EventStatus(getIdForUser(user), eventBus.post(new EventStatus(UserIdUtils.INSTANCE.getIdForUser(user),
EventStatus.EventType.CAPABILITIES_FETCH, EventStatus.EventType.CAPABILITIES_FETCH,
false)); false));
} }
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, "Error updating user", e); Log.e(TAG, "Error updating user", e);
eventBus.post(new EventStatus(getIdForUser(user), eventBus.post(new EventStatus(UserIdUtils.INSTANCE.getIdForUser(user),
EventStatus.EventType.CAPABILITIES_FETCH, EventStatus.EventType.CAPABILITIES_FETCH,
false)); false));
} }
} }
} }
private long getIdForUser(User user) {
if (user != null && user.getId() != null) {
return user.getId();
} else {
return NO_ID;
}
}
@NonNull @NonNull
@Override @Override
public Result doWork() { public Result doWork() {

View File

@ -21,22 +21,20 @@
package com.nextcloud.talk.jobs; package com.nextcloud.talk.jobs;
import android.content.Context; import android.content.Context;
import android.util.Log;
import com.bluelinelabs.logansquare.LoganSquare;
import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.api.NcApi;
import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.data.user.model.User;
import com.nextcloud.talk.events.EventStatus; import com.nextcloud.talk.events.EventStatus;
import com.nextcloud.talk.models.ExternalSignalingServer; import com.nextcloud.talk.models.ExternalSignalingServer;
import com.nextcloud.talk.models.database.UserEntity;
import com.nextcloud.talk.models.json.signaling.settings.SignalingSettingsOverall; import com.nextcloud.talk.models.json.signaling.settings.SignalingSettingsOverall;
import com.nextcloud.talk.users.UserManager;
import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.UserIdUtils;
import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.database.user.UserUtils;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -54,10 +52,9 @@ import io.reactivex.disposables.Disposable;
@AutoInjector(NextcloudTalkApplication.class) @AutoInjector(NextcloudTalkApplication.class)
public class SignalingSettingsWorker extends Worker { public class SignalingSettingsWorker extends Worker {
private static final String TAG = "SignalingSettingsJob";
@Inject @Inject
UserUtils userUtils; UserManager userManager;
@Inject @Inject
NcApi ncApi; NcApi ncApi;
@ -78,77 +75,75 @@ public class SignalingSettingsWorker extends Worker {
long internalUserId = data.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), -1); long internalUserId = data.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), -1);
List<UserEntity> userEntityList = new ArrayList<>(); List<User> userEntityObjectList = new ArrayList<>();
UserEntity userEntity; boolean userExists = userManager.getUserWithInternalId(internalUserId).isEmpty().blockingGet();
if (internalUserId == -1 || (userEntity = userUtils.getUserWithInternalId(internalUserId)) == null) {
userEntityList = userUtils.getUsers(); if (internalUserId == -1 || !userExists) {
userEntityObjectList = userManager.getUsers().blockingGet();
} else { } else {
userEntityList.add(userEntity); userEntityObjectList.add(userManager.getUserWithInternalId(internalUserId).blockingGet());
} }
for (int i = 0; i < userEntityList.size(); i++) { for (User user : userEntityObjectList) {
userEntity = userEntityList.get(i);
UserEntity finalUserEntity = userEntity;
int apiVersion = ApiUtils.getSignalingApiVersion(finalUserEntity, new int[] {ApiUtils.APIv3, 2, 1}); int apiVersion = ApiUtils.getSignalingApiVersion(user, new int[] {ApiUtils.APIv3, 2, 1});
ncApi.getSignalingSettings(ApiUtils.getCredentials(userEntity.getUsername(), userEntity.getToken()), ncApi.getSignalingSettings(
ApiUtils.getUrlForSignalingSettings(apiVersion, userEntity.getBaseUrl())) ApiUtils.getCredentials(user.getUsername(), user.getToken()),
ApiUtils.getUrlForSignalingSettings(apiVersion, user.getBaseUrl()))
.blockingSubscribe(new Observer<SignalingSettingsOverall>() { .blockingSubscribe(new Observer<SignalingSettingsOverall>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(Disposable d) {
// unused stm
} }
@Override @Override
public void onNext(SignalingSettingsOverall signalingSettingsOverall) { public void onNext(SignalingSettingsOverall signalingSettingsOverall) {
ExternalSignalingServer externalSignalingServer; ExternalSignalingServer externalSignalingServer;
externalSignalingServer = new ExternalSignalingServer(); externalSignalingServer = new ExternalSignalingServer();
externalSignalingServer.setExternalSignalingServer(signalingSettingsOverall.getOcs().getSettings().getExternalSignalingServer());
externalSignalingServer.setExternalSignalingTicket(signalingSettingsOverall.getOcs().getSettings().getExternalSignalingTicket());
try {
userUtils.createOrUpdateUser(null, null, null, null, null,
null, null, finalUserEntity.getId(), null, null, LoganSquare.serialize(externalSignalingServer))
.subscribe(new Observer<UserEntity>() {
@Override
public void onSubscribe(Disposable d) {
if (signalingSettingsOverall.getOcs() != null &&
signalingSettingsOverall.getOcs().getSettings() != null) {
externalSignalingServer.setExternalSignalingServer(signalingSettingsOverall
.getOcs()
.getSettings()
.getExternalSignalingServer());
externalSignalingServer.setExternalSignalingTicket(signalingSettingsOverall
.getOcs()
.getSettings()
.getExternalSignalingTicket());
} }
@Override int rows = userManager.saveUser(user).blockingGet();
public void onNext(UserEntity userEntity) {
eventBus.post(new EventStatus(finalUserEntity.getId(), EventStatus.EventType.SIGNALING_SETTINGS, true));
}
@Override if (rows > 0) {
public void onError(Throwable e) { eventBus.post(new EventStatus(UserIdUtils.INSTANCE.getIdForUser(user),
eventBus.post(new EventStatus(finalUserEntity.getId(), EventStatus.EventType.SIGNALING_SETTINGS, false)); EventStatus.EventType.SIGNALING_SETTINGS,
} true));
} else {
@Override eventBus.post(new EventStatus(UserIdUtils.INSTANCE.getIdForUser(user),
public void onComplete() { EventStatus.EventType.SIGNALING_SETTINGS,
false));
}
});
} catch (IOException e) {
Log.e(TAG, "Failed to serialize external signaling server");
} }
} }
@Override @Override
public void onError(Throwable e) { public void onError(Throwable e) {
eventBus.post(new EventStatus(finalUserEntity.getId(), EventStatus.EventType.SIGNALING_SETTINGS, false)); eventBus.post(new EventStatus(UserIdUtils.INSTANCE.getIdForUser(user),
EventStatus.EventType.SIGNALING_SETTINGS,
false));
} }
@Override @Override
public void onComplete() { public void onComplete() {
// unused atm
} }
}); });
} }
OneTimeWorkRequest websocketConnectionsWorker = new OneTimeWorkRequest.Builder(WebsocketConnectionsWorker.class).build(); OneTimeWorkRequest websocketConnectionsWorker = new OneTimeWorkRequest
.Builder(WebsocketConnectionsWorker.class)
.build();
WorkManager.getInstance().enqueue(websocketConnectionsWorker); WorkManager.getInstance().enqueue(websocketConnectionsWorker);
return Result.success(); return Result.success();

View File

@ -35,15 +35,15 @@ import autodagger.AutoInjector
import com.bluelinelabs.conductor.Controller import com.bluelinelabs.conductor.Controller
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.generic.GenericOverall
import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.UriUtils import com.nextcloud.talk.utils.UriUtils
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_FILE_PATHS import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_FILE_PATHS
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_META_DATA import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_META_DATA
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
import com.nextcloud.talk.utils.database.user.UserUtils
import com.nextcloud.talk.utils.preferences.AppPreferences import com.nextcloud.talk.utils.preferences.AppPreferences
import io.reactivex.Observer import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
@ -56,7 +56,6 @@ import java.io.File
import java.io.FileNotFoundException import java.io.FileNotFoundException
import java.io.FileOutputStream import java.io.FileOutputStream
import java.io.InputStream import java.io.InputStream
import java.util.ArrayList
import javax.inject.Inject import javax.inject.Inject
@AutoInjector(NextcloudTalkApplication::class) @AutoInjector(NextcloudTalkApplication::class)
@ -67,7 +66,7 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa
lateinit var ncApi: NcApi lateinit var ncApi: NcApi
@Inject @Inject
lateinit var userUtils: UserUtils lateinit var userManager: UserManager
@Inject @Inject
lateinit var appPreferences: AppPreferences lateinit var appPreferences: AppPreferences
@ -86,7 +85,7 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa
} }
try { try {
val currentUser = userUtils.currentUser val currentUser = userManager.currentUser.blockingGet()
val sourcefiles = inputData.getStringArray(DEVICE_SOURCEFILES) val sourcefiles = inputData.getStringArray(DEVICE_SOURCEFILES)
val ncTargetpath = inputData.getString(NC_TARGETPATH) val ncTargetpath = inputData.getString(NC_TARGETPATH)
val roomToken = inputData.getString(ROOM_TOKEN) val roomToken = inputData.getString(ROOM_TOKEN)
@ -137,7 +136,7 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa
} }
private fun uploadFile( private fun uploadFile(
currentUser: UserEntity, currentUser: User,
uploadItem: UploadItem, uploadItem: UploadItem,
ncTargetPath: String?, ncTargetPath: String?,
roomToken: String?, roomToken: String?,
@ -192,7 +191,7 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa
private fun shareFile( private fun shareFile(
roomToken: String?, roomToken: String?,
currentUser: UserEntity, currentUser: User,
ncTargetpath: String?, ncTargetpath: String?,
filename: String?, filename: String?,
metaData: String? metaData: String?
@ -202,7 +201,7 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa
paths.add("$ncTargetpath/$filename") paths.add("$ncTargetpath/$filename")
val data = Data.Builder() val data = Data.Builder()
.putLong(KEY_INTERNAL_USER_ID, currentUser.id) .putLong(KEY_INTERNAL_USER_ID, currentUser.id!!)
.putString(KEY_ROOM_TOKEN, roomToken) .putString(KEY_ROOM_TOKEN, roomToken)
.putStringArray(KEY_FILE_PATHS, paths.toTypedArray()) .putStringArray(KEY_FILE_PATHS, paths.toTypedArray())
.putString(KEY_META_DATA, metaData) .putString(KEY_META_DATA, metaData)

View File

@ -38,14 +38,14 @@ import autodagger.AutoInjector
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.generic.GenericOverall
import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.NotificationUtils import com.nextcloud.talk.utils.NotificationUtils
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SYSTEM_NOTIFICATION_ID import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SYSTEM_NOTIFICATION_ID
import com.nextcloud.talk.utils.database.user.UserUtils
import io.reactivex.Observer import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposable
@ -56,13 +56,13 @@ import javax.inject.Inject
class DirectReplyReceiver : BroadcastReceiver() { class DirectReplyReceiver : BroadcastReceiver() {
@Inject @Inject
lateinit var userUtils: UserUtils lateinit var userManager: UserManager
@Inject @Inject
lateinit var ncApi: NcApi lateinit var ncApi: NcApi
lateinit var context: Context lateinit var context: Context
lateinit var currentUser: UserEntity lateinit var currentUser: User
private var systemNotificationId: Int? = null private var systemNotificationId: Int? = null
private var roomToken: String? = null private var roomToken: String? = null
private var replyMessage: CharSequence? = null private var replyMessage: CharSequence? = null
@ -79,8 +79,8 @@ class DirectReplyReceiver : BroadcastReceiver() {
systemNotificationId = intent!!.getIntExtra(KEY_SYSTEM_NOTIFICATION_ID, 0) systemNotificationId = intent!!.getIntExtra(KEY_SYSTEM_NOTIFICATION_ID, 0)
roomToken = intent.getStringExtra(KEY_ROOM_TOKEN) roomToken = intent.getStringExtra(KEY_ROOM_TOKEN)
val id = intent.getLongExtra(KEY_INTERNAL_USER_ID, userUtils.currentUser!!.id) val id = intent.getLongExtra(KEY_INTERNAL_USER_ID, userManager.currentUser.blockingGet().id!!)
currentUser = userUtils.getUserWithId(id) currentUser = userManager.getUserWithId(id).blockingGet()
replyMessage = getMessageText(intent) replyMessage = getMessageText(intent)
sendDirectReply() sendDirectReply()

View File

@ -32,14 +32,14 @@ import androidx.annotation.RequiresApi
import autodagger.AutoInjector import autodagger.AutoInjector
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.generic.GenericOverall
import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_MESSAGE_ID import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_MESSAGE_ID
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SYSTEM_NOTIFICATION_ID import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SYSTEM_NOTIFICATION_ID
import com.nextcloud.talk.utils.database.user.UserUtils
import io.reactivex.Observer import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposable
@ -50,13 +50,13 @@ import javax.inject.Inject
class MarkAsReadReceiver : BroadcastReceiver() { class MarkAsReadReceiver : BroadcastReceiver() {
@Inject @Inject
lateinit var userUtils: UserUtils lateinit var userManager: UserManager
@Inject @Inject
lateinit var ncApi: NcApi lateinit var ncApi: NcApi
lateinit var context: Context lateinit var context: Context
lateinit var currentUser: UserEntity lateinit var currentUser: User
private var systemNotificationId: Int? = null private var systemNotificationId: Int? = null
private var roomToken: String? = null private var roomToken: String? = null
private var messageId: Int = 0 private var messageId: Int = 0
@ -74,8 +74,8 @@ class MarkAsReadReceiver : BroadcastReceiver() {
roomToken = intent.getStringExtra(KEY_ROOM_TOKEN) roomToken = intent.getStringExtra(KEY_ROOM_TOKEN)
messageId = intent.getIntExtra(KEY_MESSAGE_ID, 0) messageId = intent.getIntExtra(KEY_MESSAGE_ID, 0)
val id = intent.getLongExtra(KEY_INTERNAL_USER_ID, userUtils.currentUser!!.id) val id = intent.getLongExtra(KEY_INTERNAL_USER_ID, userManager.currentUser.blockingGet().id!!)
currentUser = userUtils.getUserWithId(id) currentUser = userManager.getUserWithId(id).blockingGet()
markAsRead() markAsRead()
} }