public StopDetailViewModel(IMotiveConfiguration motiveConfig, IRepoManager repoManager, INavigation navigation, StopVisit stopVisit) { _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); _stopVisit = stopVisit ?? throw new ArgumentNullException(nameof(stopVisit)); _navigation = navigation ?? throw new ArgumentNullException(nameof(navigation)); _motiveConfig = motiveConfig ?? throw new ArgumentNullException(nameof(motiveConfig)); StopVisit = new StopVisitViewModel(stopVisit); OpenStopNameCommand = new Command(async() => { StopDetailNamePage namePage = new StopDetailNamePage(StopVisit); await OpenPage(namePage); }); OpenStopMotiveCommand = new Command(async() => { StopDetailMotivePage motivePage = new StopDetailMotivePage(Motive); await OpenPage(motivePage); }); DataItems = new ObservableRangeCollection <ListItem>(); StopName = StopNameFromString(StopVisit.Name); CompletedName = !string.IsNullOrEmpty(StopVisit.Name); StopVisit.PropertyChanged += StopVisit_PropertyChanged; if (_motiveConfig.Stops) { PrepareForMotive(); } }
public DaySelectorViewModel(INavigation navigation, IRepoManager repoManager, DateService dateService) { _navigation = navigation ?? throw new ArgumentNullException(nameof(navigation)); _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); _dateService = dateService ?? throw new ArgumentNullException(nameof(dateService)); DataObjects.StopVisit stopVisit = repoManager.StopVisitRepository.First(); DateTimeOffset firstDate = DateTime.Today; if (stopVisit != null) { firstDate = stopVisit.BeginTimestamp; } double days = (DateTime.Today - firstDate.Date).TotalDays; for (int i = 0; i <= days; i++) { DateTime currentDate = DateTime.Today.AddDays(-1 * i); Items.Add(new Day() { Time = currentDate }); } CancelCommand = new Command(async() => { Analytics.TrackEvent("Cancel dayselector clicked"); await _navigation.PopModalAsync(); }); }
public TransportSelectionViewModel(IRepoManager repoManager, INavigation navigation, ITransportationModeConfiguration transportConfiguration, TrackEntry trackEntry) { _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); _navigation = navigation ?? throw new ArgumentNullException(nameof(navigation)); _trackEntry = trackEntry ?? throw new ArgumentNullException(nameof(trackEntry)); _transportConfig = transportConfiguration ?? throw new ArgumentNullException(nameof(transportConfiguration)); Items = new SelectableObservableCollection <TransportModeItem>(); SaveCommand = new Command(async() => { FinishedTransportSelection(); await _navigation.PopModalAsync(); }); CancelCommand = new Command(async() => { await _navigation.PopModalAsync(); }); CustomTransportModeCommand = new Command(async() => { await _navigation.PushModalAsync(new NavigationPage(new CustomTransportSelectionPage(Items))); }); SetActualTransportModes(); }
public void TimeKeeperSetDone() { Mock <IRepoManager> mockRepo = new Mock <IRepoManager>(); IRepoManager repoManager = mockRepo.Object; Mock <IUploadEntryRepository> ueRep = new Mock <IUploadEntryRepository>(); UploadEntry addedUploadEntry = null; mockRepo.Setup(x => x.UploadEntryRepository).Returns(ueRep.Object); ueRep.Setup(x => x.Add(It.IsAny <UploadEntry>())).Callback((UploadEntry ue) => addedUploadEntry = ue); ISyncTimeKeeper tk = new SyncTimeKeeper(repoManager); DateTimeOffset now = DateTimeOffset.Now; tk.SetDone(UploadType.Attribute, now, 10); mockRepo.Verify(x => x.UploadEntryRepository); ueRep.Verify(x => x.Add(It.IsAny <UploadEntry>())); Assert.Equal(10, addedUploadEntry.Count); Assert.Equal(now, addedUploadEntry.Timestamp); Assert.Equal(UploadType.Attribute, addedUploadEntry.Type); }
public void TimeKeeperGetPreviousDone() { Mock <IRepoManager> mockRepo = new Mock <IRepoManager>(); IRepoManager repoManager = mockRepo.Object; Mock <IUploadEntryRepository> ueRep = new Mock <IUploadEntryRepository>(); UploadEntry resultUploadEntry = new UploadEntry { Count = 10, Timestamp = DateTimeOffset.Now, Type = UploadType.Attribute, }; mockRepo.Setup(x => x.UploadEntryRepository).Returns(ueRep.Object); ueRep.Setup(x => x.GetLastUploadEntry(UploadType.Attribute)).Returns(resultUploadEntry); ISyncTimeKeeper tk = new SyncTimeKeeper(repoManager); DateTimeOffset resultDto = tk.GetPreviousDone(UploadType.Attribute); mockRepo.Verify(x => x.UploadEntryRepository); ueRep.Verify(x => x.GetLastUploadEntry(UploadType.Attribute)); Assert.Equal(resultUploadEntry.Timestamp, resultDto); }
public SensorManagerImplementation(IRepoManager repoManager, CMMotionManager motionManager, CLLocationManager locationManager, CMPedometer pedometer) { _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); _motionManager = motionManager ?? throw new ArgumentNullException(nameof(motionManager)); _locationManager = locationManager ?? throw new ArgumentNullException(nameof(locationManager)); _pedometer = pedometer ?? throw new ArgumentNullException(nameof(pedometer)); _queue = new NSOperationQueue(); _sensorMeasurementSessionRepository = _repoManager.SensorMeasurementSessionRepository; _accelerometerRepository = _repoManager.AccelerometerRepository; _gyroscoperRepository = _repoManager.GyroscopeRepository; _magnetometerRepository = _repoManager.MagnetometerRepository; _linearAccelerationRepository = _repoManager.LinearAccelerationRepository; _orientationRepository = _repoManager.OrientationRepository; _quaternionRepository = _repoManager.QuaternionRepository; _gravityRepository = _repoManager.GravityRepository; locationManager.DesiredAccuracy = CLLocation.AccuracyBest; locationManager.HeadingFilter = 1; locationManager.AllowsBackgroundLocationUpdates = true; motionManager.DeviceMotionUpdateInterval = 0.1; motionManager.AccelerometerUpdateInterval = 0.1; motionManager.GyroUpdateInterval = 0.1; motionManager.MagnetometerUpdateInterval = 0.1; }
public TrackDetailViewModel(IRepoManager repoManager, INavigation navigation, IMotiveConfiguration motiveConfig, TrackEntry trackEntry) { _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); _navigation = navigation ?? throw new ArgumentNullException(nameof(navigation)); _trackEntry = trackEntry ?? throw new ArgumentNullException(nameof(trackEntry)); _motiveConfig = motiveConfig ?? throw new ArgumentNullException(nameof(Motive)); TransportationModeEntry modeEntry = _repoManager.TransportationModeRepository.GetLastWithTrackEntry(_trackEntry.Id); TransportModeSelectionCommand = new Command(async() => { await _navigation.PushModalAsync(new NavigationPage(new TransportSelectionPage(_trackEntry))); }); OpenTrackMotiveCommand = new Command(async() => { TrackDetailMotivePage motivePage = new TrackDetailMotivePage(Motive); await _navigation.PushModalAsync(new NavigationPage(motivePage)); }); DataItems = new ObservableRangeCollection <ListItem>(); if (_motiveConfig.Tracks) { PrepareForMotive(); } CompletedTransport = modeEntry != null; }
public SensorMeasurementSessionService() { _repoManager = App.Container.Resolve <IRepoManager>(); _sensorMeasurementSessionRepository = _repoManager.SensorMeasurementSessionRepository; _sensorMeasurementSession = new SensorMeasurementSession(); }
public SensorService() { _repoManager = App.Container.Resolve <IRepoManager>(); _accelerometerRepository = _repoManager.AccelerometerRepository; _gyroscopeRepository = _repoManager.GyroscopeRepository; _magnetometerRepository = _repoManager.MagnetometerRepository; }
public TrackDetailMotiveViewModel(IRepoManager repoManager, INavigation navigation, ITabiConfiguration configuration, TrackMotiveViewModel motiveViewModel, MotiveSelectionViewModel motiveSelectionViewModel) : base(repoManager, navigation, configuration, motiveSelectionViewModel) { Motive = motiveViewModel ?? throw new ArgumentNullException(nameof(motiveViewModel)); SetupMotives(); }
public GoogleLocationServicesAPI() { _repoManager = App.Container.Resolve <IRepoManager>(); _batteryHelper = App.Container.Resolve <BatteryHelper>(); positionEntryRepository = _repoManager.PositionEntryRepository; currentProfile = App.CollectionProfile.AndroidProfile; }
public SensorFusionService() { // TODO Service locator style. Use constructor injection. Not possible at the moment // because this service is instantiated by android. _repoManager = App.Container.Resolve <IRepoManager>(); _linearAccelerationRepository = _repoManager.LinearAccelerationRepository; _orientationRepository = _repoManager.OrientationRepository; _quaternionRepository = _repoManager.QuaternionRepository; _gravityRepository = _repoManager.GravityRepository; }
public DataResolver(IRepoManager repoManager, IStopResolver stopResolver) { _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); _stopResolver = stopResolver ?? throw new ArgumentNullException(nameof(stopResolver)); _positionEntryRepository = _repoManager.PositionEntryRepository; _trackEntryRepository = _repoManager.TrackEntryRepository; _stopVisitRepository = _repoManager.StopVisitRepository; _stopRepository = _repoManager.StopRepository; _accuracy = 10000; }
private RepoWorker( IRepoManager repoManager, string workerName, IPullRequestAnalyzer prAnalyzer, IRepositoryAnalyzer repoAnalyzer, IHistoricalAnalysisManager analysisManager, IClock clock, ILogger logger) { _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); Name = workerName; _prAnalyzer = prAnalyzer ?? throw new ArgumentNullException(nameof(prAnalyzer)); _repoAnalyzer = repoAnalyzer ?? throw new ArgumentNullException(nameof(repoAnalyzer)); _analysisManager = analysisManager ?? throw new ArgumentNullException(nameof(analysisManager)); _clock = clock ?? throw new ArgumentNullException(nameof(clock)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); }
public void TimeKeeperMockStoresTime() { Mock <IRepoManager> mockRepo = new Mock <IRepoManager>(); IUploadEntryRepository ueRep = new MockUploadEntryRepository(); mockRepo.Setup(r => r.UploadEntryRepository).Returns(ueRep); IRepoManager repoManager = mockRepo.Object; ISyncTimeKeeper tk = new SyncTimeKeeper(repoManager); DateTimeOffset now = DateTimeOffset.Now; tk.SetDone(UploadType.Attribute, now, 10); DateTimeOffset previousDone = tk.GetPreviousDone(UploadType.Attribute); Assert.Equal(now, previousDone); }
protected DetailMotiveViewModel(IRepoManager repoManager, INavigation navigation, ITabiConfiguration configuration, MotiveSelectionViewModel motiveSelectionViewModel) { _navigation = navigation ?? throw new ArgumentNullException(nameof(navigation)); _motiveSelectionViewModel = motiveSelectionViewModel ?? throw new ArgumentNullException(nameof(motiveSelectionViewModel)); _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); SaveCommand = new Command(Save); CancelCommand = new Command(async() => { ResetViewModel(); await PopPageAsync(); }); _motiveSelectionViewModel.PropertyChanged += _motiveSelectionViewModel_PropertyChanged; PossibleMotives = new ObservableRangeCollection <MotiveOptionViewModel>(); }
public LocationManagerImplementation(IRepoManager repoManager, ProfileiOS profile, BatteryHelper batteryHelper) { _currentProfile = profile ?? throw new ArgumentNullException(nameof(profile)); _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); _batteryHelper = batteryHelper ?? throw new ArgumentNullException(nameof(batteryHelper)); _significantLocationManager = new CLLocationManager(); _significantLocationManager.LocationsUpdated += _significantLocationManager_LocationsUpdated; _significantLocationManager.AllowsBackgroundLocationUpdates = true; _clManager = new CLLocationManager(); _clManager.LocationsUpdated += ClManager_LocationsUpdated; _clManager.RegionLeft += _clManager_RegionLeft; _clManager.DeferredUpdatesFinished += ClManagerOnDeferredUpdatesFinished; _clManager.AuthorizationChanged += ClManager_AuthorizationChanged; _listenLocationManager = new CLLocationManager(); _clManager.DesiredAccuracy = CLLocation.AccuracyThreeKilometers; _clManager.ActivityType = CLActivityType.Fitness; _positionEntryRepo = _repoManager.PositionEntryRepository; _motionEntryRepo = _repoManager.MotionEntryRepository; }
public DayCommentViewModel(INavigation navigation, DateService dateService, IRepoManager repoManager) { _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); _dateService = dateService ?? throw new ArgumentNullException(nameof(dateService)); SaveCommand = new Command(async() => { _repoManager.QuestionRepository.Add(new Question() { QuestionKey = NotesQuestion, QuestionDate = _dateService.SelectedDay.Time, Answer = Notes, Timestamp = DateTimeOffset.Now }); _repoManager.QuestionRepository.Add(new Question() { QuestionKey = TravelQuestion, QuestionDate = _dateService.SelectedDay.Time, Answer = SaveItemsToString(TravelItems), Timestamp = DateTimeOffset.Now }); _repoManager.QuestionRepository.Add(new Question() { QuestionKey = PhoneQuestion, QuestionDate = _dateService.SelectedDay.Time, Answer = SaveItemsToString(PhoneItems), Timestamp = DateTimeOffset.Now }); await navigation.PopAsync(); }); CancelCommand = new Command(async() => { await navigation.PopAsync(); }); TravelItems.Add(new SelectionKeyItem() { Key = "NoSpecial", Item = AppResources.NoSpecialQuestionAnswerLabel }); TravelItems.Add(new SelectionKeyItem() { Key = "NotApplicable", Item = AppResources.NotApplicableQuestionAnswerLabel }); TravelItems.Add(new SelectionKeyItem() { Key = "DifferentAddresses", Item = AppResources.DifferentAddressesQuestionAnswerLabel }); TravelItems.Add(new SelectionKeyItem() { Key = "DifferentTransportModes", Item = AppResources.DifferentTransportModesQuestionAnswerLabel }); TravelItems.Add(new SelectionKeyItem() { Key = "DifferentTravelTimes", Item = AppResources.DifferentTravelTimesQuestionAnswerLabel }); TravelItems.Add(new SelectionKeyItem() { Key = "DifferentTravelDuration", Item = AppResources.DifferentTravelDurationQuestionAnswerLabel }); TravelItems.Add(new SelectionKeyItem() { Key = "DifferentTravelRoutes", Item = AppResources.DifferentTravelRoutesQuestionAnswerLabel }); PhoneItems.Add(new SelectionKeyItem() { Key = "TRUE", Item = AppResources.YesQuestionAnswerLabel }); PhoneItems.Add(new SelectionKeyItem() { Key = "FALSE", Item = AppResources.NoQuestionAnswerLabel }); }
public RouteTracker(IRepoManager repoManager) { _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); }
public SyncService(ApiClient apiClient, IRepoManager repoManager) { _apiClient = apiClient ?? throw new ArgumentNullException(nameof(apiClient)); _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); }
public SettingsViewModel(TabiConfiguration config, INavigation navigation, IRepoManager repoManager, SyncService syncService, DataResolver dataResolver) { _navigation = navigation ?? throw new ArgumentNullException(nameof(navigation)); _config = config ?? throw new ArgumentNullException(nameof(config)); _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); _dataResolver = dataResolver ?? throw new ArgumentNullException(nameof(dataResolver)); _syncService = syncService ?? throw new ArgumentNullException(nameof(syncService)); ExportDatabaseCommand = new Command(async key => { Log.Info("Command: Exporting database"); IFolder rootFolder = PCLStorage.FileSystem.Current.LocalStorage; var t = await rootFolder.GetFileAsync("tabi.db"); DependencyService.Get <IShareFile>().ShareFile(t.Path); }); DropDatabaseCommand = new Command(async() => { Log.Info("Command: Dropping database"); var answer = await Application.Current.MainPage.DisplayAlert("Confirm", "Drop database?", "Yes", "Cancel"); if (answer) { //SQLiteHelper.Instance.ClearPositions(); } }); InfoCommand = new Command((obj) => { InfoCount++; if (InfoCount == 10 && App.Developer) { Settings.Developer = true; InfoCount = 0; } }); ExportKMLCommand = new Command(async key => { Log.Info("Command: Export KML"); //IFolder rootFolder = FileSystem.Current.LocalStorage; //string fileName = "Tabi-Export.kml"; //IFile file = await rootFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); ////Repository<Position> posRepo = new Repository<Position>(SQLiteHelper.Instance.Connection); //var result = await posRepo.Get(p => p.Accuracy < 100, x => x.Timestamp); //string kml = GeoUtil.GeoSerialize(result); //await file.WriteAllTextAsync(kml); //DependencyService.Get<IShareFile>().ShareFile(file.Path); }); ExportCSVCommand = new Command(async key => { Log.Info("Command: Export CSV"); IFolder rootFolder = PCLStorage.FileSystem.Current.LocalStorage; string fileName = "Tabi-Export.txt"; string path = PortablePath.Combine(rootFolder.Path, fileName); IFile file = await rootFolder.CreateFileAsync(path, CreationCollisionOption.ReplaceExisting); IPositionEntryRepository positionEntryRepository = _repoManager.PositionEntryRepository; var result = positionEntryRepository.FilterAccuracy(100).ToList(); Stream stream = await file.OpenAsync(FileAccess.ReadAndWrite); GeoUtil.PositionsToCsv(result, stream); DependencyService.Get <IShareFile>().ShareFile(path, "text/csv"); }); ExportBatteryCSVCommand = new Command(async key => { Log.Info("Command: Export Battery CSV"); IFolder rootFolder = PCLStorage.FileSystem.Current.LocalStorage; string fileName = "Tabi-Export-Battery.txt"; string path = PortablePath.Combine(rootFolder.Path, fileName); IFile file = await rootFolder.CreateFileAsync(path, CreationCollisionOption.ReplaceExisting); var batteryEntryRepo = _repoManager.BatteryEntryRepository; var result = batteryEntryRepo.GetAll().ToList(); Stream stream = await file.OpenAsync(FileAccess.ReadAndWrite); using (TextWriter tw = new StreamWriter(stream)) { var csv = new CsvWriter(tw); csv.Configuration.RegisterClassMap <BatteryEntryMap>(); csv.WriteRecords(result); } DependencyService.Get <IShareFile>().ShareFile(path, "text/csv"); }); ClearStopsCommand = new Command((obj) => { _repoManager.StopVisitRepository.ClearAll(); _repoManager.TrackEntryRepository.ClearAll(); }); OpenLogsCommand = new Command((obj) => { LogsPage page = new LogsPage(); _navigation.PushAsync(page); }); LoadSampleCommand = new Command(async() => { DummyDbLoader dummy = new DummyDbLoader(); await dummy.LoadAsync(); }); ShowMockupCommand = new Command(() => { var assembly = typeof(SettingsViewModel).GetTypeInfo().Assembly; using (Stream stream = assembly.GetManifestResourceStream("Tabi.DemoCsv")) { List <PositionEntry> entries = GeoUtil.CsvToPositions(stream).ToList(); _dataResolver.ResolveData(DateTimeOffset.MinValue, DateTimeOffset.Now); //var x = sv.GroupPositions(entries, 100); //var z = sv.DetermineStopVisits(x, null); //Log.Debug(z.ToString()); } // ActivityOverviewMockupPage sPage = new ActivityOverviewMockupPage(); // navigationPage.PushAsync(sPage); }); ShowPageCommand = new Command(() => { TourVideoPage sPage = new TourVideoPage(); _navigation.PushModalAsync(sPage); }); ShowTourCommand = new Command(async() => { Page tPage = new TourVideoPage(); Analytics.TrackEvent("ShowTour clicked"); await _navigation.PushModalAsync(tPage); }); PrivacyDataCommand = new Command(async() => { Analytics.TrackEvent("Privacy & data settings clicked"); await _navigation.PushAsync(new SettingsPrivacyPage(this)); }); AppAboutCommand = new Command(async() => { Analytics.TrackEvent("Privacy & data settings clicked"); await _navigation.PushAsync(new AboutSettings(this)); }); SendSupportCallCommand = new Command(async() => { try { PhoneDialer.Open(_config.Support.PhoneNumber); } catch (ArgumentNullException ex) { await UserDialogs.Instance.AlertAsync(AppResources.ErrorOccurredTitle, okText: AppResources.OkText); Log.Error(ex); } catch (FeatureNotSupportedException ex) { await UserDialogs.Instance.AlertAsync(AppResources.DeviceUnsupportedText, AppResources.DeviceUnsupportedTitle, AppResources.OkText); Log.Error(ex); } catch (Exception ex) { await UserDialogs.Instance.AlertAsync(AppResources.ErrorOccurredTitle, AppResources.OkText); Log.Error(ex); } }); SendSupportEmailCommand = new Command(async() => { string subject = _config.Support.EmailSubject ?? "Tabi app"; StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine(" "); stringBuilder.AppendLine("=========================="); stringBuilder.AppendLine($"{_config.App.AppName} app"); stringBuilder.AppendLine($"Version: {VersionTracking.CurrentVersion} ({VersionTracking.CurrentBuild})"); stringBuilder.AppendLine($"Platform: {DeviceInfo.Platform} ({DeviceInfo.VersionString})"); stringBuilder.AppendLine($"Model: {DeviceInfo.Manufacturer} ({DeviceInfo.Model})"); stringBuilder.AppendLine($"API URL: {_config.Api.Url}"); stringBuilder.AppendLine($"Client Id: {_config.Api.ClientIdentifier}"); stringBuilder.AppendLine($"Device ID: {Settings.Device}"); stringBuilder.AppendLine($"Username: {Settings.Username}"); List <string> to = new List <string>() { _config.Support.Email }; try { var message = new EmailMessage { Subject = subject, Body = stringBuilder.ToString(), To = to, }; await Email.ComposeAsync(message); } catch (FeatureNotSupportedException ex) { await UserDialogs.Instance.AlertAsync(AppResources.DeviceUnsupportedText, AppResources.DeviceUnsupportedTitle, AppResources.OkText); Log.Error(ex); } catch (Exception ex) { Log.Error(ex); } }); OpenSupportWebsiteCommand = new Command(async() => { await Browser.OpenAsync(_config.Support.Url); }); LicensesCommand = new Command(async() => { await Browser.OpenAsync(_config.App.LicensesUrl); }); AgreementCommand = new Command(async() => { await Browser.OpenAsync(_config.App.AgreementUrl); }); UploadCommand = new Command(async() => { Analytics.TrackEvent("Upload clicked"); // Check if there is an active internet connection if (CrossConnectivity.Current.IsConnected) { bool wifiAvailable = CrossConnectivity.Current.ConnectionTypes.Contains(Plugin.Connectivity.Abstractions.ConnectionType.WiFi); bool upload = !Settings.WifiOnly || wifiAvailable; // Check if connected to WiFI if (!upload) { upload = await UserDialogs.Instance.ConfirmAsync(AppResources.MobileDataUsageText, AppResources.MobileDataUsageTitle, AppResources.ContinueButton, AppResources.CancelText); } if (upload) { UserDialogs.Instance.ShowLoading(AppResources.UploadDataInProgress, MaskType.Black); // Check if the API is available (within 5 seconds). // Display message to user if api is unavailable. bool available = await _syncService.Ping(5); if (!available) { UserDialogs.Instance.HideLoading(); await UserDialogs.Instance.AlertAsync(AppResources.APIUnavailableText, AppResources.APIUnavailableTitle, AppResources.OkText); return; } try { await _syncService.UploadAll(false); UserDialogs.Instance.HideLoading(); Settings.LastUpload = DateTime.Now.Ticks; UserDialogs.Instance.Toast(AppResources.DataUploadSuccesful); } catch (Exception e) { UserDialogs.Instance.HideLoading(); await UserDialogs.Instance.AlertAsync(AppResources.UploadDataErrorText, AppResources.ErrorOccurredTitle, AppResources.OkText); Log.Error($"UploadAll exception {e.Message}: {e.StackTrace}"); } } } else { UserDialogs.Instance.HideLoading(); // Show user a message that there is no internet connection await UserDialogs.Instance.AlertAsync(AppResources.NoInternetConnectionText, AppResources.NoInternetConnectionTitle, AppResources.OkText); } }); Settings.PropertyChanged += Settings_PropertyChanged; }
public BatteryHelper(IRepoManager repoManager) { _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); }
public SyncTimeKeeper(IRepoManager repoManager) { _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); }
public DayMapViewModel(IRepoManager repoManager) { _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); }
public StopDetailNameViewModel(IRepoManager repoManager, INavigation navigation, IUserInterfaceConfiguration userInterfaceConfiguration, StopVisitViewModel stopVisitViewModel) { _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); _navigation = navigation ?? throw new ArgumentNullException(nameof(navigation)); _stopVisitViewModel = stopVisitViewModel ?? throw new ArgumentNullException(nameof(stopVisitViewModel)); _userInterfaceConfiguration = userInterfaceConfiguration ?? throw new ArgumentNullException(nameof(userInterfaceConfiguration)); SaveCommand = new Command(async() => { saved = true; Stop newStop = StopVisit.SaveViewModelToStop(); if (useExistingStop != null) { stopVisitViewModel.StopVisit.StopId = useExistingStop.Id;; } else if (ChangeAll && nameChanged) { newStop.Id = stopVisitViewModel.StopVisit.StopId; stopVisitViewModel.StopVisit.Stop = newStop; repoManager.StopRepository.Update(newStop); } else if (nameChanged) { // Add to repo and newStop will have an ID set repoManager.StopRepository.Add(newStop); stopVisitViewModel.StopVisit.StopId = newStop.Id; stopVisitViewModel.StopVisit.Stop = newStop; } repoManager.StopVisitRepository.Update(stopVisitViewModel.StopVisit); await PopPageAsync(); }); CancelCommand = new Command(async() => { StopVisit.ResetViewModel(); await PopPageAsync(); }); ChangeAllVisible = ShouldChangeAllBeVisible(); if (ChangeAllVisible) { changeAll = true; } StopVisit.PropertyChanged += NameChanged; if (_userInterfaceConfiguration.StopNameReplaceAllEnabled) { // Only show the list of possible nearby stops if there are more than 1 stops nearby. int existingStopVisits = _repoManager.StopVisitRepository.MatchingStop(stopVisitViewModel.StopVisit.Stop).ToList().Count; if (existingStopVisits > 1) { changeAllVisible = true; changeAll = true; } } if (_userInterfaceConfiguration.SuggestPossibleNearbyStopsEnabled) { PossibleStops = ListNearbyStops(stopVisitViewModel, _userInterfaceConfiguration.SuggestPossibleNearbyStopsDistance); PossibleStopsVisible = PossibleStops.Count >= _userInterfaceConfiguration.SuggestPossibleNearbyStopsCount; } }
public static async Task <RepoWorker> InitializeAsync( IRepoManager repoManager, IPullRequestAnalyzer prAnalyzer, IRepositoryAnalyzer repoAnalyzer, IHistoricalAnalysisManager analysisManager, IClock clock, ILogger logger) { if (repoManager is null) { throw new ArgumentNullException(nameof(repoManager)); } if (prAnalyzer is null) { throw new ArgumentNullException(nameof(prAnalyzer)); } if (repoAnalyzer is null) { throw new ArgumentNullException(nameof(repoAnalyzer)); } if (analysisManager is null) { throw new ArgumentNullException(nameof(analysisManager)); } if (clock is null) { throw new ArgumentNullException(nameof(clock)); } if (logger is null) { throw new ArgumentNullException(nameof(logger)); } var name = $"{repoManager.RepoOwner}:{repoManager.RepoName}"; // Analysis steps // 1a) Find metrics for where the set of analyzers has differed // 1b) Recompute those metrics // 1c) Overwrite the old metric snapshots // 2a) Find things known to the cache, but that haven't been analyzed // 2b) Analyze this new stuff // 2c) Write down the new snapshot var cachedPullRequestByNumber = (await repoManager.GetPullRequestsAsync()) .ToDictionary(pr => pr.Number); var previousMetrics = (await analysisManager.LoadHistoryAsync(repoManager.RepoOwner, repoManager.RepoName)) ?? new List <MetricSnapshot>(); var previousPullRequestMetricsByNumber = previousMetrics .SelectMany(m => m.PullRequestMetrics.Values) .ToDictionary(pr => pr.Number); // 1a) Find metrics for where the set of analyzers has differed var previouslyComputedButHasChanged = previousMetrics .Where(m => !m.Scorers.SetEquals(prAnalyzer.Scorers)) .ToList(); // 2a) Find things known to the cache, but that haven't been analyzed var cachedButNotAnalyzed = cachedPullRequestByNumber .Where(pr => !previousPullRequestMetricsByNumber.ContainsKey(pr.Key)) .Select(pr => pr.Key) .ToList(); var worker = new RepoWorker(repoManager, name, prAnalyzer, repoAnalyzer, analysisManager, clock, logger); var analysisToBeDone = previouslyComputedButHasChanged.Any() || cachedButNotAnalyzed.Any(); if (!analysisToBeDone) { return(worker); } // 1b) Recompute those metrics var toBeSaved = new List <MetricSnapshot>(); if (previouslyComputedButHasChanged.Any()) { var now = clock.DateTimeOffsetUtcNow(); var scorers = prAnalyzer.Scorers.ToHashSet(); foreach (var originalMetric in previouslyComputedButHasChanged) { var prMetrics = originalMetric.PullRequestMetrics .Select(prMetric => prMetric.Value.Number) .Select(nbr => cachedPullRequestByNumber[nbr]) .Select(prAnalyzer.CalculatePullRequestMetrics) .ToList(); var replacements = repoAnalyzer.CalculateRepositoryMetricsOverTime(prMetrics); foreach (var replacement in replacements) { replacement.CreatedAt = originalMetric.CreatedAt; replacement.UpdatedAt = now; replacement.Scorers = scorers; replacement.Owner = repoManager.RepoOwner; replacement.Name = repoManager.RepoName; replacement.Url = repoManager.RepoUrl; } toBeSaved.AddRange(replacements); } } if (cachedButNotAnalyzed.Any()) { // 2b) Analyze this new stuff var now = clock.DateTimeOffsetUtcNow(); var newPullRequestMetrics = cachedButNotAnalyzed .Select(nbr => cachedPullRequestByNumber[nbr]) .Select(prAnalyzer.CalculatePullRequestMetrics) .ToList(); var newRepoMetrics = repoAnalyzer.CalculateRepositoryMetricsOverTime(newPullRequestMetrics); var prAnalyzers = prAnalyzer.Scorers.ToHashSet(); foreach (var newRepoMetric in newRepoMetrics) { newRepoMetric.CreatedAt = now; newRepoMetric.UpdatedAt = now; newRepoMetric.Scorers = prAnalyzers; newRepoMetric.Owner = repoManager.RepoOwner; newRepoMetric.Name = repoManager.RepoName; newRepoMetric.Url = repoManager.RepoUrl; } toBeSaved.AddRange(newRepoMetrics); } // 1c) Overwrite the old metric snapshots // 2c) Write down the new snapshot await analysisManager.SaveAsync(toBeSaved); return(worker); }
public DbLogWriter(IRepoManager repoManager, LogSeverity logLevel = LogSeverity.Info) : base() { _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager)); _severity = logLevel; }