Start using new api holder for jobs

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2018-08-10 22:09:06 +02:00
parent 57c2858737
commit 7aa4743a32
6 changed files with 49 additions and 44 deletions

View File

@ -37,9 +37,9 @@ import com.nextcloud.talk.models.json.generic.GenericOverall;
import com.nextcloud.talk.models.json.push.PushConfigurationState;
import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.database.user.UserUtils;
import com.nextcloud.talk.utils.singletons.ApplicationWideApiHolder;
import java.io.IOException;
import java.net.CookieManager;
import java.util.HashMap;
import java.util.zip.CRC32;
@ -50,7 +50,6 @@ import autodagger.AutoInjector;
import io.reactivex.CompletableObserver;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import okhttp3.JavaNetCookieJar;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
@ -75,6 +74,7 @@ public class AccountRemovalWorker extends Worker {
NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this);
PushConfigurationState pushConfigurationState;
String credentials;
for (Object userEntityObject : userUtils.getUsersScheduledForDeletion()) {
UserEntity userEntity = (UserEntity) userEntityObject;
try {
@ -83,11 +83,12 @@ public class AccountRemovalWorker extends Worker {
PushConfigurationState.class);
PushConfigurationState finalPushConfigurationState = pushConfigurationState;
ncApi = retrofit.newBuilder().client(okHttpClient.newBuilder().cookieJar(new
JavaNetCookieJar(new CookieManager())).build()).build().create(NcApi.class);
ncApi = ApplicationWideApiHolder.getInstance().getNcApiInstanceForAccountId(userEntity.getId(), null);
credentials = ApiUtils.getCredentials(userEntity.getUserId(), userEntity.getToken());
ncApi.unregisterDeviceForNotificationsWithNextcloud(ApiUtils.getCredentials(userEntity.getUsername(),
userEntity.getToken()), ApiUtils.getUrlNextcloudPush(userEntity.getBaseUrl()))
String finalCredentials = credentials;
ncApi.unregisterDeviceForNotificationsWithNextcloud(credentials, ApiUtils.getUrlNextcloudPush(userEntity
.getBaseUrl()))
.blockingSubscribe(new Observer<GenericOverall>() {
@Override
public void onSubscribe(Disposable d) {
@ -105,8 +106,7 @@ public class AccountRemovalWorker extends Worker {
finalPushConfigurationState.getDeviceIdentifierSignature());
ncApi.unregisterDeviceForNotificationsWithProxy
(ApiUtils.getCredentials(userEntity.getUsername(),
userEntity.getToken()), ApiUtils.getUrlPushProxy(), queryMap)
(finalCredentials, ApiUtils.getUrlPushProxy(), queryMap)
.blockingSubscribe(new Observer<Void>() {
@Override
public void onSubscribe(Disposable d) {

View File

@ -32,6 +32,7 @@ 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 com.nextcloud.talk.utils.singletons.ApplicationWideApiHolder;
import org.greenrobot.eventbus.EventBus;
@ -46,7 +47,6 @@ import androidx.work.Worker;
import autodagger.AutoInjector;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import okhttp3.JavaNetCookieJar;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
@ -124,8 +124,7 @@ public class CapabilitiesWorker extends Worker {
for (Object userEntityObject : userEntityObjectList) {
UserEntity internalUserEntity = (UserEntity) userEntityObject;
ncApi = retrofit.newBuilder().client(okHttpClient.newBuilder().cookieJar(new
JavaNetCookieJar(new java.net.CookieManager())).build()).build().create(NcApi.class);
ncApi = ApplicationWideApiHolder.getInstance().getNcApiInstanceForAccountId(internalUserEntity.getId(), null);
ncApi.getCapabilities(ApiUtils.getCredentials(internalUserEntity.getUsername(),
internalUserEntity.getToken()), ApiUtils.getUrlForCapabilities(internalUserEntity.getBaseUrl()))

View File

@ -60,6 +60,7 @@ import com.nextcloud.talk.utils.PushUtils;
import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.database.user.UserUtils;
import com.nextcloud.talk.utils.preferences.AppPreferences;
import com.nextcloud.talk.utils.singletons.ApplicationWideApiHolder;
import com.nextcloud.talk.utils.singletons.ApplicationWideCurrentRoomHolder;
import com.nextcloud.talk.utils.singletons.ApplicationWideStateHolder;
@ -93,7 +94,6 @@ public class NotificationWorker extends Worker {
@Inject
AppPreferences appPreferences;
@Inject
NcApi ncApi;
private DecryptedPushMessage decryptedPushMessage;
@ -101,10 +101,11 @@ public class NotificationWorker extends Worker {
private SignatureVerification signatureVerification;
private String conversationType = "";
private String credentials;
private void showNotificationForCallWithNoPing(Intent intent) {
UserEntity userEntity = signatureVerification.getUserEntity();
ncApi.getRoom(ApiUtils.getCredentials(userEntity.getUserId(),
userEntity.getToken()), ApiUtils.getRoom(userEntity.getBaseUrl(),
ncApi.getRoom(credentials, ApiUtils.getRoom(userEntity.getBaseUrl(),
intent.getExtras().getString(BundleKeys.KEY_ROOM_TOKEN)))
.blockingSubscribe(new Observer<RoomOverall>() {
@Override
@ -142,8 +143,7 @@ public class NotificationWorker extends Worker {
private void showMessageNotificationWithObjectData(Intent intent) {
UserEntity userEntity = signatureVerification.getUserEntity();
ncApi.getNotification(ApiUtils.getCredentials(userEntity.getUserId(),
userEntity.getToken()), ApiUtils.getUrlForNotificationWithId(userEntity.getBaseUrl(),
ncApi.getNotification(credentials, ApiUtils.getUrlForNotificationWithId(userEntity.getBaseUrl(),
Long.toString(decryptedPushMessage.getNotificationId())))
.blockingSubscribe(new Observer<NotificationOverall>() {
@Override
@ -164,16 +164,16 @@ public class NotificationWorker extends Worker {
decryptedPushMessage.setText(notification.getMessage());
}
HashMap<String, HashMap<String, String>> subjectRichParametersRichParameters = notification
HashMap<String, HashMap<String, String>> subjectRichParameters = notification
.getSubjectRichParameters();
if (subjectRichParametersRichParameters != null && subjectRichParametersRichParameters
.size() > 0 && subjectRichParametersRichParameters.containsKey("call")
&& subjectRichParametersRichParameters.containsKey("user")) {
HashMap<String, String> callHashMap = subjectRichParametersRichParameters.get("call");
HashMap<String, String> userHashMap = subjectRichParametersRichParameters.get("user");
if (subjectRichParameters != null && subjectRichParameters
.size() > 0 && subjectRichParameters.containsKey("call")
&& subjectRichParameters.containsKey("user")) {
HashMap<String, String> callHashMap = subjectRichParameters.get("call");
HashMap<String, String> userHashMap = subjectRichParameters.get("user");
if (callHashMap.containsKey("call-type")) {
if (callHashMap != null && callHashMap.size() > 0 && callHashMap.containsKey("call-type")) {
conversationType = callHashMap.get("call-type");
if ("one2one".equals(conversationType)) {
@ -374,8 +374,12 @@ public class NotificationWorker extends Worker {
decryptedPushMessage = LoganSquare.parse(new String(decryptedSubject),
DecryptedPushMessage.class);
boolean hasChatSupport = signatureVerification.getUserEntity().hasSpreedCapabilityWithName
("chat-v2");
ncApi = ApplicationWideApiHolder.getInstance().getNcApiInstanceForAccountId(signatureVerification.getUserEntity().getId(), null);
credentials = ApiUtils.getCredentials(signatureVerification.getUserEntity().getUserId(),
signatureVerification.getUserEntity().getToken());
boolean hasChatSupport = signatureVerification.getUserEntity().
hasSpreedCapabilityWithName("chat-v2");
boolean isInTheSameRoomAsNotification = (ApplicationWideCurrentRoomHolder.getInstance().
getCurrentRoomId().equals(decryptedPushMessage.getId()) ||
@ -452,7 +456,7 @@ public class NotificationWorker extends Worker {
Log.d(TAG, "Invalid private key " + e1.getLocalizedMessage());
}
} catch (Exception exception) {
Log.d(TAG, "Something went very wrong" + exception.getLocalizedMessage());
Log.d(TAG, "Something went very wrong " + exception.getLocalizedMessage());
}
return Result.SUCCESS;
}

View File

@ -79,7 +79,8 @@ public interface User extends Parcelable, Persistable, Serializable {
if (getCapabilities() != null) {
try {
Capabilities capabilities = LoganSquare.parse(getCapabilities(), Capabilities.class);
if (capabilities.getSpreedCapability() != null && capabilities.getSpreedCapability().getFeatures() != null) {
if (capabilities != null && capabilities.getSpreedCapability() != null &&
capabilities.getSpreedCapability().getFeatures() != null) {
return capabilities.getSpreedCapability().getFeatures().contains(capabilityName);
}
} catch (IOException e) {

View File

@ -36,6 +36,7 @@ import com.nextcloud.talk.models.json.push.PushConfigurationState;
import com.nextcloud.talk.models.json.push.PushRegistrationOverall;
import com.nextcloud.talk.utils.database.user.UserUtils;
import com.nextcloud.talk.utils.preferences.AppPreferences;
import com.nextcloud.talk.utils.singletons.ApplicationWideApiHolder;
import org.greenrobot.eventbus.EventBus;
@ -44,7 +45,6 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.CookieManager;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyFactory;
@ -68,9 +68,6 @@ import autodagger.AutoInjector;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.JavaNetCookieJar;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
@AutoInjector(NextcloudTalkApplication.class)
public class PushUtils {
@ -85,12 +82,6 @@ public class PushUtils {
@Inject
EventBus eventBus;
@Inject
OkHttpClient okHttpClient;
@Inject
Retrofit retrofit;
NcApi ncApi;
private File keysFile;
@ -231,6 +222,7 @@ public class PushUtils {
String token = appPreferences.getPushToken();
if (!TextUtils.isEmpty(token)) {
String credentials;
String pushTokenHash = generateSHA512Hash(token).toLowerCase();
PublicKey devicePublicKey = (PublicKey) readKeyFromFile(true);
if (devicePublicKey != null) {
@ -268,11 +260,12 @@ public class PushUtils {
queryMap.put("devicePublicKey", publicKey);
queryMap.put("proxyServer", proxyServer);
ncApi = retrofit.newBuilder().client(okHttpClient.newBuilder().cookieJar(new
JavaNetCookieJar(new CookieManager())).build()).build().create(NcApi.class);
ncApi = ApplicationWideApiHolder.getInstance().getNcApiInstanceForAccountId(userEntity.getId(), null);
credentials = ApiUtils.getCredentials(userEntity.getUserId(), userEntity.getToken());
String finalCredentials = credentials;
ncApi.registerDeviceForNotificationsWithNextcloud(
ApiUtils.getCredentials(userEntity.getUsername(), userEntity.getToken()),
credentials,
ApiUtils.getUrlNextcloudPush(userEntity.getBaseUrl()), queryMap)
.subscribeOn(Schedulers.newThread())
.subscribe(new Observer<PushRegistrationOverall>() {
@ -293,8 +286,7 @@ public class PushUtils {
.getData().getPublicKey());
ncApi.registerDeviceForNotificationsWithProxy(ApiUtils.getCredentials
(userEntity.getUsername(), userEntity.getToken()),
ncApi.registerDeviceForNotificationsWithProxy(finalCredentials,
ApiUtils.getUrlPushProxy(), proxyMap)
.subscribeOn(Schedulers.newThread())
.subscribe(new Observer<Void>() {

View File

@ -20,6 +20,7 @@
package com.nextcloud.talk.utils.singletons;
import android.annotation.SuppressLint;
import android.support.annotation.Nullable;
import android.text.TextUtils;
@ -29,6 +30,7 @@ import com.nextcloud.talk.models.database.UserEntity;
import com.nextcloud.talk.utils.database.user.UserUtils;
import java.util.HashMap;
import java.util.Map;
import javax.inject.Inject;
@ -39,7 +41,8 @@ import retrofit2.Retrofit;
public class ApiHolder {
private static final String TAG = "ApiHolder";
private HashMap<Long, NcApi> ncApiHashMap;
@SuppressLint("UseSparseArrays")
private Map<Long, NcApi> ncApiHashMap;
@Inject
UserUtils userUtils;
@ -53,15 +56,21 @@ public class ApiHolder {
return holder;
}
@SuppressLint("UseSparseArrays")
public NcApi getNcApiInstanceForAccountId(long accountId, @Nullable String baseUrl) {
NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this);
if (ncApiHashMap == null) {
ncApiHashMap = new HashMap<>();
}
if (!ncApiHashMap.containsKey(accountId)) {
UserEntity userAccount = userUtils.getUserWithId(accountId);
if (userAccount == null || !TextUtils.isEmpty(baseUrl)) {
retrofit = retrofit.newBuilder().baseUrl(baseUrl).build();
return retrofit.create(NcApi.class);
} else {
retrofit = retrofit.newBuilder().baseUrl(userAccount.getBaseUrl()).build();
retrofit = retrofit.newBuilder().baseUrl(userAccount.getBaseUrl() + "/").build();
ncApiHashMap.put(accountId, retrofit.create(NcApi.class));
}
}