mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-04 03:27:21 -05:00 
			
		
		
		
	type discovery without attributes
This commit is contained in:
		
							parent
							
								
									c165f37bb9
								
							
						
					
					
						commit
						b8d5c71842
					
				@ -1,11 +1,9 @@
 | 
				
			|||||||
using MediaBrowser.Common.IO;
 | 
					using MediaBrowser.Common.Net;
 | 
				
			||||||
using MediaBrowser.Common.Net;
 | 
					 | 
				
			||||||
using MediaBrowser.Controller.IO;
 | 
					using MediaBrowser.Controller.IO;
 | 
				
			||||||
using MediaBrowser.Model.IO;
 | 
					using MediaBrowser.Model.IO;
 | 
				
			||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Globalization;
 | 
					using System.Globalization;
 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
@ -59,7 +57,6 @@ namespace MediaBrowser.Api
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class EnvironmentService
 | 
					    /// Class EnvironmentService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class EnvironmentService : BaseRestService
 | 
					    public class EnvironmentService : BaseRestService
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,6 @@ using MediaBrowser.Controller.Library;
 | 
				
			|||||||
using MediaBrowser.Model.Connectivity;
 | 
					using MediaBrowser.Model.Connectivity;
 | 
				
			||||||
using MediaBrowser.Model.Dto;
 | 
					using MediaBrowser.Model.Dto;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Api.HttpHandlers
 | 
					namespace MediaBrowser.Api.HttpHandlers
 | 
				
			||||||
@ -13,7 +12,6 @@ namespace MediaBrowser.Api.HttpHandlers
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Provides a handler to set played status for an item
 | 
					    /// Provides a handler to set played status for an item
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IHttpServerHandler))]
 | 
					 | 
				
			||||||
    public class PlaybackCheckInHandler : BaseSerializationHandler<Kernel, UserItemDataDto>
 | 
					    public class PlaybackCheckInHandler : BaseSerializationHandler<Kernel, UserItemDataDto>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,19 +1,17 @@
 | 
				
			|||||||
using MediaBrowser.Common.IO;
 | 
					using MediaBrowser.Common.Net.Handlers;
 | 
				
			||||||
using MediaBrowser.Common.Net.Handlers;
 | 
					 | 
				
			||||||
using MediaBrowser.Controller;
 | 
					using MediaBrowser.Controller;
 | 
				
			||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using MediaBrowser.Controller.IO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Api.HttpHandlers
 | 
					namespace MediaBrowser.Api.HttpHandlers
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Makes changes to the user's media library
 | 
					    /// Makes changes to the user's media library
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IHttpServerHandler))]
 | 
					 | 
				
			||||||
    public class UpdateMediaLibraryHandler : BaseActionHandler<Kernel>
 | 
					    public class UpdateMediaLibraryHandler : BaseActionHandler<Kernel>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,6 @@ using MediaBrowser.Controller.Library;
 | 
				
			|||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -114,7 +113,6 @@ namespace MediaBrowser.Api.Images
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class ImageService
 | 
					    /// Class ImageService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class ImageService : BaseRestService
 | 
					    public class ImageService : BaseRestService
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,6 @@ using MediaBrowser.Controller.Entities;
 | 
				
			|||||||
using MediaBrowser.Controller.Library;
 | 
					using MediaBrowser.Controller.Library;
 | 
				
			||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -15,7 +14,6 @@ namespace MediaBrowser.Api.Images
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class UploadImageHandler
 | 
					    /// Class UploadImageHandler
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IHttpServerHandler))]
 | 
					 | 
				
			||||||
    class UploadImageHandler : BaseActionHandler<Kernel>
 | 
					    class UploadImageHandler : BaseActionHandler<Kernel>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,6 @@ using MediaBrowser.Model.Entities;
 | 
				
			|||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Api
 | 
					namespace MediaBrowser.Api
 | 
				
			||||||
@ -96,7 +95,6 @@ namespace MediaBrowser.Api
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class LibraryService
 | 
					    /// Class LibraryService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class LibraryService : BaseRestService
 | 
					    public class LibraryService : BaseRestService
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,6 @@ using MediaBrowser.Model.Globalization;
 | 
				
			|||||||
using MoreLinq;
 | 
					using MoreLinq;
 | 
				
			||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Globalization;
 | 
					using System.Globalization;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -38,7 +37,6 @@ namespace MediaBrowser.Api
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class CulturesService
 | 
					    /// Class CulturesService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class LocalizationService : BaseRestService
 | 
					    public class LocalizationService : BaseRestService
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -64,7 +64,6 @@
 | 
				
			|||||||
      <HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath>
 | 
					      <HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath>
 | 
				
			||||||
    </Reference>
 | 
					    </Reference>
 | 
				
			||||||
    <Reference Include="System" />
 | 
					    <Reference Include="System" />
 | 
				
			||||||
    <Reference Include="System.ComponentModel.Composition" />
 | 
					 | 
				
			||||||
    <Reference Include="System.Core" />
 | 
					    <Reference Include="System.Core" />
 | 
				
			||||||
    <Reference Include="System.Drawing" />
 | 
					    <Reference Include="System.Drawing" />
 | 
				
			||||||
    <Reference Include="System.Runtime.Serialization" />
 | 
					    <Reference Include="System.Runtime.Serialization" />
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,6 @@ using MediaBrowser.Model.Updates;
 | 
				
			|||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -93,7 +92,6 @@ namespace MediaBrowser.Api
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class PackageService
 | 
					    /// Class PackageService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class PackageService : BaseRestService
 | 
					    public class PackageService : BaseRestService
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,6 @@ using MediaBrowser.Model.Plugins;
 | 
				
			|||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel;
 | 
					using System.ComponentModel;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Diagnostics;
 | 
					using System.Diagnostics;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
@ -14,7 +13,6 @@ namespace MediaBrowser.Api
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class Plugin
 | 
					    /// Class Plugin
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IPlugin))]
 | 
					 | 
				
			||||||
    public class Plugin : BasePlugin<BasePluginConfiguration>
 | 
					    public class Plugin : BasePlugin<BasePluginConfiguration>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -7,10 +7,8 @@ using MediaBrowser.Model.Plugins;
 | 
				
			|||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					 | 
				
			||||||
using ServiceStack.Text.Controller;
 | 
					using ServiceStack.Text.Controller;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Api
 | 
					namespace MediaBrowser.Api
 | 
				
			||||||
@ -119,7 +117,6 @@ namespace MediaBrowser.Api
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class PluginsService
 | 
					    /// Class PluginsService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class PluginService : BaseRestService
 | 
					    public class PluginService : BaseRestService
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,6 @@ using MediaBrowser.Model.Tasks;
 | 
				
			|||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using ServiceStack.Text.Controller;
 | 
					using ServiceStack.Text.Controller;
 | 
				
			||||||
@ -83,9 +82,19 @@ namespace MediaBrowser.Api.ScheduledTasks
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class ScheduledTasksService
 | 
					    /// Class ScheduledTasksService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class ScheduledTaskService : BaseRestService
 | 
					    public class ScheduledTaskService : BaseRestService
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets or sets the task manager.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <value>The task manager.</value>
 | 
				
			||||||
 | 
					        private ITaskManager TaskManager { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public ScheduledTaskService(ITaskManager taskManager)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            TaskManager = taskManager;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets the specified request.
 | 
					        /// Gets the specified request.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@ -93,7 +102,7 @@ namespace MediaBrowser.Api.ScheduledTasks
 | 
				
			|||||||
        /// <returns>IEnumerable{TaskInfo}.</returns>
 | 
					        /// <returns>IEnumerable{TaskInfo}.</returns>
 | 
				
			||||||
        public object Get(GetScheduledTasks request)
 | 
					        public object Get(GetScheduledTasks request)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var result = Kernel.ScheduledTasks.OrderBy(i => i.Name)
 | 
					            var result = TaskManager.ScheduledTasks.OrderBy(i => i.Name)
 | 
				
			||||||
                         .Select(ScheduledTaskHelpers.GetTaskInfo).ToList();
 | 
					                         .Select(ScheduledTaskHelpers.GetTaskInfo).ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return ToOptimizedResult(result);
 | 
					            return ToOptimizedResult(result);
 | 
				
			||||||
@ -106,7 +115,7 @@ namespace MediaBrowser.Api.ScheduledTasks
 | 
				
			|||||||
        /// <returns>IEnumerable{TaskInfo}.</returns>
 | 
					        /// <returns>IEnumerable{TaskInfo}.</returns>
 | 
				
			||||||
        public object Get(GetScheduledTask request)
 | 
					        public object Get(GetScheduledTask request)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var task = Kernel.ScheduledTasks.FirstOrDefault(i => i.Id == request.Id);
 | 
					            var task = TaskManager.ScheduledTasks.FirstOrDefault(i => i.Id == request.Id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (task == null)
 | 
					            if (task == null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -124,7 +133,7 @@ namespace MediaBrowser.Api.ScheduledTasks
 | 
				
			|||||||
        /// <param name="request">The request.</param>
 | 
					        /// <param name="request">The request.</param>
 | 
				
			||||||
        public void Post(StartScheduledTask request)
 | 
					        public void Post(StartScheduledTask request)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var task = Kernel.ScheduledTasks.FirstOrDefault(i => i.Id == request.Id);
 | 
					            var task = TaskManager.ScheduledTasks.FirstOrDefault(i => i.Id == request.Id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (task == null)
 | 
					            if (task == null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -140,7 +149,7 @@ namespace MediaBrowser.Api.ScheduledTasks
 | 
				
			|||||||
        /// <param name="request">The request.</param>
 | 
					        /// <param name="request">The request.</param>
 | 
				
			||||||
        public void Delete(StopScheduledTask request)
 | 
					        public void Delete(StopScheduledTask request)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var task = Kernel.ScheduledTasks.FirstOrDefault(i => i.Id == request.Id);
 | 
					            var task = TaskManager.ScheduledTasks.FirstOrDefault(i => i.Id == request.Id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (task == null)
 | 
					            if (task == null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -161,7 +170,7 @@ namespace MediaBrowser.Api.ScheduledTasks
 | 
				
			|||||||
            var pathInfo = PathInfo.Parse(Request.PathInfo);
 | 
					            var pathInfo = PathInfo.Parse(Request.PathInfo);
 | 
				
			||||||
            var id = new Guid(pathInfo.GetArgumentValue<string>(1));
 | 
					            var id = new Guid(pathInfo.GetArgumentValue<string>(1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var task = Kernel.ScheduledTasks.FirstOrDefault(i => i.Id == id);
 | 
					            var task = TaskManager.ScheduledTasks.FirstOrDefault(i => i.Id == id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (task == null)
 | 
					            if (task == null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -170,7 +179,7 @@ namespace MediaBrowser.Api.ScheduledTasks
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            var triggerInfos = JsonSerializer.DeserializeFromStream<TaskTriggerInfo[]>(request.RequestStream);
 | 
					            var triggerInfos = JsonSerializer.DeserializeFromStream<TaskTriggerInfo[]>(request.RequestStream);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            task.Triggers = triggerInfos.Select(t => ScheduledTaskHelpers.GetTrigger(t, Kernel));
 | 
					            task.Triggers = triggerInfos.Select(ScheduledTaskHelpers.GetTrigger);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,10 +1,8 @@
 | 
				
			|||||||
using MediaBrowser.Common.Kernel;
 | 
					using MediaBrowser.Common.Kernel;
 | 
				
			||||||
using MediaBrowser.Common.ScheduledTasks;
 | 
					using MediaBrowser.Common.ScheduledTasks;
 | 
				
			||||||
using MediaBrowser.Controller;
 | 
					 | 
				
			||||||
using MediaBrowser.Model.Logging;
 | 
					using MediaBrowser.Model.Logging;
 | 
				
			||||||
using MediaBrowser.Model.Tasks;
 | 
					using MediaBrowser.Model.Tasks;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -13,9 +11,14 @@ namespace MediaBrowser.Api.ScheduledTasks
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class ScheduledTasksWebSocketListener
 | 
					    /// Class ScheduledTasksWebSocketListener
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IWebSocketListener))]
 | 
					 | 
				
			||||||
    public class ScheduledTasksWebSocketListener : BasePeriodicWebSocketListener<IEnumerable<TaskInfo>, object>
 | 
					    public class ScheduledTasksWebSocketListener : BasePeriodicWebSocketListener<IEnumerable<TaskInfo>, object>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets or sets the task manager.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <value>The task manager.</value>
 | 
				
			||||||
 | 
					        private ITaskManager TaskManager { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets the name.
 | 
					        /// Gets the name.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@ -33,13 +36,12 @@ namespace MediaBrowser.Api.ScheduledTasks
 | 
				
			|||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Initializes a new instance of the <see cref="ScheduledTasksWebSocketListener" /> class.
 | 
					        /// Initializes a new instance of the <see cref="ScheduledTasksWebSocketListener" /> class.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <param name="kernel">The kernel.</param>
 | 
					 | 
				
			||||||
        /// <param name="logger">The logger.</param>
 | 
					        /// <param name="logger">The logger.</param>
 | 
				
			||||||
        [ImportingConstructor]
 | 
					        /// <param name="taskManager">The task manager.</param>
 | 
				
			||||||
        public ScheduledTasksWebSocketListener([Import("kernel")] Kernel kernel, [Import("logger")] ILogger logger)
 | 
					        public ScheduledTasksWebSocketListener(ILogger logger, ITaskManager taskManager)
 | 
				
			||||||
            : base(logger)
 | 
					            : base(logger)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _kernel = kernel;
 | 
					            TaskManager = taskManager;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -49,7 +51,7 @@ namespace MediaBrowser.Api.ScheduledTasks
 | 
				
			|||||||
        /// <returns>Task{IEnumerable{TaskInfo}}.</returns>
 | 
					        /// <returns>Task{IEnumerable{TaskInfo}}.</returns>
 | 
				
			||||||
        protected override Task<IEnumerable<TaskInfo>> GetDataToSend(object state)
 | 
					        protected override Task<IEnumerable<TaskInfo>> GetDataToSend(object state)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return Task.FromResult(_kernel.ScheduledTasks.OrderBy(i => i.Name)
 | 
					            return Task.FromResult(TaskManager.ScheduledTasks.OrderBy(i => i.Name)
 | 
				
			||||||
                         .Select(ScheduledTaskHelpers.GetTaskInfo));
 | 
					                         .Select(ScheduledTaskHelpers.GetTaskInfo));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,6 @@ using MediaBrowser.Controller.Resolvers;
 | 
				
			|||||||
using MediaBrowser.Model.Dto;
 | 
					using MediaBrowser.Model.Dto;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Net;
 | 
					using System.Net;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -14,7 +13,6 @@ namespace MediaBrowser.Api.Streaming
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Providers a progressive streaming audio api
 | 
					    /// Providers a progressive streaming audio api
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IHttpServerHandler))]
 | 
					 | 
				
			||||||
    public class AudioHandler : BaseProgressiveStreamingHandler<Audio>
 | 
					    public class AudioHandler : BaseProgressiveStreamingHandler<Audio>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -859,11 +859,11 @@ namespace MediaBrowser.Api.Streaming
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            var video = LibraryItem as Video;
 | 
					            var video = LibraryItem as Video;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (video != null && video.VideoType == VideoType.Iso &&
 | 
					            //if (video != null && video.VideoType == VideoType.Iso &&
 | 
				
			||||||
                video.IsoType.HasValue && Kernel.IsoManager.CanMount(video.Path))
 | 
					            //    video.IsoType.HasValue && Kernel.IsoManager.CanMount(video.Path))
 | 
				
			||||||
            {
 | 
					            //{
 | 
				
			||||||
                IsoMount = await Kernel.IsoManager.Mount(video.Path, CancellationToken.None).ConfigureAwait(false);
 | 
					            //    IsoMount = await Kernel.IsoManager.Mount(video.Path, CancellationToken.None).ConfigureAwait(false);
 | 
				
			||||||
            }
 | 
					            //}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var process = new Process
 | 
					            var process = new Process
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,6 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Entities.Audio;
 | 
					using MediaBrowser.Controller.Entities.Audio;
 | 
				
			||||||
using MediaBrowser.Model.Dto;
 | 
					using MediaBrowser.Model.Dto;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Net;
 | 
					using System.Net;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Api.Streaming
 | 
					namespace MediaBrowser.Api.Streaming
 | 
				
			||||||
@ -10,7 +9,6 @@ namespace MediaBrowser.Api.Streaming
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class HlsAudioPlaylistHandler
 | 
					    /// Class HlsAudioPlaylistHandler
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IHttpServerHandler))]
 | 
					 | 
				
			||||||
    public class HlsAudioPlaylistHandler : BaseHlsPlaylistHandler<Audio>
 | 
					    public class HlsAudioPlaylistHandler : BaseHlsPlaylistHandler<Audio>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,6 @@
 | 
				
			|||||||
using MediaBrowser.Common.Net.Handlers;
 | 
					using MediaBrowser.Common.Net.Handlers;
 | 
				
			||||||
using MediaBrowser.Controller;
 | 
					using MediaBrowser.Controller;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Net;
 | 
					using System.Net;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -11,7 +10,6 @@ namespace MediaBrowser.Api.Streaming
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class HlsSegmentHandler
 | 
					    /// Class HlsSegmentHandler
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IHttpServerHandler))]
 | 
					 | 
				
			||||||
    public class HlsSegmentHandler : BaseHandler<Kernel>
 | 
					    public class HlsSegmentHandler : BaseHandler<Kernel>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,6 @@
 | 
				
			|||||||
using MediaBrowser.Common.Net.Handlers;
 | 
					using MediaBrowser.Common.Net.Handlers;
 | 
				
			||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Net;
 | 
					using System.Net;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Api.Streaming
 | 
					namespace MediaBrowser.Api.Streaming
 | 
				
			||||||
@ -9,7 +8,6 @@ namespace MediaBrowser.Api.Streaming
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class HlsVideoPlaylistHandler
 | 
					    /// Class HlsVideoPlaylistHandler
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IHttpServerHandler))]
 | 
					 | 
				
			||||||
    public class HlsVideoPlaylistHandler : BaseHlsPlaylistHandler<Video>
 | 
					    public class HlsVideoPlaylistHandler : BaseHlsPlaylistHandler<Video>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,21 +1,15 @@
 | 
				
			|||||||
using System.IO;
 | 
					using MediaBrowser.Common.IO;
 | 
				
			||||||
using System.Threading;
 | 
					 | 
				
			||||||
using MediaBrowser.Common.IO;
 | 
					 | 
				
			||||||
using MediaBrowser.Common.Net.Handlers;
 | 
					 | 
				
			||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
using MediaBrowser.Controller.Resolvers;
 | 
					using MediaBrowser.Controller.Resolvers;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Net;
 | 
					using System.Net;
 | 
				
			||||||
using MediaBrowser.Model.Entities;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Api.Streaming
 | 
					namespace MediaBrowser.Api.Streaming
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Providers a progressive streaming video api
 | 
					    /// Providers a progressive streaming video api
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IHttpServerHandler))]
 | 
					 | 
				
			||||||
    class VideoHandler : BaseProgressiveStreamingHandler<Video>
 | 
					    class VideoHandler : BaseProgressiveStreamingHandler<Video>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,6 @@ using MediaBrowser.Controller;
 | 
				
			|||||||
using MediaBrowser.Model.Configuration;
 | 
					using MediaBrowser.Model.Configuration;
 | 
				
			||||||
using MediaBrowser.Model.System;
 | 
					using MediaBrowser.Model.System;
 | 
				
			||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -47,7 +46,6 @@ namespace MediaBrowser.Api
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class SystemInfoService
 | 
					    /// Class SystemInfoService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class SystemService : BaseRestService
 | 
					    public class SystemService : BaseRestService
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities;
 | 
				
			|||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -22,7 +21,6 @@ namespace MediaBrowser.Api.UserLibrary
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class GenresService
 | 
					    /// Class GenresService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class GenresService : BaseItemsByNameService<Genre>
 | 
					    public class GenresService : BaseItemsByNameService<Genre>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -8,7 +8,6 @@ using MediaBrowser.Model.Entities;
 | 
				
			|||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -144,7 +143,6 @@ namespace MediaBrowser.Api.UserLibrary
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class ItemsService
 | 
					    /// Class ItemsService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class ItemsService : BaseRestService
 | 
					    public class ItemsService : BaseRestService
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities;
 | 
				
			|||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -27,7 +26,6 @@ namespace MediaBrowser.Api.UserLibrary
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class PersonsService
 | 
					    /// Class PersonsService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class PersonsService : BaseItemsByNameService<Person>
 | 
					    public class PersonsService : BaseItemsByNameService<Person>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,10 +1,8 @@
 | 
				
			|||||||
using MediaBrowser.Common.Net;
 | 
					using MediaBrowser.Controller;
 | 
				
			||||||
using MediaBrowser.Controller;
 | 
					 | 
				
			||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -22,7 +20,6 @@ namespace MediaBrowser.Api.UserLibrary
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class StudiosService
 | 
					    /// Class StudiosService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class StudiosService : BaseItemsByNameService<Studio>
 | 
					    public class StudiosService : BaseItemsByNameService<Studio>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -9,7 +9,6 @@ using MediaBrowser.Model.Entities;
 | 
				
			|||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -252,7 +251,6 @@ namespace MediaBrowser.Api.UserLibrary
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class UserLibraryService
 | 
					    /// Class UserLibraryService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class UserLibraryService : BaseRestService
 | 
					    public class UserLibraryService : BaseRestService
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public object Get(GetSpecialFeatures request)
 | 
					        public object Get(GetSpecialFeatures request)
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities;
 | 
				
			|||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Globalization;
 | 
					using System.Globalization;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -23,7 +22,6 @@ namespace MediaBrowser.Api.UserLibrary
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class YearsService
 | 
					    /// Class YearsService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class YearsService : BaseItemsByNameService<Year>
 | 
					    public class YearsService : BaseItemsByNameService<Year>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,6 @@ using MediaBrowser.Model.Dto;
 | 
				
			|||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -134,7 +133,6 @@ namespace MediaBrowser.Api
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class UsersService
 | 
					    /// Class UsersService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class UserService : BaseRestService
 | 
					    public class UserService : BaseRestService
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,6 @@
 | 
				
			|||||||
using MediaBrowser.Controller;
 | 
					using MediaBrowser.Controller;
 | 
				
			||||||
using MediaBrowser.Model.Weather;
 | 
					using MediaBrowser.Model.Weather;
 | 
				
			||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -24,7 +23,6 @@ namespace MediaBrowser.Api
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class WeatherService
 | 
					    /// Class WeatherService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class WeatherService : BaseRestService
 | 
					    public class WeatherService : BaseRestService
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,6 @@ using MediaBrowser.Controller;
 | 
				
			|||||||
using MediaBrowser.Model.Logging;
 | 
					using MediaBrowser.Model.Logging;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -14,7 +13,6 @@ namespace MediaBrowser.Api.WebSocket
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class ScheduledTasksWebSocketListener
 | 
					    /// Class ScheduledTasksWebSocketListener
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IWebSocketListener))]
 | 
					 | 
				
			||||||
    public class LogFileWebSocketListener : BasePeriodicWebSocketListener<IEnumerable<string>, LogFileWebSocketState>
 | 
					    public class LogFileWebSocketListener : BasePeriodicWebSocketListener<IEnumerable<string>, LogFileWebSocketState>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -36,8 +34,7 @@ namespace MediaBrowser.Api.WebSocket
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <param name="logger">The logger.</param>
 | 
					        /// <param name="logger">The logger.</param>
 | 
				
			||||||
        /// <param name="kernel">The kernel.</param>
 | 
					        /// <param name="kernel">The kernel.</param>
 | 
				
			||||||
        [ImportingConstructor]
 | 
					        public LogFileWebSocketListener(ILogger logger, Kernel kernel)
 | 
				
			||||||
        public LogFileWebSocketListener([Import("logger")] ILogger logger, [Import("kernel")] Kernel kernel)
 | 
					 | 
				
			||||||
            : base(logger)
 | 
					            : base(logger)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _kernel = kernel;
 | 
					            _kernel = kernel;
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,6 @@
 | 
				
			|||||||
using MediaBrowser.Controller;
 | 
					using MediaBrowser.Controller;
 | 
				
			||||||
using MediaBrowser.Model.Logging;
 | 
					using MediaBrowser.Model.Logging;
 | 
				
			||||||
using MediaBrowser.Model.System;
 | 
					using MediaBrowser.Model.System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Api.WebSocket
 | 
					namespace MediaBrowser.Api.WebSocket
 | 
				
			||||||
@ -10,7 +9,6 @@ namespace MediaBrowser.Api.WebSocket
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class SystemInfoWebSocketListener
 | 
					    /// Class SystemInfoWebSocketListener
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IWebSocketListener))]
 | 
					 | 
				
			||||||
    public class SystemInfoWebSocketListener : BasePeriodicWebSocketListener<SystemInfo, object>
 | 
					    public class SystemInfoWebSocketListener : BasePeriodicWebSocketListener<SystemInfo, object>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -32,8 +30,7 @@ namespace MediaBrowser.Api.WebSocket
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <param name="kernel">The kernel.</param>
 | 
					        /// <param name="kernel">The kernel.</param>
 | 
				
			||||||
        /// <param name="logger">The logger.</param>
 | 
					        /// <param name="logger">The logger.</param>
 | 
				
			||||||
        [ImportingConstructor]
 | 
					        public SystemInfoWebSocketListener(Kernel kernel, ILogger logger)
 | 
				
			||||||
        public SystemInfoWebSocketListener([Import("kernel")] Kernel kernel, [Import("logger")] ILogger logger)
 | 
					 | 
				
			||||||
            : base(logger)
 | 
					            : base(logger)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _kernel = kernel;
 | 
					            _kernel = kernel;
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,6 @@
 | 
				
			|||||||
using MediaBrowser.Common.Net;
 | 
					using MediaBrowser.Common.Net;
 | 
				
			||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -25,7 +24,6 @@ namespace MediaBrowser.ApiInteraction.Javascript
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class JavascriptApiClientService
 | 
					    /// Class JavascriptApiClientService
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IRestfulService))]
 | 
					 | 
				
			||||||
    public class JavascriptApiClientService : BaseRestService
 | 
					    public class JavascriptApiClientService : BaseRestService
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -68,7 +68,6 @@
 | 
				
			|||||||
      <HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath>
 | 
					      <HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath>
 | 
				
			||||||
    </Reference>
 | 
					    </Reference>
 | 
				
			||||||
    <Reference Include="System" />
 | 
					    <Reference Include="System" />
 | 
				
			||||||
    <Reference Include="System.ComponentModel.Composition" />
 | 
					 | 
				
			||||||
    <Reference Include="System.Core" />
 | 
					    <Reference Include="System.Core" />
 | 
				
			||||||
    <Reference Include="System.Xml.Linq" />
 | 
					    <Reference Include="System.Xml.Linq" />
 | 
				
			||||||
    <Reference Include="System.Data.DataSetExtensions" />
 | 
					    <Reference Include="System.Data.DataSetExtensions" />
 | 
				
			||||||
 | 
				
			|||||||
@ -9,9 +9,6 @@ using MediaBrowser.Model.Logging;
 | 
				
			|||||||
using MediaBrowser.Model.System;
 | 
					using MediaBrowser.Model.System;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.ComponentModel.Composition.Hosting;
 | 
					 | 
				
			||||||
using System.ComponentModel.Composition.Primitives;
 | 
					 | 
				
			||||||
using System.Diagnostics;
 | 
					using System.Diagnostics;
 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
@ -182,28 +179,14 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
        /// Gets the list of currently loaded plugins
 | 
					        /// Gets the list of currently loaded plugins
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <value>The plugins.</value>
 | 
					        /// <value>The plugins.</value>
 | 
				
			||||||
        [ImportMany(typeof(IPlugin))]
 | 
					 | 
				
			||||||
        public IEnumerable<IPlugin> Plugins { get; protected set; }
 | 
					        public IEnumerable<IPlugin> Plugins { get; protected set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					 | 
				
			||||||
        /// Gets the list of Scheduled Tasks
 | 
					 | 
				
			||||||
        /// </summary>
 | 
					 | 
				
			||||||
        /// <value>The scheduled tasks.</value>
 | 
					 | 
				
			||||||
        [ImportMany(typeof(IScheduledTask))]
 | 
					 | 
				
			||||||
        public IEnumerable<IScheduledTask> ScheduledTasks { get; private set; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets the web socket listeners.
 | 
					        /// Gets the web socket listeners.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <value>The web socket listeners.</value>
 | 
					        /// <value>The web socket listeners.</value>
 | 
				
			||||||
        public IEnumerable<IWebSocketListener> WebSocketListeners { get; private set; }
 | 
					        public IEnumerable<IWebSocketListener> WebSocketListeners { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					 | 
				
			||||||
        /// Gets the MEF CompositionContainer
 | 
					 | 
				
			||||||
        /// </summary>
 | 
					 | 
				
			||||||
        /// <value>The composition container.</value>
 | 
					 | 
				
			||||||
        private CompositionContainer CompositionContainer { get; set; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// The _HTTP manager
 | 
					        /// The _HTTP manager
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@ -216,12 +199,6 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
        /// <value>The TCP manager.</value>
 | 
					        /// <value>The TCP manager.</value>
 | 
				
			||||||
        public TcpManager TcpManager { get; private set; }
 | 
					        public TcpManager TcpManager { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					 | 
				
			||||||
        /// Gets the task manager.
 | 
					 | 
				
			||||||
        /// </summary>
 | 
					 | 
				
			||||||
        /// <value>The task manager.</value>
 | 
					 | 
				
			||||||
        public TaskManager TaskManager { get; private set; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets the rest services.
 | 
					        /// Gets the rest services.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@ -324,11 +301,17 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
        /// <value>The application host.</value>
 | 
					        /// <value>The application host.</value>
 | 
				
			||||||
        protected IApplicationHost ApplicationHost { get; private set; }
 | 
					        protected IApplicationHost ApplicationHost { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets or sets the task manager.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <value>The task manager.</value>
 | 
				
			||||||
 | 
					        protected ITaskManager TaskManager { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets the assemblies.
 | 
					        /// Gets the assemblies.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <value>The assemblies.</value>
 | 
					        /// <value>The assemblies.</value>
 | 
				
			||||||
        public Assembly[] Assemblies { get; private set; }
 | 
					        protected Assembly[] Assemblies { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets all types.
 | 
					        /// Gets all types.
 | 
				
			||||||
@ -407,7 +390,7 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
            await OnConfigurationLoaded().ConfigureAwait(false);
 | 
					            await OnConfigurationLoaded().ConfigureAwait(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            DisposeTaskManager();
 | 
					            DisposeTaskManager();
 | 
				
			||||||
            TaskManager = new TaskManager(this, Logger);
 | 
					            TaskManager = new TaskManager(Logger);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Logger.Info("Loading Plugins");
 | 
					            Logger.Info("Loading Plugins");
 | 
				
			||||||
            await ReloadComposableParts().ConfigureAwait(false);
 | 
					            await ReloadComposableParts().ConfigureAwait(false);
 | 
				
			||||||
@ -453,8 +436,6 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
            ComposeParts(AllTypes);
 | 
					            ComposeParts(AllTypes);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            await OnComposablePartsLoaded().ConfigureAwait(false);
 | 
					            await OnComposablePartsLoaded().ConfigureAwait(false);
 | 
				
			||||||
 | 
					 | 
				
			||||||
            CompositionContainer.Catalog.Dispose();
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -465,11 +446,7 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            var concreteTypes = allTypes.Where(t => t.IsClass && !t.IsAbstract && !t.IsInterface && !t.IsGenericType).ToArray();
 | 
					            var concreteTypes = allTypes.Where(t => t.IsClass && !t.IsAbstract && !t.IsInterface && !t.IsGenericType).ToArray();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            CompositionContainer = GetSafeCompositionContainer(concreteTypes.Select(i => new TypeCatalog(i)));
 | 
					            RegisterExportedValues();
 | 
				
			||||||
 | 
					 | 
				
			||||||
            RegisterExportedValues(CompositionContainer);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            CompositionContainer.ComposeParts(this);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            FindParts(concreteTypes);
 | 
					            FindParts(concreteTypes);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -482,6 +459,11 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            RestServices = GetExports<IRestfulService>(allTypes);
 | 
					            RestServices = GetExports<IRestfulService>(allTypes);
 | 
				
			||||||
            WebSocketListeners = GetExports<IWebSocketListener>(allTypes);
 | 
					            WebSocketListeners = GetExports<IWebSocketListener>(allTypes);
 | 
				
			||||||
 | 
					            Plugins = GetExports<IPlugin>(allTypes);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var tasks = GetExports<IScheduledTask>(allTypes, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            TaskManager.AddTasks(tasks);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -489,8 +471,9 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <typeparam name="T"></typeparam>
 | 
					        /// <typeparam name="T"></typeparam>
 | 
				
			||||||
        /// <param name="allTypes">All types.</param>
 | 
					        /// <param name="allTypes">All types.</param>
 | 
				
			||||||
 | 
					        /// <param name="manageLiftime">if set to <c>true</c> [manage liftime].</param>
 | 
				
			||||||
        /// <returns>IEnumerable{``0}.</returns>
 | 
					        /// <returns>IEnumerable{``0}.</returns>
 | 
				
			||||||
        protected IEnumerable<T> GetExports<T>(Type[] allTypes)
 | 
					        protected IEnumerable<T> GetExports<T>(Type[] allTypes, bool manageLiftime = true)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var currentType = typeof(T);
 | 
					            var currentType = typeof(T);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -498,7 +481,10 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            var parts = allTypes.Where(currentType.IsAssignableFrom).Select(Instantiate).Cast<T>().ToArray();
 | 
					            var parts = allTypes.Where(currentType.IsAssignableFrom).Select(Instantiate).Cast<T>().ToArray();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (manageLiftime)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
                _disposableParts.AddRange(parts.OfType<IDisposable>());
 | 
					                _disposableParts.AddRange(parts.OfType<IDisposable>());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return parts;
 | 
					            return parts;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -517,13 +503,10 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
        /// Composes the exported values.
 | 
					        /// Composes the exported values.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <param name="container">The container.</param>
 | 
					        /// <param name="container">The container.</param>
 | 
				
			||||||
        protected virtual void RegisterExportedValues(CompositionContainer container)
 | 
					        protected virtual void RegisterExportedValues()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ApplicationHost.Register<IKernel>(this);
 | 
					            ApplicationHost.Register<IKernel>(this);
 | 
				
			||||||
            
 | 
					            ApplicationHost.Register(TaskManager);
 | 
				
			||||||
            container.ComposeExportedValue("logger", Logger);
 | 
					 | 
				
			||||||
            container.ComposeExportedValue("appHost", ApplicationHost);
 | 
					 | 
				
			||||||
            container.ComposeExportedValue("isoManager", ApplicationHost.Resolve<IIsoManager>());
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -590,46 +573,6 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
            yield return GetType().Assembly;
 | 
					            yield return GetType().Assembly;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					 | 
				
			||||||
        /// Plugins that live on both the server and UI are going to have references to assemblies from both sides.
 | 
					 | 
				
			||||||
        /// But looks for Parts on one side, it will throw an exception when it seems Types from the other side that it doesn't have a reference to.
 | 
					 | 
				
			||||||
        /// For example, a plugin provides a Resolver. When MEF runs in the UI, it will throw an exception when it sees the resolver because there won't be a reference to the base class.
 | 
					 | 
				
			||||||
        /// This method will catch those exceptions while retining the list of Types that MEF is able to resolve.
 | 
					 | 
				
			||||||
        /// </summary>
 | 
					 | 
				
			||||||
        /// <param name="catalogs">The catalogs.</param>
 | 
					 | 
				
			||||||
        /// <returns>CompositionContainer.</returns>
 | 
					 | 
				
			||||||
        /// <exception cref="System.ArgumentNullException">catalogs</exception>
 | 
					 | 
				
			||||||
        private static CompositionContainer GetSafeCompositionContainer(IEnumerable<ComposablePartCatalog> catalogs)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (catalogs == null)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                throw new ArgumentNullException("catalogs");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            var newList = new List<ComposablePartCatalog>();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // Go through each Catalog
 | 
					 | 
				
			||||||
            foreach (var catalog in catalogs)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                try
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    // Try to have MEF find Parts
 | 
					 | 
				
			||||||
                    catalog.Parts.ToArray();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    // If it succeeds we can use the entire catalog
 | 
					 | 
				
			||||||
                    newList.Add(catalog);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                catch (ReflectionTypeLoadException ex)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    // If it fails we can still get a list of the Types it was able to resolve and create TypeCatalogs
 | 
					 | 
				
			||||||
                    var typeCatalogs = ex.Types.Where(t => t != null).Select(t => new TypeCatalog(t));
 | 
					 | 
				
			||||||
                    newList.AddRange(typeCatalogs);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            return new CompositionContainer(new AggregateCatalog(newList));
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets a list of types within an assembly
 | 
					        /// Gets a list of types within an assembly
 | 
				
			||||||
        /// This will handle situations that would normally throw an exception - such as a type within the assembly that depends on some other non-existant reference
 | 
					        /// This will handle situations that would normally throw an exception - such as a type within the assembly that depends on some other non-existant reference
 | 
				
			||||||
@ -663,11 +606,6 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            return Task.Run(() =>
 | 
					            return Task.Run(() =>
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (var task in ScheduledTasks)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    task.Initialize(this, Logger);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                // Start-up each plugin
 | 
					                // Start-up each plugin
 | 
				
			||||||
                Parallel.ForEach(Plugins, plugin =>
 | 
					                Parallel.ForEach(Plugins, plugin =>
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
@ -722,11 +660,6 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                DisposeComposableParts();
 | 
					                DisposeComposableParts();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                foreach (var part in _disposableParts)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    part.Dispose();
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                _disposableParts.Clear();
 | 
					                _disposableParts.Clear();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -772,9 +705,9 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        protected virtual void DisposeComposableParts()
 | 
					        protected virtual void DisposeComposableParts()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (CompositionContainer != null)
 | 
					            foreach (var part in _disposableParts)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                CompositionContainer.Dispose();
 | 
					                part.Dispose();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -63,6 +63,13 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <typeparam name="T"></typeparam>
 | 
					        /// <typeparam name="T"></typeparam>
 | 
				
			||||||
        /// <returns>``0.</returns>
 | 
					        /// <returns>``0.</returns>
 | 
				
			||||||
        T Resolve<T>() where T : class;
 | 
					        T Resolve<T>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Resolves this instance.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <typeparam name="T"></typeparam>
 | 
				
			||||||
 | 
					        /// <returns>``0.</returns>
 | 
				
			||||||
 | 
					        T TryResolve<T>();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,12 +1,10 @@
 | 
				
			|||||||
using MediaBrowser.Common.Net;
 | 
					using MediaBrowser.Common.Net;
 | 
				
			||||||
using MediaBrowser.Common.Plugins;
 | 
					using MediaBrowser.Common.Plugins;
 | 
				
			||||||
using MediaBrowser.Common.ScheduledTasks;
 | 
					 | 
				
			||||||
using MediaBrowser.Common.Serialization;
 | 
					using MediaBrowser.Common.Serialization;
 | 
				
			||||||
using MediaBrowser.Model.Configuration;
 | 
					using MediaBrowser.Model.Configuration;
 | 
				
			||||||
using MediaBrowser.Model.System;
 | 
					using MediaBrowser.Model.System;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Reflection;
 | 
					 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Common.Kernel
 | 
					namespace MediaBrowser.Common.Kernel
 | 
				
			||||||
@ -69,12 +67,6 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
        /// <returns>SystemInfo.</returns>
 | 
					        /// <returns>SystemInfo.</returns>
 | 
				
			||||||
        SystemInfo GetSystemInfo();
 | 
					        SystemInfo GetSystemInfo();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					 | 
				
			||||||
        /// Gets the scheduled tasks.
 | 
					 | 
				
			||||||
        /// </summary>
 | 
					 | 
				
			||||||
        /// <value>The scheduled tasks.</value>
 | 
					 | 
				
			||||||
        IEnumerable<IScheduledTask> ScheduledTasks { get; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Reloads the logger.
 | 
					        /// Reloads the logger.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@ -133,12 +125,6 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
        /// <value>The TCP manager.</value>
 | 
					        /// <value>The TCP manager.</value>
 | 
				
			||||||
        TcpManager TcpManager { get; }
 | 
					        TcpManager TcpManager { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					 | 
				
			||||||
        /// Gets the task manager.
 | 
					 | 
				
			||||||
        /// </summary>
 | 
					 | 
				
			||||||
        /// <value>The task manager.</value>
 | 
					 | 
				
			||||||
        TaskManager TaskManager { get; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets the web socket listeners.
 | 
					        /// Gets the web socket listeners.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@ -160,12 +146,6 @@ namespace MediaBrowser.Common.Kernel
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        event EventHandler<EventArgs> ConfigurationUpdated;
 | 
					        event EventHandler<EventArgs> ConfigurationUpdated;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					 | 
				
			||||||
        /// Gets the assemblies.
 | 
					 | 
				
			||||||
        /// </summary>
 | 
					 | 
				
			||||||
        /// <value>The assemblies.</value>
 | 
					 | 
				
			||||||
        Assembly[] Assemblies { get; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets the rest services.
 | 
					        /// Gets the rest services.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -89,7 +89,6 @@
 | 
				
			|||||||
      <HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath>
 | 
					      <HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath>
 | 
				
			||||||
    </Reference>
 | 
					    </Reference>
 | 
				
			||||||
    <Reference Include="System" />
 | 
					    <Reference Include="System" />
 | 
				
			||||||
    <Reference Include="System.ComponentModel.Composition" />
 | 
					 | 
				
			||||||
    <Reference Include="System.Configuration" />
 | 
					    <Reference Include="System.Configuration" />
 | 
				
			||||||
    <Reference Include="System.Core" />
 | 
					    <Reference Include="System.Core" />
 | 
				
			||||||
    <Reference Include="System.Management" />
 | 
					    <Reference Include="System.Management" />
 | 
				
			||||||
@ -125,7 +124,6 @@
 | 
				
			|||||||
    <Compile Include="Events\GenericEventArgs.cs" />
 | 
					    <Compile Include="Events\GenericEventArgs.cs" />
 | 
				
			||||||
    <Compile Include="Extensions\NamedLock.cs" />
 | 
					    <Compile Include="Extensions\NamedLock.cs" />
 | 
				
			||||||
    <Compile Include="Extensions\ResourceNotFoundException.cs" />
 | 
					    <Compile Include="Extensions\ResourceNotFoundException.cs" />
 | 
				
			||||||
    <Compile Include="IO\FileSystem.cs" />
 | 
					 | 
				
			||||||
    <Compile Include="IO\FileSystemRepository.cs" />
 | 
					    <Compile Include="IO\FileSystemRepository.cs" />
 | 
				
			||||||
    <Compile Include="IO\IIsoManager.cs" />
 | 
					    <Compile Include="IO\IIsoManager.cs" />
 | 
				
			||||||
    <Compile Include="IO\IIsoMount.cs" />
 | 
					    <Compile Include="IO\IIsoMount.cs" />
 | 
				
			||||||
@ -138,7 +136,6 @@
 | 
				
			|||||||
    <Compile Include="Kernel\IApplicationHost.cs" />
 | 
					    <Compile Include="Kernel\IApplicationHost.cs" />
 | 
				
			||||||
    <Compile Include="Kernel\IKernel.cs" />
 | 
					    <Compile Include="Kernel\IKernel.cs" />
 | 
				
			||||||
    <Compile Include="Kernel\TcpManager.cs" />
 | 
					    <Compile Include="Kernel\TcpManager.cs" />
 | 
				
			||||||
    <Compile Include="Localization\LocalizedStringData.cs" />
 | 
					 | 
				
			||||||
    <Compile Include="Net\AlchemyWebSocket.cs" />
 | 
					    <Compile Include="Net\AlchemyWebSocket.cs" />
 | 
				
			||||||
    <Compile Include="Net\BaseRestService.cs" />
 | 
					    <Compile Include="Net\BaseRestService.cs" />
 | 
				
			||||||
    <Compile Include="Net\Handlers\BaseActionHandler.cs" />
 | 
					    <Compile Include="Net\Handlers\BaseActionHandler.cs" />
 | 
				
			||||||
@ -146,6 +143,7 @@
 | 
				
			|||||||
    <Compile Include="Net\Handlers\StaticFileHandler.cs" />
 | 
					    <Compile Include="Net\Handlers\StaticFileHandler.cs" />
 | 
				
			||||||
    <Compile Include="Net\HttpManager.cs" />
 | 
					    <Compile Include="Net\HttpManager.cs" />
 | 
				
			||||||
    <Compile Include="Net\IRestfulService.cs" />
 | 
					    <Compile Include="Net\IRestfulService.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="Net\IUdpServer.cs" />
 | 
				
			||||||
    <Compile Include="Net\IWebSocket.cs" />
 | 
					    <Compile Include="Net\IWebSocket.cs" />
 | 
				
			||||||
    <Compile Include="Net\MimeTypes.cs" />
 | 
					    <Compile Include="Net\MimeTypes.cs" />
 | 
				
			||||||
    <Compile Include="Net\NativeWebSocket.cs" />
 | 
					    <Compile Include="Net\NativeWebSocket.cs" />
 | 
				
			||||||
@ -161,6 +159,7 @@
 | 
				
			|||||||
      <DesignTime>True</DesignTime>
 | 
					      <DesignTime>True</DesignTime>
 | 
				
			||||||
      <DependentUpon>Resources.resx</DependentUpon>
 | 
					      <DependentUpon>Resources.resx</DependentUpon>
 | 
				
			||||||
    </Compile>
 | 
					    </Compile>
 | 
				
			||||||
 | 
					    <Compile Include="ScheduledTasks\ITaskManager.cs" />
 | 
				
			||||||
    <Compile Include="ScheduledTasks\TaskManager.cs" />
 | 
					    <Compile Include="ScheduledTasks\TaskManager.cs" />
 | 
				
			||||||
    <Compile Include="ScheduledTasks\Tasks\ReloadLoggerTask.cs" />
 | 
					    <Compile Include="ScheduledTasks\Tasks\ReloadLoggerTask.cs" />
 | 
				
			||||||
    <Compile Include="ScheduledTasks\ScheduledTaskHelpers.cs" />
 | 
					    <Compile Include="ScheduledTasks\ScheduledTaskHelpers.cs" />
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ using MediaBrowser.Common.Kernel;
 | 
				
			|||||||
using MediaBrowser.Model.Logging;
 | 
					using MediaBrowser.Model.Logging;
 | 
				
			||||||
using ServiceStack.Api.Swagger;
 | 
					using ServiceStack.Api.Swagger;
 | 
				
			||||||
using ServiceStack.Common.Web;
 | 
					using ServiceStack.Common.Web;
 | 
				
			||||||
 | 
					using ServiceStack.Configuration;
 | 
				
			||||||
using ServiceStack.Logging.NLogger;
 | 
					using ServiceStack.Logging.NLogger;
 | 
				
			||||||
using ServiceStack.ServiceHost;
 | 
					using ServiceStack.ServiceHost;
 | 
				
			||||||
using ServiceStack.ServiceInterface.Cors;
 | 
					using ServiceStack.ServiceInterface.Cors;
 | 
				
			||||||
@ -154,6 +155,8 @@ namespace MediaBrowser.Common.Net
 | 
				
			|||||||
                });
 | 
					                });
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            container.Adapter = new ContainerAdapter(ApplicationHost);
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
            container.Register(Kernel);
 | 
					            container.Register(Kernel);
 | 
				
			||||||
            container.Register(_logger);
 | 
					            container.Register(_logger);
 | 
				
			||||||
            container.Register(ApplicationHost);
 | 
					            container.Register(ApplicationHost);
 | 
				
			||||||
@ -464,4 +467,23 @@ namespace MediaBrowser.Common.Net
 | 
				
			|||||||
        /// <value>The endpoint.</value>
 | 
					        /// <value>The endpoint.</value>
 | 
				
			||||||
        public IPEndPoint Endpoint { get; set; }
 | 
					        public IPEndPoint Endpoint { get; set; }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class ContainerAdapter : IContainerAdapter
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        private readonly IApplicationHost _appHost;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public ContainerAdapter(IApplicationHost appHost)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            _appHost = appHost;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        public T Resolve<T>()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return _appHost.Resolve<T>();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public T TryResolve<T>()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return _appHost.TryResolve<T>();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										7
									
								
								MediaBrowser.Common/Net/IUdpServer.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								MediaBrowser.Common/Net/IUdpServer.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					namespace MediaBrowser.Common.Net
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public interface IUdpServer
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -17,7 +17,7 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    /// <typeparam name="TKernelType">The type of the T kernel type.</typeparam>
 | 
					    /// <typeparam name="TKernelType">The type of the T kernel type.</typeparam>
 | 
				
			||||||
    public abstract class BaseScheduledTask<TKernelType> : IScheduledTask
 | 
					    public abstract class BaseScheduledTask<TKernelType> : IScheduledTask
 | 
				
			||||||
        where TKernelType : IKernel
 | 
					        where TKernelType : class, IKernel
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets the kernel.
 | 
					        /// Gets the kernel.
 | 
				
			||||||
@ -25,6 +25,47 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
        /// <value>The kernel.</value>
 | 
					        /// <value>The kernel.</value>
 | 
				
			||||||
        protected TKernelType Kernel { get; private set; }
 | 
					        protected TKernelType Kernel { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets the logger.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <value>The logger.</value>
 | 
				
			||||||
 | 
					        protected ILogger Logger { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets the task manager.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <value>The task manager.</value>
 | 
				
			||||||
 | 
					        protected ITaskManager TaskManager { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Initializes a new instance of the <see cref="BaseScheduledTask{TKernelType}" /> class.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="kernel">The kernel.</param>
 | 
				
			||||||
 | 
					        /// <param name="taskManager">The task manager.</param>
 | 
				
			||||||
 | 
					        /// <param name="logger">The logger.</param>
 | 
				
			||||||
 | 
					        /// <exception cref="System.ArgumentNullException">kernel</exception>
 | 
				
			||||||
 | 
					        protected BaseScheduledTask(TKernelType kernel, ITaskManager taskManager, ILogger logger)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (kernel == null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                throw new ArgumentNullException("kernel");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (taskManager == null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                throw new ArgumentNullException("taskManager");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (logger == null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                throw new ArgumentNullException("logger");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Kernel = kernel;
 | 
				
			||||||
 | 
					            TaskManager = taskManager;
 | 
				
			||||||
 | 
					            Logger = logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ReloadTriggerEvents(true);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// The _last execution result
 | 
					        /// The _last execution result
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@ -199,7 +240,7 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
                    try
 | 
					                    try
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        return JsonSerializer.DeserializeFromFile<IEnumerable<TaskTriggerInfo>>(ConfigurationFilePath)
 | 
					                        return JsonSerializer.DeserializeFromFile<IEnumerable<TaskTriggerInfo>>(ConfigurationFilePath)
 | 
				
			||||||
                            .Select(t => ScheduledTaskHelpers.GetTrigger(t, Kernel))
 | 
					                            .Select(ScheduledTaskHelpers.GetTrigger)
 | 
				
			||||||
                            .ToList();
 | 
					                            .ToList();
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    catch (IOException)
 | 
					                    catch (IOException)
 | 
				
			||||||
@ -228,7 +269,7 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                _triggersInitialized = true;
 | 
					                _triggersInitialized = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                ReloadTriggerEvents();
 | 
					                ReloadTriggerEvents(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                JsonSerializer.SerializeToFile(_triggers.Select(ScheduledTaskHelpers.GetTriggerInfo), ConfigurationFilePath);
 | 
					                JsonSerializer.SerializeToFile(_triggers.Select(ScheduledTaskHelpers.GetTriggerInfo), ConfigurationFilePath);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -290,29 +331,11 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					 | 
				
			||||||
        /// Gets the logger.
 | 
					 | 
				
			||||||
        /// </summary>
 | 
					 | 
				
			||||||
        /// <value>The logger.</value>
 | 
					 | 
				
			||||||
        protected ILogger Logger { get; private set; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /// <summary>
 | 
					 | 
				
			||||||
        /// Initializes the specified kernel.
 | 
					 | 
				
			||||||
        /// </summary>
 | 
					 | 
				
			||||||
        /// <param name="kernel">The kernel.</param>
 | 
					 | 
				
			||||||
        /// <param name="logger">The logger.</param>
 | 
					 | 
				
			||||||
        public void Initialize(IKernel kernel, ILogger logger)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            Logger = logger;
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            Kernel = (TKernelType)kernel;
 | 
					 | 
				
			||||||
            ReloadTriggerEvents();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Reloads the trigger events.
 | 
					        /// Reloads the trigger events.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        private void ReloadTriggerEvents()
 | 
					        /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param>
 | 
				
			||||||
 | 
					        private void ReloadTriggerEvents(bool isApplicationStartup)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            foreach (var trigger in Triggers)
 | 
					            foreach (var trigger in Triggers)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -320,7 +343,7 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                trigger.Triggered -= trigger_Triggered;
 | 
					                trigger.Triggered -= trigger_Triggered;
 | 
				
			||||||
                trigger.Triggered += trigger_Triggered;
 | 
					                trigger.Triggered += trigger_Triggered;
 | 
				
			||||||
                trigger.Start();
 | 
					                trigger.Start(isApplicationStartup);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -335,7 +358,7 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            Logger.Info("{0} fired for task: {1}", trigger.GetType().Name, Name);
 | 
					            Logger.Info("{0} fired for task: {1}", trigger.GetType().Name, Name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Kernel.TaskManager.QueueScheduledTask(this);
 | 
					            TaskManager.QueueScheduledTask(this);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -392,7 +415,7 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
            CurrentCancellationTokenSource = null;
 | 
					            CurrentCancellationTokenSource = null;
 | 
				
			||||||
            CurrentProgress = null;
 | 
					            CurrentProgress = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Kernel.TaskManager.OnTaskCompleted(this);
 | 
					            TaskManager.OnTaskCompleted(this);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -27,13 +27,13 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            await Task.Delay(1000).ConfigureAwait(false);
 | 
					            await Task.Delay(1000).ConfigureAwait(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Start();
 | 
					            Start(false);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Stars waiting for the trigger action
 | 
					        /// Stars waiting for the trigger action
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        protected internal abstract void Start();
 | 
					        protected internal abstract void Start(bool isApplicationStartup);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Stops waiting for the trigger action
 | 
					        /// Stops waiting for the trigger action
 | 
				
			||||||
 | 
				
			|||||||
@ -23,7 +23,8 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Stars waiting for the trigger action
 | 
					        /// Stars waiting for the trigger action
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        protected internal override void Start()
 | 
					        /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param>
 | 
				
			||||||
 | 
					        protected internal override void Start(bool isApplicationStartup)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            DisposeTimer();
 | 
					            DisposeTimer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,4 @@
 | 
				
			|||||||
using MediaBrowser.Common.Kernel;
 | 
					using MediaBrowser.Model.Tasks;
 | 
				
			||||||
using MediaBrowser.Model.Logging;
 | 
					 | 
				
			||||||
using MediaBrowser.Model.Tasks;
 | 
					 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -73,13 +71,6 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
        /// <exception cref="System.InvalidOperationException">Cannot cancel a Task unless it is in the Running state.</exception>
 | 
					        /// <exception cref="System.InvalidOperationException">Cannot cancel a Task unless it is in the Running state.</exception>
 | 
				
			||||||
        void Cancel();
 | 
					        void Cancel();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					 | 
				
			||||||
        /// Initializes the specified kernel.
 | 
					 | 
				
			||||||
        /// </summary>
 | 
					 | 
				
			||||||
        /// <param name="kernel">The kernel.</param>
 | 
					 | 
				
			||||||
        /// <param name="logger">The logger.</param>
 | 
					 | 
				
			||||||
        void Initialize(IKernel kernel, ILogger logger);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Cancels if running.
 | 
					        /// Cancels if running.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										46
									
								
								MediaBrowser.Common/ScheduledTasks/ITaskManager.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								MediaBrowser.Common/ScheduledTasks/ITaskManager.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,46 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public interface ITaskManager : IDisposable
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets the list of Scheduled Tasks
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <value>The scheduled tasks.</value>
 | 
				
			||||||
 | 
					        IScheduledTask[] ScheduledTasks { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Cancels if running and queue.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <typeparam name="T"></typeparam>
 | 
				
			||||||
 | 
					        void CancelIfRunningAndQueue<T>()
 | 
				
			||||||
 | 
					            where T : IScheduledTask;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Queues the scheduled task.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <typeparam name="T"></typeparam>
 | 
				
			||||||
 | 
					        void QueueScheduledTask<T>()
 | 
				
			||||||
 | 
					            where T : IScheduledTask;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Queues the scheduled task.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="task">The task.</param>
 | 
				
			||||||
 | 
					        void QueueScheduledTask(IScheduledTask task);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Adds the tasks.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="tasks">The tasks.</param>
 | 
				
			||||||
 | 
					        void AddTasks(IEnumerable<IScheduledTask> tasks);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Called when [task completed].
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="task">The task.</param>
 | 
				
			||||||
 | 
					        void OnTaskCompleted(IScheduledTask task);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -23,7 +23,8 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Stars waiting for the trigger action
 | 
					        /// Stars waiting for the trigger action
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        protected internal override void Start()
 | 
					        /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param>
 | 
				
			||||||
 | 
					        protected internal override void Start(bool isApplicationStartup)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            DisposeTimer();
 | 
					            DisposeTimer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -78,11 +78,10 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
        /// Converts a TaskTriggerInfo into a concrete BaseTaskTrigger
 | 
					        /// Converts a TaskTriggerInfo into a concrete BaseTaskTrigger
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <param name="info">The info.</param>
 | 
					        /// <param name="info">The info.</param>
 | 
				
			||||||
        /// <param name="kernel">The kernel.</param>
 | 
					 | 
				
			||||||
        /// <returns>BaseTaskTrigger.</returns>
 | 
					        /// <returns>BaseTaskTrigger.</returns>
 | 
				
			||||||
        /// <exception cref="System.ArgumentNullException"></exception>
 | 
					        /// <exception cref="System.ArgumentNullException"></exception>
 | 
				
			||||||
        /// <exception cref="System.ArgumentException">Invalid trigger type:  + info.Type</exception>
 | 
					        /// <exception cref="System.ArgumentException">Invalid trigger type:  + info.Type</exception>
 | 
				
			||||||
        public static BaseTaskTrigger GetTrigger(TaskTriggerInfo info, IKernel kernel)
 | 
					        public static BaseTaskTrigger GetTrigger(TaskTriggerInfo info)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (info.Type.Equals(typeof(DailyTrigger).Name, StringComparison.OrdinalIgnoreCase))
 | 
					            if (info.Type.Equals(typeof(DailyTrigger).Name, StringComparison.OrdinalIgnoreCase))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -144,7 +143,7 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            if (info.Type.Equals(typeof(StartupTrigger).Name, StringComparison.OrdinalIgnoreCase))
 | 
					            if (info.Type.Equals(typeof(StartupTrigger).Name, StringComparison.OrdinalIgnoreCase))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                return new StartupTrigger(kernel);
 | 
					                return new StartupTrigger();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            throw new ArgumentException("Unrecognized trigger type: " + info.Type);
 | 
					            throw new ArgumentException("Unrecognized trigger type: " + info.Type);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,4 @@
 | 
				
			|||||||
using MediaBrowser.Common.Kernel;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
using System;
 | 
					 | 
				
			||||||
using System.Threading.Tasks;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Common.ScheduledTasks
 | 
					namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -9,42 +7,25 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    public class StartupTrigger : BaseTaskTrigger
 | 
					    public class StartupTrigger : BaseTaskTrigger
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					 | 
				
			||||||
        /// Gets the kernel.
 | 
					 | 
				
			||||||
        /// </summary>
 | 
					 | 
				
			||||||
        /// <value>The kernel.</value>
 | 
					 | 
				
			||||||
        protected IKernel Kernel { get; private set; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /// <summary>
 | 
					 | 
				
			||||||
        /// Initializes a new instance of the <see cref="StartupTrigger" /> class.
 | 
					 | 
				
			||||||
        /// </summary>
 | 
					 | 
				
			||||||
        /// <param name="kernel">The kernel.</param>
 | 
					 | 
				
			||||||
        public StartupTrigger(IKernel kernel)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            Kernel = kernel;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Stars waiting for the trigger action
 | 
					        /// Stars waiting for the trigger action
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        protected internal override void Start()
 | 
					        /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param>
 | 
				
			||||||
 | 
					        protected internal async override void Start(bool isApplicationStartup)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Kernel.ReloadCompleted += Kernel_ReloadCompleted;
 | 
					            if (isApplicationStartup)
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        async void Kernel_ReloadCompleted(object sender, EventArgs e)
 | 
					 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                await Task.Delay(2000).ConfigureAwait(false);
 | 
					                await Task.Delay(2000).ConfigureAwait(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                OnTriggered();
 | 
					                OnTriggered();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Stops waiting for the trigger action
 | 
					        /// Stops waiting for the trigger action
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        protected internal override void Stop()
 | 
					        protected internal override void Stop()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Kernel.ReloadCompleted -= Kernel_ReloadCompleted;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -18,7 +18,8 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Stars waiting for the trigger action
 | 
					        /// Stars waiting for the trigger action
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        protected internal override void Start()
 | 
					        /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param>
 | 
				
			||||||
 | 
					        protected internal override void Start(bool isApplicationStartup)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            switch (SystemEvent)
 | 
					            switch (SystemEvent)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,4 @@
 | 
				
			|||||||
using MediaBrowser.Common.Kernel;
 | 
					using MediaBrowser.Model.Logging;
 | 
				
			||||||
using MediaBrowser.Model.Logging;
 | 
					 | 
				
			||||||
using MediaBrowser.Model.Tasks;
 | 
					using MediaBrowser.Model.Tasks;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
@ -10,8 +9,14 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class TaskManager
 | 
					    /// Class TaskManager
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    public class TaskManager : BaseManager<IKernel>
 | 
					    internal class TaskManager : ITaskManager
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets the list of Scheduled Tasks
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <value>The scheduled tasks.</value>
 | 
				
			||||||
 | 
					        public IScheduledTask[] ScheduledTasks { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// The _task queue
 | 
					        /// The _task queue
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@ -25,12 +30,17 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Initializes a new instance of the <see cref="TaskManager" /> class.
 | 
					        /// Initializes a new instance of the <see cref="TaskManager" /> class.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <param name="kernel">The kernel.</param>
 | 
					 | 
				
			||||||
        /// <param name="logger">The logger.</param>
 | 
					        /// <param name="logger">The logger.</param>
 | 
				
			||||||
        public TaskManager(IKernel kernel, ILogger logger)
 | 
					        public TaskManager(ILogger logger)
 | 
				
			||||||
            : base(kernel)
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            if (logger == null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                throw new ArgumentException("logger");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            _logger = logger;
 | 
					            _logger = logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ScheduledTasks = new IScheduledTask[] {};
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -40,7 +50,7 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
        public void CancelIfRunningAndQueue<T>()
 | 
					        public void CancelIfRunningAndQueue<T>()
 | 
				
			||||||
                 where T : IScheduledTask
 | 
					                 where T : IScheduledTask
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Kernel.ScheduledTasks.OfType<T>().First().CancelIfRunning();
 | 
					            ScheduledTasks.OfType<T>().First().CancelIfRunning();
 | 
				
			||||||
            QueueScheduledTask<T>();
 | 
					            QueueScheduledTask<T>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -51,7 +61,7 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
        public void QueueScheduledTask<T>()
 | 
					        public void QueueScheduledTask<T>()
 | 
				
			||||||
            where T : IScheduledTask
 | 
					            where T : IScheduledTask
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var scheduledTask = Kernel.ScheduledTasks.OfType<T>().First();
 | 
					            var scheduledTask = ScheduledTasks.OfType<T>().First();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            QueueScheduledTask(scheduledTask);
 | 
					            QueueScheduledTask(scheduledTask);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -64,7 +74,7 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            var type = task.GetType();
 | 
					            var type = task.GetType();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var scheduledTask = Kernel.ScheduledTasks.First(t => t.GetType() == type);
 | 
					            var scheduledTask = ScheduledTasks.First(t => t.GetType() == type);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            lock (_taskQueue)
 | 
					            lock (_taskQueue)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -91,7 +101,7 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
        /// Called when [task completed].
 | 
					        /// Called when [task completed].
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <param name="task">The task.</param>
 | 
					        /// <param name="task">The task.</param>
 | 
				
			||||||
        internal void OnTaskCompleted(IScheduledTask task)
 | 
					        public void OnTaskCompleted(IScheduledTask task)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // Execute queued tasks
 | 
					            // Execute queued tasks
 | 
				
			||||||
            lock (_taskQueue)
 | 
					            lock (_taskQueue)
 | 
				
			||||||
@ -100,7 +110,7 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                foreach (var type in copy)
 | 
					                foreach (var type in copy)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var scheduledTask = Kernel.ScheduledTasks.First(t => t.GetType() == type);
 | 
					                    var scheduledTask = ScheduledTasks.First(t => t.GetType() == type);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (scheduledTask.State == TaskState.Idle)
 | 
					                    if (scheduledTask.State == TaskState.Idle)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
@ -111,5 +121,39 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public void Dispose()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Dispose(true);
 | 
				
			||||||
 | 
					            GC.SuppressFinalize(this);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Releases unmanaged and - optionally - managed resources.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
 | 
				
			||||||
 | 
					        protected virtual void Dispose(bool dispose)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            foreach (var task in ScheduledTasks)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                task.Dispose();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Adds the tasks.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="tasks">The tasks.</param>
 | 
				
			||||||
 | 
					        public void AddTasks(IEnumerable<IScheduledTask> tasks)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var myTasks = ScheduledTasks.ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            myTasks.AddRange(tasks);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ScheduledTasks = myTasks.ToArray();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,7 @@
 | 
				
			|||||||
using MediaBrowser.Common.Kernel;
 | 
					using MediaBrowser.Common.Kernel;
 | 
				
			||||||
using MediaBrowser.Model.Tasks;
 | 
					using MediaBrowser.Model.Logging;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
@ -13,9 +12,19 @@ namespace MediaBrowser.Common.ScheduledTasks.Tasks
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Deletes old cache files
 | 
					    /// Deletes old cache files
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IScheduledTask))]
 | 
					 | 
				
			||||||
    public class DeleteCacheFileTask : BaseScheduledTask<IKernel>
 | 
					    public class DeleteCacheFileTask : BaseScheduledTask<IKernel>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Initializes a new instance of the <see cref="DeleteCacheFileTask" /> class.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="kernel">The kernel.</param>
 | 
				
			||||||
 | 
					        /// <param name="taskManager">The task manager.</param>
 | 
				
			||||||
 | 
					        /// <param name="logger">The logger.</param>
 | 
				
			||||||
 | 
					        public DeleteCacheFileTask(IKernel kernel, ITaskManager taskManager, ILogger logger)
 | 
				
			||||||
 | 
					            : base(kernel, taskManager, logger)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Creates the triggers that define when the task will run
 | 
					        /// Creates the triggers that define when the task will run
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,7 @@
 | 
				
			|||||||
using MediaBrowser.Common.Kernel;
 | 
					using MediaBrowser.Common.Kernel;
 | 
				
			||||||
using MediaBrowser.Model.Tasks;
 | 
					using MediaBrowser.Model.Logging;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
@ -13,9 +12,19 @@ namespace MediaBrowser.Common.ScheduledTasks.Tasks
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Deletes old log files
 | 
					    /// Deletes old log files
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IScheduledTask))]
 | 
					 | 
				
			||||||
    public class DeleteLogFileTask : BaseScheduledTask<IKernel>
 | 
					    public class DeleteLogFileTask : BaseScheduledTask<IKernel>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Initializes a new instance of the <see cref="DeleteLogFileTask" /> class.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="kernel">The kernel.</param>
 | 
				
			||||||
 | 
					        /// <param name="taskManager">The task manager.</param>
 | 
				
			||||||
 | 
					        /// <param name="logger">The logger.</param>
 | 
				
			||||||
 | 
					        public DeleteLogFileTask(IKernel kernel, ITaskManager taskManager, ILogger logger)
 | 
				
			||||||
 | 
					            : base(kernel, taskManager, logger)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Creates the triggers that define when the task will run
 | 
					        /// Creates the triggers that define when the task will run
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,7 @@
 | 
				
			|||||||
using MediaBrowser.Common.Kernel;
 | 
					using MediaBrowser.Common.Kernel;
 | 
				
			||||||
using MediaBrowser.Model.Tasks;
 | 
					using MediaBrowser.Model.Logging;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -11,9 +10,19 @@ namespace MediaBrowser.Common.ScheduledTasks.Tasks
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class ReloadLoggerFileTask
 | 
					    /// Class ReloadLoggerFileTask
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IScheduledTask))]
 | 
					 | 
				
			||||||
    public class ReloadLoggerFileTask : BaseScheduledTask<IKernel>
 | 
					    public class ReloadLoggerFileTask : BaseScheduledTask<IKernel>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Initializes a new instance of the <see cref="ReloadLoggerFileTask" /> class.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="kernel">The kernel.</param>
 | 
				
			||||||
 | 
					        /// <param name="taskManager">The task manager.</param>
 | 
				
			||||||
 | 
					        /// <param name="logger">The logger.</param>
 | 
				
			||||||
 | 
					        public ReloadLoggerFileTask(IKernel kernel, ITaskManager taskManager, ILogger logger)
 | 
				
			||||||
 | 
					            : base(kernel, taskManager, logger)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets the default triggers.
 | 
					        /// Gets the default triggers.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
using MediaBrowser.Common.Kernel;
 | 
					using MediaBrowser.Common.Kernel;
 | 
				
			||||||
 | 
					using MediaBrowser.Model.Logging;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -10,7 +10,6 @@ namespace MediaBrowser.Common.ScheduledTasks.Tasks
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Plugin Update Task
 | 
					    /// Plugin Update Task
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IScheduledTask))]
 | 
					 | 
				
			||||||
    public class SystemUpdateTask : BaseScheduledTask<IKernel>
 | 
					    public class SystemUpdateTask : BaseScheduledTask<IKernel>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -22,8 +21,11 @@ namespace MediaBrowser.Common.ScheduledTasks.Tasks
 | 
				
			|||||||
        /// Initializes a new instance of the <see cref="SystemUpdateTask" /> class.
 | 
					        /// Initializes a new instance of the <see cref="SystemUpdateTask" /> class.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <param name="appHost">The app host.</param>
 | 
					        /// <param name="appHost">The app host.</param>
 | 
				
			||||||
        [ImportingConstructor]
 | 
					        /// <param name="taskManager">The task manager.</param>
 | 
				
			||||||
        public SystemUpdateTask([Import("appHost")] IApplicationHost appHost)
 | 
					        /// <param name="kernel">The kernel.</param>
 | 
				
			||||||
 | 
					        /// <param name="logger">The logger.</param>
 | 
				
			||||||
 | 
					        public SystemUpdateTask(IApplicationHost appHost, ITaskManager taskManager, IKernel kernel, ILogger logger)
 | 
				
			||||||
 | 
					            : base(kernel, taskManager, logger)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _appHost = appHost;
 | 
					            _appHost = appHost;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -29,7 +29,8 @@ namespace MediaBrowser.Common.ScheduledTasks
 | 
				
			|||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Stars waiting for the trigger action
 | 
					        /// Stars waiting for the trigger action
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        protected internal override void Start()
 | 
					        /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param>
 | 
				
			||||||
 | 
					        protected internal override void Start(bool isApplicationStartup)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            DisposeTimer();
 | 
					            DisposeTimer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
using MediaBrowser.Common.Extensions;
 | 
					using MediaBrowser.Common.Extensions;
 | 
				
			||||||
using MediaBrowser.Common.IO;
 | 
					using MediaBrowser.Common.IO;
 | 
				
			||||||
using MediaBrowser.Common.Win32;
 | 
					using MediaBrowser.Common.Win32;
 | 
				
			||||||
 | 
					using MediaBrowser.Controller.IO;
 | 
				
			||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,7 @@
 | 
				
			|||||||
using MediaBrowser.Common.Extensions;
 | 
					using MediaBrowser.Common.Extensions;
 | 
				
			||||||
using MediaBrowser.Common.IO;
 | 
					using MediaBrowser.Common.IO;
 | 
				
			||||||
using MediaBrowser.Common.Win32;
 | 
					using MediaBrowser.Common.Win32;
 | 
				
			||||||
 | 
					using MediaBrowser.Controller.IO;
 | 
				
			||||||
using MediaBrowser.Controller.Library;
 | 
					using MediaBrowser.Controller.Library;
 | 
				
			||||||
using MediaBrowser.Controller.Localization;
 | 
					using MediaBrowser.Controller.Localization;
 | 
				
			||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
using MediaBrowser.Common.Extensions;
 | 
					using MediaBrowser.Common.Extensions;
 | 
				
			||||||
using MediaBrowser.Common.IO;
 | 
					using MediaBrowser.Common.IO;
 | 
				
			||||||
using MediaBrowser.Common.Serialization;
 | 
					using MediaBrowser.Common.Serialization;
 | 
				
			||||||
 | 
					using MediaBrowser.Controller.IO;
 | 
				
			||||||
using MediaBrowser.Model.Configuration;
 | 
					using MediaBrowser.Model.Configuration;
 | 
				
			||||||
using MediaBrowser.Model.Tasks;
 | 
					using MediaBrowser.Model.Tasks;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,5 @@
 | 
				
			|||||||
using MediaBrowser.Common.IO;
 | 
					using MediaBrowser.Common.IO;
 | 
				
			||||||
 | 
					using MediaBrowser.Common.ScheduledTasks;
 | 
				
			||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
using MediaBrowser.Controller.Library;
 | 
					using MediaBrowser.Controller.Library;
 | 
				
			||||||
using MediaBrowser.Controller.ScheduledTasks;
 | 
					using MediaBrowser.Controller.ScheduledTasks;
 | 
				
			||||||
@ -66,16 +67,27 @@ namespace MediaBrowser.Controller.IO
 | 
				
			|||||||
        /// <value>The logger.</value>
 | 
					        /// <value>The logger.</value>
 | 
				
			||||||
        private ILogger Logger { get; set; }
 | 
					        private ILogger Logger { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets or sets the task manager.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <value>The task manager.</value>
 | 
				
			||||||
 | 
					        private ITaskManager TaskManager { get; set; }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Initializes a new instance of the <see cref="DirectoryWatchers" /> class.
 | 
					        /// Initializes a new instance of the <see cref="DirectoryWatchers" /> class.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public DirectoryWatchers(ILogger logger)
 | 
					        public DirectoryWatchers(ILogger logger, ITaskManager taskManager)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (logger == null)
 | 
					            if (logger == null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                throw new ArgumentNullException("logger");
 | 
					                throw new ArgumentNullException("logger");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            if (taskManager == null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                throw new ArgumentNullException("taskManager");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            TaskManager = taskManager;
 | 
				
			||||||
            Logger = logger;
 | 
					            Logger = logger;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
@ -421,7 +433,7 @@ namespace MediaBrowser.Controller.IO
 | 
				
			|||||||
            // If the root folder changed, run the library task so the user can see it
 | 
					            // If the root folder changed, run the library task so the user can see it
 | 
				
			||||||
            if (itemsToRefresh.Any(i => i is AggregateFolder))
 | 
					            if (itemsToRefresh.Any(i => i is AggregateFolder))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Kernel.Instance.TaskManager.CancelIfRunningAndQueue<RefreshMediaLibraryTask>();
 | 
					                TaskManager.CancelIfRunningAndQueue<RefreshMediaLibraryTask>();
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@ using System.IO;
 | 
				
			|||||||
using System.Runtime.InteropServices;
 | 
					using System.Runtime.InteropServices;
 | 
				
			||||||
using System.Text;
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Common.IO
 | 
					namespace MediaBrowser.Controller.IO
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class FileSystem
 | 
					    /// Class FileSystem
 | 
				
			||||||
@ -1,5 +1,6 @@
 | 
				
			|||||||
using MediaBrowser.Common.IO;
 | 
					using MediaBrowser.Common.IO;
 | 
				
			||||||
using MediaBrowser.Common.Kernel;
 | 
					using MediaBrowser.Common.Kernel;
 | 
				
			||||||
 | 
					using MediaBrowser.Common.ScheduledTasks;
 | 
				
			||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
using MediaBrowser.Model.Logging;
 | 
					using MediaBrowser.Model.Logging;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
@ -32,11 +33,12 @@ namespace MediaBrowser.Controller.IO
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <param name="kernel">The kernel.</param>
 | 
					        /// <param name="kernel">The kernel.</param>
 | 
				
			||||||
        /// <param name="logger">The logger.</param>
 | 
					        /// <param name="logger">The logger.</param>
 | 
				
			||||||
        public FileSystemManager(Kernel kernel, ILogger logger)
 | 
					        /// <param name="taskManager">The task manager.</param>
 | 
				
			||||||
 | 
					        public FileSystemManager(Kernel kernel, ILogger logger, ITaskManager taskManager)
 | 
				
			||||||
            : base(kernel)
 | 
					            : base(kernel)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _logger = logger;
 | 
					            _logger = logger;
 | 
				
			||||||
            DirectoryWatchers = new DirectoryWatchers(logger);
 | 
					            DirectoryWatchers = new DirectoryWatchers(logger, taskManager);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,4 @@
 | 
				
			|||||||
using MediaBrowser.Common.IO;
 | 
					using MediaBrowser.Common.Kernel;
 | 
				
			||||||
using MediaBrowser.Common.Kernel;
 | 
					 | 
				
			||||||
using MediaBrowser.Common.Localization;
 | 
					 | 
				
			||||||
using MediaBrowser.Common.Plugins;
 | 
					using MediaBrowser.Common.Plugins;
 | 
				
			||||||
using MediaBrowser.Controller.Drawing;
 | 
					using MediaBrowser.Controller.Drawing;
 | 
				
			||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
@ -17,14 +15,10 @@ using MediaBrowser.Controller.ScheduledTasks;
 | 
				
			|||||||
using MediaBrowser.Controller.Updates;
 | 
					using MediaBrowser.Controller.Updates;
 | 
				
			||||||
using MediaBrowser.Controller.Weather;
 | 
					using MediaBrowser.Controller.Weather;
 | 
				
			||||||
using MediaBrowser.Model.Configuration;
 | 
					using MediaBrowser.Model.Configuration;
 | 
				
			||||||
using MediaBrowser.Model.IO;
 | 
					 | 
				
			||||||
using MediaBrowser.Model.Logging;
 | 
					using MediaBrowser.Model.Logging;
 | 
				
			||||||
using MediaBrowser.Model.MediaInfo;
 | 
					 | 
				
			||||||
using MediaBrowser.Model.System;
 | 
					using MediaBrowser.Model.System;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.ComponentModel.Composition.Hosting;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -183,7 +177,6 @@ namespace MediaBrowser.Controller
 | 
				
			|||||||
        /// Gets the list of Localized string files
 | 
					        /// Gets the list of Localized string files
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <value>The string files.</value>
 | 
					        /// <value>The string files.</value>
 | 
				
			||||||
        [ImportMany(typeof(LocalizedStringData))]
 | 
					 | 
				
			||||||
        public IEnumerable<LocalizedStringData> StringFiles { get; private set; }
 | 
					        public IEnumerable<LocalizedStringData> StringFiles { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -208,7 +201,6 @@ namespace MediaBrowser.Controller
 | 
				
			|||||||
        /// Gets the list of currently registered metadata prvoiders
 | 
					        /// Gets the list of currently registered metadata prvoiders
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <value>The metadata providers enumerable.</value>
 | 
					        /// <value>The metadata providers enumerable.</value>
 | 
				
			||||||
        [ImportMany(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
        public BaseMetadataProvider[] MetadataProviders { get; private set; }
 | 
					        public BaseMetadataProvider[] MetadataProviders { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -222,8 +214,7 @@ namespace MediaBrowser.Controller
 | 
				
			|||||||
        /// Gets the list of currently registered entity resolvers
 | 
					        /// Gets the list of currently registered entity resolvers
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <value>The entity resolvers enumerable.</value>
 | 
					        /// <value>The entity resolvers enumerable.</value>
 | 
				
			||||||
        [ImportMany(typeof(IBaseItemResolver))]
 | 
					        internal IEnumerable<IBaseItemResolver> EntityResolvers { get; private set; }
 | 
				
			||||||
        internal IBaseItemResolver[] EntityResolvers { get; private set; }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets the list of BasePluginFolders added by plugins
 | 
					        /// Gets the list of BasePluginFolders added by plugins
 | 
				
			||||||
@ -322,14 +313,11 @@ namespace MediaBrowser.Controller
 | 
				
			|||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Composes the exported values.
 | 
					        /// Composes the exported values.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <param name="container">The container.</param>
 | 
					        protected override void RegisterExportedValues()
 | 
				
			||||||
        protected override void RegisterExportedValues(CompositionContainer container)
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            container.ComposeExportedValue("kernel", this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            ApplicationHost.Register(this);
 | 
					            ApplicationHost.Register(this);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            base.RegisterExportedValues(container);
 | 
					            base.RegisterExportedValues();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -338,6 +326,15 @@ namespace MediaBrowser.Controller
 | 
				
			|||||||
        /// <param name="allTypes">All types.</param>
 | 
					        /// <param name="allTypes">All types.</param>
 | 
				
			||||||
        protected override void FindParts(Type[] allTypes)
 | 
					        protected override void FindParts(Type[] allTypes)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            InstallationManager = (InstallationManager)ApplicationHost.CreateInstance(typeof(InstallationManager));
 | 
				
			||||||
 | 
					            FFMpegManager = (FFMpegManager)ApplicationHost.CreateInstance(typeof(FFMpegManager));
 | 
				
			||||||
 | 
					            LibraryManager = (LibraryManager)ApplicationHost.CreateInstance(typeof(LibraryManager));
 | 
				
			||||||
 | 
					            UserManager = (UserManager)ApplicationHost.CreateInstance(typeof(UserManager));
 | 
				
			||||||
 | 
					            ImageManager = (ImageManager)ApplicationHost.CreateInstance(typeof(ImageManager));
 | 
				
			||||||
 | 
					            ProviderManager = (ProviderManager)ApplicationHost.CreateInstance(typeof(ProviderManager));
 | 
				
			||||||
 | 
					            UserDataManager = (UserDataManager)ApplicationHost.CreateInstance(typeof(UserDataManager));
 | 
				
			||||||
 | 
					            PluginSecurityManager = (PluginSecurityManager)ApplicationHost.CreateInstance(typeof(PluginSecurityManager));
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
            base.FindParts(allTypes);
 | 
					            base.FindParts(allTypes);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            EntityResolutionIgnoreRules = GetExports<IResolutionIgnoreRule>(allTypes);
 | 
					            EntityResolutionIgnoreRules = GetExports<IResolutionIgnoreRule>(allTypes);
 | 
				
			||||||
@ -348,8 +345,11 @@ namespace MediaBrowser.Controller
 | 
				
			|||||||
            WeatherProviders = GetExports<IWeatherProvider>(allTypes);
 | 
					            WeatherProviders = GetExports<IWeatherProvider>(allTypes);
 | 
				
			||||||
            IntroProviders = GetExports<IIntroProvider>(allTypes);
 | 
					            IntroProviders = GetExports<IIntroProvider>(allTypes);
 | 
				
			||||||
            PluginConfigurationPages = GetExports<IPluginConfigurationPage>(allTypes);
 | 
					            PluginConfigurationPages = GetExports<IPluginConfigurationPage>(allTypes);
 | 
				
			||||||
            ImageEnhancers = GetExports<IImageEnhancer>(allTypes);
 | 
					            ImageEnhancers = GetExports<IImageEnhancer>(allTypes).OrderBy(e => e.Priority).ToArray();
 | 
				
			||||||
            PluginFolderCreators = GetExports<IVirtualFolderCreator>(allTypes);
 | 
					            PluginFolderCreators = GetExports<IVirtualFolderCreator>(allTypes);
 | 
				
			||||||
 | 
					            StringFiles = GetExports<LocalizedStringData>(allTypes);
 | 
				
			||||||
 | 
					            EntityResolvers = GetExports<IBaseItemResolver>(allTypes).OrderBy(e => e.Priority).ToArray();
 | 
				
			||||||
 | 
					            MetadataProviders = GetExports<BaseMetadataProvider>(allTypes).OrderBy(e => e.Priority).ToArray();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -365,14 +365,6 @@ namespace MediaBrowser.Controller
 | 
				
			|||||||
            await base.ReloadInternal().ConfigureAwait(false);
 | 
					            await base.ReloadInternal().ConfigureAwait(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ReloadResourcePools();
 | 
					            ReloadResourcePools();
 | 
				
			||||||
            InstallationManager = (InstallationManager)ApplicationHost.CreateInstance(typeof(InstallationManager));
 | 
					 | 
				
			||||||
            FFMpegManager = (FFMpegManager)ApplicationHost.CreateInstance(typeof(FFMpegManager));
 | 
					 | 
				
			||||||
            LibraryManager = (LibraryManager)ApplicationHost.CreateInstance(typeof(LibraryManager));
 | 
					 | 
				
			||||||
            UserManager = (UserManager)ApplicationHost.CreateInstance(typeof(UserManager));
 | 
					 | 
				
			||||||
            ImageManager = (ImageManager)ApplicationHost.CreateInstance(typeof(ImageManager));
 | 
					 | 
				
			||||||
            ProviderManager = (ProviderManager)ApplicationHost.CreateInstance(typeof(ProviderManager));
 | 
					 | 
				
			||||||
            UserDataManager = (UserDataManager)ApplicationHost.CreateInstance(typeof(UserDataManager));
 | 
					 | 
				
			||||||
            PluginSecurityManager = (PluginSecurityManager)ApplicationHost.CreateInstance(typeof(PluginSecurityManager));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ReloadFileSystemManager();
 | 
					            ReloadFileSystemManager();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -441,15 +433,6 @@ namespace MediaBrowser.Controller
 | 
				
			|||||||
            DisplayPreferencesRepository = GetRepository(DisplayPreferencesRepositories, Configuration.DisplayPreferencesRepository);
 | 
					            DisplayPreferencesRepository = GetRepository(DisplayPreferencesRepositories, Configuration.DisplayPreferencesRepository);
 | 
				
			||||||
            var displayPreferencesRepoTask = DisplayPreferencesRepository.Initialize();
 | 
					            var displayPreferencesRepoTask = DisplayPreferencesRepository.Initialize();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Sort the resolvers by priority
 | 
					 | 
				
			||||||
            EntityResolvers = EntityResolvers.OrderBy(e => e.Priority).ToArray();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // Sort the providers by priority
 | 
					 | 
				
			||||||
            MetadataProviders = MetadataProviders.OrderBy(e => e.Priority).ToArray();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // Sort the image processors by priority
 | 
					 | 
				
			||||||
            ImageEnhancers = ImageEnhancers.OrderBy(e => e.Priority).ToArray();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            await Task.WhenAll(itemRepoTask, userRepoTask, userDataRepoTask, displayPreferencesRepoTask).ConfigureAwait(false);
 | 
					            await Task.WhenAll(itemRepoTask, userRepoTask, userDataRepoTask, displayPreferencesRepoTask).ConfigureAwait(false);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -488,7 +471,7 @@ namespace MediaBrowser.Controller
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            DisposeFileSystemManager();
 | 
					            DisposeFileSystemManager();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            FileSystemManager = new FileSystemManager(this, Logger);
 | 
					            FileSystemManager = new FileSystemManager(this, Logger, TaskManager);
 | 
				
			||||||
            FileSystemManager.StartWatchers();
 | 
					            FileSystemManager.StartWatchers();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -5,6 +5,7 @@ using System;
 | 
				
			|||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using MediaBrowser.Controller.IO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Controller.Library
 | 
					namespace MediaBrowser.Controller.Library
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
				
			|||||||
@ -1,9 +1,6 @@
 | 
				
			|||||||
using MediaBrowser.Common.Localization;
 | 
					
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace MediaBrowser.Controller.Localization
 | 
					namespace MediaBrowser.Controller.Localization
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    [Export(typeof(LocalizedStringData))]
 | 
					 | 
				
			||||||
    public class BaseStrings : LocalizedStringData
 | 
					    public class BaseStrings : LocalizedStringData
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public BaseStrings()
 | 
					        public BaseStrings()
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Xml.Serialization;
 | 
					using System.Xml.Serialization;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Common.Localization
 | 
					namespace MediaBrowser.Controller.Localization
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class LocalizedStringData
 | 
					    /// Class LocalizedStringData
 | 
				
			||||||
@ -1,5 +1,4 @@
 | 
				
			|||||||
using MediaBrowser.Common.Localization;
 | 
					using MediaBrowser.Model.Logging;
 | 
				
			||||||
using MediaBrowser.Model.Logging;
 | 
					 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Concurrent;
 | 
					using System.Collections.Concurrent;
 | 
				
			||||||
using System.Globalization;
 | 
					using System.Globalization;
 | 
				
			||||||
 | 
				
			|||||||
@ -64,7 +64,6 @@
 | 
				
			|||||||
      <HintPath>..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll</HintPath>
 | 
					      <HintPath>..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll</HintPath>
 | 
				
			||||||
    </Reference>
 | 
					    </Reference>
 | 
				
			||||||
    <Reference Include="System" />
 | 
					    <Reference Include="System" />
 | 
				
			||||||
    <Reference Include="System.ComponentModel.Composition" />
 | 
					 | 
				
			||||||
    <Reference Include="System.Core" />
 | 
					    <Reference Include="System.Core" />
 | 
				
			||||||
    <Reference Include="System.Data" />
 | 
					    <Reference Include="System.Data" />
 | 
				
			||||||
    <Reference Include="System.Drawing" />
 | 
					    <Reference Include="System.Drawing" />
 | 
				
			||||||
@ -108,6 +107,7 @@
 | 
				
			|||||||
    <Compile Include="Entities\CollectionFolder.cs" />
 | 
					    <Compile Include="Entities\CollectionFolder.cs" />
 | 
				
			||||||
    <Compile Include="Entities\Year.cs" />
 | 
					    <Compile Include="Entities\Year.cs" />
 | 
				
			||||||
    <Compile Include="Extensions\XmlExtensions.cs" />
 | 
					    <Compile Include="Extensions\XmlExtensions.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="IO\FileSystem.cs" />
 | 
				
			||||||
    <Compile Include="IO\FileSystemManager.cs" />
 | 
					    <Compile Include="IO\FileSystemManager.cs" />
 | 
				
			||||||
    <Compile Include="IO\NetworkShares.cs" />
 | 
					    <Compile Include="IO\NetworkShares.cs" />
 | 
				
			||||||
    <Compile Include="Library\ChildrenChangedEventArgs.cs" />
 | 
					    <Compile Include="Library\ChildrenChangedEventArgs.cs" />
 | 
				
			||||||
@ -118,6 +118,7 @@
 | 
				
			|||||||
    <Compile Include="Localization\AURatingsDictionary.cs" />
 | 
					    <Compile Include="Localization\AURatingsDictionary.cs" />
 | 
				
			||||||
    <Compile Include="Localization\BaseStrings.cs" />
 | 
					    <Compile Include="Localization\BaseStrings.cs" />
 | 
				
			||||||
    <Compile Include="Localization\GBRatingsDictionary.cs" />
 | 
					    <Compile Include="Localization\GBRatingsDictionary.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="Localization\LocalizedStringData.cs" />
 | 
				
			||||||
    <Compile Include="Localization\LocalizedStrings.cs" />
 | 
					    <Compile Include="Localization\LocalizedStrings.cs" />
 | 
				
			||||||
    <Compile Include="Localization\NLRatingsDictionary.cs" />
 | 
					    <Compile Include="Localization\NLRatingsDictionary.cs" />
 | 
				
			||||||
    <Compile Include="Localization\Ratings.cs" />
 | 
					    <Compile Include="Localization\Ratings.cs" />
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,6 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Provides metadata for Folders and all subclasses by parsing folder.xml
 | 
					    /// Provides metadata for Folders and all subclasses by parsing folder.xml
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    public class FolderProviderFromXml : BaseMetadataProvider
 | 
					    public class FolderProviderFromXml : BaseMetadataProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,6 @@ using MediaBrowser.Controller.Entities;
 | 
				
			|||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
@ -14,7 +13,6 @@ namespace MediaBrowser.Controller.Providers
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Provides images for all types by looking for standard images - folder, backdrop, logo, etc.
 | 
					    /// Provides images for all types by looking for standard images - folder, backdrop, logo, etc.
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    public class ImageFromMediaLocationProvider : BaseMetadataProvider
 | 
					    public class ImageFromMediaLocationProvider : BaseMetadataProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,9 +1,8 @@
 | 
				
			|||||||
using System.Globalization;
 | 
					using MediaBrowser.Common.Win32;
 | 
				
			||||||
using MediaBrowser.Common.IO;
 | 
					 | 
				
			||||||
using MediaBrowser.Common.Win32;
 | 
					 | 
				
			||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
 | 
					using MediaBrowser.Controller.IO;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					using System.Globalization;
 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Provides images for generic types by looking for standard images in the IBN
 | 
					    /// Provides images for generic types by looking for standard images in the IBN
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    public class ImagesByNameProvider : ImageFromMediaLocationProvider
 | 
					    public class ImagesByNameProvider : ImageFromMediaLocationProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,6 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Entities.Audio;
 | 
					using MediaBrowser.Controller.Entities.Audio;
 | 
				
			||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Uses ffmpeg to create video images
 | 
					    /// Uses ffmpeg to create video images
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    public class FFMpegAudioImageProvider : BaseFFMpegImageProvider<Audio>
 | 
					    public class FFMpegAudioImageProvider : BaseFFMpegImageProvider<Audio>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,6 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Uses ffmpeg to create video images
 | 
					    /// Uses ffmpeg to create video images
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    public class FFMpegVideoImageProvider : BaseFFMpegImageProvider<Video>
 | 
					    public class FFMpegVideoImageProvider : BaseFFMpegImageProvider<Video>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -23,8 +21,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
 | 
				
			|||||||
        /// Initializes a new instance of the <see cref="FFMpegVideoImageProvider" /> class.
 | 
					        /// Initializes a new instance of the <see cref="FFMpegVideoImageProvider" /> class.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <param name="isoManager">The iso manager.</param>
 | 
					        /// <param name="isoManager">The iso manager.</param>
 | 
				
			||||||
        [ImportingConstructor]
 | 
					        public FFMpegVideoImageProvider(IIsoManager isoManager)
 | 
				
			||||||
        public FFMpegVideoImageProvider([Import("isoManager")] IIsoManager isoManager)
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _isoManager = isoManager;
 | 
					            _isoManager = isoManager;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,6 @@ using MediaBrowser.Controller.MediaInfo;
 | 
				
			|||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -15,7 +14,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Extracts audio information using ffprobe
 | 
					    /// Extracts audio information using ffprobe
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    public class FFProbeAudioInfoProvider : BaseFFProbeProvider<Audio>
 | 
					    public class FFProbeAudioInfoProvider : BaseFFProbeProvider<Audio>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,6 @@ using MediaBrowser.Model.Entities;
 | 
				
			|||||||
using MediaBrowser.Model.MediaInfo;
 | 
					using MediaBrowser.Model.MediaInfo;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
@ -17,7 +16,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Extracts video information using ffprobe
 | 
					    /// Extracts video information using ffprobe
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    public class FFProbeVideoInfoProvider : BaseFFProbeProvider<Video>
 | 
					    public class FFProbeVideoInfoProvider : BaseFFProbeProvider<Video>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -43,8 +41,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
 | 
				
			|||||||
        /// <param name="isoManager">The iso manager.</param>
 | 
					        /// <param name="isoManager">The iso manager.</param>
 | 
				
			||||||
        /// <param name="blurayExaminer">The bluray examiner.</param>
 | 
					        /// <param name="blurayExaminer">The bluray examiner.</param>
 | 
				
			||||||
        /// <exception cref="System.ArgumentNullException">blurayExaminer</exception>
 | 
					        /// <exception cref="System.ArgumentNullException">blurayExaminer</exception>
 | 
				
			||||||
        [ImportingConstructor]
 | 
					        public FFProbeVideoInfoProvider(IIsoManager isoManager, IBlurayExaminer blurayExaminer)
 | 
				
			||||||
        public FFProbeVideoInfoProvider([Import("isoManager")] IIsoManager isoManager, [Import("blurayExaminer")] IBlurayExaminer blurayExaminer)
 | 
					 | 
				
			||||||
            : base()
 | 
					            : base()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (blurayExaminer == null)
 | 
					            if (blurayExaminer == null)
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities.Movies;
 | 
				
			|||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using MediaBrowser.Model.Net;
 | 
					using MediaBrowser.Model.Net;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -15,7 +14,6 @@ namespace MediaBrowser.Controller.Providers.Movies
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class FanArtMovieProvider
 | 
					    /// Class FanArtMovieProvider
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    class FanArtMovieProvider : FanartBaseProvider
 | 
					    class FanArtMovieProvider : FanartBaseProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,6 @@ using MediaBrowser.Model.Logging;
 | 
				
			|||||||
using MediaBrowser.Model.Net;
 | 
					using MediaBrowser.Model.Net;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Globalization;
 | 
					using System.Globalization;
 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
@ -29,7 +28,6 @@ namespace MediaBrowser.Controller.Providers.Movies
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class MovieDbProvider
 | 
					    /// Class MovieDbProvider
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    public class MovieDbProvider : BaseMetadataProvider
 | 
					    public class MovieDbProvider : BaseMetadataProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,6 @@
 | 
				
			|||||||
using MediaBrowser.Common.Serialization;
 | 
					using MediaBrowser.Common.Serialization;
 | 
				
			||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.Movies
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class MovieProviderFromJson
 | 
					    /// Class MovieProviderFromJson
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    public class MovieProviderFromJson : MovieDbProvider
 | 
					    public class MovieProviderFromJson : MovieDbProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,6 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
using MediaBrowser.Controller.Entities.Movies;
 | 
					using MediaBrowser.Controller.Entities.Movies;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.Movies
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class MovieProviderFromXml
 | 
					    /// Class MovieProviderFromXml
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    public class MovieProviderFromXml : BaseMetadataProvider
 | 
					    public class MovieProviderFromXml : BaseMetadataProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,6 @@
 | 
				
			|||||||
using MediaBrowser.Common.Serialization;
 | 
					using MediaBrowser.Common.Serialization;
 | 
				
			||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.Movies
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class PersonProviderFromJson
 | 
					    /// Class PersonProviderFromJson
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    class PersonProviderFromJson : TmdbPersonProvider
 | 
					    class PersonProviderFromJson : TmdbPersonProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,6 @@ using MediaBrowser.Model.Entities;
 | 
				
			|||||||
using MediaBrowser.Model.Net;
 | 
					using MediaBrowser.Model.Net;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Globalization;
 | 
					using System.Globalization;
 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
@ -17,7 +16,6 @@ namespace MediaBrowser.Controller.Providers.Movies
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class TmdbPersonProvider
 | 
					    /// Class TmdbPersonProvider
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    public class TmdbPersonProvider : BaseMetadataProvider
 | 
					    public class TmdbPersonProvider : BaseMetadataProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,6 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
using MediaBrowser.Controller.Entities.Audio;
 | 
					using MediaBrowser.Controller.Entities.Audio;
 | 
				
			||||||
using MediaBrowser.Controller.Entities.TV;
 | 
					using MediaBrowser.Controller.Entities.TV;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class SortNameProvider
 | 
					    /// Class SortNameProvider
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    public class SortNameProvider : BaseMetadataProvider
 | 
					    public class SortNameProvider : BaseMetadataProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,6 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Entities.TV;
 | 
					using MediaBrowser.Controller.Entities.TV;
 | 
				
			||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.TV
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class EpisodeImageFromMediaLocationProvider
 | 
					    /// Class EpisodeImageFromMediaLocationProvider
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    public class EpisodeImageFromMediaLocationProvider : BaseMetadataProvider
 | 
					    public class EpisodeImageFromMediaLocationProvider : BaseMetadataProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,6 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Entities.TV;
 | 
					using MediaBrowser.Controller.Entities.TV;
 | 
				
			||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.TV
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class EpisodeProviderFromXml
 | 
					    /// Class EpisodeProviderFromXml
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    public class EpisodeProviderFromXml : BaseMetadataProvider
 | 
					    public class EpisodeProviderFromXml : BaseMetadataProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities.TV;
 | 
				
			|||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using MediaBrowser.Model.Net;
 | 
					using MediaBrowser.Model.Net;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -12,7 +11,6 @@ using System.Xml;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Controller.Providers.TV
 | 
					namespace MediaBrowser.Controller.Providers.TV
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    class FanArtTVProvider : FanartBaseProvider
 | 
					    class FanArtTVProvider : FanartBaseProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        protected string FanArtBaseUrl = "http://api.fanart.tv/webservice/series/{0}/{1}/xml/all/1/1";
 | 
					        protected string FanArtBaseUrl = "http://api.fanart.tv/webservice/series/{0}/{1}/xml/all/1/1";
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,6 @@ using MediaBrowser.Controller.Resolvers.TV;
 | 
				
			|||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using MediaBrowser.Model.Net;
 | 
					using MediaBrowser.Model.Net;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
@ -18,7 +17,6 @@ namespace MediaBrowser.Controller.Providers.TV
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class RemoteEpisodeProvider
 | 
					    /// Class RemoteEpisodeProvider
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    class RemoteEpisodeProvider : BaseMetadataProvider
 | 
					    class RemoteEpisodeProvider : BaseMetadataProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,6 @@ using MediaBrowser.Model.Entities;
 | 
				
			|||||||
using MediaBrowser.Model.Net;
 | 
					using MediaBrowser.Model.Net;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -16,7 +15,6 @@ namespace MediaBrowser.Controller.Providers.TV
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class RemoteSeasonProvider
 | 
					    /// Class RemoteSeasonProvider
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    class RemoteSeasonProvider : BaseMetadataProvider
 | 
					    class RemoteSeasonProvider : BaseMetadataProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,6 @@ using MediaBrowser.Model.Entities;
 | 
				
			|||||||
using MediaBrowser.Model.Net;
 | 
					using MediaBrowser.Model.Net;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Net;
 | 
					using System.Net;
 | 
				
			||||||
using System.Text;
 | 
					using System.Text;
 | 
				
			||||||
@ -20,7 +19,6 @@ namespace MediaBrowser.Controller.Providers.TV
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class RemoteSeriesProvider
 | 
					    /// Class RemoteSeriesProvider
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    class RemoteSeriesProvider : BaseMetadataProvider
 | 
					    class RemoteSeriesProvider : BaseMetadataProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,6 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Entities.TV;
 | 
					using MediaBrowser.Controller.Entities.TV;
 | 
				
			||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.TV
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class SeriesProviderFromXml
 | 
					    /// Class SeriesProviderFromXml
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(BaseMetadataProvider))]
 | 
					 | 
				
			||||||
    public class SeriesProviderFromXml : BaseMetadataProvider
 | 
					    public class SeriesProviderFromXml : BaseMetadataProvider
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,16 +1,26 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Library;
 | 
					using MediaBrowser.Controller.Library;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Controller.Resolvers.Audio
 | 
					namespace MediaBrowser.Controller.Resolvers.Audio
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    [Export(typeof(IBaseItemResolver))]
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Class AudioResolver
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
    public class AudioResolver : BaseItemResolver<Entities.Audio.Audio>
 | 
					    public class AudioResolver : BaseItemResolver<Entities.Audio.Audio>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets the priority.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <value>The priority.</value>
 | 
				
			||||||
        public override ResolverPriority Priority
 | 
					        public override ResolverPriority Priority
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            get { return ResolverPriority.Last; }
 | 
					            get { return ResolverPriority.Last; }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Resolves the specified args.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="args">The args.</param>
 | 
				
			||||||
 | 
					        /// <returns>Entities.Audio.Audio.</returns>
 | 
				
			||||||
        protected override Entities.Audio.Audio Resolve(ItemResolveArgs args)
 | 
					        protected override Entities.Audio.Audio Resolve(ItemResolveArgs args)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // Return audio if the path is a file and has a matching extension
 | 
					            // Return audio if the path is a file and has a matching extension
 | 
				
			||||||
 | 
				
			|||||||
@ -1,17 +1,27 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Entities.Audio;
 | 
					using MediaBrowser.Controller.Entities.Audio;
 | 
				
			||||||
using MediaBrowser.Controller.Library;
 | 
					using MediaBrowser.Controller.Library;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Controller.Resolvers.Audio
 | 
					namespace MediaBrowser.Controller.Resolvers.Audio
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    [Export(typeof(IBaseItemResolver))]
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Class MusicAlbumResolver
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
    public class MusicAlbumResolver : BaseItemResolver<MusicAlbum>
 | 
					    public class MusicAlbumResolver : BaseItemResolver<MusicAlbum>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets the priority.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <value>The priority.</value>
 | 
				
			||||||
        public override ResolverPriority Priority
 | 
					        public override ResolverPriority Priority
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            get { return ResolverPriority.Third; } // we need to be ahead of the generic folder resolver but behind the movie one
 | 
					            get { return ResolverPriority.Third; } // we need to be ahead of the generic folder resolver but behind the movie one
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Resolves the specified args.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="args">The args.</param>
 | 
				
			||||||
 | 
					        /// <returns>MusicAlbum.</returns>
 | 
				
			||||||
        protected override MusicAlbum Resolve(ItemResolveArgs args)
 | 
					        protected override MusicAlbum Resolve(ItemResolveArgs args)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (!args.IsDirectory) return null;
 | 
					            if (!args.IsDirectory) return null;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,18 +1,28 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Entities.Audio;
 | 
					using MediaBrowser.Controller.Entities.Audio;
 | 
				
			||||||
using MediaBrowser.Controller.Library;
 | 
					using MediaBrowser.Controller.Library;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Controller.Resolvers.Audio
 | 
					namespace MediaBrowser.Controller.Resolvers.Audio
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    [Export(typeof(IBaseItemResolver))]
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Class MusicArtistResolver
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
    public class MusicArtistResolver : BaseItemResolver<MusicArtist>
 | 
					    public class MusicArtistResolver : BaseItemResolver<MusicArtist>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets the priority.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <value>The priority.</value>
 | 
				
			||||||
        public override ResolverPriority Priority
 | 
					        public override ResolverPriority Priority
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            get { return ResolverPriority.Third; } // we need to be ahead of the generic folder resolver but behind the movie one
 | 
					            get { return ResolverPriority.Third; } // we need to be ahead of the generic folder resolver but behind the movie one
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Resolves the specified args.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="args">The args.</param>
 | 
				
			||||||
 | 
					        /// <returns>MusicArtist.</returns>
 | 
				
			||||||
        protected override MusicArtist Resolve(ItemResolveArgs args)
 | 
					        protected override MusicArtist Resolve(ItemResolveArgs args)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (!args.IsDirectory) return null;
 | 
					            if (!args.IsDirectory) return null;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,6 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Library;
 | 
					using MediaBrowser.Controller.Library;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Controller.Resolvers
 | 
					namespace MediaBrowser.Controller.Resolvers
 | 
				
			||||||
@ -9,7 +8,6 @@ namespace MediaBrowser.Controller.Resolvers
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Provides the core resolver ignore rules
 | 
					    /// Provides the core resolver ignore rules
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IResolutionIgnoreRule))]
 | 
					 | 
				
			||||||
    public class CoreResolutionIgnoreRule : IResolutionIgnoreRule
 | 
					    public class CoreResolutionIgnoreRule : IResolutionIgnoreRule
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -27,6 +25,11 @@ namespace MediaBrowser.Controller.Resolvers
 | 
				
			|||||||
            "extrafanart"
 | 
					            "extrafanart"
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Shoulds the ignore.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="args">The args.</param>
 | 
				
			||||||
 | 
					        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
 | 
				
			||||||
        public bool ShouldIgnore(ItemResolveArgs args)
 | 
					        public bool ShouldIgnore(ItemResolveArgs args)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // Ignore hidden files and folders
 | 
					            // Ignore hidden files and folders
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
using MediaBrowser.Common.IO;
 | 
					using MediaBrowser.Common.IO;
 | 
				
			||||||
using MediaBrowser.Common.Win32;
 | 
					using MediaBrowser.Common.Win32;
 | 
				
			||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
 | 
					using MediaBrowser.Controller.IO;
 | 
				
			||||||
using MediaBrowser.Controller.Library;
 | 
					using MediaBrowser.Controller.Library;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,13 +1,11 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
using MediaBrowser.Controller.Library;
 | 
					using MediaBrowser.Controller.Library;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Controller.Resolvers
 | 
					namespace MediaBrowser.Controller.Resolvers
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class FolderResolver
 | 
					    /// Class FolderResolver
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IBaseItemResolver))]
 | 
					 | 
				
			||||||
    public class FolderResolver : BaseFolderResolver<Folder>
 | 
					    public class FolderResolver : BaseFolderResolver<Folder>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,6 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
using MediaBrowser.Controller.Library;
 | 
					using MediaBrowser.Controller.Library;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Controller.Resolvers
 | 
					namespace MediaBrowser.Controller.Resolvers
 | 
				
			||||||
@ -9,7 +8,6 @@ namespace MediaBrowser.Controller.Resolvers
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class LocalTrailerResolver
 | 
					    /// Class LocalTrailerResolver
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IBaseItemResolver))]
 | 
					 | 
				
			||||||
    public class LocalTrailerResolver : BaseVideoResolver<Trailer>
 | 
					    public class LocalTrailerResolver : BaseVideoResolver<Trailer>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,6 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Entities.Movies;
 | 
					using MediaBrowser.Controller.Entities.Movies;
 | 
				
			||||||
using MediaBrowser.Controller.Library;
 | 
					using MediaBrowser.Controller.Library;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Controller.Resolvers.Movies
 | 
					namespace MediaBrowser.Controller.Resolvers.Movies
 | 
				
			||||||
@ -9,7 +8,6 @@ namespace MediaBrowser.Controller.Resolvers.Movies
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class BoxSetResolver
 | 
					    /// Class BoxSetResolver
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IBaseItemResolver))]
 | 
					 | 
				
			||||||
    public class BoxSetResolver : BaseFolderResolver<BoxSet>
 | 
					    public class BoxSetResolver : BaseFolderResolver<BoxSet>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,6 @@ using MediaBrowser.Controller.Providers.Movies;
 | 
				
			|||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Controller.Resolvers.Movies
 | 
					namespace MediaBrowser.Controller.Resolvers.Movies
 | 
				
			||||||
@ -14,7 +13,6 @@ namespace MediaBrowser.Controller.Resolvers.Movies
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class MovieResolver
 | 
					    /// Class MovieResolver
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IBaseItemResolver))]
 | 
					 | 
				
			||||||
    public class MovieResolver : BaseVideoResolver<Movie>
 | 
					    public class MovieResolver : BaseVideoResolver<Movie>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,14 +1,20 @@
 | 
				
			|||||||
using System;
 | 
					using MediaBrowser.Controller.Entities.TV;
 | 
				
			||||||
using MediaBrowser.Controller.Entities.TV;
 | 
					 | 
				
			||||||
using MediaBrowser.Controller.Library;
 | 
					using MediaBrowser.Controller.Library;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Controller.Resolvers.TV
 | 
					namespace MediaBrowser.Controller.Resolvers.TV
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    [Export(typeof(IBaseItemResolver))]
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Class EpisodeResolver
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
    public class EpisodeResolver : BaseVideoResolver<Episode>
 | 
					    public class EpisodeResolver : BaseVideoResolver<Episode>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Resolves the specified args.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="args">The args.</param>
 | 
				
			||||||
 | 
					        /// <returns>Episode.</returns>
 | 
				
			||||||
        protected override Episode Resolve(ItemResolveArgs args)
 | 
					        protected override Episode Resolve(ItemResolveArgs args)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // If the parent is a Season or Series, then this is an Episode if the VideoResolver returns something
 | 
					            // If the parent is a Season or Series, then this is an Episode if the VideoResolver returns something
 | 
				
			||||||
@ -40,6 +46,11 @@ namespace MediaBrowser.Controller.Resolvers.TV
 | 
				
			|||||||
            return null;
 | 
					            return null;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Sets the initial item values.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="item">The item.</param>
 | 
				
			||||||
 | 
					        /// <param name="args">The args.</param>
 | 
				
			||||||
        protected override void SetInitialItemValues(Episode item, ItemResolveArgs args)
 | 
					        protected override void SetInitialItemValues(Episode item, ItemResolveArgs args)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            base.SetInitialItemValues(item, args);
 | 
					            base.SetInitialItemValues(item, args);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,13 +1,19 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Entities.TV;
 | 
					using MediaBrowser.Controller.Entities.TV;
 | 
				
			||||||
using MediaBrowser.Controller.Library;
 | 
					using MediaBrowser.Controller.Library;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Controller.Resolvers.TV
 | 
					namespace MediaBrowser.Controller.Resolvers.TV
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    [Export(typeof(IBaseItemResolver))]
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Class SeasonResolver
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
    public class SeasonResolver : BaseFolderResolver<Season>
 | 
					    public class SeasonResolver : BaseFolderResolver<Season>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Resolves the specified args.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="args">The args.</param>
 | 
				
			||||||
 | 
					        /// <returns>Season.</returns>
 | 
				
			||||||
        protected override Season Resolve(ItemResolveArgs args)
 | 
					        protected override Season Resolve(ItemResolveArgs args)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (args.Parent is Series && args.IsDirectory)
 | 
					            if (args.Parent is Series && args.IsDirectory)
 | 
				
			||||||
@ -21,6 +27,11 @@ namespace MediaBrowser.Controller.Resolvers.TV
 | 
				
			|||||||
            return null;
 | 
					            return null;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Sets the initial item values.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="item">The item.</param>
 | 
				
			||||||
 | 
					        /// <param name="args">The args.</param>
 | 
				
			||||||
        protected override void SetInitialItemValues(Season item, ItemResolveArgs args)
 | 
					        protected override void SetInitialItemValues(Season item, ItemResolveArgs args)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            base.SetInitialItemValues(item, args);
 | 
					            base.SetInitialItemValues(item, args);
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,6 @@ using MediaBrowser.Controller.Entities.TV;
 | 
				
			|||||||
using MediaBrowser.Controller.Library;
 | 
					using MediaBrowser.Controller.Library;
 | 
				
			||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Controller.Resolvers.TV
 | 
					namespace MediaBrowser.Controller.Resolvers.TV
 | 
				
			||||||
@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Resolvers.TV
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Class SeriesResolver
 | 
					    /// Class SeriesResolver
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IBaseItemResolver))]
 | 
					 | 
				
			||||||
    public class SeriesResolver : BaseFolderResolver<Series>
 | 
					    public class SeriesResolver : BaseFolderResolver<Series>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,6 @@
 | 
				
			|||||||
using MediaBrowser.Controller.Library;
 | 
					using MediaBrowser.Controller.Library;
 | 
				
			||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Controller.Resolvers
 | 
					namespace MediaBrowser.Controller.Resolvers
 | 
				
			||||||
@ -10,7 +9,6 @@ namespace MediaBrowser.Controller.Resolvers
 | 
				
			|||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Resolves a Path into a Video
 | 
					    /// Resolves a Path into a Video
 | 
				
			||||||
    /// </summary>
 | 
					    /// </summary>
 | 
				
			||||||
    [Export(typeof(IBaseItemResolver))]
 | 
					 | 
				
			||||||
    public class VideoResolver : BaseVideoResolver<Video>
 | 
					    public class VideoResolver : BaseVideoResolver<Video>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,18 +1,29 @@
 | 
				
			|||||||
using MediaBrowser.Common.ScheduledTasks;
 | 
					using MediaBrowser.Common.ScheduledTasks;
 | 
				
			||||||
using MediaBrowser.Controller.Entities;
 | 
					using MediaBrowser.Controller.Entities;
 | 
				
			||||||
using MediaBrowser.Model.Tasks;
 | 
					using MediaBrowser.Model.Logging;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.ComponentModel.Composition;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Controller.ScheduledTasks
 | 
					namespace MediaBrowser.Controller.ScheduledTasks
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    [Export(typeof(IScheduledTask))]
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Class ChapterImagesTask
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
    class ChapterImagesTask : BaseScheduledTask<Kernel>
 | 
					    class ChapterImagesTask : BaseScheduledTask<Kernel>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Initializes a new instance of the <see cref="ChapterImagesTask" /> class.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="kernel">The kernel.</param>
 | 
				
			||||||
 | 
					        /// <param name="logger"></param>
 | 
				
			||||||
 | 
					        public ChapterImagesTask(Kernel kernel, ITaskManager taskManager, ILogger logger)
 | 
				
			||||||
 | 
					            : base(kernel, taskManager, logger)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Creates the triggers that define when the task will run
 | 
					        /// Creates the triggers that define when the task will run
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user