///<summary> Открыть место хранения файла элемента. </summary> public override void OpenInExplorer() { EntAbsFile.Refresh(); if (EntAbsFile.Exists) { CatalogEngine.OpenExplorer(EntAbsFile.FullName); } }
///<summary> Открыть место хранения файла элемента. </summary> public override void OpenInExplorer() { string path = GetFirstEntPath(); if (!string.IsNullOrWhiteSpace(path)) { CatalogEngine.OpenExplorer(path); } }
/// <summary> Формирование обложки эпизода. </summary> public void LoadCover(bool forceUpdate = false) { EntAbsFile.Refresh(); if (!EntAbsFile.Exists) { return; } // если облогу не находили или она перестала существовать if (coverArtPath == null || !File.Exists(coverArtPath)) { SearchCoverArt(); } if (CoverImage == null | forceUpdate) // только если еще не грузили или нужно обновить принудительно { CoverImage = null; BitmapImage bmi; if (coverArtPath != null) { // грузим ковер из папки bmi = CatalogEngine.LoadBitMap(coverArtPath); } else { var w = int.Parse(width); if (Properties.Settings.Default.UseShellCover) { // грузим обложку/кадр, созданную виндой bmi = CatalogEngine.GetBitMapFromShell(EntAbsFile.FullName, w); } else { // создаем ковер из кадра файла float vidPos = 0; if (duration > 1) { vidPos = (float)(duration / 2); // если меньше секунды, кадр из середины выдернуть не может и выбрасывает } bmi = CatalogEngine.LoadBitMapFromVideo(EntAbsFile.FullName, w, vidPos); } } CoverImage = bmi; } // принудительная перерисовка обложки после загрузки Action EmptyDelegate = delegate() { }; vp?.Dispatcher?.Invoke(DispatcherPriority.Render, EmptyDelegate); lp?.Dispatcher?.Invoke(DispatcherPriority.Render, EmptyDelegate); }
//--- ///<summary> Получение метаданных из видеофайла. </summary> public void GetMetaData() { if (!EntAbsFile.Exists) { return; } duration = CatalogEngine.GetDuration(EntAbsFile.FullName); DateCreate = EntAbsFile.CreationTime; DateModify = EntAbsFile.LastWriteTime; //+ загрузка данных через ShellFile //? для древних и не стандартных видеофайлов лучше поставить кодеки (иначе не сможет читать из них данные) ! try { var file = ShellFile.FromFilePath(EntAbsFile.FullName); if (file != null) { file.Properties.System.Video.FrameWidth.TryFormatForDisplay(PropertyDescriptionFormatOptions.None, out width); file.Properties.System.Video.FrameHeight.TryFormatForDisplay(PropertyDescriptionFormatOptions.None, out height); } } catch (ArgumentException ex) { Console.WriteLine(ex.Message); } catch (IndexOutOfRangeException ex2) { Console.WriteLine(ex2.Message); } //+ на случай, если не смогли получить через шел или надпись "Нет данных" //! ! значительно медленней, чем через ShellFile if (string.IsNullOrWhiteSpace(width) || width.Any(x => char.IsLetter(x)) || string.IsNullOrWhiteSpace(height) || height.Any(x => char.IsLetter(x))) { //Console.WriteLine("" + _entRelPath); try { var dataSrc = CatalogEngine.ffProbe.GetMediaInfo(EntAbsFile.FullName).Streams.First(); width = "" + dataSrc.Width; height = "" + dataSrc.Height; } catch (Exception ex) { width = "0"; height = "0"; Console.WriteLine(ex.Message); } } ChkVideoResolution(); }