/// <summary> /// Method that handles downloading the map into an offline map package /// </summary> private async Task DownloadPackageAsync(Envelope extent) { var syncTask = await OfflineMapTask.CreateAsync(_map); try { // set extent based on screen var parameters = await syncTask.CreateDefaultGenerateOfflineMapParametersAsync(extent); // set the job to generate the offline map GenerateOfflineMapJob = syncTask.GenerateOfflineMap(parameters, _downloadPath); // update the progress property when progress changes GenerateOfflineMapJob.ProgressChanged += (s, e) => { Progress = GenerateOfflineMapJob.Progress; }; // listen for job changed events GenerateOfflineMapJob.JobChanged += GenerateOfflineMapJob_JobChanged; // begin download job GenerateOfflineMapJob.Start(); } catch (Exception ex) { UserPromptMessenger.Instance.RaiseMessageValueChanged( null, ex.Message, true, ex.StackTrace); } }
/// <summary> /// Method that handles downloading the map into an offline map package /// </summary> private async Task DownloadPackageAsync(Envelope extent) { var syncTask = await OfflineMapTask.CreateAsync(Map); try { // set extent based on screen var parameters = await syncTask.CreateDefaultGenerateOfflineMapParametersAsync(extent); // set the job to generate the offline map GenerateOfflineMapJob = syncTask.GenerateOfflineMap(parameters, DownloadPath); // update the progress property when progress changes GenerateOfflineMapJob.ProgressChanged += (s, e) => { Progress = GenerateOfflineMapJob.Progress; }; // listen for job changed events GenerateOfflineMapJob.JobChanged += async(sender, args) => { // If the job succeeded, check for layer and table errors // if job fails, get the error if (GenerateOfflineMapJob.Status == JobStatus.Succeeded) { var result = await GenerateOfflineMapJob.GetResultAsync(); // download has succeeded and there were no errors, return if (result.LayerErrors.Count == 0 && result.TableErrors.Count == 0) { BroadcastMessenger.Instance.RaiseBroadcastMessengerValueChanged(true, BroadcastMessageKey.SyncSucceeded); } else { // if there were errors, create the error message to display to the user var stringBuilder = new StringBuilder(); foreach (var error in result.LayerErrors) { stringBuilder.AppendLine(error.Value.Message); } foreach (var error in result.TableErrors) { stringBuilder.AppendLine(error.Value.Message); } UserPromptMessenger.Instance.RaiseMessageValueChanged( Properties.Resources.GetString("DownloadWithErrors_Title"), stringBuilder.ToString() , true, null); BroadcastMessenger.Instance.RaiseBroadcastMessengerValueChanged(true, BroadcastMessageKey.SyncSucceeded); } } else if (GenerateOfflineMapJob.Status == JobStatus.Failed) { // if the job failed but not due to user cancellation, display the error if (GenerateOfflineMapJob.Error != null && GenerateOfflineMapJob.Error.Message != "User canceled: Job canceled.") { UserPromptMessenger.Instance.RaiseMessageValueChanged( Properties.Resources.GetString("DownloadFailed_Title"), GenerateOfflineMapJob.Error.Message, true, GenerateOfflineMapJob.Error.StackTrace); } BroadcastMessenger.Instance.RaiseBroadcastMessengerValueChanged(false, BroadcastMessageKey.SyncSucceeded); } }; // begin download job GenerateOfflineMapJob.Start(); } catch (Exception ex) { UserPromptMessenger.Instance.RaiseMessageValueChanged( null, ex.Message, true, ex.StackTrace); } }