@@ -52,9 +52,12 @@ import com.google.firebase.firestore.pipeline.Stage
5252import com.google.firebase.firestore.pipeline.UnionStage
5353import com.google.firebase.firestore.pipeline.UnnestStage
5454import com.google.firebase.firestore.pipeline.WhereStage
55+ import com.google.firebase.firestore.util.Executors
5556import com.google.firestore.v1.ExecutePipelineRequest
5657import com.google.firestore.v1.StructuredPipeline
5758import com.google.firestore.v1.Value
59+ import java.util.concurrent.Executor
60+ import kotlinx.coroutines.flow.Flow
5861
5962open class AbstractPipeline
6063internal constructor (
@@ -775,6 +778,38 @@ internal constructor(
775778
776779 fun execute (options : RealtimePipelineOptions ): Task <PipelineSnapshot > = execute(options.options)
777780
781+ fun snapshots (): Flow <RealtimePipelineSnapshot > = snapshots(RealtimePipelineOptions .DEFAULT )
782+
783+ fun snapshots (options : RealtimePipelineOptions ): Flow <RealtimePipelineSnapshot > {
784+ throw NotImplementedError ()
785+ }
786+
787+ fun addSnapshotListener (listener : EventListener <RealtimePipelineSnapshot >): ListenerRegistration =
788+ addSnapshotListener(
789+ Executors .DEFAULT_CALLBACK_EXECUTOR ,
790+ RealtimePipelineOptions .DEFAULT ,
791+ listener
792+ )
793+
794+ fun addSnapshotListener (
795+ options : RealtimePipelineOptions ,
796+ listener : EventListener <RealtimePipelineSnapshot >
797+ ): ListenerRegistration =
798+ addSnapshotListener(Executors .DEFAULT_CALLBACK_EXECUTOR , options, listener)
799+
800+ fun addSnapshotListener (
801+ executor : Executor ,
802+ listener : EventListener <RealtimePipelineSnapshot >
803+ ): ListenerRegistration = addSnapshotListener(executor, RealtimePipelineOptions .DEFAULT , listener)
804+
805+ fun addSnapshotListener (
806+ executor : Executor ,
807+ options : RealtimePipelineOptions ,
808+ listener : EventListener <RealtimePipelineSnapshot >
809+ ): ListenerRegistration {
810+ throw NotImplementedError ()
811+ }
812+
778813 fun limit (limit : Int ): RealtimePipeline = append(LimitStage (limit))
779814
780815 fun offset (offset : Int ): RealtimePipeline = append(OffsetStage (offset))
@@ -818,8 +853,6 @@ internal constructor(
818853 }
819854}
820855
821- /* *
822- */
823856class PipelineSnapshot
824857internal constructor (executionTime: Timestamp , results: List <PipelineResult >) :
825858 Iterable <PipelineResult > {
@@ -833,6 +866,25 @@ internal constructor(executionTime: Timestamp, results: List<PipelineResult>) :
833866 override fun iterator () = results.iterator()
834867}
835868
869+ class RealtimePipelineSnapshot
870+ internal constructor (
871+ executionTime: Timestamp ? ,
872+ metadata: SnapshotMetadata ,
873+ results: List <PipelineResult >
874+ ) : Iterable <PipelineResult > {
875+
876+ /* * The time at which the pipeline producing this result is executed. */
877+ val executionTime: Timestamp ? = executionTime
878+
879+ /* * Metadata about this snapshot, concerning its source and if it has local modifications. */
880+ val metadata: SnapshotMetadata = metadata
881+
882+ /* * List of all the results */
883+ val results: List <PipelineResult > = results
884+
885+ override fun iterator () = results.iterator()
886+ }
887+
836888class PipelineResult
837889internal constructor (
838890 private val firestore: FirebaseFirestore ,
0 commit comments