public async Task ExecuteSelectFile(FileModel model) { SelectedIndex = 0; if (model == null) { return; } if (State is DockState.AutoHidden or DockState.Hidden) { return; } PE_SelectedItem = model; if (!_settingsManager.ShowFilePreview) { return; } PE_MeshPreviewVisible = false; IsAudioPreviewVisible = false; IsImagePreviewVisible = false; IsVideoPreviewVisible = false; // check additional changes if (model.IsDirectory) { return; } if (PE_SelectedItem == null) { return; } // string.Equals(model.GetExtension(), ERedExtension.bk2.ToString(), StringComparison.OrdinalIgnoreCase) || if (!( string.Equals(model.GetExtension(), ERedExtension.ent.ToString(), StringComparison.OrdinalIgnoreCase) || string.Equals(model.GetExtension(), ERedExtension.physicalscene.ToString(), StringComparison.OrdinalIgnoreCase) || string.Equals(model.GetExtension(), ERedExtension.w2mesh.ToString(), StringComparison.OrdinalIgnoreCase) || string.Equals(model.GetExtension(), ERedExtension.mesh.ToString(), StringComparison.OrdinalIgnoreCase) || string.Equals(model.GetExtension(), ERedExtension.wem.ToString(), StringComparison.OrdinalIgnoreCase) || string.Equals(model.GetExtension(), ERedExtension.xbm.ToString(), StringComparison.OrdinalIgnoreCase) || string.Equals(model.GetExtension(), ERedExtension.envprobe.ToString(), StringComparison.OrdinalIgnoreCase) || Enum.TryParse <EConvertableOutput>(PE_SelectedItem.GetExtension(), out _) || Enum.TryParse <EUncookExtension>(PE_SelectedItem.GetExtension(), out _) )) { return; } if (PE_SelectedItem != null) { if (PE_SelectedItem.GetExtension().Length > 0) { //if (string.Equals(PE_SelectedItem.GetExtension(), ERedExtension.bk2.ToString(), // System.StringComparison.OrdinalIgnoreCase)) //{ // IsVideoPreviewVisible = true; // SetExeCommand?.Invoke("test.exe | test2.bk2 /J /I2 /P"); //} if (Enum.IsDefined(typeof(EConvertableOutput), PE_SelectedItem.GetExtension())) { PE_MeshPreviewVisible = true; SelectedIndex = 1; LoadModel(PE_SelectedItem.FullName); } if (string.Equals(PE_SelectedItem.GetExtension(), ERedExtension.mesh.ToString(), StringComparison.OrdinalIgnoreCase) || string.Equals(PE_SelectedItem.GetExtension(), ERedExtension.w2mesh.ToString(), StringComparison.OrdinalIgnoreCase) || string.Equals(PE_SelectedItem.GetExtension(), ERedExtension.ent.ToString(), StringComparison.OrdinalIgnoreCase) || string.Equals(PE_SelectedItem.GetExtension(), ERedExtension.physicalscene.ToString(), StringComparison.OrdinalIgnoreCase)) { using (var meshStream = new FileStream(PE_SelectedItem.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { meshStream.Seek(0, SeekOrigin.Begin); var outPath = Path.Combine(ISettingsManager.GetTemp_OBJPath(), Path.GetFileName(PE_SelectedItem.FullName)); outPath = Path.ChangeExtension(outPath, ".glb"); if (_meshTools.ExportMeshPreviewer(meshStream, new FileInfo(outPath))) { LoadModel(outPath); PE_MeshPreviewVisible = true; SelectedIndex = 1; } meshStream.Dispose(); meshStream.Close(); } } if (string.Equals(PE_SelectedItem.GetExtension(), ERedExtension.wem.ToString(), System.StringComparison.OrdinalIgnoreCase)) { IsAudioPreviewVisible = true; SelectedIndex = 2; PreviewAudioCommand.SafeExecute(PE_SelectedItem.FullName); } // textures if (Enum.TryParse <EUncookExtension>(PE_SelectedItem.GetExtension(), out _)) { var q = await ImageDecoder.RenderToBitmapSource(PE_SelectedItem.FullName); if (q != null) { var g = BitmapFrame.Create(q); LoadImage(g); IsImagePreviewVisible = true; SelectedIndex = 3; } } // xbm if (string.Equals(PE_SelectedItem.GetExtension(), ERedExtension.xbm.ToString(), StringComparison.OrdinalIgnoreCase) || string.Equals(PE_SelectedItem.GetExtension(), ERedExtension.mesh.ToString(), StringComparison.OrdinalIgnoreCase) || string.Equals(PE_SelectedItem.GetExtension(), ERedExtension.envprobe.ToString(), StringComparison.OrdinalIgnoreCase)) { // convert xbm to dds stream await using var ddsstream = new MemoryStream(); await using var filestream = new FileStream(PE_SelectedItem.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 4096, FileOptions.SequentialScan); if (_modTools.ConvertXbmToDdsStream(filestream, ddsstream, out _)) { // try loading it in pfim try { var qa = await ImageDecoder.RenderToBitmapSourceDds(ddsstream); if (qa != null) { LoadImage(qa); IsImagePreviewVisible = true; SelectedIndex = 3; } } catch (Exception) { throw; } } } } } DecideForMeshPreview(); }