/// <summary>
 /// Invalidates the extractor entries (toggles show unknown formats as text)
 /// </summary>
 /// <param name="sender">The source of the event.</param>
 /// <param name="e">The <see cref="RoutedEventArgs"/> instance containing the event data.</param>
 private void GenericTextPreviewMenuItem_Click(object sender, RoutedEventArgs e)
 {
     if (CurrentExtractor != null)
     {
         CurrentExtractor.InvalidateEntries();
         ShowPreview();
     }
 }
        /// <summary>
        /// Method to set a text as preview
        /// </summary>
        /// <param name="item">Listview item to preview</param>
        private void SetTextPreview(ListViewItem item)
        {
            string text = item.FileReference.GenericText;

            if (text.Length == 0 && item.FileSize.Value > 0)
            {
                switch (item.Type)
                {
                case ExtractorItem.Type.Text:
                case ExtractorItem.Type.Xml:
                    CurrentModel.StatusText = I18n.R(I18n.Key.StatusLoadEmbeddedTextFailure, item.FileName);
                    break;

                default:
                    CurrentModel.StatusText = I18n.R(I18n.Key.StatusLoadEmbeddedOtherFailure, item.FileName);
                    break;
                }
                SetTextPreviewVisible(true);
            }
            else
            {
                switch (item.Type)
                {
                case ExtractorItem.Type.Image:
                    CurrentModel.StatusText = I18n.R(I18n.Key.StatusLoadEmbeddedImageFallback, item.FileName);
                    break;

                case ExtractorItem.Type.Text:
                case ExtractorItem.Type.Xml:
                    CurrentModel.StatusText = I18n.R(I18n.Key.StatusEmbeddedLoaded, item.FileName);
                    break;

                default:
                    CurrentModel.StatusText = I18n.R(I18n.Key.StatusLoadEmbeddedOtherFallback, item.FileName);
                    break;
                }
                TextBox.Text = text;
                SetTextPreviewVisible();
            }
            ImageBox.Source = null;
            CurrentExtractor.ResetErrors();
        }
        /// <summary>
        /// Shows the preview of the currently selected embedded file
        /// </summary>
        private void ShowPreview()
        {
            Cursor c = Cursor;

            CurrentModel.StatusText = I18n.T(I18n.Key.StatusLoadingEmbedded);
            Cursor = Cursors.Wait;
            try
            {
                ListViewItem[] selected = new ListViewItem[ImagesListView.SelectedItems.Count];
                ImagesListView.SelectedItems.CopyTo(selected, 0);
                CurrentModel.SelectedItems = selected;

                ListViewItem item = selected.Last();

                if (CurrentModel.LargeFilePreviewWarning)
                {
                    long threshold = Properties.Settings.Default.LargeFileThreshold;
                    if (item.FileSize.Value > threshold)
                    {
                        MessageBoxResult result = MessageBox.Show(I18n.R(I18n.Key.DialogSizeWarning, Utils.ConvertFileSize(threshold)), I18n.T(I18n.Key.DialogSizeWarningTitle), MessageBoxButton.YesNo, MessageBoxImage.Question);
                        if (result != MessageBoxResult.Yes)
                        {
                            ImageBox.Source = null;
                            SetTextPreviewVisible(true);
                            CurrentExtractor.ResetErrors();
                            CurrentModel.StatusText = I18n.R(I18n.Key.StatusPreviewSkipped, item.FileName);
                            Cursor = c;
                            return;
                        }
                    }
                }

                if (item.Type == ExtractorItem.Type.Image)
                {
                    CurrentExtractor.GetImageSourceByName(item.FileName, out var img);
                    SetImagePreviewVisible();
                    if (CurrentExtractor.HasErrors)
                    {
                        if (CurrentModel.GenericTextPreview)
                        {
                            SetTextPreview(item);
                        }
                        else
                        {
                            CurrentModel.StatusText = I18n.R(I18n.Key.StatusLoadEmbeddedImageFailure, CurrentExtractor.LastError);
                            SetTextPreviewVisible(true);
                        }
                        ImageBox.Source = null;
                        CurrentExtractor.ResetErrors();
                    }
                    else
                    {
                        ImageBox.Source         = img;
                        CurrentModel.StatusText = I18n.R(I18n.Key.StatusEmbeddedLoaded, item.FileName);
                    }
                }
                else if (item.Type == ExtractorItem.Type.Xml || item.Type == ExtractorItem.Type.Text || CurrentModel.GenericTextPreview)
                {
                    CurrentExtractor.GetGenericTextByName(item.FileName, out var text);

                    if (CurrentExtractor.HasErrors)
                    {
                        SetTextPreviewVisible();
                        CurrentModel.StatusText = I18n.R(I18n.Key.StatusLoadEmbeddedTextFailure, CurrentExtractor.LastError);
                        TextBox.Text            = string.Empty;
                        SetTextPreviewVisible(true);
                        CurrentExtractor.ResetErrors();
                    }
                    else
                    {
                        SetTextPreview(item);
                    }
                }
                else
                {
                    SetTextPreviewVisible(true);
                    CurrentModel.StatusText = I18n.R(I18n.Key.StatusLoadEmbeddedOtherFailure, item.FileName);
                    TextBox.Text            = string.Empty;

                    // Fall-back
                }
            }
            catch
            {
                CurrentModel.SelectedItems = new ListViewItem[0];
                // ignore
            }

            Cursor = c;
            if (ImagesListView.Items.Count == 0)
            {
                CurrentModel.SaveSelectedStatus = false;
            }
            else
            {
                CurrentModel.SaveSelectedStatus = true;
            }
        }