public override IObservable <HttpTransfer> WhenUpdated() { // TODO: cancel/error, should remove from db var query = new QueryFilter().ToNative(); this.httpObs = this.httpObs ?? Observable .Create <HttpTransfer>(ob => { var lastRun = DateTime.UtcNow; var disposer = new CompositeDisposable(); HttpTransferBroadcastReceiver .HttpEvents .Subscribe(ob.OnNext) .DisposedBy(disposer); Observable .Interval(TimeSpan.FromSeconds(2)) .Subscribe(_ => { using (var cursor = this.context.GetManager().InvokeQuery(query)) { while (cursor.MoveToNext()) { var lastModEpoch = cursor.GetLong(cursor.GetColumnIndex(Native.ColumnLastModifiedTimestamp)); var epoch = DateTimeOffset.FromUnixTimeMilliseconds(lastModEpoch); if (epoch > lastRun) { var transfer = cursor.ToLib(); ob.OnNext(transfer); } } } lastRun = DateTime.UtcNow; }) .DisposedBy(disposer); return(disposer); }) .Publish() .RefCount(); return(this.httpObs.Merge(base.WhenUpdated())); }