diff options
121 files changed, 780 insertions, 512 deletions
diff --git a/MediaBrowser.Api/EnvironmentService.cs b/MediaBrowser.Api/EnvironmentService.cs index db768d0e8..83678c3f2 100644 --- a/MediaBrowser.Api/EnvironmentService.cs +++ b/MediaBrowser.Api/EnvironmentService.cs @@ -1,11 +1,9 @@ -using MediaBrowser.Common.IO; -using MediaBrowser.Common.Net; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Globalization; using System.IO; using System.Linq; @@ -59,7 +57,6 @@ namespace MediaBrowser.Api /// <summary> /// Class EnvironmentService /// </summary> - [Export(typeof(IRestfulService))] public class EnvironmentService : BaseRestService { /// <summary> diff --git a/MediaBrowser.Api/HttpHandlers/PlaybackCheckInHandler.cs b/MediaBrowser.Api/HttpHandlers/PlaybackCheckInHandler.cs index 7e0d27e49..9de3e2791 100644 --- a/MediaBrowser.Api/HttpHandlers/PlaybackCheckInHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/PlaybackCheckInHandler.cs @@ -5,7 +5,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Model.Connectivity; using MediaBrowser.Model.Dto; using System; -using System.ComponentModel.Composition; using System.Threading.Tasks; namespace MediaBrowser.Api.HttpHandlers @@ -13,7 +12,6 @@ namespace MediaBrowser.Api.HttpHandlers /// <summary> /// Provides a handler to set played status for an item /// </summary> - [Export(typeof(IHttpServerHandler))] public class PlaybackCheckInHandler : BaseSerializationHandler<Kernel, UserItemDataDto> { /// <summary> diff --git a/MediaBrowser.Api/HttpHandlers/UpdateMediaLibraryHandler.cs b/MediaBrowser.Api/HttpHandlers/UpdateMediaLibraryHandler.cs index e5c42008e..df6edd6f9 100644 --- a/MediaBrowser.Api/HttpHandlers/UpdateMediaLibraryHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/UpdateMediaLibraryHandler.cs @@ -1,19 +1,17 @@ -using MediaBrowser.Common.IO; -using MediaBrowser.Common.Net.Handlers; +using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; using System; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading.Tasks; +using MediaBrowser.Controller.IO; namespace MediaBrowser.Api.HttpHandlers { /// <summary> /// Makes changes to the user's media library /// </summary> - [Export(typeof(IHttpServerHandler))] public class UpdateMediaLibraryHandler : BaseActionHandler<Kernel> { /// <summary> diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index 5e5888b3e..113bad083 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -6,7 +6,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Model.Entities; using ServiceStack.ServiceHost; using System; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading.Tasks; @@ -114,7 +113,6 @@ namespace MediaBrowser.Api.Images /// <summary> /// Class ImageService /// </summary> - [Export(typeof(IRestfulService))] public class ImageService : BaseRestService { /// <summary> diff --git a/MediaBrowser.Api/Images/UploadImageHandler.cs b/MediaBrowser.Api/Images/UploadImageHandler.cs index 13ea86563..758e96d85 100644 --- a/MediaBrowser.Api/Images/UploadImageHandler.cs +++ b/MediaBrowser.Api/Images/UploadImageHandler.cs @@ -5,7 +5,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -15,7 +14,6 @@ namespace MediaBrowser.Api.Images /// <summary> /// Class UploadImageHandler /// </summary> - [Export(typeof(IHttpServerHandler))] class UploadImageHandler : BaseActionHandler<Kernel> { /// <summary> diff --git a/MediaBrowser.Api/LibraryService.cs b/MediaBrowser.Api/LibraryService.cs index bcf87ab67..4ca073c10 100644 --- a/MediaBrowser.Api/LibraryService.cs +++ b/MediaBrowser.Api/LibraryService.cs @@ -7,7 +7,6 @@ using MediaBrowser.Model.Entities; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Linq; namespace MediaBrowser.Api @@ -96,7 +95,6 @@ namespace MediaBrowser.Api /// <summary> /// Class LibraryService /// </summary> - [Export(typeof(IRestfulService))] public class LibraryService : BaseRestService { /// <summary> diff --git a/MediaBrowser.Api/LocalizationService.cs b/MediaBrowser.Api/LocalizationService.cs index ce9f175e3..098c9f72a 100644 --- a/MediaBrowser.Api/LocalizationService.cs +++ b/MediaBrowser.Api/LocalizationService.cs @@ -5,7 +5,6 @@ using MediaBrowser.Model.Globalization; using MoreLinq; using ServiceStack.ServiceHost; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Globalization; using System.Linq; @@ -38,7 +37,6 @@ namespace MediaBrowser.Api /// <summary> /// Class CulturesService /// </summary> - [Export(typeof(IRestfulService))] public class LocalizationService : BaseRestService { /// <summary> diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index 1d204cc7a..f6045ddd1 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -64,7 +64,6 @@ <HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath> </Reference> <Reference Include="System" /> - <Reference Include="System.ComponentModel.Composition" /> <Reference Include="System.Core" /> <Reference Include="System.Drawing" /> <Reference Include="System.Runtime.Serialization" /> diff --git a/MediaBrowser.Api/PackageService.cs b/MediaBrowser.Api/PackageService.cs index 924c33937..028242e72 100644 --- a/MediaBrowser.Api/PackageService.cs +++ b/MediaBrowser.Api/PackageService.cs @@ -6,7 +6,6 @@ using MediaBrowser.Model.Updates; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -93,7 +92,6 @@ namespace MediaBrowser.Api /// <summary> /// Class PackageService /// </summary> - [Export(typeof(IRestfulService))] public class PackageService : BaseRestService { /// <summary> diff --git a/MediaBrowser.Api/Plugin.cs b/MediaBrowser.Api/Plugin.cs index c9e1d7c95..58c0ffcfa 100644 --- a/MediaBrowser.Api/Plugin.cs +++ b/MediaBrowser.Api/Plugin.cs @@ -3,7 +3,6 @@ using MediaBrowser.Model.Plugins; using System; using System.Collections.Generic; using System.ComponentModel; -using System.ComponentModel.Composition; using System.Diagnostics; using System.Linq; using System.Threading; @@ -14,7 +13,6 @@ namespace MediaBrowser.Api /// <summary> /// Class Plugin /// </summary> - [Export(typeof(IPlugin))] public class Plugin : BasePlugin<BasePluginConfiguration> { /// <summary> diff --git a/MediaBrowser.Api/PluginService.cs b/MediaBrowser.Api/PluginService.cs index 73bafd9fd..f982602bf 100644 --- a/MediaBrowser.Api/PluginService.cs +++ b/MediaBrowser.Api/PluginService.cs @@ -7,10 +7,8 @@ using MediaBrowser.Model.Plugins; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Linq; -using System.Threading.Tasks; using ServiceStack.Text.Controller; namespace MediaBrowser.Api @@ -119,7 +117,6 @@ namespace MediaBrowser.Api /// <summary> /// Class PluginsService /// </summary> - [Export(typeof(IRestfulService))] public class PluginService : BaseRestService { /// <summary> diff --git a/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs b/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs index bd12454a0..1ca744542 100644 --- a/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs +++ b/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs @@ -6,7 +6,6 @@ using MediaBrowser.Model.Tasks; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using ServiceStack.Text.Controller; @@ -83,17 +82,27 @@ namespace MediaBrowser.Api.ScheduledTasks /// <summary> /// Class ScheduledTasksService /// </summary> - [Export(typeof(IRestfulService))] 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> /// Gets the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>IEnumerable{TaskInfo}.</returns> 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(); return ToOptimizedResult(result); @@ -106,7 +115,7 @@ namespace MediaBrowser.Api.ScheduledTasks /// <returns>IEnumerable{TaskInfo}.</returns> 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) { @@ -124,7 +133,7 @@ namespace MediaBrowser.Api.ScheduledTasks /// <param name="request">The request.</param> 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) { @@ -140,7 +149,7 @@ namespace MediaBrowser.Api.ScheduledTasks /// <param name="request">The request.</param> 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) { @@ -160,8 +169,8 @@ namespace MediaBrowser.Api.ScheduledTasks // https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs var pathInfo = PathInfo.Parse(Request.PathInfo); 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) { @@ -170,7 +179,7 @@ namespace MediaBrowser.Api.ScheduledTasks var triggerInfos = JsonSerializer.DeserializeFromStream<TaskTriggerInfo[]>(request.RequestStream); - task.Triggers = triggerInfos.Select(t => ScheduledTaskHelpers.GetTrigger(t, Kernel)); + task.Triggers = triggerInfos.Select(ScheduledTaskHelpers.GetTrigger); } } } diff --git a/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs b/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs index cb7863d84..72c23a0ef 100644 --- a/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs +++ b/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs @@ -1,10 +1,8 @@ using MediaBrowser.Common.Kernel; using MediaBrowser.Common.ScheduledTasks; -using MediaBrowser.Controller; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Linq; using System.Threading.Tasks; @@ -13,10 +11,15 @@ namespace MediaBrowser.Api.ScheduledTasks /// <summary> /// Class ScheduledTasksWebSocketListener /// </summary> - [Export(typeof(IWebSocketListener))] 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> /// Gets the name. /// </summary> /// <value>The name.</value> @@ -33,13 +36,12 @@ namespace MediaBrowser.Api.ScheduledTasks /// <summary> /// Initializes a new instance of the <see cref="ScheduledTasksWebSocketListener" /> class. /// </summary> - /// <param name="kernel">The kernel.</param> /// <param name="logger">The logger.</param> - [ImportingConstructor] - public ScheduledTasksWebSocketListener([Import("kernel")] Kernel kernel, [Import("logger")] ILogger logger) + /// <param name="taskManager">The task manager.</param> + public ScheduledTasksWebSocketListener(ILogger logger, ITaskManager taskManager) : base(logger) { - _kernel = kernel; + TaskManager = taskManager; } /// <summary> @@ -49,7 +51,7 @@ namespace MediaBrowser.Api.ScheduledTasks /// <returns>Task{IEnumerable{TaskInfo}}.</returns> 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)); } } diff --git a/MediaBrowser.Api/Streaming/AudioHandler.cs b/MediaBrowser.Api/Streaming/AudioHandler.cs index b7d5afbb9..2332f29d3 100644 --- a/MediaBrowser.Api/Streaming/AudioHandler.cs +++ b/MediaBrowser.Api/Streaming/AudioHandler.cs @@ -5,7 +5,6 @@ using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Dto; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Linq; using System.Net; @@ -14,7 +13,6 @@ namespace MediaBrowser.Api.Streaming /// <summary> /// Providers a progressive streaming audio api /// </summary> - [Export(typeof(IHttpServerHandler))] public class AudioHandler : BaseProgressiveStreamingHandler<Audio> { /// <summary> diff --git a/MediaBrowser.Api/Streaming/BaseStreamingHandler.cs b/MediaBrowser.Api/Streaming/BaseStreamingHandler.cs index d800a40fe..8c5fd34b1 100644 --- a/MediaBrowser.Api/Streaming/BaseStreamingHandler.cs +++ b/MediaBrowser.Api/Streaming/BaseStreamingHandler.cs @@ -859,11 +859,11 @@ namespace MediaBrowser.Api.Streaming { var video = LibraryItem as Video; - if (video != null && video.VideoType == VideoType.Iso && - video.IsoType.HasValue && Kernel.IsoManager.CanMount(video.Path)) - { - IsoMount = await Kernel.IsoManager.Mount(video.Path, CancellationToken.None).ConfigureAwait(false); - } + //if (video != null && video.VideoType == VideoType.Iso && + // video.IsoType.HasValue && Kernel.IsoManager.CanMount(video.Path)) + //{ + // IsoMount = await Kernel.IsoManager.Mount(video.Path, CancellationToken.None).ConfigureAwait(false); + //} var process = new Process { diff --git a/MediaBrowser.Api/Streaming/HlsAudioPlaylistHandler.cs b/MediaBrowser.Api/Streaming/HlsAudioPlaylistHandler.cs index 7aea163af..e9ae3a005 100644 --- a/MediaBrowser.Api/Streaming/HlsAudioPlaylistHandler.cs +++ b/MediaBrowser.Api/Streaming/HlsAudioPlaylistHandler.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Model.Dto; using System; -using System.ComponentModel.Composition; using System.Net; namespace MediaBrowser.Api.Streaming @@ -10,7 +9,6 @@ namespace MediaBrowser.Api.Streaming /// <summary> /// Class HlsAudioPlaylistHandler /// </summary> - [Export(typeof(IHttpServerHandler))] public class HlsAudioPlaylistHandler : BaseHlsPlaylistHandler<Audio> { /// <summary> diff --git a/MediaBrowser.Api/Streaming/HlsSegmentHandler.cs b/MediaBrowser.Api/Streaming/HlsSegmentHandler.cs index 5b022ab3d..4305fd8a7 100644 --- a/MediaBrowser.Api/Streaming/HlsSegmentHandler.cs +++ b/MediaBrowser.Api/Streaming/HlsSegmentHandler.cs @@ -1,7 +1,6 @@ using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Controller; using System; -using System.ComponentModel.Composition; using System.IO; using System.Net; using System.Threading.Tasks; @@ -11,7 +10,6 @@ namespace MediaBrowser.Api.Streaming /// <summary> /// Class HlsSegmentHandler /// </summary> - [Export(typeof(IHttpServerHandler))] public class HlsSegmentHandler : BaseHandler<Kernel> { /// <summary> diff --git a/MediaBrowser.Api/Streaming/HlsVideoPlaylistHandler.cs b/MediaBrowser.Api/Streaming/HlsVideoPlaylistHandler.cs index 97a5b2ce6..70f825f02 100644 --- a/MediaBrowser.Api/Streaming/HlsVideoPlaylistHandler.cs +++ b/MediaBrowser.Api/Streaming/HlsVideoPlaylistHandler.cs @@ -1,7 +1,6 @@ using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Controller.Entities; using System; -using System.ComponentModel.Composition; using System.Net; namespace MediaBrowser.Api.Streaming @@ -9,7 +8,6 @@ namespace MediaBrowser.Api.Streaming /// <summary> /// Class HlsVideoPlaylistHandler /// </summary> - [Export(typeof(IHttpServerHandler))] public class HlsVideoPlaylistHandler : BaseHlsPlaylistHandler<Video> { /// <summary> diff --git a/MediaBrowser.Api/Streaming/VideoHandler.cs b/MediaBrowser.Api/Streaming/VideoHandler.cs index 4a05d2547..da60297f2 100644 --- a/MediaBrowser.Api/Streaming/VideoHandler.cs +++ b/MediaBrowser.Api/Streaming/VideoHandler.cs @@ -1,21 +1,15 @@ -using System.IO; -using System.Threading; -using MediaBrowser.Common.IO; -using MediaBrowser.Common.Net.Handlers; +using MediaBrowser.Common.IO; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Resolvers; using System; -using System.ComponentModel.Composition; using System.Linq; using System.Net; -using MediaBrowser.Model.Entities; namespace MediaBrowser.Api.Streaming { /// <summary> /// Providers a progressive streaming video api /// </summary> - [Export(typeof(IHttpServerHandler))] class VideoHandler : BaseProgressiveStreamingHandler<Video> { /// <summary> diff --git a/MediaBrowser.Api/SystemService.cs b/MediaBrowser.Api/SystemService.cs index 9d15feb80..04632aa8e 100644 --- a/MediaBrowser.Api/SystemService.cs +++ b/MediaBrowser.Api/SystemService.cs @@ -5,7 +5,6 @@ using MediaBrowser.Controller; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.System; using ServiceStack.ServiceHost; -using System.ComponentModel.Composition; using System.IO; using System.Threading.Tasks; @@ -47,7 +46,6 @@ namespace MediaBrowser.Api /// <summary> /// Class SystemInfoService /// </summary> - [Export(typeof(IRestfulService))] public class SystemService : BaseRestService { /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/GenresService.cs b/MediaBrowser.Api/UserLibrary/GenresService.cs index ea97fea3e..5d72236fa 100644 --- a/MediaBrowser.Api/UserLibrary/GenresService.cs +++ b/MediaBrowser.Api/UserLibrary/GenresService.cs @@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Linq; using System.Threading.Tasks; @@ -22,7 +21,6 @@ namespace MediaBrowser.Api.UserLibrary /// <summary> /// Class GenresService /// </summary> - [Export(typeof(IRestfulService))] public class GenresService : BaseItemsByNameService<Genre> { /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index 3cc503184..0586b2b5e 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -8,7 +8,6 @@ using MediaBrowser.Model.Entities; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Linq; using System.Threading.Tasks; @@ -144,7 +143,6 @@ namespace MediaBrowser.Api.UserLibrary /// <summary> /// Class ItemsService /// </summary> - [Export(typeof(IRestfulService))] public class ItemsService : BaseRestService { /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/PersonsService.cs b/MediaBrowser.Api/UserLibrary/PersonsService.cs index 71dc32b32..181d511a6 100644 --- a/MediaBrowser.Api/UserLibrary/PersonsService.cs +++ b/MediaBrowser.Api/UserLibrary/PersonsService.cs @@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Linq; using System.Threading.Tasks; @@ -27,7 +26,6 @@ namespace MediaBrowser.Api.UserLibrary /// <summary> /// Class PersonsService /// </summary> - [Export(typeof(IRestfulService))] public class PersonsService : BaseItemsByNameService<Person> { /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/StudiosService.cs b/MediaBrowser.Api/UserLibrary/StudiosService.cs index da9106367..8b1824d83 100644 --- a/MediaBrowser.Api/UserLibrary/StudiosService.cs +++ b/MediaBrowser.Api/UserLibrary/StudiosService.cs @@ -1,10 +1,8 @@ -using MediaBrowser.Common.Net; -using MediaBrowser.Controller; +using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Linq; using System.Threading.Tasks; @@ -22,7 +20,6 @@ namespace MediaBrowser.Api.UserLibrary /// <summary> /// Class StudiosService /// </summary> - [Export(typeof(IRestfulService))] public class StudiosService : BaseItemsByNameService<Studio> { /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index 016b294ae..576ff8892 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -9,7 +9,6 @@ using MediaBrowser.Model.Entities; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading.Tasks; @@ -252,7 +251,6 @@ namespace MediaBrowser.Api.UserLibrary /// <summary> /// Class UserLibraryService /// </summary> - [Export(typeof(IRestfulService))] public class UserLibraryService : BaseRestService { public object Get(GetSpecialFeatures request) diff --git a/MediaBrowser.Api/UserLibrary/YearsService.cs b/MediaBrowser.Api/UserLibrary/YearsService.cs index c3ea11420..14fa645af 100644 --- a/MediaBrowser.Api/UserLibrary/YearsService.cs +++ b/MediaBrowser.Api/UserLibrary/YearsService.cs @@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Globalization; using System.Linq; using System.Threading.Tasks; @@ -23,7 +22,6 @@ namespace MediaBrowser.Api.UserLibrary /// <summary> /// Class YearsService /// </summary> - [Export(typeof(IRestfulService))] public class YearsService : BaseItemsByNameService<Year> { /// <summary> diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs index c4703a7a0..c76479d19 100644 --- a/MediaBrowser.Api/UserService.cs +++ b/MediaBrowser.Api/UserService.cs @@ -7,7 +7,6 @@ using MediaBrowser.Model.Dto; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading.Tasks; @@ -134,7 +133,6 @@ namespace MediaBrowser.Api /// <summary> /// Class UsersService /// </summary> - [Export(typeof(IRestfulService))] public class UserService : BaseRestService { /// <summary> diff --git a/MediaBrowser.Api/WeatherService.cs b/MediaBrowser.Api/WeatherService.cs index 0c04f5ec0..c79c2da28 100644 --- a/MediaBrowser.Api/WeatherService.cs +++ b/MediaBrowser.Api/WeatherService.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller; using MediaBrowser.Model.Weather; using ServiceStack.ServiceHost; -using System.ComponentModel.Composition; using System.Linq; using System.Threading; @@ -24,7 +23,6 @@ namespace MediaBrowser.Api /// <summary> /// Class WeatherService /// </summary> - [Export(typeof(IRestfulService))] public class WeatherService : BaseRestService { /// <summary> diff --git a/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs b/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs index 144997c73..6e3e10361 100644 --- a/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs +++ b/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs @@ -4,7 +4,6 @@ using MediaBrowser.Controller; using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading.Tasks; @@ -14,7 +13,6 @@ namespace MediaBrowser.Api.WebSocket /// <summary> /// Class ScheduledTasksWebSocketListener /// </summary> - [Export(typeof(IWebSocketListener))] public class LogFileWebSocketListener : BasePeriodicWebSocketListener<IEnumerable<string>, LogFileWebSocketState> { /// <summary> @@ -36,8 +34,7 @@ namespace MediaBrowser.Api.WebSocket /// </summary> /// <param name="logger">The logger.</param> /// <param name="kernel">The kernel.</param> - [ImportingConstructor] - public LogFileWebSocketListener([Import("logger")] ILogger logger, [Import("kernel")] Kernel kernel) + public LogFileWebSocketListener(ILogger logger, Kernel kernel) : base(logger) { _kernel = kernel; diff --git a/MediaBrowser.Api/WebSocket/SystemInfoWebSocketListener.cs b/MediaBrowser.Api/WebSocket/SystemInfoWebSocketListener.cs index c41714581..40c3f2f24 100644 --- a/MediaBrowser.Api/WebSocket/SystemInfoWebSocketListener.cs +++ b/MediaBrowser.Api/WebSocket/SystemInfoWebSocketListener.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller; using MediaBrowser.Model.Logging; using MediaBrowser.Model.System; -using System.ComponentModel.Composition; using System.Threading.Tasks; namespace MediaBrowser.Api.WebSocket @@ -10,7 +9,6 @@ namespace MediaBrowser.Api.WebSocket /// <summary> /// Class SystemInfoWebSocketListener /// </summary> - [Export(typeof(IWebSocketListener))] public class SystemInfoWebSocketListener : BasePeriodicWebSocketListener<SystemInfo, object> { /// <summary> @@ -32,8 +30,7 @@ namespace MediaBrowser.Api.WebSocket /// </summary> /// <param name="kernel">The kernel.</param> /// <param name="logger">The logger.</param> - [ImportingConstructor] - public SystemInfoWebSocketListener([Import("kernel")] Kernel kernel, [Import("logger")] ILogger logger) + public SystemInfoWebSocketListener(Kernel kernel, ILogger logger) : base(logger) { _kernel = kernel; diff --git a/MediaBrowser.ApiInteraction.Javascript/JavascriptApiClientService.cs b/MediaBrowser.ApiInteraction.Javascript/JavascriptApiClientService.cs index b94b8e071..c03146e69 100644 --- a/MediaBrowser.ApiInteraction.Javascript/JavascriptApiClientService.cs +++ b/MediaBrowser.ApiInteraction.Javascript/JavascriptApiClientService.cs @@ -2,7 +2,6 @@ using MediaBrowser.Common.Net; using ServiceStack.ServiceHost; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading.Tasks; @@ -25,7 +24,6 @@ namespace MediaBrowser.ApiInteraction.Javascript /// <summary> /// Class JavascriptApiClientService /// </summary> - [Export(typeof(IRestfulService))] public class JavascriptApiClientService : BaseRestService { /// <summary> diff --git a/MediaBrowser.ApiInteraction.Javascript/MediaBrowser.ApiInteraction.Javascript.csproj b/MediaBrowser.ApiInteraction.Javascript/MediaBrowser.ApiInteraction.Javascript.csproj index dde00e984..3e8ed6c38 100644 --- a/MediaBrowser.ApiInteraction.Javascript/MediaBrowser.ApiInteraction.Javascript.csproj +++ b/MediaBrowser.ApiInteraction.Javascript/MediaBrowser.ApiInteraction.Javascript.csproj @@ -68,7 +68,6 @@ <HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath> </Reference> <Reference Include="System" /> - <Reference Include="System.ComponentModel.Composition" /> <Reference Include="System.Core" /> <Reference Include="System.Xml.Linq" /> <Reference Include="System.Data.DataSetExtensions" /> diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs index 85954cb82..2b9550496 100644 --- a/MediaBrowser.Common/Kernel/BaseKernel.cs +++ b/MediaBrowser.Common/Kernel/BaseKernel.cs @@ -9,9 +9,6 @@ using MediaBrowser.Model.Logging; using MediaBrowser.Model.System; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; -using System.ComponentModel.Composition.Hosting; -using System.ComponentModel.Composition.Primitives; using System.Diagnostics; using System.IO; using System.Linq; @@ -182,29 +179,15 @@ namespace MediaBrowser.Common.Kernel /// Gets the list of currently loaded plugins /// </summary> /// <value>The plugins.</value> - [ImportMany(typeof(IPlugin))] 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> /// Gets the web socket listeners. /// </summary> /// <value>The web socket listeners.</value> public IEnumerable<IWebSocketListener> WebSocketListeners { get; private set; } /// <summary> - /// Gets the MEF CompositionContainer - /// </summary> - /// <value>The composition container.</value> - private CompositionContainer CompositionContainer { get; set; } - - /// <summary> /// The _HTTP manager /// </summary> /// <value>The HTTP manager.</value> @@ -217,12 +200,6 @@ namespace MediaBrowser.Common.Kernel public TcpManager TcpManager { get; private set; } /// <summary> - /// Gets the task manager. - /// </summary> - /// <value>The task manager.</value> - public TaskManager TaskManager { get; private set; } - - /// <summary> /// Gets the rest services. /// </summary> /// <value>The rest services.</value> @@ -325,10 +302,16 @@ namespace MediaBrowser.Common.Kernel 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> /// Gets the assemblies. /// </summary> /// <value>The assemblies.</value> - public Assembly[] Assemblies { get; private set; } + protected Assembly[] Assemblies { get; private set; } /// <summary> /// Gets all types. @@ -407,7 +390,7 @@ namespace MediaBrowser.Common.Kernel await OnConfigurationLoaded().ConfigureAwait(false); DisposeTaskManager(); - TaskManager = new TaskManager(this, Logger); + TaskManager = new TaskManager(Logger); Logger.Info("Loading Plugins"); await ReloadComposableParts().ConfigureAwait(false); @@ -453,8 +436,6 @@ namespace MediaBrowser.Common.Kernel ComposeParts(AllTypes); await OnComposablePartsLoaded().ConfigureAwait(false); - - CompositionContainer.Catalog.Dispose(); } /// <summary> @@ -465,11 +446,7 @@ namespace MediaBrowser.Common.Kernel { var concreteTypes = allTypes.Where(t => t.IsClass && !t.IsAbstract && !t.IsInterface && !t.IsGenericType).ToArray(); - CompositionContainer = GetSafeCompositionContainer(concreteTypes.Select(i => new TypeCatalog(i))); - - RegisterExportedValues(CompositionContainer); - - CompositionContainer.ComposeParts(this); + RegisterExportedValues(); FindParts(concreteTypes); } @@ -482,6 +459,11 @@ namespace MediaBrowser.Common.Kernel { RestServices = GetExports<IRestfulService>(allTypes); WebSocketListeners = GetExports<IWebSocketListener>(allTypes); + Plugins = GetExports<IPlugin>(allTypes); + + var tasks = GetExports<IScheduledTask>(allTypes, false); + + TaskManager.AddTasks(tasks); } /// <summary> @@ -489,8 +471,9 @@ namespace MediaBrowser.Common.Kernel /// </summary> /// <typeparam name="T"></typeparam> /// <param name="allTypes">All types.</param> + /// <param name="manageLiftime">if set to <c>true</c> [manage liftime].</param> /// <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); @@ -498,7 +481,10 @@ namespace MediaBrowser.Common.Kernel var parts = allTypes.Where(currentType.IsAssignableFrom).Select(Instantiate).Cast<T>().ToArray(); - _disposableParts.AddRange(parts.OfType<IDisposable>()); + if (manageLiftime) + { + _disposableParts.AddRange(parts.OfType<IDisposable>()); + } return parts; } @@ -517,13 +503,10 @@ namespace MediaBrowser.Common.Kernel /// Composes the exported values. /// </summary> /// <param name="container">The container.</param> - protected virtual void RegisterExportedValues(CompositionContainer container) + protected virtual void RegisterExportedValues() { ApplicationHost.Register<IKernel>(this); - - container.ComposeExportedValue("logger", Logger); - container.ComposeExportedValue("appHost", ApplicationHost); - container.ComposeExportedValue("isoManager", ApplicationHost.Resolve<IIsoManager>()); + ApplicationHost.Register(TaskManager); } /// <summary> @@ -591,46 +574,6 @@ namespace MediaBrowser.Common.Kernel } /// <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> /// 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 /// </summary> @@ -663,11 +606,6 @@ namespace MediaBrowser.Common.Kernel { return Task.Run(() => { - foreach (var task in ScheduledTasks) - { - task.Initialize(this, Logger); - } - // Start-up each plugin Parallel.ForEach(Plugins, plugin => { @@ -722,11 +660,6 @@ namespace MediaBrowser.Common.Kernel DisposeComposableParts(); - foreach (var part in _disposableParts) - { - part.Dispose(); - } - _disposableParts.Clear(); } } @@ -772,9 +705,9 @@ namespace MediaBrowser.Common.Kernel /// </summary> protected virtual void DisposeComposableParts() { - if (CompositionContainer != null) + foreach (var part in _disposableParts) { - CompositionContainer.Dispose(); + part.Dispose(); } } diff --git a/MediaBrowser.Common/Kernel/IApplicationHost.cs b/MediaBrowser.Common/Kernel/IApplicationHost.cs index d2b1ab7a2..ae2e71667 100644 --- a/MediaBrowser.Common/Kernel/IApplicationHost.cs +++ b/MediaBrowser.Common/Kernel/IApplicationHost.cs @@ -63,6 +63,13 @@ namespace MediaBrowser.Common.Kernel /// </summary> /// <typeparam name="T"></typeparam> /// <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>(); } } diff --git a/MediaBrowser.Common/Kernel/IKernel.cs b/MediaBrowser.Common/Kernel/IKernel.cs index c0e650fc7..1685f1f64 100644 --- a/MediaBrowser.Common/Kernel/IKernel.cs +++ b/MediaBrowser.Common/Kernel/IKernel.cs @@ -1,12 +1,10 @@ using MediaBrowser.Common.Net; using MediaBrowser.Common.Plugins; -using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Common.Serialization; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.System; using System; using System.Collections.Generic; -using System.Reflection; using System.Threading.Tasks; namespace MediaBrowser.Common.Kernel @@ -70,12 +68,6 @@ namespace MediaBrowser.Common.Kernel SystemInfo GetSystemInfo(); /// <summary> - /// Gets the scheduled tasks. - /// </summary> - /// <value>The scheduled tasks.</value> - IEnumerable<IScheduledTask> ScheduledTasks { get; } - - /// <summary> /// Reloads the logger. /// </summary> void ReloadLogger(); @@ -134,12 +126,6 @@ namespace MediaBrowser.Common.Kernel TcpManager TcpManager { get; } /// <summary> - /// Gets the task manager. - /// </summary> - /// <value>The task manager.</value> - TaskManager TaskManager { get; } - - /// <summary> /// Gets the web socket listeners. /// </summary> /// <value>The web socket listeners.</value> @@ -161,12 +147,6 @@ namespace MediaBrowser.Common.Kernel event EventHandler<EventArgs> ConfigurationUpdated; /// <summary> - /// Gets the assemblies. - /// </summary> - /// <value>The assemblies.</value> - Assembly[] Assemblies { get; } - - /// <summary> /// Gets the rest services. /// </summary> /// <value>The rest services.</value> diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index cae26b3df..6542ab81d 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -89,7 +89,6 @@ <HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath> </Reference> <Reference Include="System" /> - <Reference Include="System.ComponentModel.Composition" /> <Reference Include="System.Configuration" /> <Reference Include="System.Core" /> <Reference Include="System.Management" /> @@ -125,7 +124,6 @@ <Compile Include="Events\GenericEventArgs.cs" /> <Compile Include="Extensions\NamedLock.cs" /> <Compile Include="Extensions\ResourceNotFoundException.cs" /> - <Compile Include="IO\FileSystem.cs" /> <Compile Include="IO\FileSystemRepository.cs" /> <Compile Include="IO\IIsoManager.cs" /> <Compile Include="IO\IIsoMount.cs" /> @@ -138,7 +136,6 @@ <Compile Include="Kernel\IApplicationHost.cs" /> <Compile Include="Kernel\IKernel.cs" /> <Compile Include="Kernel\TcpManager.cs" /> - <Compile Include="Localization\LocalizedStringData.cs" /> <Compile Include="Net\AlchemyWebSocket.cs" /> <Compile Include="Net\BaseRestService.cs" /> <Compile Include="Net\Handlers\BaseActionHandler.cs" /> @@ -146,6 +143,7 @@ <Compile Include="Net\Handlers\StaticFileHandler.cs" /> <Compile Include="Net\HttpManager.cs" /> <Compile Include="Net\IRestfulService.cs" /> + <Compile Include="Net\IUdpServer.cs" /> <Compile Include="Net\IWebSocket.cs" /> <Compile Include="Net\MimeTypes.cs" /> <Compile Include="Net\NativeWebSocket.cs" /> @@ -161,6 +159,7 @@ <DesignTime>True</DesignTime> <DependentUpon>Resources.resx</DependentUpon> </Compile> + <Compile Include="ScheduledTasks\ITaskManager.cs" /> <Compile Include="ScheduledTasks\TaskManager.cs" /> <Compile Include="ScheduledTasks\Tasks\ReloadLoggerTask.cs" /> <Compile Include="ScheduledTasks\ScheduledTaskHelpers.cs" /> diff --git a/MediaBrowser.Common/Net/HttpServer.cs b/MediaBrowser.Common/Net/HttpServer.cs index b09c95da0..20ee615ad 100644 --- a/MediaBrowser.Common/Net/HttpServer.cs +++ b/MediaBrowser.Common/Net/HttpServer.cs @@ -4,6 +4,7 @@ using MediaBrowser.Common.Kernel; using MediaBrowser.Model.Logging; using ServiceStack.Api.Swagger; using ServiceStack.Common.Web; +using ServiceStack.Configuration; using ServiceStack.Logging.NLogger; using ServiceStack.ServiceHost; using ServiceStack.ServiceInterface.Cors; @@ -153,6 +154,8 @@ namespace MediaBrowser.Common.Net DebugMode = true }); } + + container.Adapter = new ContainerAdapter(ApplicationHost); container.Register(Kernel); container.Register(_logger); @@ -464,4 +467,23 @@ namespace MediaBrowser.Common.Net /// <value>The endpoint.</value> 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>(); + } + } }
\ No newline at end of file diff --git a/MediaBrowser.Common/Net/IUdpServer.cs b/MediaBrowser.Common/Net/IUdpServer.cs new file mode 100644 index 000000000..01a8ef021 --- /dev/null +++ b/MediaBrowser.Common/Net/IUdpServer.cs @@ -0,0 +1,7 @@ + +namespace MediaBrowser.Common.Net +{ + public interface IUdpServer + { + } +} diff --git a/MediaBrowser.Common/ScheduledTasks/BaseScheduledTask.cs b/MediaBrowser.Common/ScheduledTasks/BaseScheduledTask.cs index 395c73a84..845faf31a 100644 --- a/MediaBrowser.Common/ScheduledTasks/BaseScheduledTask.cs +++ b/MediaBrowser.Common/ScheduledTasks/BaseScheduledTask.cs @@ -17,7 +17,7 @@ namespace MediaBrowser.Common.ScheduledTasks /// </summary> /// <typeparam name="TKernelType">The type of the T kernel type.</typeparam> public abstract class BaseScheduledTask<TKernelType> : IScheduledTask - where TKernelType : IKernel + where TKernelType : class, IKernel { /// <summary> /// Gets the kernel. @@ -26,6 +26,47 @@ namespace MediaBrowser.Common.ScheduledTasks 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> /// The _last execution result /// </summary> private TaskResult _lastExecutionResult; @@ -199,7 +240,7 @@ namespace MediaBrowser.Common.ScheduledTasks try { return JsonSerializer.DeserializeFromFile<IEnumerable<TaskTriggerInfo>>(ConfigurationFilePath) - .Select(t => ScheduledTaskHelpers.GetTrigger(t, Kernel)) + .Select(ScheduledTaskHelpers.GetTrigger) .ToList(); } catch (IOException) @@ -228,7 +269,7 @@ namespace MediaBrowser.Common.ScheduledTasks _triggersInitialized = true; - ReloadTriggerEvents(); + ReloadTriggerEvents(false); JsonSerializer.SerializeToFile(_triggers.Select(ScheduledTaskHelpers.GetTriggerInfo), ConfigurationFilePath); } @@ -291,28 +332,10 @@ 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> /// Reloads the trigger events. /// </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) { @@ -320,7 +343,7 @@ namespace MediaBrowser.Common.ScheduledTasks 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); - Kernel.TaskManager.QueueScheduledTask(this); + TaskManager.QueueScheduledTask(this); } /// <summary> @@ -392,7 +415,7 @@ namespace MediaBrowser.Common.ScheduledTasks CurrentCancellationTokenSource = null; CurrentProgress = null; - Kernel.TaskManager.OnTaskCompleted(this); + TaskManager.OnTaskCompleted(this); } /// <summary> diff --git a/MediaBrowser.Common/ScheduledTasks/BaseTaskTrigger.cs b/MediaBrowser.Common/ScheduledTasks/BaseTaskTrigger.cs index 5e60bb718..ed302ed39 100644 --- a/MediaBrowser.Common/ScheduledTasks/BaseTaskTrigger.cs +++ b/MediaBrowser.Common/ScheduledTasks/BaseTaskTrigger.cs @@ -27,13 +27,13 @@ namespace MediaBrowser.Common.ScheduledTasks await Task.Delay(1000).ConfigureAwait(false); - Start(); + Start(false); } /// <summary> /// Stars waiting for the trigger action /// </summary> - protected internal abstract void Start(); + protected internal abstract void Start(bool isApplicationStartup); /// <summary> /// Stops waiting for the trigger action diff --git a/MediaBrowser.Common/ScheduledTasks/DailyTrigger.cs b/MediaBrowser.Common/ScheduledTasks/DailyTrigger.cs index c1cf1a9a3..fb749f77c 100644 --- a/MediaBrowser.Common/ScheduledTasks/DailyTrigger.cs +++ b/MediaBrowser.Common/ScheduledTasks/DailyTrigger.cs @@ -23,7 +23,8 @@ namespace MediaBrowser.Common.ScheduledTasks /// <summary> /// Stars waiting for the trigger action /// </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(); diff --git a/MediaBrowser.Common/ScheduledTasks/IScheduledTask.cs b/MediaBrowser.Common/ScheduledTasks/IScheduledTask.cs index 95d1edf63..cba5fc5d0 100644 --- a/MediaBrowser.Common/ScheduledTasks/IScheduledTask.cs +++ b/MediaBrowser.Common/ScheduledTasks/IScheduledTask.cs @@ -1,6 +1,4 @@ -using MediaBrowser.Common.Kernel; -using MediaBrowser.Model.Logging; -using MediaBrowser.Model.Tasks; +using MediaBrowser.Model.Tasks; using System; using System.Collections.Generic; using System.Threading.Tasks; @@ -74,13 +72,6 @@ namespace MediaBrowser.Common.ScheduledTasks 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> /// Cancels if running. /// </summary> void CancelIfRunning(); diff --git a/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs b/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs new file mode 100644 index 000000000..430208869 --- /dev/null +++ b/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs @@ -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); + } +}
\ No newline at end of file diff --git a/MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs b/MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs index 1ead484c8..759447b10 100644 --- a/MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs +++ b/MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs @@ -23,7 +23,8 @@ namespace MediaBrowser.Common.ScheduledTasks /// <summary> /// Stars waiting for the trigger action /// </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(); diff --git a/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs b/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs index 95c4c6a66..9942da17f 100644 --- a/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs +++ b/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs @@ -78,11 +78,10 @@ namespace MediaBrowser.Common.ScheduledTasks /// Converts a TaskTriggerInfo into a concrete BaseTaskTrigger /// </summary> /// <param name="info">The info.</param> - /// <param name="kernel">The kernel.</param> /// <returns>BaseTaskTrigger.</returns> /// <exception cref="System.ArgumentNullException"></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)) { @@ -144,7 +143,7 @@ namespace MediaBrowser.Common.ScheduledTasks if (info.Type.Equals(typeof(StartupTrigger).Name, StringComparison.OrdinalIgnoreCase)) { - return new StartupTrigger(kernel); + return new StartupTrigger(); } throw new ArgumentException("Unrecognized trigger type: " + info.Type); diff --git a/MediaBrowser.Common/ScheduledTasks/StartupTrigger.cs b/MediaBrowser.Common/ScheduledTasks/StartupTrigger.cs index 84775924f..a254d2be9 100644 --- a/MediaBrowser.Common/ScheduledTasks/StartupTrigger.cs +++ b/MediaBrowser.Common/ScheduledTasks/StartupTrigger.cs @@ -1,6 +1,4 @@ -using MediaBrowser.Common.Kernel; -using System; -using System.Threading.Tasks; +using System.Threading.Tasks; namespace MediaBrowser.Common.ScheduledTasks { @@ -10,33 +8,17 @@ namespace MediaBrowser.Common.ScheduledTasks 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> /// Stars waiting for the trigger action /// </summary> - protected internal override void Start() - { - Kernel.ReloadCompleted += Kernel_ReloadCompleted; - } - - async void Kernel_ReloadCompleted(object sender, EventArgs e) + /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param> + protected internal async override void Start(bool isApplicationStartup) { - await Task.Delay(2000).ConfigureAwait(false); + if (isApplicationStartup) + { + await Task.Delay(2000).ConfigureAwait(false); - OnTriggered(); + OnTriggered(); + } } /// <summary> @@ -44,7 +26,6 @@ namespace MediaBrowser.Common.ScheduledTasks /// </summary> protected internal override void Stop() { - Kernel.ReloadCompleted -= Kernel_ReloadCompleted; } } } diff --git a/MediaBrowser.Common/ScheduledTasks/SystemEventTrigger.cs b/MediaBrowser.Common/ScheduledTasks/SystemEventTrigger.cs index 3075a8587..45d1fae8e 100644 --- a/MediaBrowser.Common/ScheduledTasks/SystemEventTrigger.cs +++ b/MediaBrowser.Common/ScheduledTasks/SystemEventTrigger.cs @@ -18,7 +18,8 @@ namespace MediaBrowser.Common.ScheduledTasks /// <summary> /// Stars waiting for the trigger action /// </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) { diff --git a/MediaBrowser.Common/ScheduledTasks/TaskManager.cs b/MediaBrowser.Common/ScheduledTasks/TaskManager.cs index b71ab8161..946c42d2e 100644 --- a/MediaBrowser.Common/ScheduledTasks/TaskManager.cs +++ b/MediaBrowser.Common/ScheduledTasks/TaskManager.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Kernel; -using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; using System; using System.Collections.Generic; @@ -10,9 +9,15 @@ namespace MediaBrowser.Common.ScheduledTasks /// <summary> /// Class TaskManager /// </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> /// The _task queue /// </summary> private readonly List<Type> _taskQueue = new List<Type>(); @@ -25,12 +30,17 @@ namespace MediaBrowser.Common.ScheduledTasks /// <summary> /// Initializes a new instance of the <see cref="TaskManager" /> class. /// </summary> - /// <param name="kernel">The kernel.</param> /// <param name="logger">The logger.</param> - public TaskManager(IKernel kernel, ILogger logger) - : base(kernel) + public TaskManager(ILogger logger) { + if (logger == null) + { + throw new ArgumentException("logger"); + } + _logger = logger; + + ScheduledTasks = new IScheduledTask[] {}; } /// <summary> @@ -40,7 +50,7 @@ namespace MediaBrowser.Common.ScheduledTasks public void CancelIfRunningAndQueue<T>() where T : IScheduledTask { - Kernel.ScheduledTasks.OfType<T>().First().CancelIfRunning(); + ScheduledTasks.OfType<T>().First().CancelIfRunning(); QueueScheduledTask<T>(); } @@ -51,7 +61,7 @@ namespace MediaBrowser.Common.ScheduledTasks public void QueueScheduledTask<T>() where T : IScheduledTask { - var scheduledTask = Kernel.ScheduledTasks.OfType<T>().First(); + var scheduledTask = ScheduledTasks.OfType<T>().First(); QueueScheduledTask(scheduledTask); } @@ -64,7 +74,7 @@ namespace MediaBrowser.Common.ScheduledTasks { var type = task.GetType(); - var scheduledTask = Kernel.ScheduledTasks.First(t => t.GetType() == type); + var scheduledTask = ScheduledTasks.First(t => t.GetType() == type); lock (_taskQueue) { @@ -91,7 +101,7 @@ namespace MediaBrowser.Common.ScheduledTasks /// Called when [task completed]. /// </summary> /// <param name="task">The task.</param> - internal void OnTaskCompleted(IScheduledTask task) + public void OnTaskCompleted(IScheduledTask task) { // Execute queued tasks lock (_taskQueue) @@ -100,7 +110,7 @@ namespace MediaBrowser.Common.ScheduledTasks 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) { @@ -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(); + } } } diff --git a/MediaBrowser.Common/ScheduledTasks/Tasks/DeleteCacheFileTask.cs b/MediaBrowser.Common/ScheduledTasks/Tasks/DeleteCacheFileTask.cs index 2a9bc4a0d..b06134ee2 100644 --- a/MediaBrowser.Common/ScheduledTasks/Tasks/DeleteCacheFileTask.cs +++ b/MediaBrowser.Common/ScheduledTasks/Tasks/DeleteCacheFileTask.cs @@ -1,8 +1,7 @@ using MediaBrowser.Common.Kernel; -using MediaBrowser.Model.Tasks; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading; @@ -13,10 +12,20 @@ namespace MediaBrowser.Common.ScheduledTasks.Tasks /// <summary> /// Deletes old cache files /// </summary> - [Export(typeof(IScheduledTask))] 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> /// Creates the triggers that define when the task will run /// </summary> /// <returns>IEnumerable{BaseTaskTrigger}.</returns> diff --git a/MediaBrowser.Common/ScheduledTasks/Tasks/DeleteLogFileTask.cs b/MediaBrowser.Common/ScheduledTasks/Tasks/DeleteLogFileTask.cs index a1068a263..0b243cb10 100644 --- a/MediaBrowser.Common/ScheduledTasks/Tasks/DeleteLogFileTask.cs +++ b/MediaBrowser.Common/ScheduledTasks/Tasks/DeleteLogFileTask.cs @@ -1,8 +1,7 @@ using MediaBrowser.Common.Kernel; -using MediaBrowser.Model.Tasks; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading; @@ -13,10 +12,20 @@ namespace MediaBrowser.Common.ScheduledTasks.Tasks /// <summary> /// Deletes old log files /// </summary> - [Export(typeof(IScheduledTask))] 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> /// Creates the triggers that define when the task will run /// </summary> /// <returns>IEnumerable{BaseTaskTrigger}.</returns> diff --git a/MediaBrowser.Common/ScheduledTasks/Tasks/ReloadLoggerTask.cs b/MediaBrowser.Common/ScheduledTasks/Tasks/ReloadLoggerTask.cs index a4f06f205..35cbe98f1 100644 --- a/MediaBrowser.Common/ScheduledTasks/Tasks/ReloadLoggerTask.cs +++ b/MediaBrowser.Common/ScheduledTasks/Tasks/ReloadLoggerTask.cs @@ -1,8 +1,7 @@ using MediaBrowser.Common.Kernel; -using MediaBrowser.Model.Tasks; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Threading; using System.Threading.Tasks; @@ -11,10 +10,20 @@ namespace MediaBrowser.Common.ScheduledTasks.Tasks /// <summary> /// Class ReloadLoggerFileTask /// </summary> - [Export(typeof(IScheduledTask))] 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> /// Gets the default triggers. /// </summary> /// <returns>IEnumerable{BaseTaskTrigger}.</returns> diff --git a/MediaBrowser.Common/ScheduledTasks/Tasks/SystemUpdateTask.cs b/MediaBrowser.Common/ScheduledTasks/Tasks/SystemUpdateTask.cs index f9950424f..f02293a5e 100644 --- a/MediaBrowser.Common/ScheduledTasks/Tasks/SystemUpdateTask.cs +++ b/MediaBrowser.Common/ScheduledTasks/Tasks/SystemUpdateTask.cs @@ -1,7 +1,7 @@ using MediaBrowser.Common.Kernel; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Threading; using System.Threading.Tasks; @@ -10,7 +10,6 @@ namespace MediaBrowser.Common.ScheduledTasks.Tasks /// <summary> /// Plugin Update Task /// </summary> - [Export(typeof(IScheduledTask))] public class SystemUpdateTask : BaseScheduledTask<IKernel> { /// <summary> @@ -22,8 +21,11 @@ namespace MediaBrowser.Common.ScheduledTasks.Tasks /// Initializes a new instance of the <see cref="SystemUpdateTask" /> class. /// </summary> /// <param name="appHost">The app host.</param> - [ImportingConstructor] - public SystemUpdateTask([Import("appHost")] IApplicationHost appHost) + /// <param name="taskManager">The task manager.</param> + /// <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; } diff --git a/MediaBrowser.Common/ScheduledTasks/WeeklyTrigger.cs b/MediaBrowser.Common/ScheduledTasks/WeeklyTrigger.cs index 136dc8b13..afeacc2b3 100644 --- a/MediaBrowser.Common/ScheduledTasks/WeeklyTrigger.cs +++ b/MediaBrowser.Common/ScheduledTasks/WeeklyTrigger.cs @@ -29,7 +29,8 @@ namespace MediaBrowser.Common.ScheduledTasks /// <summary> /// Stars waiting for the trigger action /// </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(); diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs index 6a76e2125..5b7661dcf 100644 --- a/MediaBrowser.Controller/Entities/Movies/Movie.cs +++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Common.Win32; +using MediaBrowser.Controller.IO; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs index 140c90814..c80c59eaf 100644 --- a/MediaBrowser.Controller/Entities/TV/Season.cs +++ b/MediaBrowser.Controller/Entities/TV/Season.cs @@ -2,6 +2,7 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Common.Win32; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Localization; using MediaBrowser.Model.Entities; diff --git a/MediaBrowser.Controller/Entities/User.cs b/MediaBrowser.Controller/Entities/User.cs index f27e8c689..426e7f18e 100644 --- a/MediaBrowser.Controller/Entities/User.cs +++ b/MediaBrowser.Controller/Entities/User.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Common.Serialization; +using MediaBrowser.Controller.IO; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Tasks; using System; diff --git a/MediaBrowser.Controller/IO/DirectoryWatchers.cs b/MediaBrowser.Controller/IO/DirectoryWatchers.cs index 62e1a6a36..06ce95ec9 100644 --- a/MediaBrowser.Controller/IO/DirectoryWatchers.cs +++ b/MediaBrowser.Controller/IO/DirectoryWatchers.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.IO; +using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.ScheduledTasks; @@ -67,15 +68,26 @@ namespace MediaBrowser.Controller.IO private ILogger Logger { get; set; } /// <summary> + /// Gets or sets the task manager. + /// </summary> + /// <value>The task manager.</value> + private ITaskManager TaskManager { get; set; } + + /// <summary> /// Initializes a new instance of the <see cref="DirectoryWatchers" /> class. /// </summary> - public DirectoryWatchers(ILogger logger) + public DirectoryWatchers(ILogger logger, ITaskManager taskManager) { if (logger == null) { throw new ArgumentNullException("logger"); } + if (taskManager == null) + { + throw new ArgumentNullException("taskManager"); + } + TaskManager = taskManager; 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 (itemsToRefresh.Any(i => i is AggregateFolder)) { - Kernel.Instance.TaskManager.CancelIfRunningAndQueue<RefreshMediaLibraryTask>(); + TaskManager.CancelIfRunningAndQueue<RefreshMediaLibraryTask>(); return; } diff --git a/MediaBrowser.Common/IO/FileSystem.cs b/MediaBrowser.Controller/IO/FileSystem.cs index 3d65167bd..c7b7c660b 100644 --- a/MediaBrowser.Common/IO/FileSystem.cs +++ b/MediaBrowser.Controller/IO/FileSystem.cs @@ -6,7 +6,7 @@ using System.IO; using System.Runtime.InteropServices; using System.Text; -namespace MediaBrowser.Common.IO +namespace MediaBrowser.Controller.IO { /// <summary> /// Class FileSystem diff --git a/MediaBrowser.Controller/IO/FileSystemManager.cs b/MediaBrowser.Controller/IO/FileSystemManager.cs index 9b54bb9d8..611b402d8 100644 --- a/MediaBrowser.Controller/IO/FileSystemManager.cs +++ b/MediaBrowser.Controller/IO/FileSystemManager.cs @@ -1,5 +1,6 @@ using MediaBrowser.Common.IO; using MediaBrowser.Common.Kernel; +using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Logging; using System; @@ -26,17 +27,18 @@ namespace MediaBrowser.Controller.IO /// The _logger /// </summary> private readonly ILogger _logger; - + /// <summary> /// Initializes a new instance of the <see cref="FileSystemManager" /> class. /// </summary> /// <param name="kernel">The kernel.</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) { _logger = logger; - DirectoryWatchers = new DirectoryWatchers(logger); + DirectoryWatchers = new DirectoryWatchers(logger, taskManager); } /// <summary> diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index ebf3e724d..21cfb5ddb 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -1,6 +1,4 @@ -using MediaBrowser.Common.IO; -using MediaBrowser.Common.Kernel; -using MediaBrowser.Common.Localization; +using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Plugins; using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Entities; @@ -17,14 +15,10 @@ using MediaBrowser.Controller.ScheduledTasks; using MediaBrowser.Controller.Updates; using MediaBrowser.Controller.Weather; using MediaBrowser.Model.Configuration; -using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; -using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.System; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; -using System.ComponentModel.Composition.Hosting; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -183,7 +177,6 @@ namespace MediaBrowser.Controller /// Gets the list of Localized string files /// </summary> /// <value>The string files.</value> - [ImportMany(typeof(LocalizedStringData))] public IEnumerable<LocalizedStringData> StringFiles { get; private set; } /// <summary> @@ -208,7 +201,6 @@ namespace MediaBrowser.Controller /// Gets the list of currently registered metadata prvoiders /// </summary> /// <value>The metadata providers enumerable.</value> - [ImportMany(typeof(BaseMetadataProvider))] public BaseMetadataProvider[] MetadataProviders { get; private set; } /// <summary> @@ -222,8 +214,7 @@ namespace MediaBrowser.Controller /// Gets the list of currently registered entity resolvers /// </summary> /// <value>The entity resolvers enumerable.</value> - [ImportMany(typeof(IBaseItemResolver))] - internal IBaseItemResolver[] EntityResolvers { get; private set; } + internal IEnumerable<IBaseItemResolver> EntityResolvers { get; private set; } /// <summary> /// Gets the list of BasePluginFolders added by plugins @@ -322,14 +313,11 @@ namespace MediaBrowser.Controller /// <summary> /// Composes the exported values. /// </summary> - /// <param name="container">The container.</param> - protected override void RegisterExportedValues(CompositionContainer container) + protected override void RegisterExportedValues() { - container.ComposeExportedValue("kernel", this); - ApplicationHost.Register(this); - base.RegisterExportedValues(container); + base.RegisterExportedValues(); } /// <summary> @@ -338,6 +326,15 @@ namespace MediaBrowser.Controller /// <param name="allTypes">All types.</param> 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); EntityResolutionIgnoreRules = GetExports<IResolutionIgnoreRule>(allTypes); @@ -348,8 +345,11 @@ namespace MediaBrowser.Controller WeatherProviders = GetExports<IWeatherProvider>(allTypes); IntroProviders = GetExports<IIntroProvider>(allTypes); PluginConfigurationPages = GetExports<IPluginConfigurationPage>(allTypes); - ImageEnhancers = GetExports<IImageEnhancer>(allTypes); + ImageEnhancers = GetExports<IImageEnhancer>(allTypes).OrderBy(e => e.Priority).ToArray(); 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> @@ -365,14 +365,6 @@ namespace MediaBrowser.Controller await base.ReloadInternal().ConfigureAwait(false); 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(); @@ -441,15 +433,6 @@ namespace MediaBrowser.Controller DisplayPreferencesRepository = GetRepository(DisplayPreferencesRepositories, Configuration.DisplayPreferencesRepository); 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); } @@ -488,7 +471,7 @@ namespace MediaBrowser.Controller { DisposeFileSystemManager(); - FileSystemManager = new FileSystemManager(this, Logger); + FileSystemManager = new FileSystemManager(this, Logger, TaskManager); FileSystemManager.StartWatchers(); } diff --git a/MediaBrowser.Controller/Library/ItemResolveArgs.cs b/MediaBrowser.Controller/Library/ItemResolveArgs.cs index c95300f74..4d58af437 100644 --- a/MediaBrowser.Controller/Library/ItemResolveArgs.cs +++ b/MediaBrowser.Controller/Library/ItemResolveArgs.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using MediaBrowser.Controller.IO; namespace MediaBrowser.Controller.Library { diff --git a/MediaBrowser.Controller/Localization/BaseStrings.cs b/MediaBrowser.Controller/Localization/BaseStrings.cs index c76df7c7c..22486d90d 100644 --- a/MediaBrowser.Controller/Localization/BaseStrings.cs +++ b/MediaBrowser.Controller/Localization/BaseStrings.cs @@ -1,9 +1,6 @@ -using MediaBrowser.Common.Localization; -using System.ComponentModel.Composition; - + namespace MediaBrowser.Controller.Localization { - [Export(typeof(LocalizedStringData))] public class BaseStrings : LocalizedStringData { public BaseStrings() diff --git a/MediaBrowser.Common/Localization/LocalizedStringData.cs b/MediaBrowser.Controller/Localization/LocalizedStringData.cs index a507c7b6b..71200b8c8 100644 --- a/MediaBrowser.Common/Localization/LocalizedStringData.cs +++ b/MediaBrowser.Controller/Localization/LocalizedStringData.cs @@ -1,7 +1,7 @@ using System.IO; using System.Xml.Serialization; -namespace MediaBrowser.Common.Localization +namespace MediaBrowser.Controller.Localization { /// <summary> /// Class LocalizedStringData diff --git a/MediaBrowser.Controller/Localization/LocalizedStrings.cs b/MediaBrowser.Controller/Localization/LocalizedStrings.cs index 01b259591..6405be5f8 100644 --- a/MediaBrowser.Controller/Localization/LocalizedStrings.cs +++ b/MediaBrowser.Controller/Localization/LocalizedStrings.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Localization; -using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Logging; using System; using System.Collections.Concurrent; using System.Globalization; diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index f9765d852..213c30bac 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -64,7 +64,6 @@ <HintPath>..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll</HintPath> </Reference> <Reference Include="System" /> - <Reference Include="System.ComponentModel.Composition" /> <Reference Include="System.Core" /> <Reference Include="System.Data" /> <Reference Include="System.Drawing" /> @@ -108,6 +107,7 @@ <Compile Include="Entities\CollectionFolder.cs" /> <Compile Include="Entities\Year.cs" /> <Compile Include="Extensions\XmlExtensions.cs" /> + <Compile Include="IO\FileSystem.cs" /> <Compile Include="IO\FileSystemManager.cs" /> <Compile Include="IO\NetworkShares.cs" /> <Compile Include="Library\ChildrenChangedEventArgs.cs" /> @@ -118,6 +118,7 @@ <Compile Include="Localization\AURatingsDictionary.cs" /> <Compile Include="Localization\BaseStrings.cs" /> <Compile Include="Localization\GBRatingsDictionary.cs" /> + <Compile Include="Localization\LocalizedStringData.cs" /> <Compile Include="Localization\LocalizedStrings.cs" /> <Compile Include="Localization\NLRatingsDictionary.cs" /> <Compile Include="Localization\Ratings.cs" /> diff --git a/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs b/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs index ab0f37b96..16b120ebd 100644 --- a/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs +++ b/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers /// <summary> /// Provides metadata for Folders and all subclasses by parsing folder.xml /// </summary> - [Export(typeof(BaseMetadataProvider))] public class FolderProviderFromXml : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs index 985876406..4c3250ff4 100644 --- a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs +++ b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs @@ -3,7 +3,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading; @@ -14,7 +13,6 @@ namespace MediaBrowser.Controller.Providers /// <summary> /// Provides images for all types by looking for standard images - folder, backdrop, logo, etc. /// </summary> - [Export(typeof(BaseMetadataProvider))] public class ImageFromMediaLocationProvider : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs b/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs index 114176e2c..fcc31a75e 100644 --- a/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs +++ b/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs @@ -1,9 +1,8 @@ -using System.Globalization; -using MediaBrowser.Common.IO; -using MediaBrowser.Common.Win32; +using MediaBrowser.Common.Win32; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.IO; using System; -using System.ComponentModel.Composition; +using System.Globalization; using System.IO; using System.Linq; @@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers /// <summary> /// Provides images for generic types by looking for standard images in the IBN /// </summary> - [Export(typeof(BaseMetadataProvider))] public class ImagesByNameProvider : ImageFromMediaLocationProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegAudioImageProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegAudioImageProvider.cs index 523192d4e..907c692b8 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegAudioImageProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegAudioImageProvider.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// <summary> /// Uses ffmpeg to create video images /// </summary> - [Export(typeof(BaseMetadataProvider))] public class FFMpegAudioImageProvider : BaseFFMpegImageProvider<Audio> { diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs index b884d6c2d..636454cd0 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.Threading; using System.Threading.Tasks; @@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// <summary> /// Uses ffmpeg to create video images /// </summary> - [Export(typeof(BaseMetadataProvider))] public class FFMpegVideoImageProvider : BaseFFMpegImageProvider<Video> { /// <summary> @@ -23,8 +21,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// Initializes a new instance of the <see cref="FFMpegVideoImageProvider" /> class. /// </summary> /// <param name="isoManager">The iso manager.</param> - [ImportingConstructor] - public FFMpegVideoImageProvider([Import("isoManager")] IIsoManager isoManager) + public FFMpegVideoImageProvider(IIsoManager isoManager) { _isoManager = isoManager; } diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs index 49c829fff..01711d771 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs @@ -5,7 +5,6 @@ using MediaBrowser.Controller.MediaInfo; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -15,7 +14,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// <summary> /// Extracts audio information using ffprobe /// </summary> - [Export(typeof(BaseMetadataProvider))] public class FFProbeAudioInfoProvider : BaseFFProbeProvider<Audio> { /// <summary> diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs index 58fda20bb..443d28b67 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs @@ -6,7 +6,6 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.MediaInfo; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading; @@ -17,7 +16,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// <summary> /// Extracts video information using ffprobe /// </summary> - [Export(typeof(BaseMetadataProvider))] public class FFProbeVideoInfoProvider : BaseFFProbeProvider<Video> { /// <summary> @@ -43,8 +41,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// <param name="isoManager">The iso manager.</param> /// <param name="blurayExaminer">The bluray examiner.</param> /// <exception cref="System.ArgumentNullException">blurayExaminer</exception> - [ImportingConstructor] - public FFProbeVideoInfoProvider([Import("isoManager")] IIsoManager isoManager, [Import("blurayExaminer")] IBlurayExaminer blurayExaminer) + public FFProbeVideoInfoProvider(IIsoManager isoManager, IBlurayExaminer blurayExaminer) : base() { if (blurayExaminer == null) diff --git a/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs b/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs index 38e547523..e833e4931 100644 --- a/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs +++ b/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs @@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Net; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -15,7 +14,6 @@ namespace MediaBrowser.Controller.Providers.Movies /// <summary> /// Class FanArtMovieProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] class FanArtMovieProvider : FanartBaseProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs index 2319e5cfa..72f8a3fc7 100644 --- a/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs +++ b/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs @@ -7,7 +7,6 @@ using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Globalization; using System.IO; using System.Linq; @@ -29,7 +28,6 @@ namespace MediaBrowser.Controller.Providers.Movies /// <summary> /// Class MovieDbProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] public class MovieDbProvider : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs index ad5f6626b..45079ddda 100644 --- a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs +++ b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs @@ -1,7 +1,6 @@ using MediaBrowser.Common.Serialization; using MediaBrowser.Controller.Entities; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.Movies /// <summary> /// Class MovieProviderFromJson /// </summary> - [Export(typeof(BaseMetadataProvider))] public class MovieProviderFromJson : MovieDbProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs index b180fa580..274930bc8 100644 --- a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs +++ b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.Movies /// <summary> /// Class MovieProviderFromXml /// </summary> - [Export(typeof(BaseMetadataProvider))] public class MovieProviderFromXml : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs b/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs index 19a707be3..b4b4933e2 100644 --- a/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs +++ b/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs @@ -1,7 +1,6 @@ using MediaBrowser.Common.Serialization; using MediaBrowser.Controller.Entities; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.Movies /// <summary> /// Class PersonProviderFromJson /// </summary> - [Export(typeof(BaseMetadataProvider))] class PersonProviderFromJson : TmdbPersonProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs b/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs index 4cdfc5894..7b5d62fb0 100644 --- a/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs +++ b/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs @@ -4,7 +4,6 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.Net; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Globalization; using System.IO; using System.Linq; @@ -17,7 +16,6 @@ namespace MediaBrowser.Controller.Providers.Movies /// <summary> /// Class TmdbPersonProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] public class TmdbPersonProvider : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/SortNameProvider.cs b/MediaBrowser.Controller/Providers/SortNameProvider.cs index 071732f3e..933b0c78c 100644 --- a/MediaBrowser.Controller/Providers/SortNameProvider.cs +++ b/MediaBrowser.Controller/Providers/SortNameProvider.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.TV; -using System.ComponentModel.Composition; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers /// <summary> /// Class SortNameProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] public class SortNameProvider : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs b/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs index a493ce746..c6210f74c 100644 --- a/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.TV /// <summary> /// Class EpisodeImageFromMediaLocationProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] public class EpisodeImageFromMediaLocationProvider : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs b/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs index 08d0988eb..7a96e368c 100644 --- a/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs +++ b/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.TV /// <summary> /// Class EpisodeProviderFromXml /// </summary> - [Export(typeof(BaseMetadataProvider))] public class EpisodeProviderFromXml : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs b/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs index 2640e0482..05ab172a8 100644 --- a/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs @@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Net; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -12,7 +11,6 @@ using System.Xml; namespace MediaBrowser.Controller.Providers.TV { - [Export(typeof(BaseMetadataProvider))] class FanArtTVProvider : FanartBaseProvider { protected string FanArtBaseUrl = "http://api.fanart.tv/webservice/series/{0}/{1}/xml/all/1/1"; diff --git a/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs b/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs index d1d931a62..b06598114 100644 --- a/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs @@ -5,7 +5,6 @@ using MediaBrowser.Controller.Resolvers.TV; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Net; using System; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading; @@ -18,7 +17,6 @@ namespace MediaBrowser.Controller.Providers.TV /// <summary> /// Class RemoteEpisodeProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] class RemoteEpisodeProvider : BaseMetadataProvider { diff --git a/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs b/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs index 277b6d891..3e7f6b1a2 100644 --- a/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs @@ -5,7 +5,6 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.Net; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -16,7 +15,6 @@ namespace MediaBrowser.Controller.Providers.TV /// <summary> /// Class RemoteSeasonProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] class RemoteSeasonProvider : BaseMetadataProvider { diff --git a/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs b/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs index 985aa0262..b8941dbba 100644 --- a/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs @@ -7,7 +7,6 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.Net; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Net; using System.Text; @@ -20,7 +19,6 @@ namespace MediaBrowser.Controller.Providers.TV /// <summary> /// Class RemoteSeriesProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] class RemoteSeriesProvider : BaseMetadataProvider { diff --git a/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs b/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs index c92841fb6..aa2cde28d 100644 --- a/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs +++ b/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.TV /// <summary> /// Class SeriesProviderFromXml /// </summary> - [Export(typeof(BaseMetadataProvider))] public class SeriesProviderFromXml : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Resolvers/Audio/AudioResolver.cs b/MediaBrowser.Controller/Resolvers/Audio/AudioResolver.cs index f827bf047..6e1bbfbfe 100644 --- a/MediaBrowser.Controller/Resolvers/Audio/AudioResolver.cs +++ b/MediaBrowser.Controller/Resolvers/Audio/AudioResolver.cs @@ -1,16 +1,26 @@ using MediaBrowser.Controller.Library; -using System.ComponentModel.Composition; namespace MediaBrowser.Controller.Resolvers.Audio { - [Export(typeof(IBaseItemResolver))] + /// <summary> + /// Class AudioResolver + /// </summary> public class AudioResolver : BaseItemResolver<Entities.Audio.Audio> { + /// <summary> + /// Gets the priority. + /// </summary> + /// <value>The priority.</value> public override ResolverPriority Priority { 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) { // Return audio if the path is a file and has a matching extension diff --git a/MediaBrowser.Controller/Resolvers/Audio/MusicAlbumResolver.cs b/MediaBrowser.Controller/Resolvers/Audio/MusicAlbumResolver.cs index 8b2e49f31..d8d2c326d 100644 --- a/MediaBrowser.Controller/Resolvers/Audio/MusicAlbumResolver.cs +++ b/MediaBrowser.Controller/Resolvers/Audio/MusicAlbumResolver.cs @@ -1,17 +1,27 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; -using System.ComponentModel.Composition; namespace MediaBrowser.Controller.Resolvers.Audio { - [Export(typeof(IBaseItemResolver))] + /// <summary> + /// Class MusicAlbumResolver + /// </summary> public class MusicAlbumResolver : BaseItemResolver<MusicAlbum> { + /// <summary> + /// Gets the priority. + /// </summary> + /// <value>The priority.</value> public override ResolverPriority Priority { 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) { if (!args.IsDirectory) return null; diff --git a/MediaBrowser.Controller/Resolvers/Audio/MusicArtistResolver.cs b/MediaBrowser.Controller/Resolvers/Audio/MusicArtistResolver.cs index 8060e8d33..45f96d3ab 100644 --- a/MediaBrowser.Controller/Resolvers/Audio/MusicArtistResolver.cs +++ b/MediaBrowser.Controller/Resolvers/Audio/MusicArtistResolver.cs @@ -1,18 +1,28 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; -using System.ComponentModel.Composition; using System.Linq; namespace MediaBrowser.Controller.Resolvers.Audio { - [Export(typeof(IBaseItemResolver))] + /// <summary> + /// Class MusicArtistResolver + /// </summary> public class MusicArtistResolver : BaseItemResolver<MusicArtist> { + /// <summary> + /// Gets the priority. + /// </summary> + /// <value>The priority.</value> public override ResolverPriority Priority { 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) { if (!args.IsDirectory) return null; diff --git a/MediaBrowser.Controller/Resolvers/CoreResolutionIgnoreRule.cs b/MediaBrowser.Controller/Resolvers/CoreResolutionIgnoreRule.cs index d237f68f3..770b673a5 100644 --- a/MediaBrowser.Controller/Resolvers/CoreResolutionIgnoreRule.cs +++ b/MediaBrowser.Controller/Resolvers/CoreResolutionIgnoreRule.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Library; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Linq; namespace MediaBrowser.Controller.Resolvers @@ -9,7 +8,6 @@ namespace MediaBrowser.Controller.Resolvers /// <summary> /// Provides the core resolver ignore rules /// </summary> - [Export(typeof(IResolutionIgnoreRule))] public class CoreResolutionIgnoreRule : IResolutionIgnoreRule { /// <summary> @@ -27,6 +25,11 @@ namespace MediaBrowser.Controller.Resolvers "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) { // Ignore hidden files and folders diff --git a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs index 75e130526..f406cb185 100644 --- a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs +++ b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Common.Win32; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; using System; using System.Collections.Generic; diff --git a/MediaBrowser.Controller/Resolvers/FolderResolver.cs b/MediaBrowser.Controller/Resolvers/FolderResolver.cs index e37c18692..c356b8c84 100644 --- a/MediaBrowser.Controller/Resolvers/FolderResolver.cs +++ b/MediaBrowser.Controller/Resolvers/FolderResolver.cs @@ -1,13 +1,11 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; -using System.ComponentModel.Composition; namespace MediaBrowser.Controller.Resolvers { /// <summary> /// Class FolderResolver /// </summary> - [Export(typeof(IBaseItemResolver))] public class FolderResolver : BaseFolderResolver<Folder> { /// <summary> diff --git a/MediaBrowser.Controller/Resolvers/LocalTrailerResolver.cs b/MediaBrowser.Controller/Resolvers/LocalTrailerResolver.cs index c26b0ce37..a61e010b3 100644 --- a/MediaBrowser.Controller/Resolvers/LocalTrailerResolver.cs +++ b/MediaBrowser.Controller/Resolvers/LocalTrailerResolver.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using System; -using System.ComponentModel.Composition; using System.IO; namespace MediaBrowser.Controller.Resolvers @@ -9,7 +8,6 @@ namespace MediaBrowser.Controller.Resolvers /// <summary> /// Class LocalTrailerResolver /// </summary> - [Export(typeof(IBaseItemResolver))] public class LocalTrailerResolver : BaseVideoResolver<Trailer> { /// <summary> diff --git a/MediaBrowser.Controller/Resolvers/Movies/BoxSetResolver.cs b/MediaBrowser.Controller/Resolvers/Movies/BoxSetResolver.cs index ccca0cfab..2eee2a98b 100644 --- a/MediaBrowser.Controller/Resolvers/Movies/BoxSetResolver.cs +++ b/MediaBrowser.Controller/Resolvers/Movies/BoxSetResolver.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Library; using System; -using System.ComponentModel.Composition; using System.IO; namespace MediaBrowser.Controller.Resolvers.Movies @@ -9,7 +8,6 @@ namespace MediaBrowser.Controller.Resolvers.Movies /// <summary> /// Class BoxSetResolver /// </summary> - [Export(typeof(IBaseItemResolver))] public class BoxSetResolver : BaseFolderResolver<BoxSet> { /// <summary> diff --git a/MediaBrowser.Controller/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Controller/Resolvers/Movies/MovieResolver.cs index 14f635747..9443221a3 100644 --- a/MediaBrowser.Controller/Resolvers/Movies/MovieResolver.cs +++ b/MediaBrowser.Controller/Resolvers/Movies/MovieResolver.cs @@ -6,7 +6,6 @@ using MediaBrowser.Controller.Providers.Movies; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; namespace MediaBrowser.Controller.Resolvers.Movies @@ -14,7 +13,6 @@ namespace MediaBrowser.Controller.Resolvers.Movies /// <summary> /// Class MovieResolver /// </summary> - [Export(typeof(IBaseItemResolver))] public class MovieResolver : BaseVideoResolver<Movie> { /// <summary> diff --git a/MediaBrowser.Controller/Resolvers/TV/EpisodeResolver.cs b/MediaBrowser.Controller/Resolvers/TV/EpisodeResolver.cs index f2f3ce122..d1789bcbb 100644 --- a/MediaBrowser.Controller/Resolvers/TV/EpisodeResolver.cs +++ b/MediaBrowser.Controller/Resolvers/TV/EpisodeResolver.cs @@ -1,14 +1,20 @@ -using System; -using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; -using System.ComponentModel.Composition; using MediaBrowser.Model.Entities; +using System; namespace MediaBrowser.Controller.Resolvers.TV { - [Export(typeof(IBaseItemResolver))] + /// <summary> + /// Class EpisodeResolver + /// </summary> 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) { // 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; } + /// <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) { base.SetInitialItemValues(item, args); diff --git a/MediaBrowser.Controller/Resolvers/TV/SeasonResolver.cs b/MediaBrowser.Controller/Resolvers/TV/SeasonResolver.cs index 6569c85bc..9ea474207 100644 --- a/MediaBrowser.Controller/Resolvers/TV/SeasonResolver.cs +++ b/MediaBrowser.Controller/Resolvers/TV/SeasonResolver.cs @@ -1,13 +1,19 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using System; -using System.ComponentModel.Composition; namespace MediaBrowser.Controller.Resolvers.TV { - [Export(typeof(IBaseItemResolver))] + /// <summary> + /// Class SeasonResolver + /// </summary> 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) { if (args.Parent is Series && args.IsDirectory) @@ -21,6 +27,11 @@ namespace MediaBrowser.Controller.Resolvers.TV 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) { base.SetInitialItemValues(item, args); diff --git a/MediaBrowser.Controller/Resolvers/TV/SeriesResolver.cs b/MediaBrowser.Controller/Resolvers/TV/SeriesResolver.cs index 7c0bc3df1..c973cfe87 100644 --- a/MediaBrowser.Controller/Resolvers/TV/SeriesResolver.cs +++ b/MediaBrowser.Controller/Resolvers/TV/SeriesResolver.cs @@ -3,7 +3,6 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.IO; namespace MediaBrowser.Controller.Resolvers.TV @@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Resolvers.TV /// <summary> /// Class SeriesResolver /// </summary> - [Export(typeof(IBaseItemResolver))] public class SeriesResolver : BaseFolderResolver<Series> { /// <summary> diff --git a/MediaBrowser.Controller/Resolvers/VideoResolver.cs b/MediaBrowser.Controller/Resolvers/VideoResolver.cs index bfb364349..5f2f8d954 100644 --- a/MediaBrowser.Controller/Resolvers/VideoResolver.cs +++ b/MediaBrowser.Controller/Resolvers/VideoResolver.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.IO; namespace MediaBrowser.Controller.Resolvers @@ -10,7 +9,6 @@ namespace MediaBrowser.Controller.Resolvers /// <summary> /// Resolves a Path into a Video /// </summary> - [Export(typeof(IBaseItemResolver))] public class VideoResolver : BaseVideoResolver<Video> { /// <summary> diff --git a/MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs b/MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs index d3d30ed77..1a64bb853 100644 --- a/MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs +++ b/MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs @@ -1,19 +1,30 @@ using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller.Entities; -using MediaBrowser.Model.Tasks; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Controller.ScheduledTasks { - [Export(typeof(IScheduledTask))] + /// <summary> + /// Class ChapterImagesTask + /// </summary> 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> /// Creates the triggers that define when the task will run /// </summary> /// <returns>IEnumerable{BaseTaskTrigger}.</returns> diff --git a/MediaBrowser.Controller/ScheduledTasks/ImageCleanupTask.cs b/MediaBrowser.Controller/ScheduledTasks/ImageCleanupTask.cs index 57fc280de..8dd0895c9 100644 --- a/MediaBrowser.Controller/ScheduledTasks/ImageCleanupTask.cs +++ b/MediaBrowser.Controller/ScheduledTasks/ImageCleanupTask.cs @@ -1,11 +1,9 @@ -using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.ScheduledTasks; +using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Model.Tasks; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading; @@ -16,10 +14,19 @@ namespace MediaBrowser.Controller.ScheduledTasks /// <summary> /// Class ImageCleanupTask /// </summary> - [Export(typeof(IScheduledTask))] public class ImageCleanupTask : BaseScheduledTask<Kernel> { /// <summary> + /// Initializes a new instance of the <see cref="ImageCleanupTask" /> class. + /// </summary> + /// <param name="kernel">The kernel.</param> + /// <param name="logger"></param> + public ImageCleanupTask(Kernel kernel, ITaskManager taskManager, ILogger logger) + : base(kernel, taskManager, logger) + { + } + + /// <summary> /// Creates the triggers that define when the task will run /// </summary> /// <returns>IEnumerable{BaseTaskTrigger}.</returns> diff --git a/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs b/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs index 2a91f0716..ee55ff2e9 100644 --- a/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs +++ b/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs @@ -1,7 +1,7 @@ using MediaBrowser.Common.ScheduledTasks; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Threading; using System.Threading.Tasks; @@ -10,10 +10,19 @@ namespace MediaBrowser.Controller.ScheduledTasks /// <summary> /// Class PeopleValidationTask /// </summary> - [Export(typeof(IScheduledTask))] public class PeopleValidationTask : BaseScheduledTask<Kernel> { /// <summary> + /// Initializes a new instance of the <see cref="PeopleValidationTask" /> class. + /// </summary> + /// <param name="kernel">The kernel.</param> + /// <param name="logger"></param> + public PeopleValidationTask(Kernel kernel, ITaskManager taskManager, ILogger logger) + : base(kernel, taskManager, logger) + { + } + + /// <summary> /// Creates the triggers that define when the task will run /// </summary> /// <returns>IEnumerable{BaseTaskTrigger}.</returns> diff --git a/MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs b/MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs index 3d79193d5..854c3b82f 100644 --- a/MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs +++ b/MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs @@ -1,9 +1,8 @@ using MediaBrowser.Common.ScheduledTasks; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; -using MediaBrowser.Model.Tasks; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading; @@ -14,10 +13,19 @@ namespace MediaBrowser.Controller.ScheduledTasks /// <summary> /// Plugin Update Task /// </summary> - [Export(typeof(IScheduledTask))] public class PluginUpdateTask : BaseScheduledTask<Kernel> { /// <summary> + /// Initializes a new instance of the <see cref="PluginUpdateTask" /> class. + /// </summary> + /// <param name="kernel">The kernel.</param> + /// <param name="logger"></param> + public PluginUpdateTask(Kernel kernel, ITaskManager taskManager, ILogger logger) + : base(kernel, taskManager, logger) + { + } + + /// <summary> /// Creates the triggers that define when the task will run /// </summary> /// <returns>IEnumerable{BaseTaskTrigger}.</returns> diff --git a/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs b/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs index f0fcb8aba..76e60f2ef 100644 --- a/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs +++ b/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs @@ -1,8 +1,8 @@ using MediaBrowser.Common.ScheduledTasks; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Threading; using System.Threading.Tasks; @@ -11,10 +11,19 @@ namespace MediaBrowser.Controller.ScheduledTasks /// <summary> /// Class RefreshMediaLibraryTask /// </summary> - [Export(typeof(IScheduledTask))] public class RefreshMediaLibraryTask : BaseScheduledTask<Kernel> { /// <summary> + /// Initializes a new instance of the <see cref="RefreshMediaLibraryTask" /> class. + /// </summary> + /// <param name="kernel">The kernel.</param> + /// <param name="logger"></param> + public RefreshMediaLibraryTask(Kernel kernel, ITaskManager taskManager, ILogger logger) + : base(kernel, taskManager, logger) + { + } + + /// <summary> /// Gets the default triggers. /// </summary> /// <returns>IEnumerable{BaseTaskTrigger}.</returns> @@ -22,7 +31,7 @@ namespace MediaBrowser.Controller.ScheduledTasks { return new BaseTaskTrigger[] { - new StartupTrigger(Kernel), + new StartupTrigger(), new SystemEventTrigger{ SystemEvent = SystemEvent.WakeFromSleep}, diff --git a/MediaBrowser.Networking/MediaBrowser.Networking.csproj b/MediaBrowser.Networking/MediaBrowser.Networking.csproj new file mode 100644 index 000000000..acd0d0146 --- /dev/null +++ b/MediaBrowser.Networking/MediaBrowser.Networking.csproj @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProjectGuid>{7C11010E-179A-49B7-BFB2-F1656F5E71AD}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>MediaBrowser.Networking</RootNamespace> + <AssemblyName>MediaBrowser.Networking</AssemblyName> + <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Core" /> + <Reference Include="System.Xml.Linq" /> + <Reference Include="System.Data.DataSetExtensions" /> + <Reference Include="Microsoft.CSharp" /> + <Reference Include="System.Data" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="..\SharedVersion.cs"> + <Link>Properties\SharedVersion.cs</Link> + </Compile> + <Compile Include="Properties\AssemblyInfo.cs" /> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project>
\ No newline at end of file diff --git a/MediaBrowser.Networking/Properties/AssemblyInfo.cs b/MediaBrowser.Networking/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..2eae67b6d --- /dev/null +++ b/MediaBrowser.Networking/Properties/AssemblyInfo.cs @@ -0,0 +1,31 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MediaBrowser.Networking")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MediaBrowser.Networking")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("01f56324-c175-4237-9204-aefda50bcf8d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +//
\ No newline at end of file diff --git a/MediaBrowser.Plugins.DefaultTheme/MediaBrowser.Plugins.DefaultTheme.csproj b/MediaBrowser.Plugins.DefaultTheme/MediaBrowser.Plugins.DefaultTheme.csproj index 0ba40e814..f0176049d 100644 --- a/MediaBrowser.Plugins.DefaultTheme/MediaBrowser.Plugins.DefaultTheme.csproj +++ b/MediaBrowser.Plugins.DefaultTheme/MediaBrowser.Plugins.DefaultTheme.csproj @@ -47,7 +47,6 @@ <HintPath>..\ThirdParty\Expression\Microsoft.Expression.Interactions.dll</HintPath> </Reference> <Reference Include="System" /> - <Reference Include="System.ComponentModel.Composition" /> <Reference Include="System.Data" /> <Reference Include="System.Drawing" /> <Reference Include="System.Net" /> diff --git a/MediaBrowser.Plugins.DefaultTheme/Resources/AppResources.cs b/MediaBrowser.Plugins.DefaultTheme/Resources/AppResources.cs index 81ed46217..3ca6e8df2 100644 --- a/MediaBrowser.Plugins.DefaultTheme/Resources/AppResources.cs +++ b/MediaBrowser.Plugins.DefaultTheme/Resources/AppResources.cs @@ -1,12 +1,11 @@ -using System.Threading.Tasks; -using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Dto; using MediaBrowser.Model.Net; using MediaBrowser.UI; using MediaBrowser.UI.Controller; using MediaBrowser.UI.Controls; using MediaBrowser.UI.Playback; using MediaBrowser.UI.Playback.InternalPlayer; -using System.ComponentModel.Composition; +using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; @@ -15,7 +14,6 @@ namespace MediaBrowser.Plugins.DefaultTheme.Resources /// <summary> /// Class AppResources /// </summary> - [Export(typeof(ResourceDictionary))] public partial class AppResources : ResourceDictionary { /// <summary> diff --git a/MediaBrowser.Plugins.DefaultTheme/Theme.cs b/MediaBrowser.Plugins.DefaultTheme/Theme.cs index f8d6d8724..5a730cf08 100644 --- a/MediaBrowser.Plugins.DefaultTheme/Theme.cs +++ b/MediaBrowser.Plugins.DefaultTheme/Theme.cs @@ -4,7 +4,6 @@ using MediaBrowser.Plugins.DefaultTheme.Resources; using MediaBrowser.UI; using MediaBrowser.UI.Controller; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Windows; using System.Windows.Controls; @@ -13,7 +12,6 @@ namespace MediaBrowser.Plugins.DefaultTheme /// <summary> /// Class Theme /// </summary> - [Export(typeof(BaseTheme))] class Theme : BaseTheme { /// <summary> diff --git a/MediaBrowser.Server.WorldWeatherOnline/MediaBrowser.Server.WorldWeatherOnline.csproj b/MediaBrowser.Server.WorldWeatherOnline/MediaBrowser.Server.WorldWeatherOnline.csproj index 98e973c15..0d47febed 100644 --- a/MediaBrowser.Server.WorldWeatherOnline/MediaBrowser.Server.WorldWeatherOnline.csproj +++ b/MediaBrowser.Server.WorldWeatherOnline/MediaBrowser.Server.WorldWeatherOnline.csproj @@ -34,7 +34,6 @@ </PropertyGroup> <ItemGroup> <Reference Include="System" /> - <Reference Include="System.ComponentModel.Composition" /> <Reference Include="System.Core" /> <Reference Include="System.Xml.Linq" /> <Reference Include="System.Data.DataSetExtensions" /> diff --git a/MediaBrowser.Server.WorldWeatherOnline/WeatherProvider.cs b/MediaBrowser.Server.WorldWeatherOnline/WeatherProvider.cs index 257249793..c30a30455 100644 --- a/MediaBrowser.Server.WorldWeatherOnline/WeatherProvider.cs +++ b/MediaBrowser.Server.WorldWeatherOnline/WeatherProvider.cs @@ -4,7 +4,6 @@ using MediaBrowser.Controller.Weather; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Weather; using System; -using System.ComponentModel.Composition; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -15,7 +14,6 @@ namespace MediaBrowser.Server.WorldWeatherOnline /// Based on http://www.worldweatheronline.com/free-weather-feed.aspx /// The classes in this file are a reproduction of the json output, which will then be converted to our weather model classes /// </summary> - [Export(typeof(IWeatherProvider))] public class WeatherProvider : IWeatherProvider { /// <summary> @@ -29,8 +27,7 @@ namespace MediaBrowser.Server.WorldWeatherOnline /// </summary> /// <param name="logger">The logger.</param> /// <exception cref="System.ArgumentNullException">logger</exception> - [ImportingConstructor] - public WeatherProvider([Import("logger")] ILogger logger) + public WeatherProvider(ILogger logger) { if (logger == null) { diff --git a/MediaBrowser.ServerApplication/App.xaml.cs b/MediaBrowser.ServerApplication/App.xaml.cs index fd296e213..492fef242 100644 --- a/MediaBrowser.ServerApplication/App.xaml.cs +++ b/MediaBrowser.ServerApplication/App.xaml.cs @@ -11,6 +11,7 @@ using MediaBrowser.Model.Updates; using MediaBrowser.Server.Uninstall; using MediaBrowser.ServerApplication.Implementations; using Microsoft.Win32; +using SimpleInjector; using System; using System.Diagnostics; using System.IO; @@ -22,7 +23,6 @@ using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Imaging; -using SimpleInjector; namespace MediaBrowser.ServerApplication { @@ -130,6 +130,12 @@ namespace MediaBrowser.ServerApplication } /// <summary> + /// Gets or sets the iso manager. + /// </summary> + /// <value>The iso manager.</value> + private IIsoManager IsoManager { get; set; } + + /// <summary> /// Gets or sets a value indicating whether [last run at startup value]. /// </summary> /// <value><c>null</c> if [last run at startup value] contains no value, <c>true</c> if [last run at startup value]; otherwise, <c>false</c>.</value> @@ -182,18 +188,6 @@ namespace MediaBrowser.ServerApplication } /// <summary> - /// Registers resources that classes will depend on - /// </summary> - private void RegisterResources() - { - Register(this); - Register(Logger); - Register<IIsoManager>(new PismoIsoManager(Logger)); - Register<IBlurayExaminer>(new BdInfoExaminer()); - Register<IZipClient>(new DotNetZipClient()); - } - - /// <summary> /// Loads the kernel. /// </summary> protected async void LoadKernel() @@ -510,6 +504,21 @@ namespace MediaBrowser.ServerApplication } /// <summary> + /// Registers resources that classes will depend on + /// </summary> + private void RegisterResources() + { + Register<IApplicationHost>(this); + Register(Logger); + + IsoManager = new PismoIsoManager(Logger); + + Register<IIsoManager>(IsoManager); + Register<IBlurayExaminer>(new BdInfoExaminer()); + Register<IZipClient>(new DotNetZipClient()); + } + + /// <summary> /// Creates an instance of type and resolves all constructor dependancies /// </summary> /// <param name="type">The type.</param> @@ -544,9 +553,25 @@ namespace MediaBrowser.ServerApplication /// </summary> /// <typeparam name="T"></typeparam> /// <returns>``0.</returns> - public T Resolve<T>() where T : class + public T Resolve<T>() { return (T)_container.GetRegistration(typeof (T), true).GetInstance(); } + + /// <summary> + /// Resolves this instance. + /// </summary> + /// <typeparam name="T"></typeparam> + /// <returns>``0.</returns> + public T TryResolve<T>() + { + var result = _container.GetRegistration(typeof (T), false); + + if (result == null) + { + return default(T); + } + return (T)result.GetInstance(); + } } } diff --git a/MediaBrowser.UI/App.xaml.cs b/MediaBrowser.UI/App.xaml.cs index b98ce8e6c..bcaa0529e 100644 --- a/MediaBrowser.UI/App.xaml.cs +++ b/MediaBrowser.UI/App.xaml.cs @@ -118,6 +118,17 @@ namespace MediaBrowser.UI } /// <summary> + /// The container + /// </summary> + private SimpleInjector.Container _container = new SimpleInjector.Container(); + + /// <summary> + /// Gets or sets the iso manager. + /// </summary> + /// <value>The iso manager.</value> + private IIsoManager IsoManager { get; set; } + + /// <summary> /// Gets the instance. /// </summary> /// <value>The instance.</value> @@ -290,15 +301,6 @@ namespace MediaBrowser.UI InitializeComponent(); } - - /// <summary> - /// Instantiates the kernel. - /// </summary> - /// <returns>IKernel.</returns> - protected IKernel InstantiateKernel() - { - return new UIKernel(this, new PismoIsoManager(Logger), Logger); - } /// <summary> /// Instantiates the main window. @@ -405,7 +407,9 @@ namespace MediaBrowser.UI // Without this the app will shutdown after the splash screen closes ShutdownMode = ShutdownMode.OnExplicitShutdown; - Kernel = InstantiateKernel(); + RegisterResources(); + + Kernel = new UIKernel(this, Logger); try { @@ -614,7 +618,8 @@ namespace MediaBrowser.UI { try { - ServerConfiguration = await ApiClient.GetServerConfigurationAsync(); + var b = Kernel; + //ServerConfiguration = await ApiClient.GetServerConfigurationAsync(); } catch (HttpException ex) { @@ -1011,6 +1016,19 @@ namespace MediaBrowser.UI } /// <summary> + /// Registers resources that classes will depend on + /// </summary> + private void RegisterResources() + { + Register<IApplicationHost>(this); + Register(Logger); + + IsoManager = new PismoIsoManager(Logger); + + Register<IIsoManager>(IsoManager); + } + + /// <summary> /// Updates the application. /// </summary> /// <param name="cancellationToken">The cancellation token.</param> @@ -1020,5 +1038,61 @@ namespace MediaBrowser.UI { return new ApplicationUpdater().UpdateApplication(cancellationToken, progress); } + + /// <summary> + /// Creates an instance of type and resolves all constructor dependancies + /// </summary> + /// <param name="type">The type.</param> + /// <returns>System.Object.</returns> + public object CreateInstance(Type type) + { + try + { + return _container.GetInstance(type); + } + catch + { + Logger.Error("Error creating {0}", type.Name); + + throw; + } + } + + /// <summary> + /// Registers the specified obj. + /// </summary> + /// <typeparam name="T"></typeparam> + /// <param name="obj">The obj.</param> + public void Register<T>(T obj) + where T : class + { + _container.RegisterSingle(obj); + } + + /// <summary> + /// Resolves this instance. + /// </summary> + /// <typeparam name="T"></typeparam> + /// <returns>``0.</returns> + public T Resolve<T>() + { + return (T)_container.GetRegistration(typeof(T), true).GetInstance(); + } + + /// <summary> + /// Resolves this instance. + /// </summary> + /// <typeparam name="T"></typeparam> + /// <returns>``0.</returns> + public T TryResolve<T>() + { + var result = _container.GetRegistration(typeof(T), false); + + if (result == null) + { + return default(T); + } + return (T)result.GetInstance(); + } } } diff --git a/MediaBrowser.UI/Controller/UIKernel.cs b/MediaBrowser.UI/Controller/UIKernel.cs index 1bed49cf9..118067140 100644 --- a/MediaBrowser.UI/Controller/UIKernel.cs +++ b/MediaBrowser.UI/Controller/UIKernel.cs @@ -1,5 +1,4 @@ using MediaBrowser.ApiInteraction; -using MediaBrowser.Common.IO; using MediaBrowser.Common.Kernel; using MediaBrowser.Model.Connectivity; using MediaBrowser.Model.Logging; @@ -8,7 +7,6 @@ using MediaBrowser.UI.Configuration; using MediaBrowser.UI.Playback; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Net; using System.Net.Cache; using System.Net.Http; @@ -42,8 +40,8 @@ namespace MediaBrowser.UI.Controller /// <summary> /// Initializes a new instance of the <see cref="UIKernel" /> class. /// </summary> - public UIKernel(IApplicationHost appHost, IIsoManager isoManager, ILogger logger) - : base(appHost, isoManager, logger) + public UIKernel(IApplicationHost appHost, ILogger logger) + : base(appHost, logger) { Instance = this; } @@ -52,14 +50,12 @@ namespace MediaBrowser.UI.Controller /// Gets the media players. /// </summary> /// <value>The media players.</value> - [ImportMany(typeof(BaseMediaPlayer))] public IEnumerable<BaseMediaPlayer> MediaPlayers { get; private set; } /// <summary> /// Gets the list of currently loaded themes /// </summary> /// <value>The themes.</value> - [ImportMany(typeof(BaseTheme))] public IEnumerable<BaseTheme> Themes { get; private set; } /// <summary> @@ -132,14 +128,17 @@ namespace MediaBrowser.UI.Controller } /// <summary> - /// Reloads the internal. + /// Finds the parts. /// </summary> - /// <returns>Task.</returns> - protected override Task ReloadInternal() + /// <param name="allTypes">All types.</param> + protected override void FindParts(Type[] allTypes) { - PlaybackManager = new PlaybackManager(this, Logger); + PlaybackManager = (PlaybackManager)ApplicationHost.CreateInstance(typeof(PlaybackManager)); + + base.FindParts(allTypes); - return base.ReloadInternal(); + Themes = GetExports<BaseTheme>(allTypes); + MediaPlayers = GetExports<BaseMediaPlayer>(allTypes); } /// <summary> diff --git a/MediaBrowser.UI/MediaBrowser.UI.csproj b/MediaBrowser.UI/MediaBrowser.UI.csproj index 5601d7c48..1f8469cbc 100644 --- a/MediaBrowser.UI/MediaBrowser.UI.csproj +++ b/MediaBrowser.UI/MediaBrowser.UI.csproj @@ -5,7 +5,7 @@ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <ProjectGuid>{B5ECE1FB-618E-420B-9A99-8E972D76920A}</ProjectGuid> - <OutputType>Library</OutputType> + <OutputType>WinExe</OutputType> <AppDesignerFolder>Properties</AppDesignerFolder> <RootNamespace>MediaBrowser.UI</RootNamespace> <AssemblyName>MediaBrowser.UI</AssemblyName> @@ -86,6 +86,10 @@ <PlatformTarget>x86</PlatformTarget> <OutputPath>bin\x86\Release\</OutputPath> </PropertyGroup> + <PropertyGroup /> + <PropertyGroup> + <NoWin32Manifest>true</NoWin32Manifest> + </PropertyGroup> <ItemGroup> <Reference Include="Declarations"> <HintPath>..\ThirdParty\Taygeta\Declarations.dll</HintPath> @@ -114,8 +118,10 @@ <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll</HintPath> </Reference> + <Reference Include="SimpleInjector"> + <HintPath>..\packages\SimpleInjector.2.0.0-beta5\lib\net40-client\SimpleInjector.dll</HintPath> + </Reference> <Reference Include="System" /> - <Reference Include="System.ComponentModel.Composition" /> <Reference Include="System.Data" /> <Reference Include="System.Drawing" /> <Reference Include="System.Net" /> diff --git a/MediaBrowser.UI/Playback/ExternalPlayer/GenericExternalPlayer.cs b/MediaBrowser.UI/Playback/ExternalPlayer/GenericExternalPlayer.cs index 3efb28d22..915028050 100644 --- a/MediaBrowser.UI/Playback/ExternalPlayer/GenericExternalPlayer.cs +++ b/MediaBrowser.UI/Playback/ExternalPlayer/GenericExternalPlayer.cs @@ -1,5 +1,4 @@ using MediaBrowser.Model.Dto; -using System.ComponentModel.Composition; using MediaBrowser.Model.Logging; namespace MediaBrowser.UI.Playback.ExternalPlayer @@ -7,11 +6,9 @@ namespace MediaBrowser.UI.Playback.ExternalPlayer /// <summary> /// Class GenericExternalPlayer /// </summary> - [Export(typeof(BaseMediaPlayer))] public class GenericExternalPlayer : BaseExternalPlayer { - [ImportingConstructor] - public GenericExternalPlayer([Import("logger")] ILogger logger) + public GenericExternalPlayer(ILogger logger) : base(logger) { } diff --git a/MediaBrowser.UI/Playback/NVlc/InternalMediaPlayerNVlc.cs b/MediaBrowser.UI/Playback/NVlc/InternalMediaPlayerNVlc.cs index 7233eb64f..2d596655b 100644 --- a/MediaBrowser.UI/Playback/NVlc/InternalMediaPlayerNVlc.cs +++ b/MediaBrowser.UI/Playback/NVlc/InternalMediaPlayerNVlc.cs @@ -9,7 +9,6 @@ using MediaBrowser.UI.Configuration; using MediaBrowser.UI.Playback.InternalPlayer; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Drawing; using System.IO; using System.Linq; @@ -21,11 +20,9 @@ namespace MediaBrowser.UI.Playback.NVlc /// <summary> /// Class InternalMediaPlayer /// </summary> - [Export(typeof(BaseMediaPlayer))] public class InternalMediaPlayerNVlc : BaseInternalMediaPlayer { - [ImportingConstructor] - public InternalMediaPlayerNVlc([Import("logger")] ILogger logger) + public InternalMediaPlayerNVlc(ILogger logger) : base(logger) { } diff --git a/MediaBrowser.UI/packages.config b/MediaBrowser.UI/packages.config index 14ccb1e02..3de1bc355 100644 --- a/MediaBrowser.UI/packages.config +++ b/MediaBrowser.UI/packages.config @@ -3,4 +3,5 @@ <package id="MahApps.Metro" version="0.10.1.21-ALPHA" targetFramework="net45" /> <package id="NLog" version="2.0.0.2000" targetFramework="net45" /> <package id="protobuf-net" version="2.0.0.621" targetFramework="net45" /> + <package id="SimpleInjector" version="2.0.0-beta5" targetFramework="net45" /> </packages>
\ No newline at end of file diff --git a/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs b/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs index 4b9c0bd10..9d42b10ae 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Kernel; +using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller; using MediaBrowser.Model.Logging; using System.ComponentModel.Composition; @@ -27,15 +28,21 @@ namespace MediaBrowser.WebDashboard.Api private readonly Kernel _kernel; /// <summary> + /// Gets or sets the task manager. + /// </summary> + /// <value>The task manager.</value> + private readonly ITaskManager _taskManager; + + /// <summary> /// Initializes a new instance of the <see cref="DashboardInfoWebSocketListener" /> class. /// </summary> /// <param name="kernel">The kernel.</param> /// <param name="logger">The logger.</param> - [ImportingConstructor] - public DashboardInfoWebSocketListener([Import("kernel")] Kernel kernel, [Import("logger")] ILogger logger) + public DashboardInfoWebSocketListener(Kernel kernel, ILogger logger, ITaskManager taskManager) : base(logger) { _kernel = kernel; + _taskManager = taskManager; } /// <summary> @@ -45,7 +52,7 @@ namespace MediaBrowser.WebDashboard.Api /// <returns>Task{IEnumerable{TaskInfo}}.</returns> protected override Task<DashboardInfo> GetDataToSend(object state) { - return Task.FromResult(DashboardService.GetDashboardInfo(_kernel, Logger)); + return Task.FromResult(DashboardService.GetDashboardInfo(_kernel, Logger, _taskManager)); } } } diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index 7bf5bbab7..aca931306 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -79,6 +79,21 @@ namespace MediaBrowser.WebDashboard.Api public class DashboardService : BaseRestService { /// <summary> + /// Gets or sets the task manager. + /// </summary> + /// <value>The task manager.</value> + private readonly ITaskManager _taskManager; + + /// <summary> + /// Initializes a new instance of the <see cref="DashboardService" /> class. + /// </summary> + /// <param name="taskManager">The task manager.</param> + public DashboardService(ITaskManager taskManager) + { + _taskManager = taskManager; + } + + /// <summary> /// Adds the routes. /// </summary> /// <param name="appHost">The app host.</param> @@ -98,7 +113,7 @@ namespace MediaBrowser.WebDashboard.Api { var kernel = (Kernel)Kernel; - return GetDashboardInfo(kernel, Logger); + return GetDashboardInfo(kernel, Logger, _taskManager); } /// <summary> @@ -106,8 +121,9 @@ namespace MediaBrowser.WebDashboard.Api /// </summary> /// <param name="kernel">The kernel.</param> /// <param name="logger">The logger.</param> + /// <param name="taskManager">The task manager.</param> /// <returns>DashboardInfo.</returns> - public static DashboardInfo GetDashboardInfo(Kernel kernel, ILogger logger) + public static DashboardInfo GetDashboardInfo(Kernel kernel, ILogger logger, ITaskManager taskManager) { var connections = kernel.UserManager.ActiveConnections.ToArray(); @@ -117,11 +133,11 @@ namespace MediaBrowser.WebDashboard.Api { SystemInfo = kernel.GetSystemInfo(), - RunningTasks = kernel.ScheduledTasks.Where(i => i.State == TaskState.Running || i.State == TaskState.Cancelling) + RunningTasks = taskManager.ScheduledTasks.Where(i => i.State == TaskState.Running || i.State == TaskState.Cancelling) .Select(ScheduledTaskHelpers.GetTaskInfo) .ToArray(), - ApplicationUpdateTaskId = kernel.ScheduledTasks.OfType<SystemUpdateTask>().First().Id, + ApplicationUpdateTaskId = taskManager.ScheduledTasks.OfType<SystemUpdateTask>().First().Id, ActiveConnections = connections, diff --git a/MediaBrowser.sln b/MediaBrowser.sln index 902792c2e..9e009cd00 100644 --- a/MediaBrowser.sln +++ b/MediaBrowser.sln @@ -49,6 +49,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Logging.NLog", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.ClickOnce", "MediaBrowser.ClickOnce\MediaBrowser.ClickOnce.csproj", "{CC96BF3E-0BDA-4809-BC4B-BB6D418F4A84}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Networking", "MediaBrowser.Networking\MediaBrowser.Networking.csproj", "{7C11010E-179A-49B7-BFB2-F1656F5E71AD}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -318,6 +320,20 @@ Global {CC96BF3E-0BDA-4809-BC4B-BB6D418F4A84}.Release|Win32.ActiveCfg = Release|Any CPU {CC96BF3E-0BDA-4809-BC4B-BB6D418F4A84}.Release|x64.ActiveCfg = Release|Any CPU {CC96BF3E-0BDA-4809-BC4B-BB6D418F4A84}.Release|x86.ActiveCfg = Release|Any CPU + {7C11010E-179A-49B7-BFB2-F1656F5E71AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7C11010E-179A-49B7-BFB2-F1656F5E71AD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C11010E-179A-49B7-BFB2-F1656F5E71AD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {7C11010E-179A-49B7-BFB2-F1656F5E71AD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {7C11010E-179A-49B7-BFB2-F1656F5E71AD}.Debug|Win32.ActiveCfg = Debug|Any CPU + {7C11010E-179A-49B7-BFB2-F1656F5E71AD}.Debug|x64.ActiveCfg = Debug|Any CPU + {7C11010E-179A-49B7-BFB2-F1656F5E71AD}.Debug|x86.ActiveCfg = Debug|Any CPU + {7C11010E-179A-49B7-BFB2-F1656F5E71AD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7C11010E-179A-49B7-BFB2-F1656F5E71AD}.Release|Any CPU.Build.0 = Release|Any CPU + {7C11010E-179A-49B7-BFB2-F1656F5E71AD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {7C11010E-179A-49B7-BFB2-F1656F5E71AD}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {7C11010E-179A-49B7-BFB2-F1656F5E71AD}.Release|Win32.ActiveCfg = Release|Any CPU + {7C11010E-179A-49B7-BFB2-F1656F5E71AD}.Release|x64.ActiveCfg = Release|Any CPU + {7C11010E-179A-49B7-BFB2-F1656F5E71AD}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE |
