Example #1
0
        protected override void OnActivate(IResourceScope res)
        {
            this.PropertyChanges()
            .Where(x =>
                   x == nameof(RangeEnd) ||
                   x == nameof(RangeStart))
            .Throttle(TimeSpan.FromMilliseconds(100))
            .Select(x => new { RangeStart, RangeEnd })
            .Subscribe(dataRange =>
            {
                if (dataRange.RangeStart == null && dataRange.RangeEnd == null)
                {
                    return;
                }

                var stats = res.Resolve <IAppStatsStreamService>();
                var appDurationsStream =
                    stats.GetAppDurations(dataRange.RangeStart ?? DateTime.MinValue,
                                          dataRange.RangeEnd); //.Publish();


                AppDurations = appDurationsStream
                               .Select(x =>
                {
                    var appDur = new AppDurationViewModel(x.App);

                    x.Duration
                    .Subscribe(d =>
                    {
                        if (!d.JustStarted)
                        {
                            appDur.Duration += d.Value;
                        }
                    })
                    .ManageUsing(res);

                    return(appDur);
                });
            }).ManageUsing(res);
        }
Example #2
0
        public void PopupOpened()
        {
            if (IsPopupOpen)
            {
                PopupClosed();
            }

            IsPopupOpen = true;

            //TODO http://www.introtorx.com/content/v1.0.10621.0/14_HotAndColdObservables.html#HotAndCold try this later
            Resources = Global.Subscope();
            var stats = Resources.Resolve <IAppStatsStreamService>();

            var appUsageStream = stats.GetAppDurations(DateTime.Today).Publish();

            var hasTotalDur = HasDuration.From(
                () => TotalDuration, x => TotalDuration = x);

            var appIncrementor           = Resources.Resolve <IDurationIncrementor>();
            var totalDurationIncrementor = Resources.Resolve <IDurationIncrementor>();

            //var tagIncrementor = Resources.Resolve<IDurationIncrementor>();

            /*var repo = Resources.Resolve<IDbRepository>();
             *
             * repo.GetIdleDurations(TimeSpan.FromMinutes(1), DateTime.Today)
             *  .Sum(t => (t.End - t.Start).Ticks)
             *  .Select(TimeSpan.FromTicks)
             *  .ObserveOnDispatcher()
             *  .Subscribe(x => IdleTime = x)
             *  .ManageUsing(Resources);*/

            AppDurations = appUsageStream
                           .Select(x =>
            {
                //random bug - this is called even though the popup is closed and this has been disposed
                var appDur = new AppDurationViewModel(x.App);
                if (!IsPopupOpen)
                {
                    return(appDur);
                }

                x.Duration
                .Subscribe(d =>
                {
                    if (!IsPopupOpen)
                    {
                        return;
                    }
                    appDur.DurationIncrement(d, appIncrementor);
                })
                .ManageUsing(Resources);

                return(appDur);
            });

            appUsageStream
            .Select(x => x.Duration)
            .Merge()
            .Subscribe(x =>
            {
                if (!IsPopupOpen)
                {
                    return;
                }
                hasTotalDur.DurationIncrement(x, totalDurationIncrementor);
            });

            /*
             * stats.GetTagDurations(DateTime.Today)
             *  .Select(x =>
             *  {
             *      var tagDur = new TagDurationViewModel(x.Tag);
             *
             *      x.Duration
             *          .Subscribe(d => DurationIncrement(d, tagIncrementor, tagDur))
             *          .ManageUsing(Resources);
             *
             *      return tagDur;
             *  })
             *
             *  //TODO after converter and views are made
             *  .Subscribe(x => TagDurations.Add(x))
             *  .ManageUsing(Resources)
             */

            appUsageStream.Connect()
            .ManageUsing(Resources);
        }