private void ValidateSetupForm()
        {
            bool isValidModelName = !string.IsNullOrEmpty(this.modelNameTextBox.Text);
            bool isValidForm      = SourceType == SourceType.FromFile ? LocalFileCollection.Any() && isValidModelName : isValidModelName;

            this.createModelButton.IsEnabled = isValidForm;
        }
        private void OnCloseModelFormButtonClicked(object sender, RoutedEventArgs e)
        {
            LocalFileCollection.Clear();
            this.modelNameTextBox.Text = string.Empty;
            ModelSetupState            = ModelSetupState.NotStarted;

            this.newModelForm.IsOpen = false;
        }
        private void OnCloseScenarioFormButtonClicked(object sender, RoutedEventArgs e)
        {
            LocalFileCollection.Clear();
            this.scenarioNameTextBox.Text = string.Empty;
            ScenarioSetupState            = FormRecognizerScenarioSetupState.NotStarted;

            this.newFormScenario.IsOpen = false;
        }
        private void OnDeleteFileButtonClicked(object sender, RoutedEventArgs e)
        {
            var button = (Button)sender;

            if (button?.DataContext is StorageFile curFile)
            {
                LocalFileCollection.Remove(curFile);
            }
        }
        private async void OnBrowseFilesButtonClicked(object sender, RoutedEventArgs e)
        {
            StorageFile selectedFile = await Util.PickSingleFileAsync(SpeakerRecognitionExplorer.AudioExtensions);

            if (selectedFile != null)
            {
                LocalFileCollection.Add(selectedFile);
            }
        }
        private async void FileListView_OnDrop(object sender, DragEventArgs e)
        {
            if (e.DataView.Contains(StandardDataFormats.StorageItems))
            {
                var storageItems = await e.DataView.GetStorageItemsAsync();

                LocalFileCollection.Add(storageItems.Select(x => (StorageFile)x).FirstOrDefault());
            }
        }
        private async void OnBrowseFilesButtonClicked(object sender, RoutedEventArgs e)
        {
            string[] inputFormExtensions = FormRecognizerExplorer.ImageExtensions.Concat(FormRecognizerExplorer.PdfExtensions).ToArray();
            IReadOnlyList <StorageFile> selectedFiles = await Util.PickMultipleFilesAsync(inputFormExtensions);

            if (selectedFiles != null && selectedFiles.Any())
            {
                LocalFileCollection.AddRange(selectedFiles);
            }
        }
        private async Task <SpeakerRecognitionViewModel> CreateNewModelAsync(SourceType sourceType)
        {
            StorageFile audioFileCopy = null;

            try
            {
                ModelSetupState = ModelSetupState.Running;

                string identificationModelId = string.Empty;
                switch (sourceType)
                {
                case SourceType.FromFile:
                    StorageFile audioFile = LocalFileCollection.FirstOrDefault();
                    audioFileCopy = await audioFile.CopyAsync(ApplicationData.Current.TemporaryFolder, audioFile.Name, NameCollisionOption.GenerateUniqueName);

                    identificationModelId = await CreateRecognitionModelFromFileAsync(audioFileCopy, speechConfig, VoiceProfileType.TextIndependentIdentification);

                    break;

                case SourceType.FromMicrophone:
                    identificationModelId = await CreateRecognitionModelFromMicrophoneAsync(speechConfig);

                    break;
                }

                if (!string.IsNullOrEmpty(identificationModelId))
                {
                    ModelSetupState = ModelSetupState.Completed;
                    return(new SpeakerRecognitionViewModel()
                    {
                        Id = Guid.NewGuid(),
                        Name = this.modelNameTextBox.Text,
                        IdentificationProfileId = identificationModelId
                    });
                }
                else
                {
                    ModelSetupState = ModelSetupState.Error;
                }
            }
            catch (Exception)
            {
                ModelSetupState = ModelSetupState.Error;
            }
            finally
            {
                if (audioFileCopy != null)
                {
                    await audioFileCopy.DeleteAsync();
                }
            }

            return(null);
        }
        private async void OnCreateScenarioButtonClicked(object sender, RoutedEventArgs e)
        {
            Guid modelId = await CreateNewScenarioAsync();

            if (modelId != Guid.Empty)
            {
                var suggestionFiles = new List <Tuple <string, Uri> >();
                foreach (StorageFile file in LocalFileCollection.Take(MinFilesCount))
                {
                    StorageFile copyFile = await FormRecognizerDataLoader.CopyFileToLocalModelFolderAsync(file, modelId);

                    suggestionFiles.Add(new Tuple <string, Uri>(copyFile.Name, new Uri(copyFile.Path)));
                }

                this.ModelCreated?.Invoke(this, new FormRecognizerViewModel()
                {
                    Id                = modelId,
                    Name              = this.scenarioNameTextBox.Text,
                    IsPrebuiltModel   = false,
                    SuggestionSamples = suggestionFiles
                });
            }
        }