[firestore][android] fix issues with error codes, missing returns, typos + various cleanup

This commit is contained in:
Salakar
2019-07-30 08:11:14 +01:00
parent ae4057ea34
commit f55c86931a
13 changed files with 200 additions and 213 deletions

View File

@@ -1,8 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="io.invertase.firebase.firestore">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<manifest
package="io.invertase.firebase.firestore">
</manifest>

View File

@@ -29,7 +29,7 @@ public class UniversalFirebaseFirestoreCommon {
return FirebaseFirestore.getInstance(firebaseApp);
}
static Query getQueryForFirestore (
static Query getQueryForFirestore(
FirebaseFirestore firebaseFirestore,
String path,
String type

View File

@@ -19,11 +19,170 @@ package io.invertase.firebase.firestore;
import com.google.firebase.firestore.FirebaseFirestoreException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class UniversalFirebaseFirestoreException extends Exception {
private final String code;
private final String message;
UniversalFirebaseFirestoreException(FirebaseFirestoreException nativeException, Throwable cause) {
super(nativeException.getMessage(), cause);
String code = null;
String message = null;
if (cause.getMessage() != null && cause.getMessage().contains(":")) {
String causeMessage = cause.getMessage();
Matcher matcher = Pattern.compile("([A-Z_]{3,25}):").matcher(causeMessage);
if (matcher.find()) {
String foundCode = matcher.group(1).trim();
switch (foundCode) {
case "ABORTED":
code = "aborted";
message = "The operation was aborted, typically due to a concurrency issue like transaction aborts, etc.";
break;
case "ALREADY_EXISTS":
code = "already-exists";
message = "Some document that we attempted to create already exists.";
break;
case "CANCELLED":
code = "cancelled";
message = "The operation was cancelled (typically by the caller).";
break;
case "DATA_LOSS":
code = "data-loss";
message = "Unrecoverable data loss or corruption.";
break;
case "DEADLINE_EXCEEDED":
code = "deadline-exceeded";
message = "Deadline expired before operation could complete. For operations that change the state of the system, this error may be returned even if the operation has completed successfully. For example, a successful response from a server could have been delayed long enough for the deadline to expire.";
break;
case "FAILED_PRECONDITION":
code = "failed-precondition";
message = "Operation was rejected because the system is not in a state required for the operation's execution. Ensure your query has been indexed via the Firebase console.";
break;
case "INTERNAL":
code = "internal";
message = "Internal errors. Means some invariants expected by underlying system has been broken. If you see one of these errors, something is very broken.";
break;
case "INVALID_ARGUMENT":
code = "invalid-argument";
message = "Client specified an invalid argument. Note that this differs from failed-precondition. invalid-argument indicates arguments that are problematic regardless of the state of the system (e.g., an invalid field name).";
break;
case "NOT_FOUND":
code = "not-found";
message = "Some requested document was not found.";
break;
case "OUT_OF_RANGE":
code = "out-of-range";
message = "Operation was attempted past the valid range.";
break;
case "PERMISSION_DENIED":
code = "permission-denied";
message = "The caller does not have permission to execute the specified operation.";
break;
case "RESOURCE_EXHAUSTED":
code = "resource-exhausted";
message = "Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space.";
break;
case "UNAUTHENTICATED":
code = "unauthenticated";
message = "The request does not have valid authentication credentials for the operation.";
break;
case "UNAVAILABLE":
code = "unavailable";
message = "The service is currently unavailable. This is a most likely a transient condition and may be corrected by retrying with a backoff.";
break;
case "UNIMPLEMENTED":
code = "unimplemented";
message = "Operation is not implemented or not supported/enabled.";
break;
case "UNKNOWN":
code = "unknown";
message = "Unknown error or an error from a different error domain.";
break;
}
}
}
if (code == null) {
switch (nativeException.getCode()) {
case ABORTED:
code = "aborted";
message = "The operation was aborted, typically due to a concurrency issue like transaction aborts, etc.";
break;
case ALREADY_EXISTS:
code = "already-exists";
message = "Some document that we attempted to create already exists.";
break;
case CANCELLED:
code = "cancelled";
message = "The operation was cancelled (typically by the caller).";
break;
case DATA_LOSS:
code = "data-loss";
message = "Unrecoverable data loss or corruption.";
break;
case DEADLINE_EXCEEDED:
code = "deadline-exceeded";
message = "Deadline expired before operation could complete. For operations that change the state of the system, this error may be returned even if the operation has completed successfully. For example, a successful response from a server could have been delayed long enough for the deadline to expire.";
break;
case FAILED_PRECONDITION:
code = "failed-precondition";
message = "Operation was rejected because the system is not in a state required for the operation's execution. Ensure your query has been indexed via the Firebase console.";
break;
case INTERNAL:
code = "internal";
message = "Internal errors. Means some invariants expected by underlying system has been broken. If you see one of these errors, something is very broken.";
break;
case INVALID_ARGUMENT:
code = "invalid-argument";
message = "Client specified an invalid argument. Note that this differs from failed-precondition. invalid-argument indicates arguments that are problematic regardless of the state of the system (e.g., an invalid field name).";
break;
case NOT_FOUND:
code = "not-found";
message = "Some requested document was not found.";
break;
case OUT_OF_RANGE:
code = "out-of-range";
message = "Operation was attempted past the valid range.";
break;
case PERMISSION_DENIED:
code = "permission-denied";
message = "The caller does not have permission to execute the specified operation.";
break;
case RESOURCE_EXHAUSTED:
code = "resource-exhausted";
message = "Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space.";
break;
case UNAUTHENTICATED:
code = "unauthenticated";
message = "The request does not have valid authentication credentials for the operation.";
break;
case UNAVAILABLE:
code = "unavailable";
message = "The service is currently unavailable. This is a most likely a transient condition and may be corrected by retrying with a backoff.";
break;
case UNIMPLEMENTED:
code = "unimplemented";
message = "Operation is not implemented or not supported/enabled.";
break;
case UNKNOWN:
code = "unknown";
message = "Unknown error or an error from a different error domain.";
break;
default:
// Even though UNKNOWN exists, this is a fallback
code = "unknown";
message = "An unknown error occurred";
}
}
this.code = code;
this.message = message;
}
public String getCode() {
return code;
}
@@ -32,85 +191,4 @@ public class UniversalFirebaseFirestoreException extends Exception {
public String getMessage() {
return message;
}
UniversalFirebaseFirestoreException(FirebaseFirestoreException nativeException, Throwable cause) {
super(nativeException.getMessage(), cause);
String code;
String message;
switch (nativeException.getCode()) {
case ABORTED:
code = "aborted";
message = "The operation was aborted, typically due to a concurrency issue like transaction aborts, etc.";
break;
case ALREADY_EXISTS:
code = "already-exists";
message = "Some document that we attempted to create already exists.";
break;
case CANCELLED:
code = "cancelled";
message = "The operation was cancelled (typically by the caller).";
break;
case DATA_LOSS:
code = "data-loss";
message = "Unrecoverable data loss or corruption.";
break;
case DEADLINE_EXCEEDED:
code = "deadline-exceeded";
message = "Deadline expired before operation could complete. For operations that change the state of the system, this error may be returned even if the operation has completed successfully. For example, a successful response from a server could have been delayed long enough for the deadline to expire.";
break;
case FAILED_PRECONDITION:
code = "failed-precondition";
message = "Operation was rejected because the system is not in a state required for the operation's execution. Ensure your query has been indexed via the Firebase console.";
break;
case INTERNAL:
code = "internal";
message = "Internal errors. Means some invariants expected by underlying system has been broken. If you see one of these errors, something is very broken.";
break;
case INVALID_ARGUMENT:
code = "invalid-argument";
message = "Client specified an invalid argument. Note that this differs from failed-precondition. invalid-argument indicates arguments that are problematic regardless of the state of the system (e.g., an invalid field name).";
break;
case NOT_FOUND:
code = "not-found";
message = "Some requested document was not found.";
break;
case OUT_OF_RANGE:
code = "out-of-range";
message = "Operation was attempted past the valid range.";
break;
case PERMISSION_DENIED:
code = "permission-denied";
message = "The caller does not have permission to execute the specified operation.";
break;
case RESOURCE_EXHAUSTED:
code = "resource-exhausted";
message = "Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space.";
break;
case UNAUTHENTICATED:
code = "unauthenticated";
message = "The request does not have valid authentication credentials for the operation.";
break;
case UNAVAILABLE:
code = "unavailable";
message = "The service is currently unavailable. This is a most likely a transient condition and may be corrected by retrying with a backoff.";
break;
case UNIMPLEMENTED:
code = "unimplemented";
message = "Operation is not implemented or not supported/enabled.";
break;
case UNKNOWN:
code = "unknown";
message = "Unknown error or an error from a different error domain.";
break;
default:
// Even though UNKNOWN exists, this is a fallback
code = "unknown";
message = "An unknown error occurred";
}
this.code = code;
this.message = message;
}
}

View File

@@ -18,17 +18,15 @@ package io.invertase.firebase.firestore;
*/
import android.content.Context;
import com.google.android.gms.tasks.Task;
import com.google.android.gms.tasks.Tasks;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreSettings;
import io.invertase.firebase.common.UniversalFirebaseModule;
import java.util.Map;
import java.util.Objects;
import io.invertase.firebase.common.UniversalFirebaseModule;
import static io.invertase.firebase.firestore.UniversalFirebaseFirestoreCommon.getFirestoreForApp;
public class UniversalFirebaseFirestoreModule extends UniversalFirebaseModule {

View File

@@ -18,23 +18,9 @@ package io.invertase.firebase.firestore;
*/
import android.util.SparseArray;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.*;
import com.google.android.gms.tasks.Tasks;
import com.google.firebase.firestore.EventListener;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreException;
import com.google.firebase.firestore.ListenerRegistration;
import com.google.firebase.firestore.MetadataChanges;
import com.google.firebase.firestore.QuerySnapshot;
import com.google.firebase.firestore.Source;
import com.google.firebase.firestore.*;
import io.invertase.firebase.common.ReactNativeFirebaseEventEmitter;
import io.invertase.firebase.common.ReactNativeFirebaseModule;
@@ -47,7 +33,7 @@ public class ReactNativeFirebaseFirestoreCollectionModule extends ReactNativeFir
private static final String SERVICE_NAME = "FirestoreCollection";
private static SparseArray<ListenerRegistration> collectionSnapshotListeners = new SparseArray<>();
public ReactNativeFirebaseFirestoreCollectionModule(ReactApplicationContext reactContext) {
ReactNativeFirebaseFirestoreCollectionModule(ReactApplicationContext reactContext) {
super(reactContext, SERVICE_NAME);
}
@@ -80,7 +66,6 @@ public class ReactNativeFirebaseFirestoreCollectionModule extends ReactNativeFir
FirebaseFirestore firebaseFirestore = getFirestoreForApp(appName);
ReactNativeFirebaseFirestoreQuery firestoreQuery = new ReactNativeFirebaseFirestoreQuery(
firebaseFirestore,
getQueryForFirestore(firebaseFirestore, path, type),
filters,
orders,
@@ -142,7 +127,6 @@ public class ReactNativeFirebaseFirestoreCollectionModule extends ReactNativeFir
) {
FirebaseFirestore firebaseFirestore = getFirestoreForApp(appName);
ReactNativeFirebaseFirestoreQuery query = new ReactNativeFirebaseFirestoreQuery(
firebaseFirestore,
getQueryForFirestore(firebaseFirestore, path, type),
filters,
orders,

View File

@@ -24,10 +24,8 @@ import com.google.firebase.firestore.FirebaseFirestoreException;
import static io.invertase.firebase.common.ReactNativeFirebaseModule.rejectPromiseWithCodeAndMessage;
import static io.invertase.firebase.common.ReactNativeFirebaseModule.rejectPromiseWithExceptionMap;
public class ReactNativeFirebaseFirestoreCommon {
private static final String TAG = "FirestoreCommon";
public static void rejectPromiseFirestoreException(Promise promise, Exception exception) {
class ReactNativeFirebaseFirestoreCommon {
static void rejectPromiseFirestoreException(Promise promise, Exception exception) {
if (exception instanceof FirebaseFirestoreException) {
UniversalFirebaseFirestoreException universalException = new UniversalFirebaseFirestoreException((FirebaseFirestoreException) exception, exception.getCause());
rejectPromiseWithCodeAndMessage(promise, universalException.getCode(), universalException.getMessage());
@@ -38,5 +36,4 @@ public class ReactNativeFirebaseFirestoreCommon {
rejectPromiseWithExceptionMap(promise, exception);
}
}
}

View File

@@ -18,39 +18,20 @@ package io.invertase.firebase.firestore;
*/
import android.util.SparseArray;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.*;
import com.google.android.gms.tasks.Task;
import com.google.android.gms.tasks.Tasks;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.EventListener;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreException;
import com.google.firebase.firestore.ListenerRegistration;
import com.google.firebase.firestore.MetadataChanges;
import com.google.firebase.firestore.SetOptions;
import com.google.firebase.firestore.Source;
import com.google.firebase.firestore.WriteBatch;
import com.google.firebase.firestore.*;
import io.invertase.firebase.common.ReactNativeFirebaseEventEmitter;
import io.invertase.firebase.common.ReactNativeFirebaseModule;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import io.invertase.firebase.common.ReactNativeFirebaseEventEmitter;
import io.invertase.firebase.common.ReactNativeFirebaseModule;
import static io.invertase.firebase.firestore.ReactNativeFirebaseFirestoreCommon.rejectPromiseFirestoreException;
import static io.invertase.firebase.firestore.ReactNativeFirebaseFirestoreSerialize.parseDocumentBatches;
import static io.invertase.firebase.firestore.ReactNativeFirebaseFirestoreSerialize.parseReadableMap;
import static io.invertase.firebase.firestore.ReactNativeFirebaseFirestoreSerialize.snapshotToWritableMap;
import static io.invertase.firebase.firestore.ReactNativeFirebaseFirestoreSerialize.*;
import static io.invertase.firebase.firestore.UniversalFirebaseFirestoreCommon.getDocumentForFirestore;
import static io.invertase.firebase.firestore.UniversalFirebaseFirestoreCommon.getFirestoreForApp;
@@ -59,7 +40,7 @@ public class ReactNativeFirebaseFirestoreDocumentModule extends ReactNativeFireb
private static SparseArray<ListenerRegistration> documentSnapshotListeners = new SparseArray<>();
public ReactNativeFirebaseFirestoreDocumentModule(ReactApplicationContext reactContext) {
ReactNativeFirebaseFirestoreDocumentModule(ReactApplicationContext reactContext) {
super(reactContext, SERVICE_NAME);
}

View File

@@ -19,14 +19,13 @@ package io.invertase.firebase.firestore;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableMap;
import io.invertase.firebase.interfaces.NativeEvent;
public class ReactNativeFirebaseFirestoreEvent implements NativeEvent {
public static final String COLLECTION_EVENT_SYNC = "firestore_collection_sync_event";
public static final String DOCUMENT_EVENT_SYNC = "firestore_document_sync_event";
public static final String TRANSCTION_EVENT_SYNC = "firestore_transaction_event";
static final String COLLECTION_EVENT_SYNC = "firestore_collection_sync_event";
static final String DOCUMENT_EVENT_SYNC = "firestore_document_sync_event";
static final String TRANSACTION_EVENT_SYNC = "firestore_transaction_event";
private static final String KEY_ID = "listenerId";
private static final String KEY_BODY = "body";
private static final String KEY_APP_NAME = "appName";

View File

@@ -22,7 +22,6 @@ import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.google.firebase.firestore.FirebaseFirestore;
import io.invertase.firebase.common.ReactNativeFirebaseModule;
import static io.invertase.firebase.common.RCTConvertFirebase.toHashMap;

View File

@@ -22,7 +22,6 @@ import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap;
import com.google.android.gms.tasks.Task;
import com.google.android.gms.tasks.Tasks;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;
import com.google.firebase.firestore.QuerySnapshot;
import com.google.firebase.firestore.Source;
@@ -33,17 +32,12 @@ import java.util.Objects;
import java.util.concurrent.Executor;
import static io.invertase.firebase.common.RCTConvertFirebase.toArrayList;
import static io.invertase.firebase.firestore.ReactNativeFirebaseFirestoreSerialize.parseReadableArray;
import static io.invertase.firebase.firestore.ReactNativeFirebaseFirestoreSerialize.parseTypeMap;
import static io.invertase.firebase.firestore.ReactNativeFirebaseFirestoreSerialize.snapshotToWritableMap;
import static io.invertase.firebase.firestore.ReactNativeFirebaseFirestoreSerialize.*;
public class ReactNativeFirebaseFirestoreQuery {
FirebaseFirestore firebaseFirestore;
Query query;
ReactNativeFirebaseFirestoreQuery(
FirebaseFirestore firebaseFirestore,
Query query,
ReadableArray filters,
ReadableArray orders,
@@ -57,7 +51,7 @@ public class ReactNativeFirebaseFirestoreQuery {
public Task<WritableMap> get(Executor executor, Source source) {
return Tasks.call(executor, () -> {
QuerySnapshot querySnapshot = Tasks.await(this.query.get(source));
QuerySnapshot querySnapshot = Tasks.await(query.get(source));
return snapshotToWritableMap("get", querySnapshot, null);
});
}
@@ -69,7 +63,7 @@ public class ReactNativeFirebaseFirestoreQuery {
String fieldPath = Objects.requireNonNull(filter).getString("fieldPath");
String operator = filter.getString("operator");
ReadableArray arrayValue = filter.getArray("value");
Object value = parseTypeMap(firebaseFirestore, Objects.requireNonNull(arrayValue));
Object value = parseTypeMap(query.getFirestore(), Objects.requireNonNull(arrayValue));
switch (Objects.requireNonNull(operator)) {
case "EQUAL":
@@ -114,22 +108,22 @@ public class ReactNativeFirebaseFirestoreQuery {
}
if (options.hasKey("startAt")) {
List<Object> fieldList = parseReadableArray(firebaseFirestore, options.getArray("startAt"));
List<Object> fieldList = parseReadableArray(query.getFirestore(), options.getArray("startAt"));
query = query.startAt(Objects.requireNonNull(fieldList.toArray()));
}
if (options.hasKey("startAfter")) {
List<Object> fieldList = parseReadableArray(firebaseFirestore, options.getArray("startAfter"));
List<Object> fieldList = parseReadableArray(query.getFirestore(), options.getArray("startAfter"));
query = query.startAfter(Objects.requireNonNull(fieldList.toArray()));
}
if (options.hasKey("endAt")) {
List<Object> fieldList = parseReadableArray(firebaseFirestore, options.getArray("endAt"));
List<Object> fieldList = parseReadableArray(query.getFirestore(), options.getArray("endAt"));
query = query.endAt(Objects.requireNonNull(fieldList.toArray()));
}
if (options.hasKey("endBefore")) {
List<Object> fieldList = parseReadableArray(firebaseFirestore, options.getArray("endBefore"));
List<Object> fieldList = parseReadableArray(query.getFirestore(), options.getArray("endBefore"));
query = query.endBefore(Objects.requireNonNull(fieldList.toArray()));
}
}

View File

@@ -19,34 +19,13 @@ package io.invertase.firebase.firestore;
import android.util.Base64;
import android.util.Log;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.ReadableMapKeySetIterator;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.*;
import com.google.common.collect.Iterables;
import com.google.firebase.Timestamp;
import com.google.firebase.firestore.Blob;
import com.google.firebase.firestore.DocumentChange;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FieldPath;
import com.google.firebase.firestore.FieldValue;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.GeoPoint;
import com.google.firebase.firestore.MetadataChanges;
import com.google.firebase.firestore.QuerySnapshot;
import com.google.firebase.firestore.SnapshotMetadata;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import com.google.firebase.firestore.*;
import javax.annotation.Nullable;
import java.util.*;
import static io.invertase.firebase.common.RCTConvertFirebase.toHashMap;

View File

@@ -27,12 +27,12 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class ReactNativeFirebaseFirestoreTransactionHandler {
class ReactNativeFirebaseFirestoreTransactionHandler {
private final ReentrantLock lock;
private final Condition condition;
public boolean aborted = false;
public boolean timeout = false;
boolean aborted = false;
boolean timeout = false;
private String appName;
private long timeoutAt;
private int transactionId;
@@ -63,8 +63,6 @@ public class ReactNativeFirebaseFirestoreTransactionHandler {
/**
* Reset handler state - clears command buffer + updates to new Transaction instance
*
* @param firestoreTransaction
*/
void resetState(Transaction firestoreTransaction) {
this.commandBuffer = null;
@@ -73,8 +71,6 @@ public class ReactNativeFirebaseFirestoreTransactionHandler {
/**
* Signal that the transaction buffer has been received and needs to be processed.
*
* @param buffer
*/
void signalBufferReceived(ReadableArray buffer) {
lock.lock();
@@ -108,8 +104,6 @@ public class ReactNativeFirebaseFirestoreTransactionHandler {
/**
* Get the current pending command buffer.
*
* @return
*/
ReadableArray getCommandBuffer() {
return commandBuffer;
@@ -125,8 +119,6 @@ public class ReactNativeFirebaseFirestoreTransactionHandler {
/**
* Get and resolve a DocumentSnapshot from transaction.get(ref);
*
* @param documentReference
*/
DocumentSnapshot getDocument(DocumentReference documentReference) throws FirebaseFirestoreException {
updateInternalTimeout();

View File

@@ -19,29 +19,17 @@ package io.invertase.firebase.firestore;
import android.os.AsyncTask;
import android.util.SparseArray;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.*;
import com.google.android.gms.tasks.Tasks;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreException;
import com.google.firebase.firestore.SetOptions;
import com.google.firebase.firestore.Transaction;
import com.google.firebase.firestore.*;
import io.invertase.firebase.common.ReactNativeFirebaseEventEmitter;
import io.invertase.firebase.common.ReactNativeFirebaseModule;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import io.invertase.firebase.common.ReactNativeFirebaseEventEmitter;
import io.invertase.firebase.common.ReactNativeFirebaseModule;
import static io.invertase.firebase.common.RCTConvertFirebase.toArrayList;
import static io.invertase.firebase.firestore.ReactNativeFirebaseFirestoreSerialize.parseReadableMap;
import static io.invertase.firebase.firestore.ReactNativeFirebaseFirestoreSerialize.snapshotToWritableMap;
@@ -52,7 +40,7 @@ public class ReactNativeFirebaseFirestoreTransactionModule extends ReactNativeFi
private static final String SERVICE_NAME = "FirestoreTransaction";
private SparseArray<ReactNativeFirebaseFirestoreTransactionHandler> transactionHandlers = new SparseArray<>();
public ReactNativeFirebaseFirestoreTransactionModule(ReactApplicationContext reactContext) {
ReactNativeFirebaseFirestoreTransactionModule(ReactApplicationContext reactContext) {
super(reactContext, SERVICE_NAME);
}
@@ -61,6 +49,7 @@ public class ReactNativeFirebaseFirestoreTransactionModule extends ReactNativeFi
for (int i = 0, size = transactionHandlers.size(); i < size; i++) {
int key = transactionHandlers.keyAt(i);
ReactNativeFirebaseFirestoreTransactionHandler transactionHandler = transactionHandlers.get(key);
if (transactionHandler != null) {
transactionHandler.abort();
}
@@ -75,6 +64,7 @@ public class ReactNativeFirebaseFirestoreTransactionModule extends ReactNativeFi
if (transactionHandler == null) {
rejectPromiseWithCodeAndMessage(promise, "internal-error", "An internal error occurred whilst attempting to find a native transaction by id.");
return;
}
FirebaseFirestore firebaseFirestore = getFirestoreForApp(appName);
@@ -129,7 +119,7 @@ public class ReactNativeFirebaseFirestoreTransactionModule extends ReactNativeFi
// Send an update signal to JS - telling it to now run the transaction
emitter.sendEvent(new ReactNativeFirebaseFirestoreEvent(
ReactNativeFirebaseFirestoreEvent.TRANSCTION_EVENT_SYNC,
ReactNativeFirebaseFirestoreEvent.TRANSACTION_EVENT_SYNC,
eventMap,
transactionHandler.getAppName(),
transactionHandler.getTransactionId()
@@ -216,7 +206,7 @@ public class ReactNativeFirebaseFirestoreTransactionModule extends ReactNativeFi
eventMap.putString("type", "complete");
emitter.sendEvent(new ReactNativeFirebaseFirestoreEvent(
ReactNativeFirebaseFirestoreEvent.TRANSCTION_EVENT_SYNC,
ReactNativeFirebaseFirestoreEvent.TRANSACTION_EVENT_SYNC,
eventMap,
transactionHandler.getAppName(),
transactionHandler.getTransactionId()
@@ -234,7 +224,7 @@ public class ReactNativeFirebaseFirestoreTransactionModule extends ReactNativeFi
eventMap.putMap("error", errorMap);
emitter.sendEvent(new ReactNativeFirebaseFirestoreEvent(
ReactNativeFirebaseFirestoreEvent.TRANSCTION_EVENT_SYNC,
ReactNativeFirebaseFirestoreEvent.TRANSACTION_EVENT_SYNC,
eventMap,
transactionHandler.getAppName(),
transactionHandler.getTransactionId()