Migrate ArbitraryStorageUtils to room

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2022-07-23 18:40:32 +02:00
parent 516b9190ad
commit 5c6fe628f1
No known key found for this signature in database
GPG key ID: 6CADC7E3523C308B
3 changed files with 95 additions and 54 deletions

View file

@ -42,10 +42,9 @@ import com.nextcloud.talk.activities.CallActivity;
import com.nextcloud.talk.activities.MainActivity;
import com.nextcloud.talk.api.NcApi;
import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.arbitrarystorage.ArbitraryStorageManager;
import com.nextcloud.talk.data.user.model.User;
import com.nextcloud.talk.models.SignatureVerification;
import com.nextcloud.talk.models.database.ArbitraryStorageEntity;
import com.nextcloud.talk.models.database.UserEntity;
import com.nextcloud.talk.models.json.chat.ChatUtils;
import com.nextcloud.talk.models.json.conversations.Conversation;
import com.nextcloud.talk.models.json.conversations.RoomOverall;
@ -59,7 +58,6 @@ import com.nextcloud.talk.utils.DoNotDisturbUtils;
import com.nextcloud.talk.utils.NotificationUtils;
import com.nextcloud.talk.utils.PushUtils;
import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.database.arbitrarystorage.ArbitraryStorageUtils;
import com.nextcloud.talk.utils.preferences.AppPreferences;
import com.nextcloud.talk.utils.singletons.ApplicationWideCurrentRoomHolder;
@ -91,6 +89,7 @@ import androidx.work.Data;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
import autodagger.AutoInjector;
import io.reactivex.Maybe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import okhttp3.JavaNetCookieJar;
@ -107,7 +106,7 @@ public class NotificationWorker extends Worker {
AppPreferences appPreferences;
@Inject
ArbitraryStorageUtils arbitraryStorageUtils;
ArbitraryStorageManager arbitraryStorageManger;
@Inject
Retrofit retrofit;
@ -133,14 +132,19 @@ public class NotificationWorker extends Worker {
private void showNotificationForCallWithNoPing(Intent intent) {
User user = signatureVerification.getUser();
ArbitraryStorageEntity arbitraryStorageEntity;
if ((arbitraryStorageEntity = arbitraryStorageUtils.getStorageSetting(
importantConversation = arbitraryStorageManger.getStorageSetting(
user.getId(),
"important_conversation",
intent.getExtras().getString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN()))) != null) {
importantConversation = Boolean.parseBoolean(arbitraryStorageEntity.getValue());
}
intent.getExtras().getString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN()))
.map(arbitraryStorage -> {
if (arbitraryStorage != null) {
return Boolean.parseBoolean(arbitraryStorage.getValue());
} else {
return importantConversation;
}
})
.switchIfEmpty(Maybe.just(importantConversation))
.blockingGet();
int apiVersion = ApiUtils.getConversationApiVersion(user, new int[] {ApiUtils.APIv4, 1});
@ -149,7 +153,7 @@ public class NotificationWorker extends Worker {
.blockingSubscribe(new Observer<RoomOverall>() {
@Override
public void onSubscribe(Disposable d) {
//unused atm
}
@Override
@ -179,11 +183,12 @@ public class NotificationWorker extends Worker {
@Override
public void onError(Throwable e) {
//unused atm
}
@Override
public void onComplete() {
//unused atm
}
});
}
@ -195,7 +200,7 @@ public class NotificationWorker extends Worker {
.blockingSubscribe(new Observer<NotificationOverall>() {
@Override
public void onSubscribe(Disposable d) {
//unused atm
}
@Override
@ -258,11 +263,12 @@ public class NotificationWorker extends Worker {
@Override
public void onError(Throwable e) {
//unused atm
}
@Override
public void onComplete() {
//unused atm
}
});
}

View file

@ -19,6 +19,8 @@
*/
package com.nextcloud.talk.utils.database.arbitrarystorage;
import android.util.Log;
import androidx.annotation.Nullable;
import com.nextcloud.talk.models.database.ArbitraryStorage;
@ -42,8 +44,8 @@ public class ArbitraryStorageUtils {
this.dataStore = dataStore;
}
public void storeStorageSetting(long accountIdentifier, String key, String value, String object) {
Log.e("ArbitraryStorageUtils", "storeStorageSetting: " + key + " / " + value + " / " + object);
ArbitraryStorageEntity arbitraryStorageEntity = new ArbitraryStorageEntity();
arbitraryStorageEntity.setAccountIdentifier(accountIdentifier);
arbitraryStorageEntity.setKey(key);
@ -57,15 +59,23 @@ public class ArbitraryStorageUtils {
}
public ArbitraryStorageEntity getStorageSetting(long accountIdentifier, String key, @Nullable String object) {
Log.e("ArbitraryStorageUtils", "getStorageSetting: " + accountIdentifier + " / " + key + " / " + object);
Result findStorageQueryResult = dataStore.select(ArbitraryStorage.class)
.where(ArbitraryStorageEntity.ACCOUNT_IDENTIFIER.eq(accountIdentifier)
.and(ArbitraryStorageEntity.KEY.eq(key)).and(ArbitraryStorageEntity.OBJECT.eq(object)))
.limit(1).get();
return (ArbitraryStorageEntity) findStorageQueryResult.firstOrNull();
ArbitraryStorageEntity arbitraryStorageEntity = (ArbitraryStorageEntity) findStorageQueryResult.firstOrNull();
if(arbitraryStorageEntity != null) {
Log.e("ArbitraryStorageUtils", "getStorageSetting: " + arbitraryStorageEntity.getKey() + " / " + arbitraryStorageEntity.getValue() + " / " + arbitraryStorageEntity.getObject());
}
return arbitraryStorageEntity;
}
public Observable deleteAllEntriesForAccountIdentifier(long accountIdentifier) {
Log.e("ArbitraryStorageUtils", "deleteAllEntriesForAccountIdentifier: " + accountIdentifier);
ReactiveScalar<Integer> deleteResult = dataStore.delete(ArbitraryStorage.class).where(ArbitraryStorageEntity.ACCOUNT_IDENTIFIER.eq(accountIdentifier)).get();
return deleteResult.single().toObservable()

View file

@ -28,11 +28,10 @@ import android.util.Log;
import com.nextcloud.talk.api.NcApi;
import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.arbitrarystorage.ArbitraryStorageManager;
import com.nextcloud.talk.data.user.model.User;
import com.nextcloud.talk.models.database.ArbitraryStorageEntity;
import com.nextcloud.talk.models.json.generic.GenericOverall;
import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.database.arbitrarystorage.ArbitraryStorageUtils;
import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew;
import com.yarolegovich.mp.io.StorageModule;
@ -43,6 +42,7 @@ import java.util.Set;
import javax.inject.Inject;
import autodagger.AutoInjector;
import io.reactivex.Maybe;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
@ -51,13 +51,13 @@ import io.reactivex.schedulers.Schedulers;
@AutoInjector(NextcloudTalkApplication.class)
public class DatabaseStorageModule implements StorageModule {
private static final String TAG = "DatabaseStorageModule";
@Inject
ArbitraryStorageUtils arbitraryStorageUtils;
ArbitraryStorageManager arbitraryStorageManager;
@Inject
NcApi ncApi;
private User conversationUser;
private String conversationToken;
private long accountIdentifier;
@ -89,12 +89,12 @@ public class DatabaseStorageModule implements StorageModule {
.subscribe(new Observer<GenericOverall>() {
@Override
public void onSubscribe(@NotNull Disposable d) {
// unused atm
}
@Override
public void onNext(@NotNull GenericOverall genericOverall) {
// unused atm
}
@Override
@ -104,14 +104,17 @@ public class DatabaseStorageModule implements StorageModule {
@Override
public void onComplete() {
// unused atm
}
}
);
}
if (!key.equals("conversation_lobby")) {
arbitraryStorageUtils.storeStorageSetting(accountIdentifier, key, Boolean.toString(value), conversationToken);
arbitraryStorageManager.storeStorageSetting(accountIdentifier,
key,
Boolean.toString(value),
conversationToken);
} else {
lobbyValue = value;
}
@ -120,7 +123,7 @@ public class DatabaseStorageModule implements StorageModule {
@Override
public void saveString(String key, String value) {
if (!key.equals("message_notification_level")) {
arbitraryStorageUtils.storeStorageSetting(accountIdentifier, key, value, conversationToken);
arbitraryStorageManager.storeStorageSetting(accountIdentifier, key, value, conversationToken);
} else {
if (CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "notification-levels")) {
if (!TextUtils.isEmpty(messageNotificationLevel) && !messageNotificationLevel.equals(value)) {
@ -139,17 +142,20 @@ public class DatabaseStorageModule implements StorageModule {
intValue = 0;
}
int apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[] {ApiUtils.APIv4, 1});
int apiVersion = ApiUtils.getConversationApiVersion(conversationUser,
new int[] {ApiUtils.APIv4, 1});
ncApi.setNotificationLevel(ApiUtils.getCredentials(conversationUser.getUsername(), conversationUser.getToken()),
ApiUtils.getUrlForRoomNotificationLevel(apiVersion, conversationUser.getBaseUrl(),
ncApi.setNotificationLevel(ApiUtils.getCredentials(conversationUser.getUsername(),
conversationUser.getToken()),
ApiUtils.getUrlForRoomNotificationLevel(apiVersion,
conversationUser.getBaseUrl(),
conversationToken),
intValue)
.subscribeOn(Schedulers.io())
.subscribe(new Observer<GenericOverall>() {
@Override
public void onSubscribe(Disposable d) {
// unused atm
}
@Override
@ -159,11 +165,12 @@ public class DatabaseStorageModule implements StorageModule {
@Override
public void onError(Throwable e) {
// unused atm
}
@Override
public void onComplete() {
// unused atm
}
});
} else {
@ -175,12 +182,15 @@ public class DatabaseStorageModule implements StorageModule {
@Override
public void saveInt(String key, int value) {
arbitraryStorageUtils.storeStorageSetting(accountIdentifier, key, Integer.toString(value), conversationToken);
arbitraryStorageManager.storeStorageSetting(accountIdentifier,
key,
Integer.toString(value),
conversationToken);
}
@Override
public void saveStringSet(String key, Set<String> value) {
// unused atm
}
@Override
@ -188,37 +198,52 @@ public class DatabaseStorageModule implements StorageModule {
if (key.equals("conversation_lobby")) {
return lobbyValue;
} else {
ArbitraryStorageEntity valueFromDb = arbitraryStorageUtils.getStorageSetting(accountIdentifier, key, conversationToken);
if (valueFromDb == null) {
return defaultVal;
} else {
return Boolean.parseBoolean(valueFromDb.getValue());
}
return arbitraryStorageManager
.getStorageSetting(accountIdentifier, key, conversationToken)
.map(arbitraryStorage -> {
if (arbitraryStorage != null) {
return Boolean.parseBoolean(arbitraryStorage.getValue());
} else {
return defaultVal;
}
})
.switchIfEmpty(Maybe.just(defaultVal))
.blockingGet();
}
}
@Override
public String getString(String key, String defaultVal) {
if (!key.equals("message_notification_level")) {
ArbitraryStorageEntity valueFromDb = arbitraryStorageUtils.getStorageSetting(accountIdentifier, key, conversationToken);
if (valueFromDb == null) {
return defaultVal;
} else {
return valueFromDb.getValue();
}
} else {
if (key.equals("message_notification_level")) {
return messageNotificationLevel;
} else {
return arbitraryStorageManager
.getStorageSetting(accountIdentifier, key, conversationToken)
.map(arbitraryStorage -> {
if (arbitraryStorage != null) {
return arbitraryStorage.getValue();
} else {
return defaultVal;
}
})
.switchIfEmpty(Maybe.just(defaultVal))
.blockingGet();
}
}
@Override
public int getInt(String key, int defaultVal) {
ArbitraryStorageEntity valueFromDb = arbitraryStorageUtils.getStorageSetting(accountIdentifier, key, conversationToken);
if (valueFromDb == null) {
return defaultVal;
} else {
return Integer.parseInt(valueFromDb.getValue());
}
return arbitraryStorageManager
.getStorageSetting(accountIdentifier, key, conversationToken)
.map(arbitraryStorage -> {
if (arbitraryStorage != null && arbitraryStorage.getValue() != null) {
return Integer.parseInt(arbitraryStorage.getValue());
} else {
return defaultVal;
}
})
.switchIfEmpty(Maybe.just(defaultVal))
.blockingGet();
}
@Override
@ -228,11 +253,11 @@ public class DatabaseStorageModule implements StorageModule {
@Override
public void onSaveInstanceState(Bundle outState) {
// unused atm
}
@Override
public void onRestoreInstanceState(Bundle savedState) {
// unused atm
}
}