From 1f8fa34e6aaa539f352738707ed61653a904fc3f Mon Sep 17 00:00:00 2001 From: Arthur Thompson Date: Fri, 26 Jul 2019 11:30:26 -0700 Subject: [PATCH 01/10] Add metadata to QuerySnapshot --- .../firebase/cloudfirestore/CloudFirestorePlugin.java | 5 +++++ .../cloud_firestore/ios/Classes/CloudFirestorePlugin.m | 4 ++++ packages/cloud_firestore/lib/src/query_snapshot.dart | 8 +++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.java b/packages/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.java index 5254b8b1493d..0c3496b547fe 100644 --- a/packages/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.java +++ b/packages/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.java @@ -192,6 +192,11 @@ private Map parseQuerySnapshot(QuerySnapshot querySnapshot) { } data.put("documentChanges", documentChanges); + Map metadata = new HashMap<>(); + metadata.put("hasPendingWrites", querySnapshot.getMetadata().hasPendingWrites()); + metadata.put("isFromCache", querySnapshot.getMetadata().isFromCache()); + data.put("metadata", metadata); + return data; } diff --git a/packages/cloud_firestore/ios/Classes/CloudFirestorePlugin.m b/packages/cloud_firestore/ios/Classes/CloudFirestorePlugin.m index a18c809d4098..c800afcb89fb 100644 --- a/packages/cloud_firestore/ios/Classes/CloudFirestorePlugin.m +++ b/packages/cloud_firestore/ios/Classes/CloudFirestorePlugin.m @@ -203,6 +203,10 @@ static FIRFirestoreSource getSource(NSDictionary *arguments) { @"documentChanges" : documentChanges, @"documents" : documents, @"metadatas" : metadatas, + @"metadata": @{ + @"hasPendingWrites": @(snapshot.metadata.hasPendingWrites), + @"isFromCache": @(snapshot.metadata.isFromCache), + } }; } diff --git a/packages/cloud_firestore/lib/src/query_snapshot.dart b/packages/cloud_firestore/lib/src/query_snapshot.dart index 4cc85403e19f..1ecb0bd54fe1 100644 --- a/packages/cloud_firestore/lib/src/query_snapshot.dart +++ b/packages/cloud_firestore/lib/src/query_snapshot.dart @@ -25,7 +25,11 @@ class QuerySnapshot { data['documentChanges'][index], _firestore, ); - }); + }), + metadata = SnapshotMetadata._( + data['metadata']['hasPendingWrites'], + data['metadata']['isFromCache'], + ); /// Gets a list of all the documents included in this snapshot final List documents; @@ -34,5 +38,7 @@ class QuerySnapshot { /// is the first snapshot, all documents will be in the list as Added changes. final List documentChanges; + final SnapshotMetadata metadata; + final Firestore _firestore; } From 7d636ddb8c77ea8ee8602932c4ba144fde6ab5f5 Mon Sep 17 00:00:00 2001 From: Arthur Thompson Date: Fri, 26 Jul 2019 11:45:48 -0700 Subject: [PATCH 02/10] fix formatting --- packages/cloud_firestore/example/lib/main.dart | 2 ++ packages/cloud_firestore/ios/Classes/CloudFirestorePlugin.m | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/cloud_firestore/example/lib/main.dart b/packages/cloud_firestore/example/lib/main.dart index 27138f2fbd9e..8575dd069e2d 100755 --- a/packages/cloud_firestore/example/lib/main.dart +++ b/packages/cloud_firestore/example/lib/main.dart @@ -36,6 +36,8 @@ class MessageList extends StatelessWidget { stream: firestore.collection('messages').snapshots(), builder: (BuildContext context, AsyncSnapshot snapshot) { if (!snapshot.hasData) return const Text('Loading...'); + print(snapshot.data.metadata.isFromCache); + print(snapshot.data.metadata.hasPendingWrites); final int messageCount = snapshot.data.documents.length; return ListView.builder( itemCount: messageCount, diff --git a/packages/cloud_firestore/ios/Classes/CloudFirestorePlugin.m b/packages/cloud_firestore/ios/Classes/CloudFirestorePlugin.m index c800afcb89fb..10ecc55a4335 100644 --- a/packages/cloud_firestore/ios/Classes/CloudFirestorePlugin.m +++ b/packages/cloud_firestore/ios/Classes/CloudFirestorePlugin.m @@ -203,9 +203,9 @@ static FIRFirestoreSource getSource(NSDictionary *arguments) { @"documentChanges" : documentChanges, @"documents" : documents, @"metadatas" : metadatas, - @"metadata": @{ - @"hasPendingWrites": @(snapshot.metadata.hasPendingWrites), - @"isFromCache": @(snapshot.metadata.isFromCache), + @"metadata" : @{ + @"hasPendingWrites" : @(snapshot.metadata.hasPendingWrites), + @"isFromCache" : @(snapshot.metadata.isFromCache), } }; } From 654011a2f41424668b28dbea3507b80d89a0943f Mon Sep 17 00:00:00 2001 From: Arthur Thompson Date: Fri, 26 Jul 2019 15:07:35 -0700 Subject: [PATCH 03/10] remove unnecessary print statements --- packages/cloud_firestore/example/lib/main.dart | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/cloud_firestore/example/lib/main.dart b/packages/cloud_firestore/example/lib/main.dart index 8575dd069e2d..27138f2fbd9e 100755 --- a/packages/cloud_firestore/example/lib/main.dart +++ b/packages/cloud_firestore/example/lib/main.dart @@ -36,8 +36,6 @@ class MessageList extends StatelessWidget { stream: firestore.collection('messages').snapshots(), builder: (BuildContext context, AsyncSnapshot snapshot) { if (!snapshot.hasData) return const Text('Loading...'); - print(snapshot.data.metadata.isFromCache); - print(snapshot.data.metadata.hasPendingWrites); final int messageCount = snapshot.data.documents.length; return ListView.builder( itemCount: messageCount, From 6bd8ee763fbf15f7b3192d61bec241e1560ab851 Mon Sep 17 00:00:00 2001 From: Arthur Thompson Date: Fri, 26 Jul 2019 15:27:54 -0700 Subject: [PATCH 04/10] Add unit tests --- packages/cloud_firestore/test/cloud_firestore_test.dart | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/cloud_firestore/test/cloud_firestore_test.dart b/packages/cloud_firestore/test/cloud_firestore_test.dart index 2b679fea6d0b..5409e3d50621 100755 --- a/packages/cloud_firestore/test/cloud_firestore_test.dart +++ b/packages/cloud_firestore/test/cloud_firestore_test.dart @@ -9,6 +9,7 @@ import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:flutter_test/flutter_test.dart' as prefix0; void main() { group('$Firestore', () { @@ -63,6 +64,7 @@ void main() { 'paths': ["${methodCall.arguments['path']}/0"], 'documents': [kMockDocumentSnapshotData], 'metadatas': >[kMockSnapshotMetadata], + 'metadata': kMockSnapshotMetadata, 'documentChanges': [ { 'oldIndex': -1, @@ -105,6 +107,7 @@ void main() { 'paths': ["${methodCall.arguments['path']}/0"], 'documents': [kMockDocumentSnapshotData], 'metadatas': >[kMockSnapshotMetadata], + 'metadata': kMockSnapshotMetadata, 'documentChanges': [ { 'oldIndex': -1, @@ -614,6 +617,8 @@ void main() { test('getDocumentsFromCollection', () async { QuerySnapshot snapshot = await collectionReference.getDocuments(source: Source.server); + expect(snapshot.metadata.hasPendingWrites, equals(kMockSnapshotMetadata['hasPendingWrites'])); + expect(snapshot.metadata.isFromCache, equals(kMockSnapshotMetadata['isFromCache'])); DocumentSnapshot document = snapshot.documents.first; expect(document.documentID, equals('0')); expect(document.reference.path, equals('foo/0')); @@ -781,6 +786,10 @@ void main() { }); test('getDocumentsFromCollectionGroup', () async { QuerySnapshot snapshot = await collectionGroupQuery.getDocuments(); + expect(snapshot.metadata.hasPendingWrites, + equals(kMockSnapshotMetadata['hasPendingWrites'])); + expect(snapshot.metadata.isFromCache, + equals(kMockSnapshotMetadata['isFromCache'])); DocumentSnapshot document = snapshot.documents.first; expect(document.documentID, equals('0')); expect(document.reference.path, equals('bar/0')); From 6ed12f579f08b51cb6af9892625a8f029d5c1f76 Mon Sep 17 00:00:00 2001 From: Arthur Thompson Date: Fri, 26 Jul 2019 15:33:09 -0700 Subject: [PATCH 05/10] Add integration test --- .../cloud_firestore/example/test_driver/cloud_firestore.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/cloud_firestore/example/test_driver/cloud_firestore.dart b/packages/cloud_firestore/example/test_driver/cloud_firestore.dart index d7d85db5b000..5cad0386e6b8 100644 --- a/packages/cloud_firestore/example/test_driver/cloud_firestore.dart +++ b/packages/cloud_firestore/example/test_driver/cloud_firestore.dart @@ -51,6 +51,7 @@ void main() { .where('message', isEqualTo: 'Hello world!') .limit(1); final QuerySnapshot querySnapshot = await query.getDocuments(); + expect(querySnapshot.metadata, isNotNull); expect(querySnapshot.documents.first['message'], 'Hello world!'); final DocumentReference firstDoc = querySnapshot.documents.first.reference; @@ -70,6 +71,7 @@ void main() { .limit(1); final QuerySnapshot querySnapshot = await query.getDocuments(); expect(querySnapshot.documents.first['stars'], 5); + expect(querySnapshot.metadata, isNotNull); }); test('increment', () async { From 443e2711af1be348e733ae78a7514bd0b5c093d7 Mon Sep 17 00:00:00 2001 From: Arthur Thompson Date: Fri, 26 Jul 2019 15:40:13 -0700 Subject: [PATCH 06/10] fix formatting --- packages/cloud_firestore/test/cloud_firestore_test.dart | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/cloud_firestore/test/cloud_firestore_test.dart b/packages/cloud_firestore/test/cloud_firestore_test.dart index 5409e3d50621..92173085c24c 100755 --- a/packages/cloud_firestore/test/cloud_firestore_test.dart +++ b/packages/cloud_firestore/test/cloud_firestore_test.dart @@ -9,7 +9,6 @@ import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_test/flutter_test.dart' as prefix0; void main() { group('$Firestore', () { @@ -617,8 +616,10 @@ void main() { test('getDocumentsFromCollection', () async { QuerySnapshot snapshot = await collectionReference.getDocuments(source: Source.server); - expect(snapshot.metadata.hasPendingWrites, equals(kMockSnapshotMetadata['hasPendingWrites'])); - expect(snapshot.metadata.isFromCache, equals(kMockSnapshotMetadata['isFromCache'])); + expect(snapshot.metadata.hasPendingWrites, + equals(kMockSnapshotMetadata['hasPendingWrites'])); + expect(snapshot.metadata.isFromCache, + equals(kMockSnapshotMetadata['isFromCache'])); DocumentSnapshot document = snapshot.documents.first; expect(document.documentID, equals('0')); expect(document.reference.path, equals('foo/0')); From 241da34fc33cdc6136e94c4562adeaea2c249cbe Mon Sep 17 00:00:00 2001 From: Arthur Thompson Date: Fri, 26 Jul 2019 15:47:14 -0700 Subject: [PATCH 07/10] bump version --- packages/cloud_firestore/CHANGELOG.md | 4 ++++ packages/cloud_firestore/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/cloud_firestore/CHANGELOG.md b/packages/cloud_firestore/CHANGELOG.md index 3d68c9afe1e5..8577de26e446 100644 --- a/packages/cloud_firestore/CHANGELOG.md +++ b/packages/cloud_firestore/CHANGELOG.md @@ -1,5 +1,9 @@ ## 0.12.8 +* Add metatdata to QuerySnapshot. + +## 0.12.8 + * Updated how document ids are generated to more closely match native implementations. ## 0.12.7+1 diff --git a/packages/cloud_firestore/pubspec.yaml b/packages/cloud_firestore/pubspec.yaml index 9fa89bfe045e..1c43c3fd018e 100755 --- a/packages/cloud_firestore/pubspec.yaml +++ b/packages/cloud_firestore/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for Cloud Firestore, a cloud-hosted, noSQL database live synchronization and offline support on Android and iOS. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/cloud_firestore -version: 0.12.8 +version: 0.12.8+1 flutter: plugin: From b79bf8e3b9db3477a9071161e54f987d432bfda9 Mon Sep 17 00:00:00 2001 From: Arthur Thompson Date: Fri, 26 Jul 2019 15:49:44 -0700 Subject: [PATCH 08/10] fix typo --- packages/cloud_firestore/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cloud_firestore/CHANGELOG.md b/packages/cloud_firestore/CHANGELOG.md index 8577de26e446..6e6afbe601c4 100644 --- a/packages/cloud_firestore/CHANGELOG.md +++ b/packages/cloud_firestore/CHANGELOG.md @@ -1,4 +1,4 @@ -## 0.12.8 +## 0.12.8+1 * Add metatdata to QuerySnapshot. From 65f6c3ab0a67ff99bb65a3c1d1beb5a3f2e00f29 Mon Sep 17 00:00:00 2001 From: Arthur Thompson Date: Fri, 26 Jul 2019 15:55:44 -0700 Subject: [PATCH 09/10] fix version issue --- packages/cloud_firestore/CHANGELOG.md | 5 +---- packages/cloud_firestore/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/cloud_firestore/CHANGELOG.md b/packages/cloud_firestore/CHANGELOG.md index 6e6afbe601c4..950014a11b78 100644 --- a/packages/cloud_firestore/CHANGELOG.md +++ b/packages/cloud_firestore/CHANGELOG.md @@ -1,10 +1,7 @@ -## 0.12.8+1 - -* Add metatdata to QuerySnapshot. - ## 0.12.8 * Updated how document ids are generated to more closely match native implementations. +* Add `metadata` to `QuerySnapshot`. ## 0.12.7+1 diff --git a/packages/cloud_firestore/pubspec.yaml b/packages/cloud_firestore/pubspec.yaml index 1c43c3fd018e..9fa89bfe045e 100755 --- a/packages/cloud_firestore/pubspec.yaml +++ b/packages/cloud_firestore/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for Cloud Firestore, a cloud-hosted, noSQL database live synchronization and offline support on Android and iOS. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/cloud_firestore -version: 0.12.8+1 +version: 0.12.8 flutter: plugin: From 99d6275b37af8f6afa3b7607e22f3970c9ab3392 Mon Sep 17 00:00:00 2001 From: Arthur Thompson Date: Fri, 26 Jul 2019 16:10:52 -0700 Subject: [PATCH 10/10] fix version again --- packages/cloud_firestore/CHANGELOG.md | 5 ++++- packages/cloud_firestore/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/cloud_firestore/CHANGELOG.md b/packages/cloud_firestore/CHANGELOG.md index 950014a11b78..f6f2e143f416 100644 --- a/packages/cloud_firestore/CHANGELOG.md +++ b/packages/cloud_firestore/CHANGELOG.md @@ -1,7 +1,10 @@ +## 0.12.8+1 + +* Add `metadata` to `QuerySnapshot`. + ## 0.12.8 * Updated how document ids are generated to more closely match native implementations. -* Add `metadata` to `QuerySnapshot`. ## 0.12.7+1 diff --git a/packages/cloud_firestore/pubspec.yaml b/packages/cloud_firestore/pubspec.yaml index 9fa89bfe045e..1c43c3fd018e 100755 --- a/packages/cloud_firestore/pubspec.yaml +++ b/packages/cloud_firestore/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for Cloud Firestore, a cloud-hosted, noSQL database live synchronization and offline support on Android and iOS. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/cloud_firestore -version: 0.12.8 +version: 0.12.8+1 flutter: plugin: