/// <summary>
        /// Gets the current user bookings from the database
        /// </summary>
        /// <returns>An <c>await</c>able <see cref="Task"/> that will complete when the
        /// first set of results are ready</returns>
        public Task FetchBookings()
        {
            var tcs = new TaskCompletionSource <bool>();

            _bookingQuery = Query
                            .Select(FlightsResult)
                            .From(DataSource.Database(UserSession.Database))
                            .Where(UsernameProperty.EqualTo(UserSession.Username));

            var retVal = tcs.Task;

            _cancelToken = _bookingQuery.AddChangeListener(null, (sender, args) =>
            {
                foreach (var row in args.Rows)
                {
                    var bookings  = row.GetArray("flights");
                    var eventArgs = new BookingsUpdateEventArgs(EnumerateBookings(bookings));
                    BookingsChanged?.Invoke(this, eventArgs);
                }

                var oldTcs = Interlocked.Exchange(ref tcs, null);
                oldTcs?.SetResult(true);
            });

            return(retVal);
        }
示例#2
0
        public List <Path> GetExternalPaths(Action <List <Path> > pathsUpdated)
        {
            List <Path> paths = new List <Path>();

            try
            {
                _pathsQuery = QueryBuilder
                              .Select(SelectResult.All())
                              .From(DataSource.Database(DatabaseManager.Database))
                              .Where((Expression.Property("type").EqualTo(Expression.String("path"))
                                      .And(Expression.Property("createdBy").NotEqualTo(Expression.String(AppInstance.AppId)))));

                if (pathsUpdated != null)
                {
                    _pathsQueryToken = _pathsQuery.AddChangeListener((object sender, QueryChangedEventArgs e) =>
                    {
                        if (e?.Results != null && e.Error == null)
                        {
                            paths = e.Results.AllResults()?.ToObjects <Path>(databaseName) as List <Path>;

                            if (paths != null)
                            {
                                pathsUpdated.Invoke(paths);
                            }
                        }
                    });
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"CanvasRepository GetExternalPaths Exception: {ex.Message}");
            }

            return(paths);
        }
        public List <Hero> GetHeroes(Action <List <Hero> > heroesUpdated)
        {
            var heroes = new List <Hero>();

            try
            {
                _heroesQuery = QueryBuilder
                               .Select(SelectResult.All())
                               .From(DataSource.Database(DatabaseManager.Database))
                               .Where((Expression.Property("type").EqualTo(Expression.String("hero"))));

                if (heroesUpdated != null)
                {
                    _heroesQueryToken = _heroesQuery.AddChangeListener((object sender, QueryChangedEventArgs e) =>
                    {
                        if (e?.Results != null && e.Error == null)
                        {
                            heroes = e.Results.AllResults()?.ToObjects <Hero>() as List <Hero>;

                            if (heroes != null)
                            {
                                heroesUpdated.Invoke(heroes);
                            }
                        }
                    });
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"HeroRepository GetHeroesAsync Exception: {ex.Message}");
            }

            return(heroes);
        }
        private void SetupQuery()
        {
            _db.CreateIndex("byName", IndexBuilder.ValueIndex(ValueIndexItem.Expression(Expression.Property("name"))));

            _filteredQuery = QueryBuilder.Select(SelectResult.Expression(Meta.ID),
                                                 SelectResult.Expression(Expression.Property("name")))
                             .From(DataSource.Database(_db))
                             .Where(Expression.Property("name")
                                    .Like(Expression.Parameter("searchText"))
                                    .And(Expression.Property("type").EqualTo(Expression.String("task-list"))))
                             .OrderBy(Ordering.Property("name"));

            _fullQuery = QueryBuilder.Select(SelectResult.Expression(Meta.ID),
                                             SelectResult.Expression(Expression.Property("name")))
                         .From(DataSource.Database(_db))
                         .Where(Expression.Property("name")
                                .NotNullOrMissing()
                                .And(Expression.Property("type").EqualTo(Expression.String("task-list"))))
                         .OrderBy(Ordering.Property("name"));

            _incompleteQuery = QueryBuilder.Select(SelectResult.Expression(Expression.Property("taskList.id")),
                                                   SelectResult.Expression(Function.Count(Expression.All())))
                               .From(DataSource.Database(_db))
                               .Where(Expression.Property("type").EqualTo(Expression.String(TasksModel.TaskType))
                                      .And(Expression.Property("complete").EqualTo(Expression.Boolean(false))))
                               .GroupBy(Expression.Property("taskList.id"));

            _incompleteQuery.AddChangeListener((sender, args) =>
            {
                _incompleteCount.Clear();
                foreach (var result in args.Results)
                {
                    _incompleteCount[result.GetString(0)] = result.GetInt(1);
                }

                foreach (var row in TasksList)
                {
                    row.IncompleteCount = _incompleteCount.ContainsKey(row.DocumentID)
                        ? _incompleteCount[row.DocumentID]
                        : 0;
                }
            });
        }
示例#5
0
        public List <Item> GetItems(Action <List <Item> > userProfileUpdated)
        {
            List <Item> items = new List <Item>();

            try
            {
                var database = DatabaseManager.Database;

                if (database != null)
                {
                    _userQuery = QueryBuilder
                                 .Select(SelectResult.All())
                                 .From(DataSource.Database(database))
                                 .Where((Expression.Property("type").EqualTo(Expression.String("item"))));
                    //.And(Expression.String("tenant_2").In(Expression.Property("channels"))));

                    if (userProfileUpdated != null)
                    {
                        _userQueryToken = _userQuery.AddChangeListener((object sender, QueryChangedEventArgs e) =>
                        {
                            if (e?.Results != null && e.Error == null)
                            {
                                items = e.Results.AllResults()?.ToObjects <Item>("test") as List <Item>;

                                if (items != null)
                                {
                                    userProfileUpdated.Invoke(items);
                                }
                            }
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"TestRepository Exception: {ex.Message}");
            }

            return(items);
        }
示例#6
0
        public List <Message> GetMessages(Action <List <Message> > messagesUpdated)
        {
            List <Message> messages = new List <Message>();

            try
            {
                var database = DatabaseManager.Database;

                if (database != null)
                {
                    _messagesQuery = QueryBuilder
                                     .Select(SelectResult.All())
                                     .From(DataSource.Database(database))
                                     .Where((Expression.Property("type").EqualTo(Expression.String("message")))
                                            .And((Expression.Property("channel").EqualTo(Expression.String(AppInstance.Channel)))));

                    if (messagesUpdated != null)
                    {
                        _messagesQueryToken = _messagesQuery.AddChangeListener((object sender, QueryChangedEventArgs e) =>
                        {
                            if (e?.Results != null && e.Error == null)
                            {
                                messages = e.Results.AllResults()?.ToObjects <Message>("chatbase") as List <Message>;

                                if (messages != null)
                                {
                                    messagesUpdated.Invoke(messages);
                                }
                            }
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"ChatRepository Exception: {ex.Message}");
            }

            return(messages);
        }
        public static IObservable <IResultSet> Create(IQuery query) =>
        Observable.Create <IResultSet>(observer =>
        {
            var token = query.AddChangeListener((s, e) => OnLiveQueryChanged(e, observer));

            query.Execute();

            var key     = Guid.NewGuid();
            var tracker = new ObservableTracker(key, observer);

            var disposable = Disposable.Create(query, q =>
            {
                q.RemoveChangeListener(token);
                q.Dispose();
                _observers.TryRemove(key, out _);
                _connectionCount.OnNext(_observers.Count);
            });

            tracker.AddDisposable(disposable);
            _observers.TryAdd(key, tracker);
            _connectionCount.OnNext(_observers.Count);

            return(disposable);
        });