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

View File

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

View File

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

View File

@ -38,14 +38,14 @@ import autodagger.AutoInjector
import com.nextcloud.talk.R
import com.nextcloud.talk.api.NcApi
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.users.UserManager
import com.nextcloud.talk.utils.ApiUtils
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_ROOM_TOKEN
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.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
@ -56,13 +56,13 @@ import javax.inject.Inject
class DirectReplyReceiver : BroadcastReceiver() {
@Inject
lateinit var userUtils: UserUtils
lateinit var userManager: UserManager
@Inject
lateinit var ncApi: NcApi
lateinit var context: Context
lateinit var currentUser: UserEntity
lateinit var currentUser: User
private var systemNotificationId: Int? = null
private var roomToken: String? = null
private var replyMessage: CharSequence? = null
@ -79,8 +79,8 @@ class DirectReplyReceiver : BroadcastReceiver() {
systemNotificationId = intent!!.getIntExtra(KEY_SYSTEM_NOTIFICATION_ID, 0)
roomToken = intent.getStringExtra(KEY_ROOM_TOKEN)
val id = intent.getLongExtra(KEY_INTERNAL_USER_ID, userUtils.currentUser!!.id)
currentUser = userUtils.getUserWithId(id)
val id = intent.getLongExtra(KEY_INTERNAL_USER_ID, userManager.currentUser.blockingGet().id!!)
currentUser = userManager.getUserWithId(id).blockingGet()
replyMessage = getMessageText(intent)
sendDirectReply()

View File

@ -32,14 +32,14 @@ import androidx.annotation.RequiresApi
import autodagger.AutoInjector
import com.nextcloud.talk.api.NcApi
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.users.UserManager
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_MESSAGE_ID
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.database.user.UserUtils
import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
@ -50,13 +50,13 @@ import javax.inject.Inject
class MarkAsReadReceiver : BroadcastReceiver() {
@Inject
lateinit var userUtils: UserUtils
lateinit var userManager: UserManager
@Inject
lateinit var ncApi: NcApi
lateinit var context: Context
lateinit var currentUser: UserEntity
lateinit var currentUser: User
private var systemNotificationId: Int? = null
private var roomToken: String? = null
private var messageId: Int = 0
@ -74,8 +74,8 @@ class MarkAsReadReceiver : BroadcastReceiver() {
roomToken = intent.getStringExtra(KEY_ROOM_TOKEN)
messageId = intent.getIntExtra(KEY_MESSAGE_ID, 0)
val id = intent.getLongExtra(KEY_INTERNAL_USER_ID, userUtils.currentUser!!.id)
currentUser = userUtils.getUserWithId(id)
val id = intent.getLongExtra(KEY_INTERNAL_USER_ID, userManager.currentUser.blockingGet().id!!)
currentUser = userManager.getUserWithId(id).blockingGet()
markAsRead()
}