VideoResolver.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using System.IO;
  2. using MediaBrowser.Controller.Events;
  3. using MediaBrowser.Model.Entities;
  4. using System.Linq;
  5. using System.Collections.Generic;
  6. namespace MediaBrowser.Controller.Resolvers
  7. {
  8. public class VideoResolver : BaseVideoResolver<Video>
  9. {
  10. }
  11. public abstract class BaseVideoResolver<T> : BaseItemResolver<T>
  12. where T : Video, new()
  13. {
  14. protected override T Resolve(ItemResolveEventArgs args)
  15. {
  16. if (!args.IsFolder)
  17. {
  18. if (IsVideoFile(args.Path))
  19. {
  20. return new T()
  21. {
  22. VideoType = VideoType.VideoFile,
  23. Path = args.Path
  24. };
  25. }
  26. }
  27. else
  28. {
  29. T item = ResolveFromFolderName(args.Path);
  30. if (item != null)
  31. {
  32. return item;
  33. }
  34. foreach (KeyValuePair<string, FileAttributes> folder in args.FileSystemChildren)
  35. {
  36. if (!folder.Value.HasFlag(FileAttributes.Directory))
  37. {
  38. continue;
  39. }
  40. item = ResolveFromFolderName(folder.Key);
  41. if (item != null)
  42. {
  43. return item;
  44. }
  45. }
  46. }
  47. return null;
  48. }
  49. private T ResolveFromFolderName(string folder)
  50. {
  51. if (folder.IndexOf("video_ts", System.StringComparison.OrdinalIgnoreCase) != -1)
  52. {
  53. return new T()
  54. {
  55. VideoType = VideoType.DVD,
  56. Path = Path.GetDirectoryName(folder)
  57. };
  58. }
  59. if (folder.IndexOf("bdmv", System.StringComparison.OrdinalIgnoreCase) != -1)
  60. {
  61. return new T()
  62. {
  63. VideoType = VideoType.BluRay,
  64. Path = Path.GetDirectoryName(folder)
  65. };
  66. }
  67. return null;
  68. }
  69. private static bool IsVideoFile(string path)
  70. {
  71. string extension = Path.GetExtension(path).ToLower();
  72. switch (extension)
  73. {
  74. case ".mkv":
  75. case ".m2ts":
  76. case ".iso":
  77. case ".ts":
  78. case ".rmvb":
  79. case ".mov":
  80. case ".avi":
  81. case ".mpg":
  82. case ".mpeg":
  83. case ".wmv":
  84. case ".mp4":
  85. case ".divx":
  86. case ".dvr-ms":
  87. case ".wtv":
  88. case ".ogm":
  89. case ".ogv":
  90. case ".asf":
  91. case ".m4v":
  92. case ".flv":
  93. case ".f4v":
  94. case ".3gp":
  95. return true;
  96. default:
  97. return false;
  98. }
  99. }
  100. }
  101. }