/// <summary> /// Asks user if locations or tracks should be imported /// </summary> /// <param name="geoDataFile">geo data file to import from</param> /// <returns>task to wait on</returns> private static async Task AskUserImportLocationsOrTracks(IGeoDataFile geoDataFile) { string question = "What do you want to import?"; var choices = new string[2] { "Import Locations", "Import Tracks" }; string choice = await App.Current.MainPage.DisplayActionSheet( question, null, null, choices[0], choices[1]); if (choice == choices[0]) { await ImportLocationListAsync(geoDataFile.LoadLocationList()); } else if (choice == choices[1]) { await SelectAndImportTrackAsync(geoDataFile); } }
/// <summary> /// Selects a single file in the track list and imports the track /// </summary> /// <param name="geoDataFile">geo data file to import from</param> /// <returns>true when loading track was successful, false when not</returns> private static async Task <bool> SelectAndImportTrackAsync(IGeoDataFile geoDataFile) { var trackList = geoDataFile.GetTrackList(); if (trackList.Count == 1) { return(await ImportTrackAsync(geoDataFile, 0)); } string question = "Select track to import"; var choices = new List <string>(); int count = 0; foreach (var trackName in trackList) { count++; choices.Add($"{count}. {trackName}"); } string choice = await App.Current.MainPage.DisplayActionSheet( question, "Cancel", null, choices.ToArray()); int index = choices.IndexOf(choice); if (index != -1) { return(await ImportTrackAsync(geoDataFile, index)); } return(false); }
/// <summary> /// Imports a single track and adds it to the map /// </summary> /// <param name="geoDataFile">geo data file to import track from</param> /// <param name="trackIndex">track index</param> /// <returns>true when loading track was successful, false when not</returns> private static async Task <bool> ImportTrackAsync(IGeoDataFile geoDataFile, int trackIndex) { var track = geoDataFile.LoadTrack(trackIndex); if (track == null) { return(false); } track.Description = HtmlConverter.Sanitize(track.Description); track.CalculateStatistics(); await CloseWaitingPopupPageAsync(); track = await AddTrackPopupPage.ShowAsync(track); if (track == null) { return(false); // user canceled editing track properties } // sample track heights only when it's a flight; non-flight tracks are draped onto // the ground if (track.IsFlightTrack) { await AdjustTrackHeightsAsync(track); } var dataService = DependencyService.Get <IDataService>(); var trackDataService = dataService.GetTrackDataService(); await trackDataService.Add(track); if (track.IsLiveTrack) { var liveWaypointRefreshService = DependencyService.Get <LiveDataRefreshService>(); liveWaypointRefreshService.AddLiveTrack(track); } await App.AddTrack(track); App.MapView.ZoomToTrack(track); App.ShowToast("Track was loaded."); return(true); }
/// <summary> /// Imports a single track and adds it to the map /// </summary> /// <param name="geoDataFile">geo data file to import track from</param> /// <param name="trackIndex">track index</param> /// <returns>true when loading track was successful, false when not</returns> private static async Task <bool> ImportTrackAsync(IGeoDataFile geoDataFile, int trackIndex) { var track = geoDataFile.LoadTrack(trackIndex); if (track == null) { return(false); } track.CalculateStatistics(); await CloseWaitingPopupPageAsync(); track = await AddTrackPopupPage.ShowAsync(track); if (track == null) { return(false); // user canceled editing track properties } // sample track heights only when it's a flight; non-flight tracks are draped onto // the ground if (track.IsFlightTrack) { await SampleTrackHeightsAsync(track); } var dataService = DependencyService.Get <IDataService>(); var currentList = await dataService.GetTrackListAsync(CancellationToken.None); currentList.Add(track); await dataService.StoreTrackListAsync(currentList); App.AddMapTrack(track); App.ZoomToTrack(track); App.ShowToast("Track was loaded."); return(true); }