/// <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); }
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; } }); }
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); }
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); });