type discovery without attributes

pull/702/head
LukePulverenti 12 years ago
parent c165f37bb9
commit b8d5c71842

@ -1,11 +1,9 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.Net;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@ -59,7 +57,6 @@ namespace MediaBrowser.Api
/// <summary> /// <summary>
/// Class EnvironmentService /// Class EnvironmentService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class EnvironmentService : BaseRestService public class EnvironmentService : BaseRestService
{ {
/// <summary> /// <summary>

@ -5,7 +5,6 @@ using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Connectivity; using MediaBrowser.Model.Connectivity;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using System; using System;
using System.ComponentModel.Composition;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace MediaBrowser.Api.HttpHandlers namespace MediaBrowser.Api.HttpHandlers
@ -13,7 +12,6 @@ namespace MediaBrowser.Api.HttpHandlers
/// <summary> /// <summary>
/// Provides a handler to set played status for an item /// Provides a handler to set played status for an item
/// </summary> /// </summary>
[Export(typeof(IHttpServerHandler))]
public class PlaybackCheckInHandler : BaseSerializationHandler<Kernel, UserItemDataDto> public class PlaybackCheckInHandler : BaseSerializationHandler<Kernel, UserItemDataDto>
{ {
/// <summary> /// <summary>

@ -1,19 +1,17 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Controller.IO;
namespace MediaBrowser.Api.HttpHandlers namespace MediaBrowser.Api.HttpHandlers
{ {
/// <summary> /// <summary>
/// Makes changes to the user's media library /// Makes changes to the user's media library
/// </summary> /// </summary>
[Export(typeof(IHttpServerHandler))]
public class UpdateMediaLibraryHandler : BaseActionHandler<Kernel> public class UpdateMediaLibraryHandler : BaseActionHandler<Kernel>
{ {
/// <summary> /// <summary>

@ -6,7 +6,6 @@ using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -114,7 +113,6 @@ namespace MediaBrowser.Api.Images
/// <summary> /// <summary>
/// Class ImageService /// Class ImageService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class ImageService : BaseRestService public class ImageService : BaseRestService
{ {
/// <summary> /// <summary>

@ -5,7 +5,6 @@ using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -15,7 +14,6 @@ namespace MediaBrowser.Api.Images
/// <summary> /// <summary>
/// Class UploadImageHandler /// Class UploadImageHandler
/// </summary> /// </summary>
[Export(typeof(IHttpServerHandler))]
class UploadImageHandler : BaseActionHandler<Kernel> class UploadImageHandler : BaseActionHandler<Kernel>
{ {
/// <summary> /// <summary>

@ -7,7 +7,6 @@ using MediaBrowser.Model.Entities;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
namespace MediaBrowser.Api namespace MediaBrowser.Api
@ -96,7 +95,6 @@ namespace MediaBrowser.Api
/// <summary> /// <summary>
/// Class LibraryService /// Class LibraryService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class LibraryService : BaseRestService public class LibraryService : BaseRestService
{ {
/// <summary> /// <summary>

@ -5,7 +5,6 @@ using MediaBrowser.Model.Globalization;
using MoreLinq; using MoreLinq;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
@ -38,7 +37,6 @@ namespace MediaBrowser.Api
/// <summary> /// <summary>
/// Class CulturesService /// Class CulturesService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class LocalizationService : BaseRestService public class LocalizationService : BaseRestService
{ {
/// <summary> /// <summary>

@ -64,7 +64,6 @@
<HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath> <HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
<Reference Include="System.Runtime.Serialization" /> <Reference Include="System.Runtime.Serialization" />

@ -6,7 +6,6 @@ using MediaBrowser.Model.Updates;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -93,7 +92,6 @@ namespace MediaBrowser.Api
/// <summary> /// <summary>
/// Class PackageService /// Class PackageService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class PackageService : BaseRestService public class PackageService : BaseRestService
{ {
/// <summary> /// <summary>

@ -3,7 +3,6 @@ using MediaBrowser.Model.Plugins;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.ComponentModel.Composition;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
@ -14,7 +13,6 @@ namespace MediaBrowser.Api
/// <summary> /// <summary>
/// Class Plugin /// Class Plugin
/// </summary> /// </summary>
[Export(typeof(IPlugin))]
public class Plugin : BasePlugin<BasePluginConfiguration> public class Plugin : BasePlugin<BasePluginConfiguration>
{ {
/// <summary> /// <summary>

@ -7,10 +7,8 @@ using MediaBrowser.Model.Plugins;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using ServiceStack.Text.Controller; using ServiceStack.Text.Controller;
namespace MediaBrowser.Api namespace MediaBrowser.Api
@ -119,7 +117,6 @@ namespace MediaBrowser.Api
/// <summary> /// <summary>
/// Class PluginsService /// Class PluginsService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class PluginService : BaseRestService public class PluginService : BaseRestService
{ {
/// <summary> /// <summary>

@ -6,7 +6,6 @@ using MediaBrowser.Model.Tasks;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using ServiceStack.Text.Controller; using ServiceStack.Text.Controller;
@ -83,9 +82,19 @@ namespace MediaBrowser.Api.ScheduledTasks
/// <summary> /// <summary>
/// Class ScheduledTasksService /// Class ScheduledTasksService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class ScheduledTaskService : BaseRestService public class ScheduledTaskService : BaseRestService
{ {
/// <summary>
/// Gets or sets the task manager.
/// </summary>
/// <value>The task manager.</value>
private ITaskManager TaskManager { get; set; }
public ScheduledTaskService(ITaskManager taskManager)
{
TaskManager = taskManager;
}
/// <summary> /// <summary>
/// Gets the specified request. /// Gets the specified request.
/// </summary> /// </summary>
@ -93,7 +102,7 @@ namespace MediaBrowser.Api.ScheduledTasks
/// <returns>IEnumerable{TaskInfo}.</returns> /// <returns>IEnumerable{TaskInfo}.</returns>
public object Get(GetScheduledTasks request) public object Get(GetScheduledTasks request)
{ {
var result = Kernel.ScheduledTasks.OrderBy(i => i.Name) var result = TaskManager.ScheduledTasks.OrderBy(i => i.Name)
.Select(ScheduledTaskHelpers.GetTaskInfo).ToList(); .Select(ScheduledTaskHelpers.GetTaskInfo).ToList();
return ToOptimizedResult(result); return ToOptimizedResult(result);
@ -106,7 +115,7 @@ namespace MediaBrowser.Api.ScheduledTasks
/// <returns>IEnumerable{TaskInfo}.</returns> /// <returns>IEnumerable{TaskInfo}.</returns>
public object Get(GetScheduledTask request) public object Get(GetScheduledTask request)
{ {
var task = Kernel.ScheduledTasks.FirstOrDefault(i => i.Id == request.Id); var task = TaskManager.ScheduledTasks.FirstOrDefault(i => i.Id == request.Id);
if (task == null) if (task == null)
{ {
@ -124,7 +133,7 @@ namespace MediaBrowser.Api.ScheduledTasks
/// <param name="request">The request.</param> /// <param name="request">The request.</param>
public void Post(StartScheduledTask request) public void Post(StartScheduledTask request)
{ {
var task = Kernel.ScheduledTasks.FirstOrDefault(i => i.Id == request.Id); var task = TaskManager.ScheduledTasks.FirstOrDefault(i => i.Id == request.Id);
if (task == null) if (task == null)
{ {
@ -140,7 +149,7 @@ namespace MediaBrowser.Api.ScheduledTasks
/// <param name="request">The request.</param> /// <param name="request">The request.</param>
public void Delete(StopScheduledTask request) public void Delete(StopScheduledTask request)
{ {
var task = Kernel.ScheduledTasks.FirstOrDefault(i => i.Id == request.Id); var task = TaskManager.ScheduledTasks.FirstOrDefault(i => i.Id == request.Id);
if (task == null) if (task == null)
{ {
@ -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 // https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs
var pathInfo = PathInfo.Parse(Request.PathInfo); var pathInfo = PathInfo.Parse(Request.PathInfo);
var id = new Guid(pathInfo.GetArgumentValue<string>(1)); var id = new Guid(pathInfo.GetArgumentValue<string>(1));
var task = Kernel.ScheduledTasks.FirstOrDefault(i => i.Id == id); var task = TaskManager.ScheduledTasks.FirstOrDefault(i => i.Id == id);
if (task == null) if (task == null)
{ {
@ -170,7 +179,7 @@ namespace MediaBrowser.Api.ScheduledTasks
var triggerInfos = JsonSerializer.DeserializeFromStream<TaskTriggerInfo[]>(request.RequestStream); var triggerInfos = JsonSerializer.DeserializeFromStream<TaskTriggerInfo[]>(request.RequestStream);
task.Triggers = triggerInfos.Select(t => ScheduledTaskHelpers.GetTrigger(t, Kernel)); task.Triggers = triggerInfos.Select(ScheduledTaskHelpers.GetTrigger);
} }
} }
} }

@ -1,10 +1,8 @@
using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Controller;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Tasks;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -13,9 +11,14 @@ namespace MediaBrowser.Api.ScheduledTasks
/// <summary> /// <summary>
/// Class ScheduledTasksWebSocketListener /// Class ScheduledTasksWebSocketListener
/// </summary> /// </summary>
[Export(typeof(IWebSocketListener))]
public class ScheduledTasksWebSocketListener : BasePeriodicWebSocketListener<IEnumerable<TaskInfo>, object> public class ScheduledTasksWebSocketListener : BasePeriodicWebSocketListener<IEnumerable<TaskInfo>, object>
{ {
/// <summary>
/// Gets or sets the task manager.
/// </summary>
/// <value>The task manager.</value>
private ITaskManager TaskManager { get; set; }
/// <summary> /// <summary>
/// Gets the name. /// Gets the name.
/// </summary> /// </summary>
@ -33,13 +36,12 @@ namespace MediaBrowser.Api.ScheduledTasks
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="ScheduledTasksWebSocketListener" /> class. /// Initializes a new instance of the <see cref="ScheduledTasksWebSocketListener" /> class.
/// </summary> /// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
[ImportingConstructor] /// <param name="taskManager">The task manager.</param>
public ScheduledTasksWebSocketListener([Import("kernel")] Kernel kernel, [Import("logger")] ILogger logger) public ScheduledTasksWebSocketListener(ILogger logger, ITaskManager taskManager)
: base(logger) : base(logger)
{ {
_kernel = kernel; TaskManager = taskManager;
} }
/// <summary> /// <summary>
@ -49,7 +51,7 @@ namespace MediaBrowser.Api.ScheduledTasks
/// <returns>Task{IEnumerable{TaskInfo}}.</returns> /// <returns>Task{IEnumerable{TaskInfo}}.</returns>
protected override Task<IEnumerable<TaskInfo>> GetDataToSend(object state) protected override Task<IEnumerable<TaskInfo>> GetDataToSend(object state)
{ {
return Task.FromResult(_kernel.ScheduledTasks.OrderBy(i => i.Name) return Task.FromResult(TaskManager.ScheduledTasks.OrderBy(i => i.Name)
.Select(ScheduledTaskHelpers.GetTaskInfo)); .Select(ScheduledTaskHelpers.GetTaskInfo));
} }
} }

@ -5,7 +5,6 @@ using MediaBrowser.Controller.Resolvers;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
@ -14,7 +13,6 @@ namespace MediaBrowser.Api.Streaming
/// <summary> /// <summary>
/// Providers a progressive streaming audio api /// Providers a progressive streaming audio api
/// </summary> /// </summary>
[Export(typeof(IHttpServerHandler))]
public class AudioHandler : BaseProgressiveStreamingHandler<Audio> public class AudioHandler : BaseProgressiveStreamingHandler<Audio>
{ {
/// <summary> /// <summary>

@ -859,11 +859,11 @@ namespace MediaBrowser.Api.Streaming
{ {
var video = LibraryItem as Video; var video = LibraryItem as Video;
if (video != null && video.VideoType == VideoType.Iso && //if (video != null && video.VideoType == VideoType.Iso &&
video.IsoType.HasValue && Kernel.IsoManager.CanMount(video.Path)) // video.IsoType.HasValue && Kernel.IsoManager.CanMount(video.Path))
{ //{
IsoMount = await Kernel.IsoManager.Mount(video.Path, CancellationToken.None).ConfigureAwait(false); // IsoMount = await Kernel.IsoManager.Mount(video.Path, CancellationToken.None).ConfigureAwait(false);
} //}
var process = new Process var process = new Process
{ {

@ -2,7 +2,6 @@
using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using System; using System;
using System.ComponentModel.Composition;
using System.Net; using System.Net;
namespace MediaBrowser.Api.Streaming namespace MediaBrowser.Api.Streaming
@ -10,7 +9,6 @@ namespace MediaBrowser.Api.Streaming
/// <summary> /// <summary>
/// Class HlsAudioPlaylistHandler /// Class HlsAudioPlaylistHandler
/// </summary> /// </summary>
[Export(typeof(IHttpServerHandler))]
public class HlsAudioPlaylistHandler : BaseHlsPlaylistHandler<Audio> public class HlsAudioPlaylistHandler : BaseHlsPlaylistHandler<Audio>
{ {
/// <summary> /// <summary>

@ -1,7 +1,6 @@
using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Net; using System.Net;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -11,7 +10,6 @@ namespace MediaBrowser.Api.Streaming
/// <summary> /// <summary>
/// Class HlsSegmentHandler /// Class HlsSegmentHandler
/// </summary> /// </summary>
[Export(typeof(IHttpServerHandler))]
public class HlsSegmentHandler : BaseHandler<Kernel> public class HlsSegmentHandler : BaseHandler<Kernel>
{ {
/// <summary> /// <summary>

@ -1,7 +1,6 @@
using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using System; using System;
using System.ComponentModel.Composition;
using System.Net; using System.Net;
namespace MediaBrowser.Api.Streaming namespace MediaBrowser.Api.Streaming
@ -9,7 +8,6 @@ namespace MediaBrowser.Api.Streaming
/// <summary> /// <summary>
/// Class HlsVideoPlaylistHandler /// Class HlsVideoPlaylistHandler
/// </summary> /// </summary>
[Export(typeof(IHttpServerHandler))]
public class HlsVideoPlaylistHandler : BaseHlsPlaylistHandler<Video> public class HlsVideoPlaylistHandler : BaseHlsPlaylistHandler<Video>
{ {
/// <summary> /// <summary>

@ -1,21 +1,15 @@
using System.IO; using MediaBrowser.Common.IO;
using System.Threading;
using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Resolvers; using MediaBrowser.Controller.Resolvers;
using System; using System;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using MediaBrowser.Model.Entities;
namespace MediaBrowser.Api.Streaming namespace MediaBrowser.Api.Streaming
{ {
/// <summary> /// <summary>
/// Providers a progressive streaming video api /// Providers a progressive streaming video api
/// </summary> /// </summary>
[Export(typeof(IHttpServerHandler))]
class VideoHandler : BaseProgressiveStreamingHandler<Video> class VideoHandler : BaseProgressiveStreamingHandler<Video>
{ {
/// <summary> /// <summary>

@ -5,7 +5,6 @@ using MediaBrowser.Controller;
using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.System; using MediaBrowser.Model.System;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -47,7 +46,6 @@ namespace MediaBrowser.Api
/// <summary> /// <summary>
/// Class SystemInfoService /// Class SystemInfoService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class SystemService : BaseRestService public class SystemService : BaseRestService
{ {
/// <summary> /// <summary>

@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -22,7 +21,6 @@ namespace MediaBrowser.Api.UserLibrary
/// <summary> /// <summary>
/// Class GenresService /// Class GenresService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class GenresService : BaseItemsByNameService<Genre> public class GenresService : BaseItemsByNameService<Genre>
{ {
/// <summary> /// <summary>

@ -8,7 +8,6 @@ using MediaBrowser.Model.Entities;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -144,7 +143,6 @@ namespace MediaBrowser.Api.UserLibrary
/// <summary> /// <summary>
/// Class ItemsService /// Class ItemsService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class ItemsService : BaseRestService public class ItemsService : BaseRestService
{ {
/// <summary> /// <summary>

@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -27,7 +26,6 @@ namespace MediaBrowser.Api.UserLibrary
/// <summary> /// <summary>
/// Class PersonsService /// Class PersonsService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class PersonsService : BaseItemsByNameService<Person> public class PersonsService : BaseItemsByNameService<Person>
{ {
/// <summary> /// <summary>

@ -1,10 +1,8 @@
using MediaBrowser.Common.Net; using MediaBrowser.Controller;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -22,7 +20,6 @@ namespace MediaBrowser.Api.UserLibrary
/// <summary> /// <summary>
/// Class StudiosService /// Class StudiosService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class StudiosService : BaseItemsByNameService<Studio> public class StudiosService : BaseItemsByNameService<Studio>
{ {
/// <summary> /// <summary>

@ -9,7 +9,6 @@ using MediaBrowser.Model.Entities;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -252,7 +251,6 @@ namespace MediaBrowser.Api.UserLibrary
/// <summary> /// <summary>
/// Class UserLibraryService /// Class UserLibraryService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class UserLibraryService : BaseRestService public class UserLibraryService : BaseRestService
{ {
public object Get(GetSpecialFeatures request) public object Get(GetSpecialFeatures request)

@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -23,7 +22,6 @@ namespace MediaBrowser.Api.UserLibrary
/// <summary> /// <summary>
/// Class YearsService /// Class YearsService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class YearsService : BaseItemsByNameService<Year> public class YearsService : BaseItemsByNameService<Year>
{ {
/// <summary> /// <summary>

@ -7,7 +7,6 @@ using MediaBrowser.Model.Dto;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -134,7 +133,6 @@ namespace MediaBrowser.Api
/// <summary> /// <summary>
/// Class UsersService /// Class UsersService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class UserService : BaseRestService public class UserService : BaseRestService
{ {
/// <summary> /// <summary>

@ -2,7 +2,6 @@
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Model.Weather; using MediaBrowser.Model.Weather;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
@ -24,7 +23,6 @@ namespace MediaBrowser.Api
/// <summary> /// <summary>
/// Class WeatherService /// Class WeatherService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class WeatherService : BaseRestService public class WeatherService : BaseRestService
{ {
/// <summary> /// <summary>

@ -4,7 +4,6 @@ using MediaBrowser.Controller;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -14,7 +13,6 @@ namespace MediaBrowser.Api.WebSocket
/// <summary> /// <summary>
/// Class ScheduledTasksWebSocketListener /// Class ScheduledTasksWebSocketListener
/// </summary> /// </summary>
[Export(typeof(IWebSocketListener))]
public class LogFileWebSocketListener : BasePeriodicWebSocketListener<IEnumerable<string>, LogFileWebSocketState> public class LogFileWebSocketListener : BasePeriodicWebSocketListener<IEnumerable<string>, LogFileWebSocketState>
{ {
/// <summary> /// <summary>
@ -36,8 +34,7 @@ namespace MediaBrowser.Api.WebSocket
/// </summary> /// </summary>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
/// <param name="kernel">The kernel.</param> /// <param name="kernel">The kernel.</param>
[ImportingConstructor] public LogFileWebSocketListener(ILogger logger, Kernel kernel)
public LogFileWebSocketListener([Import("logger")] ILogger logger, [Import("kernel")] Kernel kernel)
: base(logger) : base(logger)
{ {
_kernel = kernel; _kernel = kernel;

@ -2,7 +2,6 @@
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.System; using MediaBrowser.Model.System;
using System.ComponentModel.Composition;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace MediaBrowser.Api.WebSocket namespace MediaBrowser.Api.WebSocket
@ -10,7 +9,6 @@ namespace MediaBrowser.Api.WebSocket
/// <summary> /// <summary>
/// Class SystemInfoWebSocketListener /// Class SystemInfoWebSocketListener
/// </summary> /// </summary>
[Export(typeof(IWebSocketListener))]
public class SystemInfoWebSocketListener : BasePeriodicWebSocketListener<SystemInfo, object> public class SystemInfoWebSocketListener : BasePeriodicWebSocketListener<SystemInfo, object>
{ {
/// <summary> /// <summary>
@ -32,8 +30,7 @@ namespace MediaBrowser.Api.WebSocket
/// </summary> /// </summary>
/// <param name="kernel">The kernel.</param> /// <param name="kernel">The kernel.</param>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
[ImportingConstructor] public SystemInfoWebSocketListener(Kernel kernel, ILogger logger)
public SystemInfoWebSocketListener([Import("kernel")] Kernel kernel, [Import("logger")] ILogger logger)
: base(logger) : base(logger)
{ {
_kernel = kernel; _kernel = kernel;

@ -2,7 +2,6 @@
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -25,7 +24,6 @@ namespace MediaBrowser.ApiInteraction.Javascript
/// <summary> /// <summary>
/// Class JavascriptApiClientService /// Class JavascriptApiClientService
/// </summary> /// </summary>
[Export(typeof(IRestfulService))]
public class JavascriptApiClientService : BaseRestService public class JavascriptApiClientService : BaseRestService
{ {
/// <summary> /// <summary>

@ -68,7 +68,6 @@
<HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath> <HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />

@ -9,9 +9,6 @@ using MediaBrowser.Model.Logging;
using MediaBrowser.Model.System; using MediaBrowser.Model.System;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.ComponentModel.Composition.Primitives;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@ -182,28 +179,14 @@ namespace MediaBrowser.Common.Kernel
/// Gets the list of currently loaded plugins /// Gets the list of currently loaded plugins
/// </summary> /// </summary>
/// <value>The plugins.</value> /// <value>The plugins.</value>
[ImportMany(typeof(IPlugin))]
public IEnumerable<IPlugin> Plugins { get; protected set; } public IEnumerable<IPlugin> Plugins { get; protected set; }
/// <summary>
/// Gets the list of Scheduled Tasks
/// </summary>
/// <value>The scheduled tasks.</value>
[ImportMany(typeof(IScheduledTask))]
public IEnumerable<IScheduledTask> ScheduledTasks { get; private set; }
/// <summary> /// <summary>
/// Gets the web socket listeners. /// Gets the web socket listeners.
/// </summary> /// </summary>
/// <value>The web socket listeners.</value> /// <value>The web socket listeners.</value>
public IEnumerable<IWebSocketListener> WebSocketListeners { get; private set; } public IEnumerable<IWebSocketListener> WebSocketListeners { get; private set; }
/// <summary>
/// Gets the MEF CompositionContainer
/// </summary>
/// <value>The composition container.</value>
private CompositionContainer CompositionContainer { get; set; }
/// <summary> /// <summary>
/// The _HTTP manager /// The _HTTP manager
/// </summary> /// </summary>
@ -216,12 +199,6 @@ namespace MediaBrowser.Common.Kernel
/// <value>The TCP manager.</value> /// <value>The TCP manager.</value>
public TcpManager TcpManager { get; private set; } public TcpManager TcpManager { get; private set; }
/// <summary>
/// Gets the task manager.
/// </summary>
/// <value>The task manager.</value>
public TaskManager TaskManager { get; private set; }
/// <summary> /// <summary>
/// Gets the rest services. /// Gets the rest services.
/// </summary> /// </summary>
@ -324,11 +301,17 @@ namespace MediaBrowser.Common.Kernel
/// <value>The application host.</value> /// <value>The application host.</value>
protected IApplicationHost ApplicationHost { get; private set; } protected IApplicationHost ApplicationHost { get; private set; }
/// <summary>
/// Gets or sets the task manager.
/// </summary>
/// <value>The task manager.</value>
protected ITaskManager TaskManager { get; set; }
/// <summary> /// <summary>
/// Gets the assemblies. /// Gets the assemblies.
/// </summary> /// </summary>
/// <value>The assemblies.</value> /// <value>The assemblies.</value>
public Assembly[] Assemblies { get; private set; } protected Assembly[] Assemblies { get; private set; }
/// <summary> /// <summary>
/// Gets all types. /// Gets all types.
@ -407,7 +390,7 @@ namespace MediaBrowser.Common.Kernel
await OnConfigurationLoaded().ConfigureAwait(false); await OnConfigurationLoaded().ConfigureAwait(false);
DisposeTaskManager(); DisposeTaskManager();
TaskManager = new TaskManager(this, Logger); TaskManager = new TaskManager(Logger);
Logger.Info("Loading Plugins"); Logger.Info("Loading Plugins");
await ReloadComposableParts().ConfigureAwait(false); await ReloadComposableParts().ConfigureAwait(false);
@ -453,8 +436,6 @@ namespace MediaBrowser.Common.Kernel
ComposeParts(AllTypes); ComposeParts(AllTypes);
await OnComposablePartsLoaded().ConfigureAwait(false); await OnComposablePartsLoaded().ConfigureAwait(false);
CompositionContainer.Catalog.Dispose();
} }
/// <summary> /// <summary>
@ -465,11 +446,7 @@ namespace MediaBrowser.Common.Kernel
{ {
var concreteTypes = allTypes.Where(t => t.IsClass && !t.IsAbstract && !t.IsInterface && !t.IsGenericType).ToArray(); var concreteTypes = allTypes.Where(t => t.IsClass && !t.IsAbstract && !t.IsInterface && !t.IsGenericType).ToArray();
CompositionContainer = GetSafeCompositionContainer(concreteTypes.Select(i => new TypeCatalog(i))); RegisterExportedValues();
RegisterExportedValues(CompositionContainer);
CompositionContainer.ComposeParts(this);
FindParts(concreteTypes); FindParts(concreteTypes);
} }
@ -482,6 +459,11 @@ namespace MediaBrowser.Common.Kernel
{ {
RestServices = GetExports<IRestfulService>(allTypes); RestServices = GetExports<IRestfulService>(allTypes);
WebSocketListeners = GetExports<IWebSocketListener>(allTypes); WebSocketListeners = GetExports<IWebSocketListener>(allTypes);
Plugins = GetExports<IPlugin>(allTypes);
var tasks = GetExports<IScheduledTask>(allTypes, false);
TaskManager.AddTasks(tasks);
} }
/// <summary> /// <summary>
@ -489,8 +471,9 @@ namespace MediaBrowser.Common.Kernel
/// </summary> /// </summary>
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
/// <param name="allTypes">All types.</param> /// <param name="allTypes">All types.</param>
/// <param name="manageLiftime">if set to <c>true</c> [manage liftime].</param>
/// <returns>IEnumerable{``0}.</returns> /// <returns>IEnumerable{``0}.</returns>
protected IEnumerable<T> GetExports<T>(Type[] allTypes) protected IEnumerable<T> GetExports<T>(Type[] allTypes, bool manageLiftime = true)
{ {
var currentType = typeof(T); var currentType = typeof(T);
@ -498,7 +481,10 @@ namespace MediaBrowser.Common.Kernel
var parts = allTypes.Where(currentType.IsAssignableFrom).Select(Instantiate).Cast<T>().ToArray(); var parts = allTypes.Where(currentType.IsAssignableFrom).Select(Instantiate).Cast<T>().ToArray();
_disposableParts.AddRange(parts.OfType<IDisposable>()); if (manageLiftime)
{
_disposableParts.AddRange(parts.OfType<IDisposable>());
}
return parts; return parts;
} }
@ -517,13 +503,10 @@ namespace MediaBrowser.Common.Kernel
/// Composes the exported values. /// Composes the exported values.
/// </summary> /// </summary>
/// <param name="container">The container.</param> /// <param name="container">The container.</param>
protected virtual void RegisterExportedValues(CompositionContainer container) protected virtual void RegisterExportedValues()
{ {
ApplicationHost.Register<IKernel>(this); ApplicationHost.Register<IKernel>(this);
ApplicationHost.Register(TaskManager);
container.ComposeExportedValue("logger", Logger);
container.ComposeExportedValue("appHost", ApplicationHost);
container.ComposeExportedValue("isoManager", ApplicationHost.Resolve<IIsoManager>());
} }
/// <summary> /// <summary>
@ -590,46 +573,6 @@ namespace MediaBrowser.Common.Kernel
yield return GetType().Assembly; yield return GetType().Assembly;
} }
/// <summary>
/// Plugins that live on both the server and UI are going to have references to assemblies from both sides.
/// But looks for Parts on one side, it will throw an exception when it seems Types from the other side that it doesn't have a reference to.
/// For example, a plugin provides a Resolver. When MEF runs in the UI, it will throw an exception when it sees the resolver because there won't be a reference to the base class.
/// This method will catch those exceptions while retining the list of Types that MEF is able to resolve.
/// </summary>
/// <param name="catalogs">The catalogs.</param>
/// <returns>CompositionContainer.</returns>
/// <exception cref="System.ArgumentNullException">catalogs</exception>
private static CompositionContainer GetSafeCompositionContainer(IEnumerable<ComposablePartCatalog> catalogs)
{
if (catalogs == null)
{
throw new ArgumentNullException("catalogs");
}
var newList = new List<ComposablePartCatalog>();
// Go through each Catalog
foreach (var catalog in catalogs)
{
try
{
// Try to have MEF find Parts
catalog.Parts.ToArray();
// If it succeeds we can use the entire catalog
newList.Add(catalog);
}
catch (ReflectionTypeLoadException ex)
{
// If it fails we can still get a list of the Types it was able to resolve and create TypeCatalogs
var typeCatalogs = ex.Types.Where(t => t != null).Select(t => new TypeCatalog(t));
newList.AddRange(typeCatalogs);
}
}
return new CompositionContainer(new AggregateCatalog(newList));
}
/// <summary> /// <summary>
/// Gets a list of types within an assembly /// Gets a list of types within an assembly
/// This will handle situations that would normally throw an exception - such as a type within the assembly that depends on some other non-existant reference /// This will handle situations that would normally throw an exception - such as a type within the assembly that depends on some other non-existant reference
@ -663,11 +606,6 @@ namespace MediaBrowser.Common.Kernel
{ {
return Task.Run(() => return Task.Run(() =>
{ {
foreach (var task in ScheduledTasks)
{
task.Initialize(this, Logger);
}
// Start-up each plugin // Start-up each plugin
Parallel.ForEach(Plugins, plugin => Parallel.ForEach(Plugins, plugin =>
{ {
@ -722,11 +660,6 @@ namespace MediaBrowser.Common.Kernel
DisposeComposableParts(); DisposeComposableParts();
foreach (var part in _disposableParts)
{
part.Dispose();
}
_disposableParts.Clear(); _disposableParts.Clear();
} }
} }
@ -772,9 +705,9 @@ namespace MediaBrowser.Common.Kernel
/// </summary> /// </summary>
protected virtual void DisposeComposableParts() protected virtual void DisposeComposableParts()
{ {
if (CompositionContainer != null) foreach (var part in _disposableParts)
{ {
CompositionContainer.Dispose(); part.Dispose();
} }
} }

@ -63,6 +63,13 @@ namespace MediaBrowser.Common.Kernel
/// </summary> /// </summary>
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
/// <returns>``0.</returns> /// <returns>``0.</returns>
T Resolve<T>() where T : class; T Resolve<T>();
/// <summary>
/// Resolves this instance.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns>``0.</returns>
T TryResolve<T>();
} }
} }

@ -1,12 +1,10 @@
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Common.Plugins; using MediaBrowser.Common.Plugins;
using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Common.Serialization; using MediaBrowser.Common.Serialization;
using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.System; using MediaBrowser.Model.System;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace MediaBrowser.Common.Kernel namespace MediaBrowser.Common.Kernel
@ -69,12 +67,6 @@ namespace MediaBrowser.Common.Kernel
/// <returns>SystemInfo.</returns> /// <returns>SystemInfo.</returns>
SystemInfo GetSystemInfo(); SystemInfo GetSystemInfo();
/// <summary>
/// Gets the scheduled tasks.
/// </summary>
/// <value>The scheduled tasks.</value>
IEnumerable<IScheduledTask> ScheduledTasks { get; }
/// <summary> /// <summary>
/// Reloads the logger. /// Reloads the logger.
/// </summary> /// </summary>
@ -133,12 +125,6 @@ namespace MediaBrowser.Common.Kernel
/// <value>The TCP manager.</value> /// <value>The TCP manager.</value>
TcpManager TcpManager { get; } TcpManager TcpManager { get; }
/// <summary>
/// Gets the task manager.
/// </summary>
/// <value>The task manager.</value>
TaskManager TaskManager { get; }
/// <summary> /// <summary>
/// Gets the web socket listeners. /// Gets the web socket listeners.
/// </summary> /// </summary>
@ -160,12 +146,6 @@ namespace MediaBrowser.Common.Kernel
/// </summary> /// </summary>
event EventHandler<EventArgs> ConfigurationUpdated; event EventHandler<EventArgs> ConfigurationUpdated;
/// <summary>
/// Gets the assemblies.
/// </summary>
/// <value>The assemblies.</value>
Assembly[] Assemblies { get; }
/// <summary> /// <summary>
/// Gets the rest services. /// Gets the rest services.
/// </summary> /// </summary>

@ -89,7 +89,6 @@
<HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath> <HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Configuration" /> <Reference Include="System.Configuration" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Management" /> <Reference Include="System.Management" />
@ -125,7 +124,6 @@
<Compile Include="Events\GenericEventArgs.cs" /> <Compile Include="Events\GenericEventArgs.cs" />
<Compile Include="Extensions\NamedLock.cs" /> <Compile Include="Extensions\NamedLock.cs" />
<Compile Include="Extensions\ResourceNotFoundException.cs" /> <Compile Include="Extensions\ResourceNotFoundException.cs" />
<Compile Include="IO\FileSystem.cs" />
<Compile Include="IO\FileSystemRepository.cs" /> <Compile Include="IO\FileSystemRepository.cs" />
<Compile Include="IO\IIsoManager.cs" /> <Compile Include="IO\IIsoManager.cs" />
<Compile Include="IO\IIsoMount.cs" /> <Compile Include="IO\IIsoMount.cs" />
@ -138,7 +136,6 @@
<Compile Include="Kernel\IApplicationHost.cs" /> <Compile Include="Kernel\IApplicationHost.cs" />
<Compile Include="Kernel\IKernel.cs" /> <Compile Include="Kernel\IKernel.cs" />
<Compile Include="Kernel\TcpManager.cs" /> <Compile Include="Kernel\TcpManager.cs" />
<Compile Include="Localization\LocalizedStringData.cs" />
<Compile Include="Net\AlchemyWebSocket.cs" /> <Compile Include="Net\AlchemyWebSocket.cs" />
<Compile Include="Net\BaseRestService.cs" /> <Compile Include="Net\BaseRestService.cs" />
<Compile Include="Net\Handlers\BaseActionHandler.cs" /> <Compile Include="Net\Handlers\BaseActionHandler.cs" />
@ -146,6 +143,7 @@
<Compile Include="Net\Handlers\StaticFileHandler.cs" /> <Compile Include="Net\Handlers\StaticFileHandler.cs" />
<Compile Include="Net\HttpManager.cs" /> <Compile Include="Net\HttpManager.cs" />
<Compile Include="Net\IRestfulService.cs" /> <Compile Include="Net\IRestfulService.cs" />
<Compile Include="Net\IUdpServer.cs" />
<Compile Include="Net\IWebSocket.cs" /> <Compile Include="Net\IWebSocket.cs" />
<Compile Include="Net\MimeTypes.cs" /> <Compile Include="Net\MimeTypes.cs" />
<Compile Include="Net\NativeWebSocket.cs" /> <Compile Include="Net\NativeWebSocket.cs" />
@ -161,6 +159,7 @@
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon> <DependentUpon>Resources.resx</DependentUpon>
</Compile> </Compile>
<Compile Include="ScheduledTasks\ITaskManager.cs" />
<Compile Include="ScheduledTasks\TaskManager.cs" /> <Compile Include="ScheduledTasks\TaskManager.cs" />
<Compile Include="ScheduledTasks\Tasks\ReloadLoggerTask.cs" /> <Compile Include="ScheduledTasks\Tasks\ReloadLoggerTask.cs" />
<Compile Include="ScheduledTasks\ScheduledTaskHelpers.cs" /> <Compile Include="ScheduledTasks\ScheduledTaskHelpers.cs" />

@ -4,6 +4,7 @@ using MediaBrowser.Common.Kernel;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using ServiceStack.Api.Swagger; using ServiceStack.Api.Swagger;
using ServiceStack.Common.Web; using ServiceStack.Common.Web;
using ServiceStack.Configuration;
using ServiceStack.Logging.NLogger; using ServiceStack.Logging.NLogger;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using ServiceStack.ServiceInterface.Cors; using ServiceStack.ServiceInterface.Cors;
@ -153,6 +154,8 @@ namespace MediaBrowser.Common.Net
DebugMode = true DebugMode = true
}); });
} }
container.Adapter = new ContainerAdapter(ApplicationHost);
container.Register(Kernel); container.Register(Kernel);
container.Register(_logger); container.Register(_logger);
@ -464,4 +467,23 @@ namespace MediaBrowser.Common.Net
/// <value>The endpoint.</value> /// <value>The endpoint.</value>
public IPEndPoint Endpoint { get; set; } public IPEndPoint Endpoint { get; set; }
} }
class ContainerAdapter : IContainerAdapter
{
private readonly IApplicationHost _appHost;
public ContainerAdapter(IApplicationHost appHost)
{
_appHost = appHost;
}
public T Resolve<T>()
{
return _appHost.Resolve<T>();
}
public T TryResolve<T>()
{
return _appHost.TryResolve<T>();
}
}
} }

@ -0,0 +1,7 @@

namespace MediaBrowser.Common.Net
{
public interface IUdpServer
{
}
}

@ -17,7 +17,7 @@ namespace MediaBrowser.Common.ScheduledTasks
/// </summary> /// </summary>
/// <typeparam name="TKernelType">The type of the T kernel type.</typeparam> /// <typeparam name="TKernelType">The type of the T kernel type.</typeparam>
public abstract class BaseScheduledTask<TKernelType> : IScheduledTask public abstract class BaseScheduledTask<TKernelType> : IScheduledTask
where TKernelType : IKernel where TKernelType : class, IKernel
{ {
/// <summary> /// <summary>
/// Gets the kernel. /// Gets the kernel.
@ -25,6 +25,47 @@ namespace MediaBrowser.Common.ScheduledTasks
/// <value>The kernel.</value> /// <value>The kernel.</value>
protected TKernelType Kernel { get; private set; } protected TKernelType Kernel { get; private set; }
/// <summary>
/// Gets the logger.
/// </summary>
/// <value>The logger.</value>
protected ILogger Logger { get; private set; }
/// <summary>
/// Gets the task manager.
/// </summary>
/// <value>The task manager.</value>
protected ITaskManager TaskManager { get; private set; }
/// <summary>
/// Initializes a new instance of the <see cref="BaseScheduledTask{TKernelType}" /> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="taskManager">The task manager.</param>
/// <param name="logger">The logger.</param>
/// <exception cref="System.ArgumentNullException">kernel</exception>
protected BaseScheduledTask(TKernelType kernel, ITaskManager taskManager, ILogger logger)
{
if (kernel == null)
{
throw new ArgumentNullException("kernel");
}
if (taskManager == null)
{
throw new ArgumentNullException("taskManager");
}
if (logger == null)
{
throw new ArgumentNullException("logger");
}
Kernel = kernel;
TaskManager = taskManager;
Logger = logger;
ReloadTriggerEvents(true);
}
/// <summary> /// <summary>
/// The _last execution result /// The _last execution result
/// </summary> /// </summary>
@ -199,7 +240,7 @@ namespace MediaBrowser.Common.ScheduledTasks
try try
{ {
return JsonSerializer.DeserializeFromFile<IEnumerable<TaskTriggerInfo>>(ConfigurationFilePath) return JsonSerializer.DeserializeFromFile<IEnumerable<TaskTriggerInfo>>(ConfigurationFilePath)
.Select(t => ScheduledTaskHelpers.GetTrigger(t, Kernel)) .Select(ScheduledTaskHelpers.GetTrigger)
.ToList(); .ToList();
} }
catch (IOException) catch (IOException)
@ -228,7 +269,7 @@ namespace MediaBrowser.Common.ScheduledTasks
_triggersInitialized = true; _triggersInitialized = true;
ReloadTriggerEvents(); ReloadTriggerEvents(false);
JsonSerializer.SerializeToFile(_triggers.Select(ScheduledTaskHelpers.GetTriggerInfo), ConfigurationFilePath); JsonSerializer.SerializeToFile(_triggers.Select(ScheduledTaskHelpers.GetTriggerInfo), ConfigurationFilePath);
} }
@ -290,29 +331,11 @@ namespace MediaBrowser.Common.ScheduledTasks
} }
} }
/// <summary>
/// Gets the logger.
/// </summary>
/// <value>The logger.</value>
protected ILogger Logger { get; private set; }
/// <summary>
/// Initializes the specified kernel.
/// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="logger">The logger.</param>
public void Initialize(IKernel kernel, ILogger logger)
{
Logger = logger;
Kernel = (TKernelType)kernel;
ReloadTriggerEvents();
}
/// <summary> /// <summary>
/// Reloads the trigger events. /// Reloads the trigger events.
/// </summary> /// </summary>
private void ReloadTriggerEvents() /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param>
private void ReloadTriggerEvents(bool isApplicationStartup)
{ {
foreach (var trigger in Triggers) foreach (var trigger in Triggers)
{ {
@ -320,7 +343,7 @@ namespace MediaBrowser.Common.ScheduledTasks
trigger.Triggered -= trigger_Triggered; trigger.Triggered -= trigger_Triggered;
trigger.Triggered += trigger_Triggered; trigger.Triggered += trigger_Triggered;
trigger.Start(); trigger.Start(isApplicationStartup);
} }
} }
@ -335,7 +358,7 @@ namespace MediaBrowser.Common.ScheduledTasks
Logger.Info("{0} fired for task: {1}", trigger.GetType().Name, Name); Logger.Info("{0} fired for task: {1}", trigger.GetType().Name, Name);
Kernel.TaskManager.QueueScheduledTask(this); TaskManager.QueueScheduledTask(this);
} }
/// <summary> /// <summary>
@ -392,7 +415,7 @@ namespace MediaBrowser.Common.ScheduledTasks
CurrentCancellationTokenSource = null; CurrentCancellationTokenSource = null;
CurrentProgress = null; CurrentProgress = null;
Kernel.TaskManager.OnTaskCompleted(this); TaskManager.OnTaskCompleted(this);
} }
/// <summary> /// <summary>

@ -27,13 +27,13 @@ namespace MediaBrowser.Common.ScheduledTasks
await Task.Delay(1000).ConfigureAwait(false); await Task.Delay(1000).ConfigureAwait(false);
Start(); Start(false);
} }
/// <summary> /// <summary>
/// Stars waiting for the trigger action /// Stars waiting for the trigger action
/// </summary> /// </summary>
protected internal abstract void Start(); protected internal abstract void Start(bool isApplicationStartup);
/// <summary> /// <summary>
/// Stops waiting for the trigger action /// Stops waiting for the trigger action

@ -23,7 +23,8 @@ namespace MediaBrowser.Common.ScheduledTasks
/// <summary> /// <summary>
/// Stars waiting for the trigger action /// Stars waiting for the trigger action
/// </summary> /// </summary>
protected internal override void Start() /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param>
protected internal override void Start(bool isApplicationStartup)
{ {
DisposeTimer(); DisposeTimer();

@ -1,6 +1,4 @@
using MediaBrowser.Common.Kernel; using MediaBrowser.Model.Tasks;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Tasks;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -73,13 +71,6 @@ namespace MediaBrowser.Common.ScheduledTasks
/// <exception cref="System.InvalidOperationException">Cannot cancel a Task unless it is in the Running state.</exception> /// <exception cref="System.InvalidOperationException">Cannot cancel a Task unless it is in the Running state.</exception>
void Cancel(); void Cancel();
/// <summary>
/// Initializes the specified kernel.
/// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="logger">The logger.</param>
void Initialize(IKernel kernel, ILogger logger);
/// <summary> /// <summary>
/// Cancels if running. /// Cancels if running.
/// </summary> /// </summary>

@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
namespace MediaBrowser.Common.ScheduledTasks
{
public interface ITaskManager : IDisposable
{
/// <summary>
/// Gets the list of Scheduled Tasks
/// </summary>
/// <value>The scheduled tasks.</value>
IScheduledTask[] ScheduledTasks { get; }
/// <summary>
/// Cancels if running and queue.
/// </summary>
/// <typeparam name="T"></typeparam>
void CancelIfRunningAndQueue<T>()
where T : IScheduledTask;
/// <summary>
/// Queues the scheduled task.
/// </summary>
/// <typeparam name="T"></typeparam>
void QueueScheduledTask<T>()
where T : IScheduledTask;
/// <summary>
/// Queues the scheduled task.
/// </summary>
/// <param name="task">The task.</param>
void QueueScheduledTask(IScheduledTask task);
/// <summary>
/// Adds the tasks.
/// </summary>
/// <param name="tasks">The tasks.</param>
void AddTasks(IEnumerable<IScheduledTask> tasks);
/// <summary>
/// Called when [task completed].
/// </summary>
/// <param name="task">The task.</param>
void OnTaskCompleted(IScheduledTask task);
}
}

@ -23,7 +23,8 @@ namespace MediaBrowser.Common.ScheduledTasks
/// <summary> /// <summary>
/// Stars waiting for the trigger action /// Stars waiting for the trigger action
/// </summary> /// </summary>
protected internal override void Start() /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param>
protected internal override void Start(bool isApplicationStartup)
{ {
DisposeTimer(); DisposeTimer();

@ -78,11 +78,10 @@ namespace MediaBrowser.Common.ScheduledTasks
/// Converts a TaskTriggerInfo into a concrete BaseTaskTrigger /// Converts a TaskTriggerInfo into a concrete BaseTaskTrigger
/// </summary> /// </summary>
/// <param name="info">The info.</param> /// <param name="info">The info.</param>
/// <param name="kernel">The kernel.</param>
/// <returns>BaseTaskTrigger.</returns> /// <returns>BaseTaskTrigger.</returns>
/// <exception cref="System.ArgumentNullException"></exception> /// <exception cref="System.ArgumentNullException"></exception>
/// <exception cref="System.ArgumentException">Invalid trigger type: + info.Type</exception> /// <exception cref="System.ArgumentException">Invalid trigger type: + info.Type</exception>
public static BaseTaskTrigger GetTrigger(TaskTriggerInfo info, IKernel kernel) public static BaseTaskTrigger GetTrigger(TaskTriggerInfo info)
{ {
if (info.Type.Equals(typeof(DailyTrigger).Name, StringComparison.OrdinalIgnoreCase)) if (info.Type.Equals(typeof(DailyTrigger).Name, StringComparison.OrdinalIgnoreCase))
{ {
@ -144,7 +143,7 @@ namespace MediaBrowser.Common.ScheduledTasks
if (info.Type.Equals(typeof(StartupTrigger).Name, StringComparison.OrdinalIgnoreCase)) if (info.Type.Equals(typeof(StartupTrigger).Name, StringComparison.OrdinalIgnoreCase))
{ {
return new StartupTrigger(kernel); return new StartupTrigger();
} }
throw new ArgumentException("Unrecognized trigger type: " + info.Type); throw new ArgumentException("Unrecognized trigger type: " + info.Type);

@ -1,6 +1,4 @@
using MediaBrowser.Common.Kernel; using System.Threading.Tasks;
using System;
using System.Threading.Tasks;
namespace MediaBrowser.Common.ScheduledTasks namespace MediaBrowser.Common.ScheduledTasks
{ {
@ -9,34 +7,18 @@ namespace MediaBrowser.Common.ScheduledTasks
/// </summary> /// </summary>
public class StartupTrigger : BaseTaskTrigger public class StartupTrigger : BaseTaskTrigger
{ {
/// <summary>
/// Gets the kernel.
/// </summary>
/// <value>The kernel.</value>
protected IKernel Kernel { get; private set; }
/// <summary>
/// Initializes a new instance of the <see cref="StartupTrigger" /> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
public StartupTrigger(IKernel kernel)
{
Kernel = kernel;
}
/// <summary> /// <summary>
/// Stars waiting for the trigger action /// Stars waiting for the trigger action
/// </summary> /// </summary>
protected internal override void Start() /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param>
{ protected internal async override void Start(bool isApplicationStartup)
Kernel.ReloadCompleted += Kernel_ReloadCompleted;
}
async void Kernel_ReloadCompleted(object sender, EventArgs e)
{ {
await Task.Delay(2000).ConfigureAwait(false); if (isApplicationStartup)
{
await Task.Delay(2000).ConfigureAwait(false);
OnTriggered(); OnTriggered();
}
} }
/// <summary> /// <summary>
@ -44,7 +26,6 @@ namespace MediaBrowser.Common.ScheduledTasks
/// </summary> /// </summary>
protected internal override void Stop() protected internal override void Stop()
{ {
Kernel.ReloadCompleted -= Kernel_ReloadCompleted;
} }
} }
} }

@ -18,7 +18,8 @@ namespace MediaBrowser.Common.ScheduledTasks
/// <summary> /// <summary>
/// Stars waiting for the trigger action /// Stars waiting for the trigger action
/// </summary> /// </summary>
protected internal override void Start() /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param>
protected internal override void Start(bool isApplicationStartup)
{ {
switch (SystemEvent) switch (SystemEvent)
{ {

@ -1,5 +1,4 @@
using MediaBrowser.Common.Kernel; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Tasks;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -10,8 +9,14 @@ namespace MediaBrowser.Common.ScheduledTasks
/// <summary> /// <summary>
/// Class TaskManager /// Class TaskManager
/// </summary> /// </summary>
public class TaskManager : BaseManager<IKernel> internal class TaskManager : ITaskManager
{ {
/// <summary>
/// Gets the list of Scheduled Tasks
/// </summary>
/// <value>The scheduled tasks.</value>
public IScheduledTask[] ScheduledTasks { get; private set; }
/// <summary> /// <summary>
/// The _task queue /// The _task queue
/// </summary> /// </summary>
@ -25,12 +30,17 @@ namespace MediaBrowser.Common.ScheduledTasks
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="TaskManager" /> class. /// Initializes a new instance of the <see cref="TaskManager" /> class.
/// </summary> /// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
public TaskManager(IKernel kernel, ILogger logger) public TaskManager(ILogger logger)
: base(kernel)
{ {
if (logger == null)
{
throw new ArgumentException("logger");
}
_logger = logger; _logger = logger;
ScheduledTasks = new IScheduledTask[] {};
} }
/// <summary> /// <summary>
@ -40,7 +50,7 @@ namespace MediaBrowser.Common.ScheduledTasks
public void CancelIfRunningAndQueue<T>() public void CancelIfRunningAndQueue<T>()
where T : IScheduledTask where T : IScheduledTask
{ {
Kernel.ScheduledTasks.OfType<T>().First().CancelIfRunning(); ScheduledTasks.OfType<T>().First().CancelIfRunning();
QueueScheduledTask<T>(); QueueScheduledTask<T>();
} }
@ -51,7 +61,7 @@ namespace MediaBrowser.Common.ScheduledTasks
public void QueueScheduledTask<T>() public void QueueScheduledTask<T>()
where T : IScheduledTask where T : IScheduledTask
{ {
var scheduledTask = Kernel.ScheduledTasks.OfType<T>().First(); var scheduledTask = ScheduledTasks.OfType<T>().First();
QueueScheduledTask(scheduledTask); QueueScheduledTask(scheduledTask);
} }
@ -64,7 +74,7 @@ namespace MediaBrowser.Common.ScheduledTasks
{ {
var type = task.GetType(); var type = task.GetType();
var scheduledTask = Kernel.ScheduledTasks.First(t => t.GetType() == type); var scheduledTask = ScheduledTasks.First(t => t.GetType() == type);
lock (_taskQueue) lock (_taskQueue)
{ {
@ -91,7 +101,7 @@ namespace MediaBrowser.Common.ScheduledTasks
/// Called when [task completed]. /// Called when [task completed].
/// </summary> /// </summary>
/// <param name="task">The task.</param> /// <param name="task">The task.</param>
internal void OnTaskCompleted(IScheduledTask task) public void OnTaskCompleted(IScheduledTask task)
{ {
// Execute queued tasks // Execute queued tasks
lock (_taskQueue) lock (_taskQueue)
@ -100,7 +110,7 @@ namespace MediaBrowser.Common.ScheduledTasks
foreach (var type in copy) foreach (var type in copy)
{ {
var scheduledTask = Kernel.ScheduledTasks.First(t => t.GetType() == type); var scheduledTask = ScheduledTasks.First(t => t.GetType() == type);
if (scheduledTask.State == TaskState.Idle) if (scheduledTask.State == TaskState.Idle)
{ {
@ -111,5 +121,39 @@ namespace MediaBrowser.Common.ScheduledTasks
} }
} }
} }
/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
/// <summary>
/// Releases unmanaged and - optionally - managed resources.
/// </summary>
/// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
protected virtual void Dispose(bool dispose)
{
foreach (var task in ScheduledTasks)
{
task.Dispose();
}
}
/// <summary>
/// Adds the tasks.
/// </summary>
/// <param name="tasks">The tasks.</param>
public void AddTasks(IEnumerable<IScheduledTask> tasks)
{
var myTasks = ScheduledTasks.ToList();
myTasks.AddRange(tasks);
ScheduledTasks = myTasks.ToArray();
}
} }
} }

@ -1,8 +1,7 @@
using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Kernel;
using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Logging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
@ -13,9 +12,19 @@ namespace MediaBrowser.Common.ScheduledTasks.Tasks
/// <summary> /// <summary>
/// Deletes old cache files /// Deletes old cache files
/// </summary> /// </summary>
[Export(typeof(IScheduledTask))]
public class DeleteCacheFileTask : BaseScheduledTask<IKernel> public class DeleteCacheFileTask : BaseScheduledTask<IKernel>
{ {
/// <summary>
/// Initializes a new instance of the <see cref="DeleteCacheFileTask" /> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="taskManager">The task manager.</param>
/// <param name="logger">The logger.</param>
public DeleteCacheFileTask(IKernel kernel, ITaskManager taskManager, ILogger logger)
: base(kernel, taskManager, logger)
{
}
/// <summary> /// <summary>
/// Creates the triggers that define when the task will run /// Creates the triggers that define when the task will run
/// </summary> /// </summary>

@ -1,8 +1,7 @@
using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Kernel;
using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Logging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
@ -13,9 +12,19 @@ namespace MediaBrowser.Common.ScheduledTasks.Tasks
/// <summary> /// <summary>
/// Deletes old log files /// Deletes old log files
/// </summary> /// </summary>
[Export(typeof(IScheduledTask))]
public class DeleteLogFileTask : BaseScheduledTask<IKernel> public class DeleteLogFileTask : BaseScheduledTask<IKernel>
{ {
/// <summary>
/// Initializes a new instance of the <see cref="DeleteLogFileTask" /> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="taskManager">The task manager.</param>
/// <param name="logger">The logger.</param>
public DeleteLogFileTask(IKernel kernel, ITaskManager taskManager, ILogger logger)
: base(kernel, taskManager, logger)
{
}
/// <summary> /// <summary>
/// Creates the triggers that define when the task will run /// Creates the triggers that define when the task will run
/// </summary> /// </summary>

@ -1,8 +1,7 @@
using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Kernel;
using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Logging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -11,9 +10,19 @@ namespace MediaBrowser.Common.ScheduledTasks.Tasks
/// <summary> /// <summary>
/// Class ReloadLoggerFileTask /// Class ReloadLoggerFileTask
/// </summary> /// </summary>
[Export(typeof(IScheduledTask))]
public class ReloadLoggerFileTask : BaseScheduledTask<IKernel> public class ReloadLoggerFileTask : BaseScheduledTask<IKernel>
{ {
/// <summary>
/// Initializes a new instance of the <see cref="ReloadLoggerFileTask" /> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="taskManager">The task manager.</param>
/// <param name="logger">The logger.</param>
public ReloadLoggerFileTask(IKernel kernel, ITaskManager taskManager, ILogger logger)
: base(kernel, taskManager, logger)
{
}
/// <summary> /// <summary>
/// Gets the default triggers. /// Gets the default triggers.
/// </summary> /// </summary>

@ -1,7 +1,7 @@
using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Kernel;
using MediaBrowser.Model.Logging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -10,7 +10,6 @@ namespace MediaBrowser.Common.ScheduledTasks.Tasks
/// <summary> /// <summary>
/// Plugin Update Task /// Plugin Update Task
/// </summary> /// </summary>
[Export(typeof(IScheduledTask))]
public class SystemUpdateTask : BaseScheduledTask<IKernel> public class SystemUpdateTask : BaseScheduledTask<IKernel>
{ {
/// <summary> /// <summary>
@ -22,8 +21,11 @@ namespace MediaBrowser.Common.ScheduledTasks.Tasks
/// Initializes a new instance of the <see cref="SystemUpdateTask" /> class. /// Initializes a new instance of the <see cref="SystemUpdateTask" /> class.
/// </summary> /// </summary>
/// <param name="appHost">The app host.</param> /// <param name="appHost">The app host.</param>
[ImportingConstructor] /// <param name="taskManager">The task manager.</param>
public SystemUpdateTask([Import("appHost")] IApplicationHost appHost) /// <param name="kernel">The kernel.</param>
/// <param name="logger">The logger.</param>
public SystemUpdateTask(IApplicationHost appHost, ITaskManager taskManager, IKernel kernel, ILogger logger)
: base(kernel, taskManager, logger)
{ {
_appHost = appHost; _appHost = appHost;
} }

@ -29,7 +29,8 @@ namespace MediaBrowser.Common.ScheduledTasks
/// <summary> /// <summary>
/// Stars waiting for the trigger action /// Stars waiting for the trigger action
/// </summary> /// </summary>
protected internal override void Start() /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param>
protected internal override void Start(bool isApplicationStartup)
{ {
DisposeTimer(); DisposeTimer();

@ -1,6 +1,7 @@
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.Win32; using MediaBrowser.Common.Win32;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;

@ -2,6 +2,7 @@
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.Win32; using MediaBrowser.Common.Win32;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.Localization;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;

@ -1,6 +1,7 @@
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.Serialization; using MediaBrowser.Common.Serialization;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Tasks;
using System; using System;

@ -1,4 +1,5 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.ScheduledTasks; using MediaBrowser.Controller.ScheduledTasks;
@ -66,16 +67,27 @@ namespace MediaBrowser.Controller.IO
/// <value>The logger.</value> /// <value>The logger.</value>
private ILogger Logger { get; set; } private ILogger Logger { get; set; }
/// <summary>
/// Gets or sets the task manager.
/// </summary>
/// <value>The task manager.</value>
private ITaskManager TaskManager { get; set; }
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="DirectoryWatchers" /> class. /// Initializes a new instance of the <see cref="DirectoryWatchers" /> class.
/// </summary> /// </summary>
public DirectoryWatchers(ILogger logger) public DirectoryWatchers(ILogger logger, ITaskManager taskManager)
{ {
if (logger == null) if (logger == null)
{ {
throw new ArgumentNullException("logger"); throw new ArgumentNullException("logger");
} }
if (taskManager == null)
{
throw new ArgumentNullException("taskManager");
}
TaskManager = taskManager;
Logger = logger; Logger = logger;
} }
@ -421,7 +433,7 @@ namespace MediaBrowser.Controller.IO
// If the root folder changed, run the library task so the user can see it // If the root folder changed, run the library task so the user can see it
if (itemsToRefresh.Any(i => i is AggregateFolder)) if (itemsToRefresh.Any(i => i is AggregateFolder))
{ {
Kernel.Instance.TaskManager.CancelIfRunningAndQueue<RefreshMediaLibraryTask>(); TaskManager.CancelIfRunningAndQueue<RefreshMediaLibraryTask>();
return; return;
} }

@ -6,7 +6,7 @@ using System.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text; using System.Text;
namespace MediaBrowser.Common.IO namespace MediaBrowser.Controller.IO
{ {
/// <summary> /// <summary>
/// Class FileSystem /// Class FileSystem

@ -1,5 +1,6 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using System; using System;
@ -26,17 +27,18 @@ namespace MediaBrowser.Controller.IO
/// The _logger /// The _logger
/// </summary> /// </summary>
private readonly ILogger _logger; private readonly ILogger _logger;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="FileSystemManager" /> class. /// Initializes a new instance of the <see cref="FileSystemManager" /> class.
/// </summary> /// </summary>
/// <param name="kernel">The kernel.</param> /// <param name="kernel">The kernel.</param>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
public FileSystemManager(Kernel kernel, ILogger logger) /// <param name="taskManager">The task manager.</param>
public FileSystemManager(Kernel kernel, ILogger logger, ITaskManager taskManager)
: base(kernel) : base(kernel)
{ {
_logger = logger; _logger = logger;
DirectoryWatchers = new DirectoryWatchers(logger); DirectoryWatchers = new DirectoryWatchers(logger, taskManager);
} }
/// <summary> /// <summary>

@ -1,6 +1,4 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.Localization;
using MediaBrowser.Common.Plugins; using MediaBrowser.Common.Plugins;
using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
@ -17,14 +15,10 @@ using MediaBrowser.Controller.ScheduledTasks;
using MediaBrowser.Controller.Updates; using MediaBrowser.Controller.Updates;
using MediaBrowser.Controller.Weather; using MediaBrowser.Controller.Weather;
using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.MediaInfo;
using MediaBrowser.Model.System; using MediaBrowser.Model.System;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -183,7 +177,6 @@ namespace MediaBrowser.Controller
/// Gets the list of Localized string files /// Gets the list of Localized string files
/// </summary> /// </summary>
/// <value>The string files.</value> /// <value>The string files.</value>
[ImportMany(typeof(LocalizedStringData))]
public IEnumerable<LocalizedStringData> StringFiles { get; private set; } public IEnumerable<LocalizedStringData> StringFiles { get; private set; }
/// <summary> /// <summary>
@ -208,7 +201,6 @@ namespace MediaBrowser.Controller
/// Gets the list of currently registered metadata prvoiders /// Gets the list of currently registered metadata prvoiders
/// </summary> /// </summary>
/// <value>The metadata providers enumerable.</value> /// <value>The metadata providers enumerable.</value>
[ImportMany(typeof(BaseMetadataProvider))]
public BaseMetadataProvider[] MetadataProviders { get; private set; } public BaseMetadataProvider[] MetadataProviders { get; private set; }
/// <summary> /// <summary>
@ -222,8 +214,7 @@ namespace MediaBrowser.Controller
/// Gets the list of currently registered entity resolvers /// Gets the list of currently registered entity resolvers
/// </summary> /// </summary>
/// <value>The entity resolvers enumerable.</value> /// <value>The entity resolvers enumerable.</value>
[ImportMany(typeof(IBaseItemResolver))] internal IEnumerable<IBaseItemResolver> EntityResolvers { get; private set; }
internal IBaseItemResolver[] EntityResolvers { get; private set; }
/// <summary> /// <summary>
/// Gets the list of BasePluginFolders added by plugins /// Gets the list of BasePluginFolders added by plugins
@ -322,14 +313,11 @@ namespace MediaBrowser.Controller
/// <summary> /// <summary>
/// Composes the exported values. /// Composes the exported values.
/// </summary> /// </summary>
/// <param name="container">The container.</param> protected override void RegisterExportedValues()
protected override void RegisterExportedValues(CompositionContainer container)
{ {
container.ComposeExportedValue("kernel", this);
ApplicationHost.Register(this); ApplicationHost.Register(this);
base.RegisterExportedValues(container); base.RegisterExportedValues();
} }
/// <summary> /// <summary>
@ -338,6 +326,15 @@ namespace MediaBrowser.Controller
/// <param name="allTypes">All types.</param> /// <param name="allTypes">All types.</param>
protected override void FindParts(Type[] allTypes) protected override void FindParts(Type[] allTypes)
{ {
InstallationManager = (InstallationManager)ApplicationHost.CreateInstance(typeof(InstallationManager));
FFMpegManager = (FFMpegManager)ApplicationHost.CreateInstance(typeof(FFMpegManager));
LibraryManager = (LibraryManager)ApplicationHost.CreateInstance(typeof(LibraryManager));
UserManager = (UserManager)ApplicationHost.CreateInstance(typeof(UserManager));
ImageManager = (ImageManager)ApplicationHost.CreateInstance(typeof(ImageManager));
ProviderManager = (ProviderManager)ApplicationHost.CreateInstance(typeof(ProviderManager));
UserDataManager = (UserDataManager)ApplicationHost.CreateInstance(typeof(UserDataManager));
PluginSecurityManager = (PluginSecurityManager)ApplicationHost.CreateInstance(typeof(PluginSecurityManager));
base.FindParts(allTypes); base.FindParts(allTypes);
EntityResolutionIgnoreRules = GetExports<IResolutionIgnoreRule>(allTypes); EntityResolutionIgnoreRules = GetExports<IResolutionIgnoreRule>(allTypes);
@ -348,8 +345,11 @@ namespace MediaBrowser.Controller
WeatherProviders = GetExports<IWeatherProvider>(allTypes); WeatherProviders = GetExports<IWeatherProvider>(allTypes);
IntroProviders = GetExports<IIntroProvider>(allTypes); IntroProviders = GetExports<IIntroProvider>(allTypes);
PluginConfigurationPages = GetExports<IPluginConfigurationPage>(allTypes); PluginConfigurationPages = GetExports<IPluginConfigurationPage>(allTypes);
ImageEnhancers = GetExports<IImageEnhancer>(allTypes); ImageEnhancers = GetExports<IImageEnhancer>(allTypes).OrderBy(e => e.Priority).ToArray();
PluginFolderCreators = GetExports<IVirtualFolderCreator>(allTypes); PluginFolderCreators = GetExports<IVirtualFolderCreator>(allTypes);
StringFiles = GetExports<LocalizedStringData>(allTypes);
EntityResolvers = GetExports<IBaseItemResolver>(allTypes).OrderBy(e => e.Priority).ToArray();
MetadataProviders = GetExports<BaseMetadataProvider>(allTypes).OrderBy(e => e.Priority).ToArray();
} }
/// <summary> /// <summary>
@ -365,14 +365,6 @@ namespace MediaBrowser.Controller
await base.ReloadInternal().ConfigureAwait(false); await base.ReloadInternal().ConfigureAwait(false);
ReloadResourcePools(); ReloadResourcePools();
InstallationManager = (InstallationManager)ApplicationHost.CreateInstance(typeof(InstallationManager));
FFMpegManager = (FFMpegManager)ApplicationHost.CreateInstance(typeof(FFMpegManager));
LibraryManager = (LibraryManager)ApplicationHost.CreateInstance(typeof(LibraryManager));
UserManager = (UserManager)ApplicationHost.CreateInstance(typeof(UserManager));
ImageManager = (ImageManager)ApplicationHost.CreateInstance(typeof(ImageManager));
ProviderManager = (ProviderManager)ApplicationHost.CreateInstance(typeof(ProviderManager));
UserDataManager = (UserDataManager)ApplicationHost.CreateInstance(typeof(UserDataManager));
PluginSecurityManager = (PluginSecurityManager)ApplicationHost.CreateInstance(typeof(PluginSecurityManager));
ReloadFileSystemManager(); ReloadFileSystemManager();
@ -441,15 +433,6 @@ namespace MediaBrowser.Controller
DisplayPreferencesRepository = GetRepository(DisplayPreferencesRepositories, Configuration.DisplayPreferencesRepository); DisplayPreferencesRepository = GetRepository(DisplayPreferencesRepositories, Configuration.DisplayPreferencesRepository);
var displayPreferencesRepoTask = DisplayPreferencesRepository.Initialize(); var displayPreferencesRepoTask = DisplayPreferencesRepository.Initialize();
// Sort the resolvers by priority
EntityResolvers = EntityResolvers.OrderBy(e => e.Priority).ToArray();
// Sort the providers by priority
MetadataProviders = MetadataProviders.OrderBy(e => e.Priority).ToArray();
// Sort the image processors by priority
ImageEnhancers = ImageEnhancers.OrderBy(e => e.Priority).ToArray();
await Task.WhenAll(itemRepoTask, userRepoTask, userDataRepoTask, displayPreferencesRepoTask).ConfigureAwait(false); await Task.WhenAll(itemRepoTask, userRepoTask, userDataRepoTask, displayPreferencesRepoTask).ConfigureAwait(false);
} }
@ -488,7 +471,7 @@ namespace MediaBrowser.Controller
{ {
DisposeFileSystemManager(); DisposeFileSystemManager();
FileSystemManager = new FileSystemManager(this, Logger); FileSystemManager = new FileSystemManager(this, Logger, TaskManager);
FileSystemManager.StartWatchers(); FileSystemManager.StartWatchers();
} }

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using MediaBrowser.Controller.IO;
namespace MediaBrowser.Controller.Library namespace MediaBrowser.Controller.Library
{ {

@ -1,9 +1,6 @@
using MediaBrowser.Common.Localization; 
using System.ComponentModel.Composition;
namespace MediaBrowser.Controller.Localization namespace MediaBrowser.Controller.Localization
{ {
[Export(typeof(LocalizedStringData))]
public class BaseStrings : LocalizedStringData public class BaseStrings : LocalizedStringData
{ {
public BaseStrings() public BaseStrings()

@ -1,7 +1,7 @@
using System.IO; using System.IO;
using System.Xml.Serialization; using System.Xml.Serialization;
namespace MediaBrowser.Common.Localization namespace MediaBrowser.Controller.Localization
{ {
/// <summary> /// <summary>
/// Class LocalizedStringData /// Class LocalizedStringData

@ -1,5 +1,4 @@
using MediaBrowser.Common.Localization; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Logging;
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Globalization; using System.Globalization;

@ -64,7 +64,6 @@
<HintPath>..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll</HintPath> <HintPath>..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
@ -108,6 +107,7 @@
<Compile Include="Entities\CollectionFolder.cs" /> <Compile Include="Entities\CollectionFolder.cs" />
<Compile Include="Entities\Year.cs" /> <Compile Include="Entities\Year.cs" />
<Compile Include="Extensions\XmlExtensions.cs" /> <Compile Include="Extensions\XmlExtensions.cs" />
<Compile Include="IO\FileSystem.cs" />
<Compile Include="IO\FileSystemManager.cs" /> <Compile Include="IO\FileSystemManager.cs" />
<Compile Include="IO\NetworkShares.cs" /> <Compile Include="IO\NetworkShares.cs" />
<Compile Include="Library\ChildrenChangedEventArgs.cs" /> <Compile Include="Library\ChildrenChangedEventArgs.cs" />
@ -118,6 +118,7 @@
<Compile Include="Localization\AURatingsDictionary.cs" /> <Compile Include="Localization\AURatingsDictionary.cs" />
<Compile Include="Localization\BaseStrings.cs" /> <Compile Include="Localization\BaseStrings.cs" />
<Compile Include="Localization\GBRatingsDictionary.cs" /> <Compile Include="Localization\GBRatingsDictionary.cs" />
<Compile Include="Localization\LocalizedStringData.cs" />
<Compile Include="Localization\LocalizedStrings.cs" /> <Compile Include="Localization\LocalizedStrings.cs" />
<Compile Include="Localization\NLRatingsDictionary.cs" /> <Compile Include="Localization\NLRatingsDictionary.cs" />
<Compile Include="Localization\Ratings.cs" /> <Compile Include="Localization\Ratings.cs" />

@ -1,7 +1,6 @@
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers
/// <summary> /// <summary>
/// Provides metadata for Folders and all subclasses by parsing folder.xml /// Provides metadata for Folders and all subclasses by parsing folder.xml
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
public class FolderProviderFromXml : BaseMetadataProvider public class FolderProviderFromXml : BaseMetadataProvider
{ {
/// <summary> /// <summary>

@ -3,7 +3,6 @@ using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
@ -14,7 +13,6 @@ namespace MediaBrowser.Controller.Providers
/// <summary> /// <summary>
/// Provides images for all types by looking for standard images - folder, backdrop, logo, etc. /// Provides images for all types by looking for standard images - folder, backdrop, logo, etc.
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
public class ImageFromMediaLocationProvider : BaseMetadataProvider public class ImageFromMediaLocationProvider : BaseMetadataProvider
{ {
/// <summary> /// <summary>

@ -1,9 +1,8 @@
using System.Globalization; using MediaBrowser.Common.Win32;
using MediaBrowser.Common.IO;
using MediaBrowser.Common.Win32;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.IO;
using System; using System;
using System.ComponentModel.Composition; using System.Globalization;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers
/// <summary> /// <summary>
/// Provides images for generic types by looking for standard images in the IBN /// Provides images for generic types by looking for standard images in the IBN
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
public class ImagesByNameProvider : ImageFromMediaLocationProvider public class ImagesByNameProvider : ImageFromMediaLocationProvider
{ {
/// <summary> /// <summary>

@ -2,7 +2,6 @@
using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System; using System;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
/// <summary> /// <summary>
/// Uses ffmpeg to create video images /// Uses ffmpeg to create video images
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
public class FFMpegAudioImageProvider : BaseFFMpegImageProvider<Audio> public class FFMpegAudioImageProvider : BaseFFMpegImageProvider<Audio>
{ {

@ -2,7 +2,6 @@
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System; using System;
using System.ComponentModel.Composition;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
/// <summary> /// <summary>
/// Uses ffmpeg to create video images /// Uses ffmpeg to create video images
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
public class FFMpegVideoImageProvider : BaseFFMpegImageProvider<Video> public class FFMpegVideoImageProvider : BaseFFMpegImageProvider<Video>
{ {
/// <summary> /// <summary>
@ -23,8 +21,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
/// Initializes a new instance of the <see cref="FFMpegVideoImageProvider" /> class. /// Initializes a new instance of the <see cref="FFMpegVideoImageProvider" /> class.
/// </summary> /// </summary>
/// <param name="isoManager">The iso manager.</param> /// <param name="isoManager">The iso manager.</param>
[ImportingConstructor] public FFMpegVideoImageProvider(IIsoManager isoManager)
public FFMpegVideoImageProvider([Import("isoManager")] IIsoManager isoManager)
{ {
_isoManager = isoManager; _isoManager = isoManager;
} }

@ -5,7 +5,6 @@ using MediaBrowser.Controller.MediaInfo;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -15,7 +14,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
/// <summary> /// <summary>
/// Extracts audio information using ffprobe /// Extracts audio information using ffprobe
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
public class FFProbeAudioInfoProvider : BaseFFProbeProvider<Audio> public class FFProbeAudioInfoProvider : BaseFFProbeProvider<Audio>
{ {
/// <summary> /// <summary>

@ -6,7 +6,6 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.MediaInfo;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
@ -17,7 +16,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
/// <summary> /// <summary>
/// Extracts video information using ffprobe /// Extracts video information using ffprobe
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
public class FFProbeVideoInfoProvider : BaseFFProbeProvider<Video> public class FFProbeVideoInfoProvider : BaseFFProbeProvider<Video>
{ {
/// <summary> /// <summary>
@ -43,8 +41,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
/// <param name="isoManager">The iso manager.</param> /// <param name="isoManager">The iso manager.</param>
/// <param name="blurayExaminer">The bluray examiner.</param> /// <param name="blurayExaminer">The bluray examiner.</param>
/// <exception cref="System.ArgumentNullException">blurayExaminer</exception> /// <exception cref="System.ArgumentNullException">blurayExaminer</exception>
[ImportingConstructor] public FFProbeVideoInfoProvider(IIsoManager isoManager, IBlurayExaminer blurayExaminer)
public FFProbeVideoInfoProvider([Import("isoManager")] IIsoManager isoManager, [Import("blurayExaminer")] IBlurayExaminer blurayExaminer)
: base() : base()
{ {
if (blurayExaminer == null) if (blurayExaminer == null)

@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Net; using MediaBrowser.Model.Net;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -15,7 +14,6 @@ namespace MediaBrowser.Controller.Providers.Movies
/// <summary> /// <summary>
/// Class FanArtMovieProvider /// Class FanArtMovieProvider
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
class FanArtMovieProvider : FanartBaseProvider class FanArtMovieProvider : FanartBaseProvider
{ {
/// <summary> /// <summary>

@ -7,7 +7,6 @@ using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Net; using MediaBrowser.Model.Net;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@ -29,7 +28,6 @@ namespace MediaBrowser.Controller.Providers.Movies
/// <summary> /// <summary>
/// Class MovieDbProvider /// Class MovieDbProvider
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
public class MovieDbProvider : BaseMetadataProvider public class MovieDbProvider : BaseMetadataProvider
{ {
/// <summary> /// <summary>

@ -1,7 +1,6 @@
using MediaBrowser.Common.Serialization; using MediaBrowser.Common.Serialization;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.Movies
/// <summary> /// <summary>
/// Class MovieProviderFromJson /// Class MovieProviderFromJson
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
public class MovieProviderFromJson : MovieDbProvider public class MovieProviderFromJson : MovieDbProvider
{ {
/// <summary> /// <summary>

@ -1,7 +1,6 @@
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.Movies;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.Movies
/// <summary> /// <summary>
/// Class MovieProviderFromXml /// Class MovieProviderFromXml
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
public class MovieProviderFromXml : BaseMetadataProvider public class MovieProviderFromXml : BaseMetadataProvider
{ {
/// <summary> /// <summary>

@ -1,7 +1,6 @@
using MediaBrowser.Common.Serialization; using MediaBrowser.Common.Serialization;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.Movies
/// <summary> /// <summary>
/// Class PersonProviderFromJson /// Class PersonProviderFromJson
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
class PersonProviderFromJson : TmdbPersonProvider class PersonProviderFromJson : TmdbPersonProvider
{ {
/// <summary> /// <summary>

@ -4,7 +4,6 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Net; using MediaBrowser.Model.Net;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@ -17,7 +16,6 @@ namespace MediaBrowser.Controller.Providers.Movies
/// <summary> /// <summary>
/// Class TmdbPersonProvider /// Class TmdbPersonProvider
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
public class TmdbPersonProvider : BaseMetadataProvider public class TmdbPersonProvider : BaseMetadataProvider
{ {
/// <summary> /// <summary>

@ -1,7 +1,6 @@
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers
/// <summary> /// <summary>
/// Class SortNameProvider /// Class SortNameProvider
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
public class SortNameProvider : BaseMetadataProvider public class SortNameProvider : BaseMetadataProvider
{ {
/// <summary> /// <summary>

@ -2,7 +2,6 @@
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.TV
/// <summary> /// <summary>
/// Class EpisodeImageFromMediaLocationProvider /// Class EpisodeImageFromMediaLocationProvider
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
public class EpisodeImageFromMediaLocationProvider : BaseMetadataProvider public class EpisodeImageFromMediaLocationProvider : BaseMetadataProvider
{ {
/// <summary> /// <summary>

@ -2,7 +2,6 @@
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.TV
/// <summary> /// <summary>
/// Class EpisodeProviderFromXml /// Class EpisodeProviderFromXml
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
public class EpisodeProviderFromXml : BaseMetadataProvider public class EpisodeProviderFromXml : BaseMetadataProvider
{ {
/// <summary> /// <summary>

@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Net; using MediaBrowser.Model.Net;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -12,7 +11,6 @@ using System.Xml;
namespace MediaBrowser.Controller.Providers.TV namespace MediaBrowser.Controller.Providers.TV
{ {
[Export(typeof(BaseMetadataProvider))]
class FanArtTVProvider : FanartBaseProvider class FanArtTVProvider : FanartBaseProvider
{ {
protected string FanArtBaseUrl = "http://api.fanart.tv/webservice/series/{0}/{1}/xml/all/1/1"; protected string FanArtBaseUrl = "http://api.fanart.tv/webservice/series/{0}/{1}/xml/all/1/1";

@ -5,7 +5,6 @@ using MediaBrowser.Controller.Resolvers.TV;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Net; using MediaBrowser.Model.Net;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
@ -18,7 +17,6 @@ namespace MediaBrowser.Controller.Providers.TV
/// <summary> /// <summary>
/// Class RemoteEpisodeProvider /// Class RemoteEpisodeProvider
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
class RemoteEpisodeProvider : BaseMetadataProvider class RemoteEpisodeProvider : BaseMetadataProvider
{ {

@ -5,7 +5,6 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Net; using MediaBrowser.Model.Net;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -16,7 +15,6 @@ namespace MediaBrowser.Controller.Providers.TV
/// <summary> /// <summary>
/// Class RemoteSeasonProvider /// Class RemoteSeasonProvider
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
class RemoteSeasonProvider : BaseMetadataProvider class RemoteSeasonProvider : BaseMetadataProvider
{ {

@ -7,7 +7,6 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Net; using MediaBrowser.Model.Net;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Net; using System.Net;
using System.Text; using System.Text;
@ -20,7 +19,6 @@ namespace MediaBrowser.Controller.Providers.TV
/// <summary> /// <summary>
/// Class RemoteSeriesProvider /// Class RemoteSeriesProvider
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
class RemoteSeriesProvider : BaseMetadataProvider class RemoteSeriesProvider : BaseMetadataProvider
{ {

@ -2,7 +2,6 @@
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.TV
/// <summary> /// <summary>
/// Class SeriesProviderFromXml /// Class SeriesProviderFromXml
/// </summary> /// </summary>
[Export(typeof(BaseMetadataProvider))]
public class SeriesProviderFromXml : BaseMetadataProvider public class SeriesProviderFromXml : BaseMetadataProvider
{ {
/// <summary> /// <summary>

@ -1,16 +1,26 @@
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using System.ComponentModel.Composition;
namespace MediaBrowser.Controller.Resolvers.Audio namespace MediaBrowser.Controller.Resolvers.Audio
{ {
[Export(typeof(IBaseItemResolver))] /// <summary>
/// Class AudioResolver
/// </summary>
public class AudioResolver : BaseItemResolver<Entities.Audio.Audio> public class AudioResolver : BaseItemResolver<Entities.Audio.Audio>
{ {
/// <summary>
/// Gets the priority.
/// </summary>
/// <value>The priority.</value>
public override ResolverPriority Priority public override ResolverPriority Priority
{ {
get { return ResolverPriority.Last; } get { return ResolverPriority.Last; }
} }
/// <summary>
/// Resolves the specified args.
/// </summary>
/// <param name="args">The args.</param>
/// <returns>Entities.Audio.Audio.</returns>
protected override Entities.Audio.Audio Resolve(ItemResolveArgs args) protected override Entities.Audio.Audio Resolve(ItemResolveArgs args)
{ {
// Return audio if the path is a file and has a matching extension // Return audio if the path is a file and has a matching extension

@ -1,17 +1,27 @@
using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using System.ComponentModel.Composition;
namespace MediaBrowser.Controller.Resolvers.Audio namespace MediaBrowser.Controller.Resolvers.Audio
{ {
[Export(typeof(IBaseItemResolver))] /// <summary>
/// Class MusicAlbumResolver
/// </summary>
public class MusicAlbumResolver : BaseItemResolver<MusicAlbum> public class MusicAlbumResolver : BaseItemResolver<MusicAlbum>
{ {
/// <summary>
/// Gets the priority.
/// </summary>
/// <value>The priority.</value>
public override ResolverPriority Priority public override ResolverPriority Priority
{ {
get { return ResolverPriority.Third; } // we need to be ahead of the generic folder resolver but behind the movie one get { return ResolverPriority.Third; } // we need to be ahead of the generic folder resolver but behind the movie one
} }
/// <summary>
/// Resolves the specified args.
/// </summary>
/// <param name="args">The args.</param>
/// <returns>MusicAlbum.</returns>
protected override MusicAlbum Resolve(ItemResolveArgs args) protected override MusicAlbum Resolve(ItemResolveArgs args)
{ {
if (!args.IsDirectory) return null; if (!args.IsDirectory) return null;

@ -1,18 +1,28 @@
using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
namespace MediaBrowser.Controller.Resolvers.Audio namespace MediaBrowser.Controller.Resolvers.Audio
{ {
[Export(typeof(IBaseItemResolver))] /// <summary>
/// Class MusicArtistResolver
/// </summary>
public class MusicArtistResolver : BaseItemResolver<MusicArtist> public class MusicArtistResolver : BaseItemResolver<MusicArtist>
{ {
/// <summary>
/// Gets the priority.
/// </summary>
/// <value>The priority.</value>
public override ResolverPriority Priority public override ResolverPriority Priority
{ {
get { return ResolverPriority.Third; } // we need to be ahead of the generic folder resolver but behind the movie one get { return ResolverPriority.Third; } // we need to be ahead of the generic folder resolver but behind the movie one
} }
/// <summary>
/// Resolves the specified args.
/// </summary>
/// <param name="args">The args.</param>
/// <returns>MusicArtist.</returns>
protected override MusicArtist Resolve(ItemResolveArgs args) protected override MusicArtist Resolve(ItemResolveArgs args)
{ {
if (!args.IsDirectory) return null; if (!args.IsDirectory) return null;

@ -1,7 +1,6 @@
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
namespace MediaBrowser.Controller.Resolvers namespace MediaBrowser.Controller.Resolvers
@ -9,7 +8,6 @@ namespace MediaBrowser.Controller.Resolvers
/// <summary> /// <summary>
/// Provides the core resolver ignore rules /// Provides the core resolver ignore rules
/// </summary> /// </summary>
[Export(typeof(IResolutionIgnoreRule))]
public class CoreResolutionIgnoreRule : IResolutionIgnoreRule public class CoreResolutionIgnoreRule : IResolutionIgnoreRule
{ {
/// <summary> /// <summary>
@ -27,6 +25,11 @@ namespace MediaBrowser.Controller.Resolvers
"extrafanart" "extrafanart"
}; };
/// <summary>
/// Shoulds the ignore.
/// </summary>
/// <param name="args">The args.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
public bool ShouldIgnore(ItemResolveArgs args) public bool ShouldIgnore(ItemResolveArgs args)
{ {
// Ignore hidden files and folders // Ignore hidden files and folders

@ -1,6 +1,7 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.Win32; using MediaBrowser.Common.Win32;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;

@ -1,13 +1,11 @@
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using System.ComponentModel.Composition;
namespace MediaBrowser.Controller.Resolvers namespace MediaBrowser.Controller.Resolvers
{ {
/// <summary> /// <summary>
/// Class FolderResolver /// Class FolderResolver
/// </summary> /// </summary>
[Export(typeof(IBaseItemResolver))]
public class FolderResolver : BaseFolderResolver<Folder> public class FolderResolver : BaseFolderResolver<Folder>
{ {
/// <summary> /// <summary>

@ -1,7 +1,6 @@
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
namespace MediaBrowser.Controller.Resolvers namespace MediaBrowser.Controller.Resolvers
@ -9,7 +8,6 @@ namespace MediaBrowser.Controller.Resolvers
/// <summary> /// <summary>
/// Class LocalTrailerResolver /// Class LocalTrailerResolver
/// </summary> /// </summary>
[Export(typeof(IBaseItemResolver))]
public class LocalTrailerResolver : BaseVideoResolver<Trailer> public class LocalTrailerResolver : BaseVideoResolver<Trailer>
{ {
/// <summary> /// <summary>

@ -1,7 +1,6 @@
using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
namespace MediaBrowser.Controller.Resolvers.Movies namespace MediaBrowser.Controller.Resolvers.Movies
@ -9,7 +8,6 @@ namespace MediaBrowser.Controller.Resolvers.Movies
/// <summary> /// <summary>
/// Class BoxSetResolver /// Class BoxSetResolver
/// </summary> /// </summary>
[Export(typeof(IBaseItemResolver))]
public class BoxSetResolver : BaseFolderResolver<BoxSet> public class BoxSetResolver : BaseFolderResolver<BoxSet>
{ {
/// <summary> /// <summary>

@ -6,7 +6,6 @@ using MediaBrowser.Controller.Providers.Movies;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
namespace MediaBrowser.Controller.Resolvers.Movies namespace MediaBrowser.Controller.Resolvers.Movies
@ -14,7 +13,6 @@ namespace MediaBrowser.Controller.Resolvers.Movies
/// <summary> /// <summary>
/// Class MovieResolver /// Class MovieResolver
/// </summary> /// </summary>
[Export(typeof(IBaseItemResolver))]
public class MovieResolver : BaseVideoResolver<Movie> public class MovieResolver : BaseVideoResolver<Movie>
{ {
/// <summary> /// <summary>

@ -1,14 +1,20 @@
using System; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using System.ComponentModel.Composition;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System;
namespace MediaBrowser.Controller.Resolvers.TV namespace MediaBrowser.Controller.Resolvers.TV
{ {
[Export(typeof(IBaseItemResolver))] /// <summary>
/// Class EpisodeResolver
/// </summary>
public class EpisodeResolver : BaseVideoResolver<Episode> public class EpisodeResolver : BaseVideoResolver<Episode>
{ {
/// <summary>
/// Resolves the specified args.
/// </summary>
/// <param name="args">The args.</param>
/// <returns>Episode.</returns>
protected override Episode Resolve(ItemResolveArgs args) protected override Episode Resolve(ItemResolveArgs args)
{ {
// If the parent is a Season or Series, then this is an Episode if the VideoResolver returns something // If the parent is a Season or Series, then this is an Episode if the VideoResolver returns something
@ -40,6 +46,11 @@ namespace MediaBrowser.Controller.Resolvers.TV
return null; return null;
} }
/// <summary>
/// Sets the initial item values.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="args">The args.</param>
protected override void SetInitialItemValues(Episode item, ItemResolveArgs args) protected override void SetInitialItemValues(Episode item, ItemResolveArgs args)
{ {
base.SetInitialItemValues(item, args); base.SetInitialItemValues(item, args);

@ -1,13 +1,19 @@
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using System; using System;
using System.ComponentModel.Composition;
namespace MediaBrowser.Controller.Resolvers.TV namespace MediaBrowser.Controller.Resolvers.TV
{ {
[Export(typeof(IBaseItemResolver))] /// <summary>
/// Class SeasonResolver
/// </summary>
public class SeasonResolver : BaseFolderResolver<Season> public class SeasonResolver : BaseFolderResolver<Season>
{ {
/// <summary>
/// Resolves the specified args.
/// </summary>
/// <param name="args">The args.</param>
/// <returns>Season.</returns>
protected override Season Resolve(ItemResolveArgs args) protected override Season Resolve(ItemResolveArgs args)
{ {
if (args.Parent is Series && args.IsDirectory) if (args.Parent is Series && args.IsDirectory)
@ -21,6 +27,11 @@ namespace MediaBrowser.Controller.Resolvers.TV
return null; return null;
} }
/// <summary>
/// Sets the initial item values.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="args">The args.</param>
protected override void SetInitialItemValues(Season item, ItemResolveArgs args) protected override void SetInitialItemValues(Season item, ItemResolveArgs args)
{ {
base.SetInitialItemValues(item, args); base.SetInitialItemValues(item, args);

@ -3,7 +3,6 @@ using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
namespace MediaBrowser.Controller.Resolvers.TV namespace MediaBrowser.Controller.Resolvers.TV
@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Resolvers.TV
/// <summary> /// <summary>
/// Class SeriesResolver /// Class SeriesResolver
/// </summary> /// </summary>
[Export(typeof(IBaseItemResolver))]
public class SeriesResolver : BaseFolderResolver<Series> public class SeriesResolver : BaseFolderResolver<Series>
{ {
/// <summary> /// <summary>

@ -2,7 +2,6 @@
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System; using System;
using System.ComponentModel.Composition;
using System.IO; using System.IO;
namespace MediaBrowser.Controller.Resolvers namespace MediaBrowser.Controller.Resolvers
@ -10,7 +9,6 @@ namespace MediaBrowser.Controller.Resolvers
/// <summary> /// <summary>
/// Resolves a Path into a Video /// Resolves a Path into a Video
/// </summary> /// </summary>
[Export(typeof(IBaseItemResolver))]
public class VideoResolver : BaseVideoResolver<Video> public class VideoResolver : BaseVideoResolver<Video>
{ {
/// <summary> /// <summary>

@ -1,18 +1,29 @@
using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Logging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace MediaBrowser.Controller.ScheduledTasks namespace MediaBrowser.Controller.ScheduledTasks
{ {
[Export(typeof(IScheduledTask))] /// <summary>
/// Class ChapterImagesTask
/// </summary>
class ChapterImagesTask : BaseScheduledTask<Kernel> class ChapterImagesTask : BaseScheduledTask<Kernel>
{ {
/// <summary>
/// Initializes a new instance of the <see cref="ChapterImagesTask" /> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="logger"></param>
public ChapterImagesTask(Kernel kernel, ITaskManager taskManager, ILogger logger)
: base(kernel, taskManager, logger)
{
}
/// <summary> /// <summary>
/// Creates the triggers that define when the task will run /// Creates the triggers that define when the task will run
/// </summary> /// </summary>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save