private async Task <bool> PrepareAndReadInputFile() { switch (_userSession.InputSource) { case InputSource.LocalFile: ViewModel.InputFileName = _userSession.InputUri; return(true); case InputSource.GoogleMyMapsUrl: var errorMessage = "Cannot download KML file for provided URL. Make sure the map is shared publicly."; var uri = _googleMyMapAdapter.GetKmlDownloadUrl(new Uri(_userSession.InputUri)); if (uri == null) { await _dialog.InvalidOperationMessage(errorMessage); return(false); } try { var inputData = await _webClient.GetAsync(uri); ViewModel.InputFileName = $"{Path.GetTempPath()}{_resourceName.GetTempFolderPrefix()}{Guid.NewGuid()}.kmz"; await _file.WriteBytesAsync(ViewModel.InputFileName, inputData); _tempFilesCreated.Add(ViewModel.InputFileName); return(true); } catch (Exception) { await _dialog.InvalidOperationMessage(errorMessage); } break; default: throw new NotSupportedException($"Input source type is invalid: {_userSession.InputSource}"); } return(false); }