mirror of
https://github.com/zhigang1992/react-native-firebase.git
synced 2026-04-22 11:16:18 +08:00
[firestore][android] fix issues with error codes, missing returns, typos + various cleanup
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -29,7 +29,7 @@ public class UniversalFirebaseFirestoreCommon {
|
||||
return FirebaseFirestore.getInstance(firebaseApp);
|
||||
}
|
||||
|
||||
static Query getQueryForFirestore (
|
||||
static Query getQueryForFirestore(
|
||||
FirebaseFirestore firebaseFirestore,
|
||||
String path,
|
||||
String type
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user