Просмотр исходного кода

Core: url compatible handling for FFMPEG; UI: playlist tooltip HUMANIZE url

Coder 8 месяцев назад
Родитель
Сommit
a331391f25
2 измененных файлов с 26 добавлено и 20 удалено
  1. 16 16
      Bmp.Core/Playback/Inputs/InputSourceProvider.cs
  2. 10 4
      Bmp.WinForms/MainForm.cs

+ 16 - 16
Bmp.Core/Playback/Inputs/InputSourceProvider.cs

@@ -15,7 +15,7 @@ namespace Bmp.Core.Playback.Inputs
             AttachedPic[]? mappedEmbeddedPics = null;
             try
             {
-                using var decoder = new FfmpegDecoder(urlOrPath);
+                using var decoder = new FfmpegDecoder(ProcessUrlOrPathForFFMPEG(urlOrPath));
 
                 var fp = decoder.AttachedPics;
 
@@ -53,15 +53,10 @@ namespace Bmp.Core.Playback.Inputs
 
         public static MetaData ReadMeta(string urlOrPath)
         {
-            if (Uri.TryCreate(urlOrPath, UriKind.Absolute, out var url))
-            {
-                if (url.IsFile) urlOrPath = url.LocalPath;
-            }
-
             FfmpegDecoder? decoder = null;
             try
             {
-                decoder = new FfmpegDecoder(urlOrPath);
+                decoder = new FfmpegDecoder(ProcessUrlOrPathForFFMPEG(urlOrPath));
 
                 return new MetaData
                 {
@@ -71,10 +66,7 @@ namespace Bmp.Core.Playback.Inputs
             }
             catch (Exception e)
             {
-                return new MetaData
-                {
-                    Error = e,
-                };
+                return new MetaData { Error = e };
             }
             finally
             {
@@ -100,11 +92,7 @@ namespace Bmp.Core.Playback.Inputs
 
             }
 
-            if (Uri.TryCreate(urlOrPath, UriKind.Absolute, out var url))
-            {
-                if (url.IsFile) urlOrPath = url.LocalPath;
-            }
-            return new FFMPEGAudioReader(urlOrPath);
+            return new FFMPEGAudioReader(ProcessUrlOrPathForFFMPEG(urlOrPath));
         }
 
         public static string[] ExpandPaths(string inputPath)
@@ -167,6 +155,18 @@ namespace Bmp.Core.Playback.Inputs
             "SCANS/Cover.png"
         };
 
+        private static string ProcessUrlOrPathForFFMPEG(string urlOrPath)
+        {
+            var processedUrlOrPath = urlOrPath;
+            if (Uri.TryCreate(urlOrPath, UriKind.Absolute, out var url))
+            {
+                if (url.IsFile) processedUrlOrPath = url.LocalPath;
+                else if (url.IsAbsoluteUri) processedUrlOrPath = url.AbsoluteUri;
+            }
+
+            return processedUrlOrPath;
+        }
+
         public static (bool exists, long? size) FileCheckSize(string urlOrPath)
         {
             var exists = false;

+ 10 - 4
Bmp.WinForms/MainForm.cs

@@ -1,5 +1,6 @@
 using System.CodeDom;
 using System.ComponentModel;
+using System.IO;
 using System.Text;
 using System.Threading.Channels;
 using Bmp.Core.Common.EventBus;
@@ -107,11 +108,16 @@ namespace Bmp.WinForms
 
                     item.SubItems[DurColumnHeader.Index].Text = meta.Duration.ToString("hh\\:mm\\:ss");
 
-                    item.ToolTipText = item.Name;
+                    var localVarPath = Uri.UnescapeDataString( item.Name);
 
-                    foreach (var pair in meta.RawTags.OrderBy(p => p.Key))
+                    item.ToolTipText = localVarPath;
+
+                    if (meta.RawTags != null)
                     {
-                        item.ToolTipText += $"{Environment.NewLine}【{pair.Key}】{pair.Value.Trim()}";
+                        foreach (var pair in meta.RawTags.OrderBy(p => p.Key))
+                        {
+                            item.ToolTipText += $"{Environment.NewLine}【{pair.Key}】{pair.Value.Trim()}";
+                        }
                     }
                 }
                 else
@@ -469,7 +475,7 @@ namespace Bmp.WinForms
                     item.Name = path;
 
                     var localVarPath = path;
-                    if (Uri.TryCreate(path, UriKind.RelativeOrAbsolute, out var uri) && uri.IsFile==false) localVarPath = uri.ToString();
+                    if (Uri.TryCreate(path, UriKind.RelativeOrAbsolute, out var uri) && uri.IsFile == false) localVarPath = uri.ToString();
 
                     item.ToolTipText = localVarPath;