Esempio n. 1
0
        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()));
        }