private void ShowFile(PackageFile file) { long size = -1; object content = null; bool isBinary = false; // find all plugins which can handle this file's extension IEnumerable<IPackageContentViewer> contentViewers = FindContentViewer(file); if (contentViewers != null) { isBinary = true; try { // iterate over all plugins, looking for the first one that return non-null content foreach (IPackageContentViewer viewer in contentViewers) { using (Stream stream = file.GetStream()) { if (size == -1) { size = stream.Length; } content = viewer.GetView(Path.GetExtension(file.Name), stream); if (content != null) { // found a plugin that can read this file, stop break; } } } } catch (Exception ex) { // don't let plugin crash the app content = Resources.PluginFailToReadContent + Environment.NewLine + ex.ToString(); } if (content is string) { isBinary = false; } } // if plugins fail to read this file, fall back to the default viewer if (content == null) { isBinary = FileHelper.IsBinaryFile(file.Name); if (isBinary) { // don't calculate the size again if we already have it if (size == -1) { using (Stream stream = file.GetStream()) { size = stream.Length; } } content = Resources.UnsupportedFormatMessage; } else { content = ReadFileContent(file, out size); } } var fileInfo = new FileContentInfo( file, file.Path, content, !isBinary, size); ViewModel.ShowFile(fileInfo); }
public void ShowFile(FileContentInfo fileInfo) { ShowContentViewer = true; CurrentFileInfo = fileInfo; }