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

resolved issue with setting up mixed library

Luke Pulverenti 9 лет назад
Родитель
Сommit
d74ded0fd6

+ 20 - 3
MediaBrowser.Server.Implementations/Channels/ChannelManager.cs

@@ -118,8 +118,18 @@ namespace MediaBrowser.Server.Implementations.Channels
             if (query.SupportsLatestItems.HasValue)
             {
                 var val = query.SupportsLatestItems.Value;
-                channels = channels.Where(i => (GetChannelProvider(i) is ISupportsLatestMedia) == val)
-                    .ToList();
+                channels = channels.Where(i =>
+                {
+                    try
+                    {
+                        return (GetChannelProvider(i) is ISupportsLatestMedia) == val;
+                    }
+                    catch
+                    {
+                        return false;
+                    }
+
+                }).ToList();
             }
             if (query.IsFavorite.HasValue)
             {
@@ -1292,7 +1302,14 @@ namespace MediaBrowser.Server.Implementations.Channels
 
         internal IChannel GetChannelProvider(Channel channel)
         {
-            return GetAllChannels().First(i => string.Equals(i.Name.GetMD5().ToString("N"), channel.ChannelId, StringComparison.OrdinalIgnoreCase) || string.Equals(i.Name, channel.Name, StringComparison.OrdinalIgnoreCase));
+            var result = GetAllChannels().FirstOrDefault(i => string.Equals(i.Name.GetMD5().ToString("N"), channel.ChannelId, StringComparison.OrdinalIgnoreCase) || string.Equals(i.Name, channel.Name, StringComparison.OrdinalIgnoreCase));
+
+            if (result == null)
+            {
+                throw new ResourceNotFoundException("No channel provider found for channel " + channel.Name);
+            }
+
+            return result;
         }
 
         private IEnumerable<BaseItem> ApplyFilters(IEnumerable<BaseItem> items, IEnumerable<ItemFilter> filters, User user)

+ 13 - 9
MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs

@@ -74,12 +74,12 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
 
             if (string.Equals(collectionType, CollectionType.MusicVideos, StringComparison.OrdinalIgnoreCase))
             {
-                return ResolveVideos<MusicVideo>(parent, files, directoryService, collectionType, false);
+                return ResolveVideos<MusicVideo>(parent, files, directoryService, false);
             }
 
             if (string.Equals(collectionType, CollectionType.HomeVideos, StringComparison.OrdinalIgnoreCase))
             {
-                return ResolveVideos<Video>(parent, files, directoryService, collectionType, false);
+                return ResolveVideos<Video>(parent, files, directoryService, false);
             }
 
             if (string.Equals(collectionType, CollectionType.Photos, StringComparison.OrdinalIgnoreCase))
@@ -92,7 +92,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
                 // Owned items should just use the plain video type
                 if (parent == null)
                 {
-                    return ResolveVideos<Video>(parent, files, directoryService, collectionType, false);
+                    return ResolveVideos<Video>(parent, files, directoryService, false);
                 }
 
                 if (parent is Series || parent.Parents.OfType<Series>().Any())
@@ -100,18 +100,18 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
                     return null;
                 }
 
-                return ResolveVideos<Movie>(parent, files, directoryService, collectionType, false);
+                return ResolveVideos<Movie>(parent, files, directoryService, false);
             }
 
             if (string.Equals(collectionType, CollectionType.Movies, StringComparison.OrdinalIgnoreCase))
             {
-                return ResolveVideos<Movie>(parent, files, directoryService, collectionType, true);
+                return ResolveVideos<Movie>(parent, files, directoryService, true);
             }
 
             return null;
         }
 
-        private MultiItemResolverResult ResolveVideos<T>(Folder parent, IEnumerable<FileSystemMetadata> fileSystemEntries, IDirectoryService directoryService, string collectionType, bool suppportMultiEditions)
+        private MultiItemResolverResult ResolveVideos<T>(Folder parent, IEnumerable<FileSystemMetadata> fileSystemEntries, IDirectoryService directoryService, bool suppportMultiEditions)
             where T : Video, new()
         {
             var files = new List<FileSystemMetadata>();
@@ -396,7 +396,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
                                     !string.Equals(collectionType, CollectionType.Photos) &&
                                     !string.Equals(collectionType, CollectionType.MusicVideos);
 
-            var result = ResolveVideos<T>(parent, fileSystemEntries, directoryService, collectionType, supportsMultiVersion);
+            var result = ResolveVideos<T>(parent, fileSystemEntries, directoryService, supportsMultiVersion);
 
             if (result.Items.Count == 1)
             {
@@ -506,7 +506,6 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
 
             var validCollectionTypes = new[]
             {
-                string.Empty,
                 CollectionType.Movies,
                 CollectionType.HomeVideos,
                 CollectionType.MusicVideos,
@@ -514,7 +513,12 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
                 CollectionType.Photos
             };
 
-            return !validCollectionTypes.Contains(collectionType ?? string.Empty, StringComparer.OrdinalIgnoreCase);
+            if (string.IsNullOrWhiteSpace(collectionType))
+            {
+                return false;
+            }
+
+            return !validCollectionTypes.Contains(collectionType, StringComparer.OrdinalIgnoreCase);
         }
     }
 }

+ 6 - 0
MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs

@@ -1215,6 +1215,12 @@ namespace MediaBrowser.Server.Implementations.LiveTv
             {
                 cancellationToken.ThrowIfCancellationRequested();
 
+                if (itemId == Guid.Empty)
+                {
+                    // Somehow some invalid data got into the db. It probably predates the boundary checking
+                    continue;
+                }
+
                 if (!currentIdList.Contains(itemId))
                 {
                     var item = _libraryManager.GetItemById(itemId);

+ 2 - 2
SharedVersion.cs

@@ -1,4 +1,4 @@
 using System.Reflection;
 
-//[assembly: AssemblyVersion("3.0.*")]
-[assembly: AssemblyVersion("3.0.5768.2")]
+[assembly: AssemblyVersion("3.0.*")]
+//[assembly: AssemblyVersion("3.0.5768.2")]