Ver código fonte

add FindByPath error handling

Luke Pulverenti 8 anos atrás
pai
commit
d8ec7109ab

+ 5 - 0
Emby.Server.Implementations/Collections/CollectionManager.cs

@@ -170,6 +170,11 @@ namespace Emby.Server.Implementations.Collections
             {
                 var item = _libraryManager.GetItemById(itemId);
 
+                if (string.IsNullOrWhiteSpace(item.Path))
+                {
+                    continue;
+                }
+
                 if (item == null)
                 {
                     throw new ArgumentException("No item exists with the supplied Id");

+ 5 - 0
Emby.Server.Implementations/Library/LibraryManager.cs

@@ -864,6 +864,11 @@ namespace Emby.Server.Implementations.Library
             // If this returns multiple items it could be tricky figuring out which one is correct. 
             // In most cases, the newest one will be and the others obsolete but not yet cleaned up
 
+            if (string.IsNullOrWhiteSpace(path))
+            {
+                throw new ArgumentNullException("path");
+            }
+
             var query = new InternalItemsQuery
             {
                 Path = path,

+ 5 - 0
Emby.Server.Implementations/Playlists/PlaylistManager.cs

@@ -198,6 +198,11 @@ namespace Emby.Server.Implementations.Playlists
 
             foreach (var item in items)
             {
+                if (string.IsNullOrWhiteSpace(item.Path))
+                {
+                    continue;
+                }
+
                 list.Add(LinkedChild.Create(item));
             }
 

+ 18 - 0
MediaBrowser.Api/UserLibrary/PlaystateService.cs

@@ -279,6 +279,20 @@ namespace MediaBrowser.Api.UserLibrary
             return dto;
         }
 
+        private PlayMethod ValidatePlayMethod(PlayMethod method, string playSessionId)
+        {
+            if (method == PlayMethod.Transcode)
+            {
+                var job = string.IsNullOrWhiteSpace(playSessionId) ? null : ApiEntryPoint.Instance.GetTranscodingJob(playSessionId);
+                if (job == null)
+                {
+                    return PlayMethod.DirectPlay;
+                }
+            }
+
+            return method;
+        }
+
         /// <summary>
         /// Posts the specified request.
         /// </summary>
@@ -300,6 +314,8 @@ namespace MediaBrowser.Api.UserLibrary
 
         public void Post(ReportPlaybackStart request)
         {
+            request.PlayMethod = ValidatePlayMethod(request.PlayMethod, request.PlaySessionId);
+
             request.SessionId = GetSession(_sessionContext).Result.Id;
 
             var task = _sessionManager.OnPlaybackStart(request);
@@ -332,6 +348,8 @@ namespace MediaBrowser.Api.UserLibrary
 
         public void Post(ReportPlaybackProgress request)
         {
+            request.PlayMethod = ValidatePlayMethod(request.PlayMethod, request.PlaySessionId);
+
             request.SessionId = GetSession(_sessionContext).Result.Id;
 
             var task = _sessionManager.OnPlaybackProgress(request);

+ 1 - 1
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -1733,7 +1733,7 @@ namespace MediaBrowser.Controller.Entities
 
         private BaseItem FindLinkedChild(LinkedChild info)
         {
-            if (!string.IsNullOrEmpty(info.Path))
+            if (!string.IsNullOrWhiteSpace(info.Path))
             {
                 var itemByPath = LibraryManager.FindByPath(info.Path, null);