예제 #1
0
파일: AppDelegate.cs 프로젝트: hdir/ga10
        public override async void PerformFetch(UIApplication application, Action <UIBackgroundFetchResult> completionHandler)
        {
            Analytics.TrackEvent(TrackingEvents.BackgroundEvents.BackgroundFetch);

            //NOTE: We know. Lazy loading of service for platform specific version
#pragma warning disable CS0436 // Type conflicts with imported type
            IWalkingDataService walkingDataService = CrossWalkingDataService.Current;
            IUpdateService      updateService      = CrossUpdateService.Current;
#pragma warning restore CS0436 // Type conflicts with imported type

            CrossServiceContainer.SetWalkingDataService(walkingDataService);
            CrossServiceContainer.SetUpdateService(updateService);

            Console.WriteLine("Background Fetch running updateService: " + updateService.ToString());

            var result        = UIBackgroundFetchResult.NoData;
            var minutesBefore = walkingDataService.GetTodaysHistory().minutesBriskWalkToday +
                                walkingDataService.GetTodaysHistory().minutesRegularWalkToday;
            try {
                await updateService.UpdateAllDataServices();

                var minutesAfter = walkingDataService.GetTodaysHistory().minutesBriskWalkToday +
                                   walkingDataService.GetTodaysHistory().minutesRegularWalkToday;;
                if (minutesBefore != minutesAfter)
                {
                    result = UIBackgroundFetchResult.NewData;
                }
            }
            catch
            {
                Crashes.TrackError(new BackgroundException(UIBackgroundFetchResult.Failed.ToString()));
                result = UIBackgroundFetchResult.Failed;
            }

            var output = "Ran background fetch with result: " + Enum.GetName(typeof(UIBackgroundFetchResult), result);
#if DEBUG
            LiveLogService.Current.LogLine(output);
#endif
            completionHandler(result);
            Analytics.TrackEvent(TrackingEvents.Background, new TrackingEvents.BackgroundArgs(result.ToString()));
        }
예제 #2
0
        public async Task UpdateAllDataServices()
        {
            Debug.WriteLine($"Updating all data services in mode: {currentUpdateMode}");

            try
            {
                IWalkingDataService walkingDataService = CrossServiceContainer.WalkingDataService;

                if (!walkingDataService.GetIsConnectedToOSService())
                {
                    walkingDataService.ConnectToOSService();
                    return;
                }

                TodaysWalkingModel todaysWalking = null;

                if (walkingDataService != null)
                {
                    await walkingDataService.RequestUpdate();

                    todaysWalking = walkingDataService.GetTodaysHistory();
                }

                IGoalService goalService = GoalService.Current;

                if (goalService != null && todaysWalking != null)
                {
                    if (await goalService.CheckIfGoalCompleted(todaysWalking))
                    {
                        if (!App.IsForeground && Settings.WillSendNotifications)
                        {
                            var id = (Config.NotificationIdGoal + (int)Settings.CurrentGoal);
                            CrossLocalNotifications.Current.Show(AppText.notification_title, AppText.notification_goal_reached, id);
                            Analytics.TrackEvent(TrackingEvents.BackgroundEvents.NotificationSent);
                        }
                    }
                }

                IAchievementService achievementService = AchievementService.Current;

                if (achievementService != null && todaysWalking != null)
                {
                    //await achievementService.CheckAllAchievementsCriteria(todaysWalking);
                    await achievementService.CheckTieredAchievementsProgress(todaysWalking);
                }

                var lastWalkingDateEventDate = Settings.LastWalkingDataEventDate;
                if (lastWalkingDateEventDate.AddDays(1) < DateTime.Today)
                {
                    IStorageService storageService = StorageService.Current;
                    if (storageService != null)
                    {
                        var days = await storageService.GetWalkingDaysSinceInclusive(lastWalkingDateEventDate.AddDays(1));

                        var today       = DateTime.Today;
                        var daysToTrack = days.Where(d => Settings.LastWalkingDataEventDate < d.Day && d.Day < today);
                        foreach (var d in daysToTrack)
                        {
                            Analytics.TrackEvent(TrackingEvents.BriskWalking, new TrackingEvents.WalkingDataArgs(d.Day.DayOfWeek, d.MinutesBriskWalking));
                            Analytics.TrackEvent(TrackingEvents.RegularWalking, new TrackingEvents.WalkingDataArgs(d.Day.DayOfWeek, d.MinutesRegularWalking));

                            Analytics.TrackEvent(TrackingEvents.WalkingRaw, new TrackingEvents.WalkingRawDataArgs(d.Day.Date, d.MinutesBriskWalking, d.MinutesRegularWalking, d.MinutesUnknownWalking, Settings.UserHeight));
                        }
                        //Last date stored is always today - 1
                        Settings.LastWalkingDataEventDate = today.AddDays(-1);

                        // log history
                        var all = await storageService.GetWalkingDaysSinceInclusive(DateTime.MinValue);

                        Analytics.TrackEvent(TrackingEvents.DailyHistory, new TrackingEvents.WalkingDataArgs(all));
                    }
                }
                UpdateCompleted?.Invoke();
            }
            catch (Exception e)
            {
#if DEBUG
                Device.BeginInvokeOnMainThread(() => throw e);
#else
                Crashes.TrackError(e);
#endif
            }
        }