From 1cec9045ee6bb1703df6b1dd9233d426e685baaf Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Sat, 23 Jul 2022 14:58:08 +0200 Subject: [PATCH] Migrate CapabilitiesWorker from requery to room Signed-off-by: Andy Scherzinger --- .../talk/jobs/CapabilitiesWorker.java | 165 +++++++++--------- 1 file changed, 86 insertions(+), 79 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/CapabilitiesWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/CapabilitiesWorker.java index 779a1cf94..d8a47345c 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/CapabilitiesWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/CapabilitiesWorker.java @@ -22,39 +22,42 @@ package com.nextcloud.talk.jobs; import android.content.Context; import android.util.Log; + +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.json.capabilities.CapabilitiesOverall; +import com.nextcloud.talk.users.UserManager; +import com.nextcloud.talk.utils.ApiUtils; +import com.nextcloud.talk.utils.bundle.BundleKeys; + +import org.greenrobot.eventbus.EventBus; + +import java.net.CookieManager; +import java.util.ArrayList; +import java.util.List; + +import javax.inject.Inject; + import androidx.annotation.NonNull; import androidx.work.Data; import androidx.work.Worker; import androidx.work.WorkerParameters; import autodagger.AutoInjector; -import com.bluelinelabs.logansquare.LoganSquare; -import com.nextcloud.talk.api.NcApi; -import com.nextcloud.talk.application.NextcloudTalkApplication; -import com.nextcloud.talk.events.EventStatus; -import com.nextcloud.talk.models.database.UserEntity; -import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall; -import com.nextcloud.talk.utils.ApiUtils; -import com.nextcloud.talk.utils.bundle.BundleKeys; -import com.nextcloud.talk.utils.database.user.UserUtils; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import okhttp3.JavaNetCookieJar; import okhttp3.OkHttpClient; -import org.greenrobot.eventbus.EventBus; import retrofit2.Retrofit; -import javax.inject.Inject; -import java.io.IOException; -import java.net.CookieManager; -import java.util.ArrayList; -import java.util.List; - @AutoInjector(NextcloudTalkApplication.class) public class CapabilitiesWorker extends Worker { public static final String TAG = "CapabilitiesWorker"; + public static final long NO_ID = -1; @Inject - UserUtils userUtils; + UserManager userManager; @Inject Retrofit retrofit; @@ -69,42 +72,41 @@ public class CapabilitiesWorker extends Worker { public CapabilitiesWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) { super(context, workerParams); - } - private void updateUser(CapabilitiesOverall capabilitiesOverall, UserEntity internalUserEntity) { - try { - userUtils.createOrUpdateUser(null, null, - null, null, - null, null, null, internalUserEntity.getId(), - LoganSquare.serialize(capabilitiesOverall.getOcs().getData().getCapabilities()), null, null) - .blockingSubscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { + private void updateUser(CapabilitiesOverall capabilitiesOverall, User user) { + if (capabilitiesOverall.getOcs() != null && capabilitiesOverall.getOcs().getData() != null && + capabilitiesOverall.getOcs().getData().getCapabilities() != null) { - } + user.setCapabilities(capabilitiesOverall.getOcs().getData().getCapabilities()); - @Override - public void onNext(UserEntity userEntity) { - eventBus.post(new EventStatus(userEntity.getId(), - EventStatus.EventType.CAPABILITIES_FETCH, true)); - } - - @Override - public void onError(Throwable e) { - eventBus.post(new EventStatus(internalUserEntity.getId(), - EventStatus.EventType.CAPABILITIES_FETCH, false)); - } - - @Override - public void onComplete() { - - } - }); - } catch (IOException e) { - Log.e(TAG, "Failed to create or update user"); + try { + int rowsCount = userManager.updateOrCreateUser(user).blockingGet(); + if (rowsCount > 0) { + eventBus.post(new EventStatus(getIdForUser(user), + EventStatus.EventType.CAPABILITIES_FETCH, + true)); + } else { + Log.w(TAG, "Error updating user"); + eventBus.post(new EventStatus(getIdForUser(user), + EventStatus.EventType.CAPABILITIES_FETCH, + false)); + } + } catch (Exception e) { + Log.e(TAG, "Error updating user", e); + eventBus.post(new EventStatus(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 @@ -116,47 +118,52 @@ public class CapabilitiesWorker extends Worker { long internalUserId = data.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), -1); - UserEntity userEntity; - List userEntityObjectList = new ArrayList(); + List userEntityObjectList = new ArrayList<>(); + boolean userExists = userManager.getUserWithInternalId(internalUserId).isEmpty().blockingGet(); - if (internalUserId == -1 || (userEntity = userUtils.getUserWithInternalId(internalUserId)) == null) { - userEntityObjectList = userUtils.getUsers(); + if (internalUserId == -1 || !userExists) { + userEntityObjectList = userManager.getUsers().blockingGet(); } else { - userEntityObjectList.add(userEntity); + userEntityObjectList.add(userManager.getUserWithInternalId(internalUserId).blockingGet()); } - for (Object userEntityObject : userEntityObjectList) { - UserEntity internalUserEntity = (UserEntity) userEntityObject; + for (User user : userEntityObjectList) { - ncApi = retrofit.newBuilder().client(okHttpClient.newBuilder().cookieJar(new - JavaNetCookieJar(new CookieManager())).build()).build().create(NcApi.class); + ncApi = retrofit + .newBuilder() + .client(okHttpClient + .newBuilder() + .cookieJar(new JavaNetCookieJar(new CookieManager())) + .build()) + .build() + .create(NcApi.class); - ncApi.getCapabilities(ApiUtils.getCredentials(internalUserEntity.getUsername(), - internalUserEntity.getToken()), ApiUtils.getUrlForCapabilities(internalUserEntity.getBaseUrl())) - .retry(3) - .blockingSubscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { + ncApi.getCapabilities(ApiUtils.getCredentials(user.getUsername(), user.getToken()), + ApiUtils.getUrlForCapabilities(user.getBaseUrl())) + .retry(3) + .blockingSubscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + // unused atm + } - } + @Override + public void onNext(CapabilitiesOverall capabilitiesOverall) { + updateUser(capabilitiesOverall, user); + } - @Override - public void onNext(CapabilitiesOverall capabilitiesOverall) { - updateUser(capabilitiesOverall, internalUserEntity); - } + @Override + public void onError(Throwable e) { + eventBus.post(new EventStatus(user.getId(), + EventStatus.EventType.CAPABILITIES_FETCH, + false)); + } - @Override - public void onError(Throwable e) { - eventBus.post(new EventStatus(internalUserEntity.getId(), - EventStatus.EventType.CAPABILITIES_FETCH, false)); - - } - - @Override - public void onComplete() { - - } - }); + @Override + public void onComplete() { + // unused atm + } + }); } return Result.success();