mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-20 03:59:35 +01:00
Migrate CapabilitiesWorker from requery to room
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
parent
d4b84635f1
commit
1cec9045ee
@ -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<UserEntity>() {
|
||||
@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<User> 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<CapabilitiesOverall>() {
|
||||
@Override
|
||||
public void onSubscribe(Disposable d) {
|
||||
ncApi.getCapabilities(ApiUtils.getCredentials(user.getUsername(), user.getToken()),
|
||||
ApiUtils.getUrlForCapabilities(user.getBaseUrl()))
|
||||
.retry(3)
|
||||
.blockingSubscribe(new Observer<CapabilitiesOverall>() {
|
||||
@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();
|
||||
|
Loading…
Reference in New Issue
Block a user