Browse Source

added dvdlib for better dvd runtimes

Luke Pulverenti 11 years ago
parent
commit
ef8b02d285

+ 0 - 195
MediaBrowser.Api/LiveTv/LiveTvImageService.cs

@@ -1,195 +0,0 @@
-using MediaBrowser.Api.Images;
-using MediaBrowser.Common.Configuration;
-using MediaBrowser.Controller.Drawing;
-using MediaBrowser.Controller.Dto;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.LiveTv;
-using MediaBrowser.Controller.Persistence;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Dto;
-using MediaBrowser.Model.Entities;
-using ServiceStack;
-using ServiceStack.Text.Controller;
-using ServiceStack.Web;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace MediaBrowser.Api.LiveTv
-{
-    [Route("/LiveTv/Channels/{Id}/Images/{Type}", "POST")]
-    [Route("/LiveTv/Channels/{Id}/Images/{Type}/{Index}", "POST")]
-    [Api(Description = "Posts an item image")]
-    public class PostChannelImage : DeleteImageRequest, IRequiresRequestStream, IReturnVoid
-    {
-        /// <summary>
-        /// Gets or sets the id.
-        /// </summary>
-        /// <value>The id.</value>
-        [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
-        public string Id { get; set; }
-
-        /// <summary>
-        /// The raw Http Request Input Stream
-        /// </summary>
-        /// <value>The request stream.</value>
-        public Stream RequestStream { get; set; }
-    }
-
-    [Route("/LiveTv/Channels/{Id}/Images/{Type}", "DELETE")]
-    [Route("/LiveTv/Channels/{Id}/Images/{Type}/{Index}", "DELETE")]
-    [Api(Description = "Deletes an item image")]
-    public class DeleteChannelImage : DeleteImageRequest, IReturnVoid
-    {
-        /// <summary>
-        /// Gets or sets the id.
-        /// </summary>
-        /// <value>The id.</value>
-        [ApiMember(Name = "Id", Description = "Channel Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")]
-        public string Id { get; set; }
-    }
-    [Route("/LiveTv/Channels/{Id}/Images/{Type}", "GET")]
-    [Route("/LiveTv/Channels/{Id}/Images/{Type}/{Index}", "GET")]
-    [Api(Description = "Gets an item image")]
-    public class GetChannelImage : ImageRequest
-    {
-        /// <summary>
-        /// Gets or sets the id.
-        /// </summary>
-        /// <value>The id.</value>
-        [ApiMember(Name = "Id", Description = "Channel Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
-        public string Id { get; set; }
-    }
-
-    [Route("/LiveTv/Recordings/{Id}/Images/{Type}", "GET")]
-    [Route("/LiveTv/Recordings/{Id}/Images/{Type}/{Index}", "GET")]
-    [Api(Description = "Gets an item image")]
-    public class GetRecordingImage : ImageRequest
-    {
-        /// <summary>
-        /// Gets or sets the id.
-        /// </summary>
-        /// <value>The id.</value>
-        [ApiMember(Name = "Id", Description = "Recording Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
-        public string Id { get; set; }
-    }
-
-    [Route("/LiveTv/Programs/{Id}/Images/{Type}", "GET")]
-    [Route("/LiveTv/Programs/{Id}/Images/{Type}/{Index}", "GET")]
-    [Api(Description = "Gets an item image")]
-    public class GetProgramImage : ImageRequest
-    {
-        /// <summary>
-        /// Gets or sets the id.
-        /// </summary>
-        /// <value>The id.</value>
-        [ApiMember(Name = "Id", Description = "Program Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
-        public string Id { get; set; }
-    }
-
-    [Route("/LiveTv/Channels/{Id}/Images", "GET")]
-    [Api(Description = "Gets information about an item's images")]
-    public class GetChannelImageInfos : IReturn<List<ImageInfo>>
-    {
-        /// <summary>
-        /// Gets or sets the id.
-        /// </summary>
-        /// <value>The id.</value>
-        [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
-        public string Id { get; set; }
-    }
-    
-    public class LiveTvImageService : BaseApiService
-    {
-        private readonly ILiveTvManager _liveTv;
-
-        private readonly IUserManager _userManager;
-
-        private readonly ILibraryManager _libraryManager;
-
-        private readonly IApplicationPaths _appPaths;
-
-        private readonly IProviderManager _providerManager;
-
-        private readonly IItemRepository _itemRepo;
-        private readonly IDtoService _dtoService;
-        private readonly IImageProcessor _imageProcessor;
-        
-        public LiveTvImageService(ILiveTvManager liveTv, IUserManager userManager, ILibraryManager libraryManager, IApplicationPaths appPaths, IProviderManager providerManager, IItemRepository itemRepo, IDtoService dtoService, IImageProcessor imageProcessor)
-        {
-            _liveTv = liveTv;
-            _userManager = userManager;
-            _libraryManager = libraryManager;
-            _appPaths = appPaths;
-            _providerManager = providerManager;
-            _itemRepo = itemRepo;
-            _dtoService = dtoService;
-            _imageProcessor = imageProcessor;
-        }
-
-        public object Get(GetChannelImageInfos request)
-        {
-            var item = _liveTv.GetInternalChannel(request.Id);
-
-            var result = GetImageService().GetItemImageInfos(item);
-
-            return ToOptimizedResult(result);
-        }
-
-        public object Get(GetChannelImage request)
-        {
-            var item = _liveTv.GetInternalChannel(request.Id);
-
-            return GetImageService().GetImage(request, item);
-        }
-
-        public object Get(GetRecordingImage request)
-        {
-            var item = _liveTv.GetInternalRecording(request.Id, CancellationToken.None).Result;
-
-            return GetImageService().GetImage(request, item);
-        }
-
-        public object Get(GetProgramImage request)
-        {
-            var item = _liveTv.GetInternalProgram(request.Id);
-
-            return GetImageService().GetImage(request, item);
-        }
-
-        public void Post(PostChannelImage request)
-        {
-            var pathInfo = PathInfo.Parse(Request.PathInfo);
-            var id = pathInfo.GetArgumentValue<string>(2);
-
-            request.Type = (ImageType)Enum.Parse(typeof(ImageType), pathInfo.GetArgumentValue<string>(4), true);
-
-            var item = _liveTv.GetInternalChannel(id);
-
-            var task = GetImageService().PostImage(item, request.RequestStream, request.Type, Request.ContentType);
-
-            Task.WaitAll(task);
-        }
-
-        public void Delete(DeleteChannelImage request)
-        {
-            var item = _liveTv.GetInternalChannel(request.Id);
-
-            var task = item.DeleteImage(request.Type, request.Index);
-
-            Task.WaitAll(task);
-        }
-
-        private ImageService GetImageService()
-        {
-            return new ImageService(_userManager, _libraryManager, _appPaths, _providerManager, _itemRepo, _dtoService,
-                _imageProcessor)
-            {
-                ResultFactory = ResultFactory,
-                Request = Request
-            };
-        }
-    }
-}

+ 0 - 1
MediaBrowser.Api/MediaBrowser.Api.csproj

@@ -90,7 +90,6 @@
     <Compile Include="Library\LibraryHelpers.cs" />
     <Compile Include="Library\LibraryHelpers.cs" />
     <Compile Include="Library\LibraryService.cs" />
     <Compile Include="Library\LibraryService.cs" />
     <Compile Include="Library\LibraryStructureService.cs" />
     <Compile Include="Library\LibraryStructureService.cs" />
-    <Compile Include="LiveTv\LiveTvImageService.cs" />
     <Compile Include="LiveTv\LiveTvService.cs" />
     <Compile Include="LiveTv\LiveTvService.cs" />
     <Compile Include="LocalizationService.cs" />
     <Compile Include="LocalizationService.cs" />
     <Compile Include="MoviesService.cs" />
     <Compile Include="MoviesService.cs" />

+ 5 - 0
MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs

@@ -163,6 +163,11 @@ namespace MediaBrowser.Api.Playback.Progressive
             {
             {
                 responseHeaders["ContentFeatures.DLNA.ORG"] = (contentFeatures + orgOp + orgCi + dlnaflags).Trim(';');
                 responseHeaders["ContentFeatures.DLNA.ORG"] = (contentFeatures + orgOp + orgCi + dlnaflags).Trim(';');
             }
             }
+
+            foreach (var item in responseHeaders)
+            {
+                Request.Response.AddHeader(item.Key, item.Value);
+            }
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 6 - 0
MediaBrowser.Controller/Library/ILibraryManager.cs

@@ -327,5 +327,11 @@ namespace MediaBrowser.Controller.Library
         /// <param name="paths">The paths.</param>
         /// <param name="paths">The paths.</param>
         /// <returns>IEnumerable{System.String}.</returns>
         /// <returns>IEnumerable{System.String}.</returns>
         IEnumerable<string> NormalizeRootPathList(IEnumerable<string> paths);
         IEnumerable<string> NormalizeRootPathList(IEnumerable<string> paths);
+
+        /// <summary>
+        /// Registers the item.
+        /// </summary>
+        /// <param name="item">The item.</param>
+        void RegisterItem(BaseItem item);
     }
     }
 }
 }

+ 1 - 1
MediaBrowser.Mono.userprefs

@@ -4,7 +4,7 @@
     <Files>
     <Files>
       <File FileName="MediaBrowser.Server.Mono\app.config" Line="1" Column="1" />
       <File FileName="MediaBrowser.Server.Mono\app.config" Line="1" Column="1" />
       <File FileName="MediaBrowser.ServerApplication\ApplicationHost.cs" Line="1" Column="1" />
       <File FileName="MediaBrowser.ServerApplication\ApplicationHost.cs" Line="1" Column="1" />
-      <File FileName="MediaBrowser.Server.Mono\Native\NativeApp.cs" Line="12" Column="23" />
+      <File FileName="MediaBrowser.Server.Mono\Native\NativeApp.cs" Line="1" Column="1" />
       <File FileName="MediaBrowser.Server.Mono\Program.cs" Line="36" Column="34" />
       <File FileName="MediaBrowser.Server.Mono\Program.cs" Line="36" Column="34" />
     </Files>
     </Files>
   </MonoDevelop.Ide.Workbench>
   </MonoDevelop.Ide.Workbench>

+ 6 - 0
MediaBrowser.Providers/MediaBrowser.Providers.csproj

@@ -45,6 +45,12 @@
     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
   </PropertyGroup>
   </PropertyGroup>
   <ItemGroup>
   <ItemGroup>
+    <Reference Include="BDInfo">
+      <HintPath>..\packages\MediaBrowser.BdInfo.1.0.0.7\lib\net35\BDInfo.dll</HintPath>
+    </Reference>
+    <Reference Include="DvdLib">
+      <HintPath>..\packages\MediaBrowser.BdInfo.1.0.0.7\lib\net35\DvdLib.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System" />
     <Reference Include="System.Core" />
     <Reference Include="System.Core" />
     <Reference Include="System.Net" />
     <Reference Include="System.Net" />

+ 21 - 2
MediaBrowser.Providers/MediaInfo/FFProbeVideoInfoProvider.cs

@@ -1,4 +1,5 @@
-using MediaBrowser.Common.MediaInfo;
+using DvdLib.Ifo;
+using MediaBrowser.Common.MediaInfo;
 using MediaBrowser.Controller.Configuration;
 using MediaBrowser.Controller.Configuration;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Localization;
 using MediaBrowser.Controller.Localization;
@@ -132,12 +133,30 @@ namespace MediaBrowser.Providers.MediaInfo
 
 
             if (item.VideoType == VideoType.Dvd || (item.IsoType.HasValue && item.IsoType == IsoType.Dvd))
             if (item.VideoType == VideoType.Dvd || (item.IsoType.HasValue && item.IsoType == IsoType.Dvd))
             {
             {
-                PopulateDvdStreamFiles(item, mount);
+                FetchFromDvdLib(item, mount);
             }
             }
 
 
             base.OnPreFetch(item, mount);
             base.OnPreFetch(item, mount);
         }
         }
 
 
+        private void FetchFromDvdLib(Video item, IIsoMount mount)
+        {
+            var path = mount == null ? item.Path : mount.MountedPath;
+            var dvd = new Dvd(path);
+
+            item.RunTimeTicks = dvd.Titles.Select(GetRuntime).Max();
+
+            PopulateDvdStreamFiles(item, mount);
+        }
+
+        private long GetRuntime(Title title)
+        {
+            return title.ProgramChains
+                    .Select(i => (TimeSpan)i.PlaybackTime)
+                    .Select(i => i.Ticks)
+                    .Sum();
+        }
+
         public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken)
         public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken)
         {
         {
             var video = (Video)item;
             var video = (Video)item;

+ 1 - 0
MediaBrowser.Providers/packages.config

@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
 <packages>
+  <package id="MediaBrowser.BdInfo" version="1.0.0.7" targetFramework="net45" />
   <package id="morelinq" version="1.0.16006" targetFramework="net45" />
   <package id="morelinq" version="1.0.16006" targetFramework="net45" />
 </packages>
 </packages>

+ 11 - 3
MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs

@@ -360,11 +360,19 @@ namespace MediaBrowser.Server.Implementations.HttpServer
 
 
             var compress = ShouldCompressResponse(requestContext, contentType);
             var compress = ShouldCompressResponse(requestContext, contentType);
 
 
-            var hasOptions = GetStaticResult(requestContext, responseHeaders, contentType, factoryFn, compress, isHeadRequest).Result;
+            var hasOptions = GetStaticResult(requestContext, responseHeaders, contentType, factoryFn, compress, isHeadRequest);
 
 
-            AddResponseHeaders(hasOptions, responseHeaders);
+            return GetStaticResultTask(hasOptions, responseHeaders);
+        }
+
+        private async Task<object> GetStaticResultTask(Task<IHasOptions> optionsTask,
+            IEnumerable<KeyValuePair<string, string>> responseHeaders)
+        {
+            var options = await optionsTask.ConfigureAwait(false);
+
+            AddResponseHeaders(options, responseHeaders);
 
 
-            return hasOptions;
+            return options;
         }
         }
 
 
         /// <summary>
         /// <summary>

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

@@ -407,6 +407,11 @@ namespace MediaBrowser.Server.Implementations.Library
                 }
                 }
             }
             }
 
 
+            RegisterItem(item);
+        }
+
+        public void RegisterItem(BaseItem item)
+        {
             LibraryItemsCache.AddOrUpdate(item.Id, item, delegate { return item; });
             LibraryItemsCache.AddOrUpdate(item.Id, item, delegate { return item; });
         }
         }
 
 

+ 14 - 8
MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs

@@ -30,21 +30,23 @@ namespace MediaBrowser.Server.Implementations.LiveTv
         private readonly ILogger _logger;
         private readonly ILogger _logger;
         private readonly IItemRepository _itemRepo;
         private readonly IItemRepository _itemRepo;
         private readonly IUserManager _userManager;
         private readonly IUserManager _userManager;
+        private readonly ILibraryManager _libraryManager;
 
 
         private readonly LiveTvDtoService _tvDtoService;
         private readonly LiveTvDtoService _tvDtoService;
 
 
         private readonly List<ILiveTvService> _services = new List<ILiveTvService>();
         private readonly List<ILiveTvService> _services = new List<ILiveTvService>();
 
 
-        private Dictionary<Guid, LiveTvChannel> _channels = new Dictionary<Guid, LiveTvChannel>();
+        private List<Guid> _channelIdList = new List<Guid>();
         private Dictionary<Guid, LiveTvProgram> _programs = new Dictionary<Guid, LiveTvProgram>();
         private Dictionary<Guid, LiveTvProgram> _programs = new Dictionary<Guid, LiveTvProgram>();
 
 
-        public LiveTvManager(IServerApplicationPaths appPaths, IFileSystem fileSystem, ILogger logger, IItemRepository itemRepo, IImageProcessor imageProcessor, IUserDataManager userDataManager, IDtoService dtoService, IUserManager userManager)
+        public LiveTvManager(IServerApplicationPaths appPaths, IFileSystem fileSystem, ILogger logger, IItemRepository itemRepo, IImageProcessor imageProcessor, IUserDataManager userDataManager, IDtoService dtoService, IUserManager userManager, ILibraryManager libraryManager)
         {
         {
             _appPaths = appPaths;
             _appPaths = appPaths;
             _fileSystem = fileSystem;
             _fileSystem = fileSystem;
             _logger = logger;
             _logger = logger;
             _itemRepo = itemRepo;
             _itemRepo = itemRepo;
             _userManager = userManager;
             _userManager = userManager;
+            _libraryManager = libraryManager;
 
 
             _tvDtoService = new LiveTvDtoService(dtoService, userDataManager, imageProcessor, logger, _itemRepo);
             _tvDtoService = new LiveTvDtoService(dtoService, userDataManager, imageProcessor, logger, _itemRepo);
         }
         }
@@ -75,7 +77,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv
         {
         {
             var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(new Guid(query.UserId));
             var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(new Guid(query.UserId));
 
 
-            IEnumerable<LiveTvChannel> channels = _channels.Values;
+            var channels = _channelIdList.Select(_libraryManager.GetItemById)
+                .Where(i => i != null)
+                .OfType<LiveTvChannel>();
 
 
             if (user != null)
             if (user != null)
             {
             {
@@ -144,10 +148,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
 
 
         private LiveTvChannel GetInternalChannel(Guid id)
         private LiveTvChannel GetInternalChannel(Guid id)
         {
         {
-            LiveTvChannel channel = null;
-
-            _channels.TryGetValue(id, out channel);
-            return channel;
+            return _libraryManager.GetItemById(id) as LiveTvChannel;
         }
         }
 
 
         public LiveTvProgram GetInternalProgram(string id)
         public LiveTvProgram GetInternalProgram(string id)
@@ -320,6 +321,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
 
 
             await item.RefreshMetadata(cancellationToken, forceSave: isNew, resetResolveArgs: false);
             await item.RefreshMetadata(cancellationToken, forceSave: isNew, resetResolveArgs: false);
 
 
+            _libraryManager.RegisterItem((BaseItem)item);
+
             return item;
             return item;
         }
         }
 
 
@@ -477,6 +480,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
                     var item = await GetChannel(channelInfo.Item2, channelInfo.Item1, cancellationToken).ConfigureAwait(false);
                     var item = await GetChannel(channelInfo.Item2, channelInfo.Item1, cancellationToken).ConfigureAwait(false);
 
 
                     list.Add(item);
                     list.Add(item);
+
+                    _libraryManager.RegisterItem(item);
                 }
                 }
                 catch (OperationCanceledException)
                 catch (OperationCanceledException)
                 {
                 {
@@ -493,7 +498,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
 
 
                 progress.Report(5 * percent + 10);
                 progress.Report(5 * percent + 10);
             }
             }
-            _channels = list.ToDictionary(i => i.Id);
+
+            _channelIdList = list.Select(i => i.Id).ToList();
             progress.Report(15);
             progress.Report(15);
 
 
              numComplete = 0;
              numComplete = 0;

+ 7 - 3
MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj

@@ -48,6 +48,13 @@
     <Reference Include="Alchemy">
     <Reference Include="Alchemy">
       <HintPath>..\packages\Alchemy.2.2.1\lib\net40\Alchemy.dll</HintPath>
       <HintPath>..\packages\Alchemy.2.2.1\lib\net40\Alchemy.dll</HintPath>
     </Reference>
     </Reference>
+    <Reference Include="BDInfo, Version=1.0.5124.611, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\packages\MediaBrowser.BdInfo.1.0.0.7\lib\net35\BDInfo.dll</HintPath>
+    </Reference>
+    <Reference Include="DvdLib">
+      <HintPath>..\packages\MediaBrowser.BdInfo.1.0.0.7\lib\net35\DvdLib.dll</HintPath>
+    </Reference>
     <Reference Include="ServiceStack.Api.Swagger">
     <Reference Include="ServiceStack.Api.Swagger">
       <HintPath>..\ThirdParty\ServiceStack\ServiceStack.Api.Swagger.dll</HintPath>
       <HintPath>..\ThirdParty\ServiceStack\ServiceStack.Api.Swagger.dll</HintPath>
     </Reference>
     </Reference>
@@ -68,9 +75,6 @@
     <Reference Include="MoreLinq">
     <Reference Include="MoreLinq">
       <HintPath>..\packages\morelinq.1.0.16006\lib\net35\MoreLinq.dll</HintPath>
       <HintPath>..\packages\morelinq.1.0.16006\lib\net35\MoreLinq.dll</HintPath>
     </Reference>
     </Reference>
-    <Reference Include="BDInfo">
-      <HintPath>..\packages\MediaBrowser.BdInfo.1.0.0.5\lib\net20\BDInfo.dll</HintPath>
-    </Reference>
     <Reference Include="System.Data.SQLite" Condition=" '$(ConfigurationName)' == 'Release Mono' ">
     <Reference Include="System.Data.SQLite" Condition=" '$(ConfigurationName)' == 'Release Mono' ">
       <SpecificVersion>False</SpecificVersion>
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\ThirdParty\System.Data.SQLite.ManagedOnly\x86\1.0.90.0\net40\System.Data.SQLite.dll</HintPath>
       <HintPath>..\ThirdParty\System.Data.SQLite.ManagedOnly\x86\1.0.90.0\net40\System.Data.SQLite.dll</HintPath>

+ 1 - 1
MediaBrowser.Server.Implementations/packages.config

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
 <packages>
   <package id="Alchemy" version="2.2.1" targetFramework="net45" />
   <package id="Alchemy" version="2.2.1" targetFramework="net45" />
-  <package id="MediaBrowser.BdInfo" version="1.0.0.5" targetFramework="net45" />
+  <package id="MediaBrowser.BdInfo" version="1.0.0.7" targetFramework="net45" />
   <package id="morelinq" version="1.0.16006" targetFramework="net45" />
   <package id="morelinq" version="1.0.16006" targetFramework="net45" />
   <package id="System.Data.SQLite.x86" version="1.0.90.0" targetFramework="net45" />
   <package id="System.Data.SQLite.x86" version="1.0.90.0" targetFramework="net45" />
 </packages>
 </packages>

+ 1 - 1
MediaBrowser.ServerApplication/ApplicationHost.cs

@@ -285,7 +285,7 @@ namespace MediaBrowser.ServerApplication
             DtoService = new DtoService(Logger, LibraryManager, UserManager, UserDataManager, ItemRepository, ImageProcessor);
             DtoService = new DtoService(Logger, LibraryManager, UserManager, UserDataManager, ItemRepository, ImageProcessor);
             RegisterSingleInstance(DtoService);
             RegisterSingleInstance(DtoService);
 
 
-            LiveTvManager = new LiveTvManager(ApplicationPaths, FileSystemManager, Logger, ItemRepository, ImageProcessor, UserDataManager, DtoService, UserManager);
+            LiveTvManager = new LiveTvManager(ApplicationPaths, FileSystemManager, Logger, ItemRepository, ImageProcessor, UserDataManager, DtoService, UserManager, LibraryManager);
             RegisterSingleInstance(LiveTvManager);
             RegisterSingleInstance(LiveTvManager);
             progress.Report(15);
             progress.Report(15);
 
 

+ 0 - 12
MediaBrowser.WebDashboard/ApiClient.js

@@ -1594,9 +1594,6 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
             if (itemType == "Artist") {
             if (itemType == "Artist") {
                 url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images");
                 url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images");
             }
             }
-            else if (itemType == "Channel") {
-                url = self.getUrl("LiveTv/Channels/" + itemId + "/Images");
-            }
             else if (itemType == "Genre") {
             else if (itemType == "Genre") {
                 url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images");
                 url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images");
             } else if (itemType == "GameGenre") {
             } else if (itemType == "GameGenre") {
@@ -1667,9 +1664,6 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
             if (itemType == "Artist") {
             if (itemType == "Artist") {
                 url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
                 url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
             }
             }
-            else if (itemType == "Channel") {
-                url = self.getUrl("LiveTv/Channels/" + itemId + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
-            }
             else if (itemType == "Genre") {
             else if (itemType == "Genre") {
                 url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
                 url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
             } else if (itemType == "GameGenre") {
             } else if (itemType == "GameGenre") {
@@ -1701,9 +1695,6 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
             if (itemType == "Artist") {
             if (itemType == "Artist") {
                 url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images");
                 url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images");
             }
             }
-            else if (itemType == "Channel") {
-                url = self.getUrl("LiveTv/Channels/" + itemId + "/Images");
-            }
             else if (itemType == "Genre") {
             else if (itemType == "Genre") {
                 url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images");
                 url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images");
             } else if (itemType == "GameGenre") {
             } else if (itemType == "GameGenre") {
@@ -1838,9 +1829,6 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
             if (itemType == "Artist") {
             if (itemType == "Artist") {
                 url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images");
                 url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images");
             }
             }
-            else if (itemType == "Channel") {
-                url = self.getUrl("LiveTv/Channels/" + itemId + "/Images");
-            }
             else if (itemType == "Genre") {
             else if (itemType == "Genre") {
                 url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images");
                 url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images");
             } else if (itemType == "GameGenre") {
             } else if (itemType == "GameGenre") {

+ 1 - 1
MediaBrowser.WebDashboard/packages.config

@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
 <packages>
-  <package id="MediaBrowser.ApiClient.Javascript" version="3.0.223" targetFramework="net45" />
+  <package id="MediaBrowser.ApiClient.Javascript" version="3.0.224" targetFramework="net45" />
 </packages>
 </packages>