示例#1
0
 void ConflictItems_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
 {
     if (ConflictItems.Any())
     {
         // TODO: navigate to conflicts UI
     }
 }
        private void InitializeQuery()
        {
            Manager.SharedInstance.GetDatabase(DatabaseName)
            .GetView("all-docs")
            .SetMap((doc, emit) =>
            {
                // Create index on '_id' with reference to the document.
                emit(doc["_id"], null);
            }, "ver2");

            Manager.SharedInstance.GetDatabase(DatabaseName)
            .GetView("query-view")
            .SetMap((doc, emit) =>
            {
                if (!doc.ContainsKey("doc") || !doc.ContainsKey("doctype"))
                {
                    return;
                }

                var item = doc["doc"] as JContainer;

                if (item == null)
                {
                    return;
                }

                item.Children()
                .Where(p => p is JProperty)
                .Cast <JProperty>()
                .Select(p => new { name = p.Name, value = p.Value.ToString().ToLower() })
                .ToList()
                .ForEach(prop =>
                {
                    var doctype = doc["doctype"] != null ? doc["doctype"].ToString() : "unknown";
                    var v       = doctype + "::" + prop.name;
                    emit(prop.value, v);
                });
            }
                    , "query2");

            var query = Manager.SharedInstance.GetDatabase(DatabaseName)
                        .GetView("all-docs")
                        .CreateQuery();

            query.Run()
            .ToList()
            .ForEach(row =>
            {
                ProcessDocument(row.Document);
            });

            var liveQuery = Manager.SharedInstance.GetDatabase(DatabaseName)
                            .GetExistingView("all-docs")
                            .CreateQuery()
                            .ToLiveQuery();

            liveQuery.Changed += (object sender, QueryChangeEventArgs e) =>
            {
                var conflicts = e.Rows
                                .Where(item => item.Document.ConflictingRevisions.Any())
                                .Select(item => item.Document)
                ;

                foreach (var item in conflicts)
                {
                    ConflictItems.Add(item);
                }

                Debug.WriteLine("liveQuery.Changed " + e.Rows.Count);
            };

            liveQuery.Start();
        }