diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-23 02:57:11 -0500 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-23 02:57:11 -0500 |
| commit | b8d5c718429f1325111834b8b95698fc9c9ba47d (patch) | |
| tree | f7f23b8704380552f25f3edfa3d706455069692e /MediaBrowser.Controller | |
| parent | c165f37bb96ad40d863a436795c21b9085f3fde9 (diff) | |
type discovery without attributes
Diffstat (limited to 'MediaBrowser.Controller')
51 files changed, 569 insertions, 140 deletions
diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs index 6a76e21257..5b7661dcf0 100644 --- a/MediaBrowser.Controller/Entities/Movies/Movie.cs +++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Common.Win32; +using MediaBrowser.Controller.IO; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs index 140c90814e..c80c59eafa 100644 --- a/MediaBrowser.Controller/Entities/TV/Season.cs +++ b/MediaBrowser.Controller/Entities/TV/Season.cs @@ -2,6 +2,7 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Common.Win32; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Localization; using MediaBrowser.Model.Entities; diff --git a/MediaBrowser.Controller/Entities/User.cs b/MediaBrowser.Controller/Entities/User.cs index f27e8c689d..426e7f18ee 100644 --- a/MediaBrowser.Controller/Entities/User.cs +++ b/MediaBrowser.Controller/Entities/User.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Common.Serialization; +using MediaBrowser.Controller.IO; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Tasks; using System; diff --git a/MediaBrowser.Controller/IO/DirectoryWatchers.cs b/MediaBrowser.Controller/IO/DirectoryWatchers.cs index 62e1a6a36f..06ce95ec92 100644 --- a/MediaBrowser.Controller/IO/DirectoryWatchers.cs +++ b/MediaBrowser.Controller/IO/DirectoryWatchers.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.IO; +using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.ScheduledTasks; @@ -67,15 +68,26 @@ namespace MediaBrowser.Controller.IO private ILogger Logger { get; set; } /// <summary> + /// Gets or sets the task manager. + /// </summary> + /// <value>The task manager.</value> + private ITaskManager TaskManager { get; set; } + + /// <summary> /// Initializes a new instance of the <see cref="DirectoryWatchers" /> class. /// </summary> - public DirectoryWatchers(ILogger logger) + public DirectoryWatchers(ILogger logger, ITaskManager taskManager) { if (logger == null) { throw new ArgumentNullException("logger"); } + if (taskManager == null) + { + throw new ArgumentNullException("taskManager"); + } + TaskManager = taskManager; Logger = logger; } @@ -421,7 +433,7 @@ namespace MediaBrowser.Controller.IO // If the root folder changed, run the library task so the user can see it if (itemsToRefresh.Any(i => i is AggregateFolder)) { - Kernel.Instance.TaskManager.CancelIfRunningAndQueue<RefreshMediaLibraryTask>(); + TaskManager.CancelIfRunningAndQueue<RefreshMediaLibraryTask>(); return; } diff --git a/MediaBrowser.Controller/IO/FileSystem.cs b/MediaBrowser.Controller/IO/FileSystem.cs new file mode 100644 index 0000000000..c7b7c660bc --- /dev/null +++ b/MediaBrowser.Controller/IO/FileSystem.cs @@ -0,0 +1,336 @@ +using MediaBrowser.Common.Win32; +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; + +namespace MediaBrowser.Controller.IO +{ + /// <summary> + /// Class FileSystem + /// </summary> + public static class FileSystem + { + /// <summary> + /// Gets information about a path + /// </summary> + /// <param name="path">The path.</param> + /// <returns>System.Nullable{WIN32_FIND_DATA}.</returns> + /// <exception cref="System.ArgumentNullException">path</exception> + /// <exception cref="System.IO.IOException">GetFileData failed for + path</exception> + public static WIN32_FIND_DATA? GetFileData(string path) + { + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentNullException("path"); + } + + WIN32_FIND_DATA data; + var handle = NativeMethods.FindFirstFileEx(path, FINDEX_INFO_LEVELS.FindExInfoBasic, out data, + FINDEX_SEARCH_OPS.FindExSearchNameMatch, IntPtr.Zero, FindFirstFileExFlags.NONE); + + var getFilename = false; + + if (handle == NativeMethods.INVALID_HANDLE_VALUE && !Path.HasExtension(path)) + { + if (!path.EndsWith("*", StringComparison.OrdinalIgnoreCase)) + { + NativeMethods.FindClose(handle); + + handle = NativeMethods.FindFirstFileEx(Path.Combine(path, "*"), FINDEX_INFO_LEVELS.FindExInfoBasic, out data, + FINDEX_SEARCH_OPS.FindExSearchNameMatch, IntPtr.Zero, FindFirstFileExFlags.NONE); + + getFilename = true; + } + } + + if (handle == IntPtr.Zero) + { + throw new IOException("GetFileData failed for " + path); + } + + NativeMethods.FindClose(handle); + + // According to MSDN documentation, this will default to 1601 for paths that don't exist. + if (data.CreationTimeUtc.Year == 1601) + { + return null; + } + + if (getFilename) + { + data.cFileName = Path.GetFileName(path); + } + + data.Path = path; + return data; + } + + /// <summary> + /// Gets all files within a folder + /// </summary> + /// <param name="path">The path.</param> + /// <param name="searchPattern">The search pattern.</param> + /// <returns>IEnumerable{WIN32_FIND_DATA}.</returns> + public static IEnumerable<WIN32_FIND_DATA> GetFiles(string path, string searchPattern = "*") + { + return GetFileSystemEntries(path, searchPattern, includeDirectories: false); + } + + /// <summary> + /// Gets all sub-directories within a folder + /// </summary> + /// <param name="path">The path.</param> + /// <returns>IEnumerable{WIN32_FIND_DATA}.</returns> + public static IEnumerable<WIN32_FIND_DATA> GetDirectories(string path) + { + return GetFileSystemEntries(path, includeFiles: false); + } + + /// <summary> + /// Gets all file system entries within a foler + /// </summary> + /// <param name="path">The path.</param> + /// <param name="searchPattern">The search pattern.</param> + /// <param name="includeFiles">if set to <c>true</c> [include files].</param> + /// <param name="includeDirectories">if set to <c>true</c> [include directories].</param> + /// <returns>IEnumerable{WIN32_FIND_DATA}.</returns> + /// <exception cref="System.ArgumentNullException">path</exception> + /// <exception cref="System.IO.IOException">GetFileSystemEntries failed</exception> + public static IEnumerable<WIN32_FIND_DATA> GetFileSystemEntries(string path, string searchPattern = "*", bool includeFiles = true, bool includeDirectories = true) + { + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentNullException("path"); + } + + var lpFileName = Path.Combine(path, searchPattern); + + WIN32_FIND_DATA lpFindFileData; + var handle = NativeMethods.FindFirstFileEx(lpFileName, FINDEX_INFO_LEVELS.FindExInfoBasic, out lpFindFileData, + FINDEX_SEARCH_OPS.FindExSearchNameMatch, IntPtr.Zero, FindFirstFileExFlags.FIND_FIRST_EX_LARGE_FETCH); + + if (handle == IntPtr.Zero) + { + var hr = Marshal.GetLastWin32Error(); + if (hr != 2 && hr != 0x12) + { + throw new IOException("GetFileSystemEntries failed"); + } + yield break; + } + + if (IncludeInFindFileOutput(lpFindFileData.cFileName, lpFindFileData.dwFileAttributes, includeFiles, includeDirectories)) + { + lpFindFileData.Path = Path.Combine(path, lpFindFileData.cFileName); + + yield return lpFindFileData; + } + + while (NativeMethods.FindNextFile(handle, out lpFindFileData) != IntPtr.Zero) + { + if (IncludeInFindFileOutput(lpFindFileData.cFileName, lpFindFileData.dwFileAttributes, includeFiles, includeDirectories)) + { + lpFindFileData.Path = Path.Combine(path, lpFindFileData.cFileName); + yield return lpFindFileData; + } + } + + NativeMethods.FindClose(handle); + } + + /// <summary> + /// Includes the in find file output. + /// </summary> + /// <param name="cFileName">Name of the c file.</param> + /// <param name="attributes">The attributes.</param> + /// <param name="includeFiles">if set to <c>true</c> [include files].</param> + /// <param name="includeDirectories">if set to <c>true</c> [include directories].</param> + /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> + public static bool IncludeInFindFileOutput(string cFileName, FileAttributes attributes, bool includeFiles, bool includeDirectories) + { + if (cFileName.Equals(".", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + if (cFileName.Equals("..", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + + if (!includeFiles && !attributes.HasFlag(FileAttributes.Directory)) + { + return false; + } + + if (!includeDirectories && attributes.HasFlag(FileAttributes.Directory)) + { + return false; + } + + return true; + } + + /// <summary> + /// The space char + /// </summary> + private const char SpaceChar = ' '; + /// <summary> + /// The invalid file name chars + /// </summary> + private static readonly char[] InvalidFileNameChars = Path.GetInvalidFileNameChars(); + + /// <summary> + /// Takes a filename and removes invalid characters + /// </summary> + /// <param name="filename">The filename.</param> + /// <returns>System.String.</returns> + /// <exception cref="System.ArgumentNullException">filename</exception> + public static string GetValidFilename(string filename) + { + if (string.IsNullOrEmpty(filename)) + { + throw new ArgumentNullException("filename"); + } + + foreach (var c in InvalidFileNameChars) + { + filename = filename.Replace(c, SpaceChar); + } + + return filename; + } + + /// <summary> + /// Resolves the shortcut. + /// </summary> + /// <param name="filename">The filename.</param> + /// <returns>System.String.</returns> + /// <exception cref="System.ArgumentNullException">filename</exception> + public static string ResolveShortcut(string filename) + { + if (string.IsNullOrEmpty(filename)) + { + throw new ArgumentNullException("filename"); + } + + var link = new ShellLink(); + ((IPersistFile)link).Load(filename, NativeMethods.STGM_READ); + // TODO: if I can get hold of the hwnd call resolve first. This handles moved and renamed files. + // ((IShellLinkW)link).Resolve(hwnd, 0) + var sb = new StringBuilder(NativeMethods.MAX_PATH); + WIN32_FIND_DATA data; + ((IShellLinkW)link).GetPath(sb, sb.Capacity, out data, 0); + return sb.ToString(); + } + + /// <summary> + /// Creates a shortcut file pointing to a specified path + /// </summary> + /// <param name="shortcutPath">The shortcut path.</param> + /// <param name="target">The target.</param> + /// <exception cref="System.ArgumentNullException">shortcutPath</exception> + public static void CreateShortcut(string shortcutPath, string target) + { + if (string.IsNullOrEmpty(shortcutPath)) + { + throw new ArgumentNullException("shortcutPath"); + } + + if (string.IsNullOrEmpty(target)) + { + throw new ArgumentNullException("target"); + } + + var link = new ShellLink(); + + ((IShellLinkW)link).SetPath(target); + + ((IPersistFile)link).Save(shortcutPath, true); + } + + /// <summary> + /// Determines whether the specified filename is shortcut. + /// </summary> + /// <param name="filename">The filename.</param> + /// <returns><c>true</c> if the specified filename is shortcut; otherwise, <c>false</c>.</returns> + /// <exception cref="System.ArgumentNullException">filename</exception> + public static bool IsShortcut(string filename) + { + if (string.IsNullOrEmpty(filename)) + { + throw new ArgumentNullException("filename"); + } + + return string.Equals(Path.GetExtension(filename), ".lnk", StringComparison.OrdinalIgnoreCase); + } + + /// <summary> + /// Copies all. + /// </summary> + /// <param name="source">The source.</param> + /// <param name="target">The target.</param> + /// <exception cref="System.ArgumentNullException">source</exception> + /// <exception cref="System.ArgumentException">The source and target directories are the same</exception> + public static void CopyAll(string source, string target) + { + if (string.IsNullOrEmpty(source)) + { + throw new ArgumentNullException("source"); + } + if (string.IsNullOrEmpty(target)) + { + throw new ArgumentNullException("target"); + } + + if (source.Equals(target, StringComparison.OrdinalIgnoreCase)) + { + throw new ArgumentException("The source and target directories are the same"); + } + + // Check if the target directory exists, if not, create it. + if (!Directory.Exists(target)) + { + Directory.CreateDirectory(target); + } + + foreach (var file in Directory.EnumerateFiles(source)) + { + File.Copy(file, Path.Combine(target, Path.GetFileName(file)), true); + } + + // Copy each subdirectory using recursion. + foreach (var dir in Directory.EnumerateDirectories(source)) + { + CopyAll(dir, Path.Combine(target, Path.GetFileName(dir))); + } + } + + /// <summary> + /// Parses the ini file. + /// </summary> + /// <param name="path">The path.</param> + /// <returns>NameValueCollection.</returns> + public static NameValueCollection ParseIniFile(string path) + { + var values = new NameValueCollection(); + + foreach (var line in File.ReadAllLines(path)) + { + var data = line.Split('='); + + if (data.Length < 2) continue; + + var key = data[0]; + + var value = data.Length == 2 ? data[1] : string.Join(string.Empty, data, 1, data.Length - 1); + + values[key] = value; + } + + return values; + } + } +} diff --git a/MediaBrowser.Controller/IO/FileSystemManager.cs b/MediaBrowser.Controller/IO/FileSystemManager.cs index 9b54bb9d81..611b402d8c 100644 --- a/MediaBrowser.Controller/IO/FileSystemManager.cs +++ b/MediaBrowser.Controller/IO/FileSystemManager.cs @@ -1,5 +1,6 @@ using MediaBrowser.Common.IO; using MediaBrowser.Common.Kernel; +using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Logging; using System; @@ -26,17 +27,18 @@ namespace MediaBrowser.Controller.IO /// The _logger /// </summary> private readonly ILogger _logger; - + /// <summary> /// Initializes a new instance of the <see cref="FileSystemManager" /> class. /// </summary> /// <param name="kernel">The kernel.</param> /// <param name="logger">The logger.</param> - public FileSystemManager(Kernel kernel, ILogger logger) + /// <param name="taskManager">The task manager.</param> + public FileSystemManager(Kernel kernel, ILogger logger, ITaskManager taskManager) : base(kernel) { _logger = logger; - DirectoryWatchers = new DirectoryWatchers(logger); + DirectoryWatchers = new DirectoryWatchers(logger, taskManager); } /// <summary> diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index ebf3e724dd..21cfb5ddb2 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -1,6 +1,4 @@ -using MediaBrowser.Common.IO; -using MediaBrowser.Common.Kernel; -using MediaBrowser.Common.Localization; +using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Plugins; using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Entities; @@ -17,14 +15,10 @@ using MediaBrowser.Controller.ScheduledTasks; using MediaBrowser.Controller.Updates; using MediaBrowser.Controller.Weather; using MediaBrowser.Model.Configuration; -using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; -using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.System; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; -using System.ComponentModel.Composition.Hosting; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -183,7 +177,6 @@ namespace MediaBrowser.Controller /// Gets the list of Localized string files /// </summary> /// <value>The string files.</value> - [ImportMany(typeof(LocalizedStringData))] public IEnumerable<LocalizedStringData> StringFiles { get; private set; } /// <summary> @@ -208,7 +201,6 @@ namespace MediaBrowser.Controller /// Gets the list of currently registered metadata prvoiders /// </summary> /// <value>The metadata providers enumerable.</value> - [ImportMany(typeof(BaseMetadataProvider))] public BaseMetadataProvider[] MetadataProviders { get; private set; } /// <summary> @@ -222,8 +214,7 @@ namespace MediaBrowser.Controller /// Gets the list of currently registered entity resolvers /// </summary> /// <value>The entity resolvers enumerable.</value> - [ImportMany(typeof(IBaseItemResolver))] - internal IBaseItemResolver[] EntityResolvers { get; private set; } + internal IEnumerable<IBaseItemResolver> EntityResolvers { get; private set; } /// <summary> /// Gets the list of BasePluginFolders added by plugins @@ -322,14 +313,11 @@ namespace MediaBrowser.Controller /// <summary> /// Composes the exported values. /// </summary> - /// <param name="container">The container.</param> - protected override void RegisterExportedValues(CompositionContainer container) + protected override void RegisterExportedValues() { - container.ComposeExportedValue("kernel", this); - ApplicationHost.Register(this); - base.RegisterExportedValues(container); + base.RegisterExportedValues(); } /// <summary> @@ -338,6 +326,15 @@ namespace MediaBrowser.Controller /// <param name="allTypes">All types.</param> protected override void FindParts(Type[] allTypes) { + InstallationManager = (InstallationManager)ApplicationHost.CreateInstance(typeof(InstallationManager)); + FFMpegManager = (FFMpegManager)ApplicationHost.CreateInstance(typeof(FFMpegManager)); + LibraryManager = (LibraryManager)ApplicationHost.CreateInstance(typeof(LibraryManager)); + UserManager = (UserManager)ApplicationHost.CreateInstance(typeof(UserManager)); + ImageManager = (ImageManager)ApplicationHost.CreateInstance(typeof(ImageManager)); + ProviderManager = (ProviderManager)ApplicationHost.CreateInstance(typeof(ProviderManager)); + UserDataManager = (UserDataManager)ApplicationHost.CreateInstance(typeof(UserDataManager)); + PluginSecurityManager = (PluginSecurityManager)ApplicationHost.CreateInstance(typeof(PluginSecurityManager)); + base.FindParts(allTypes); EntityResolutionIgnoreRules = GetExports<IResolutionIgnoreRule>(allTypes); @@ -348,8 +345,11 @@ namespace MediaBrowser.Controller WeatherProviders = GetExports<IWeatherProvider>(allTypes); IntroProviders = GetExports<IIntroProvider>(allTypes); PluginConfigurationPages = GetExports<IPluginConfigurationPage>(allTypes); - ImageEnhancers = GetExports<IImageEnhancer>(allTypes); + ImageEnhancers = GetExports<IImageEnhancer>(allTypes).OrderBy(e => e.Priority).ToArray(); PluginFolderCreators = GetExports<IVirtualFolderCreator>(allTypes); + StringFiles = GetExports<LocalizedStringData>(allTypes); + EntityResolvers = GetExports<IBaseItemResolver>(allTypes).OrderBy(e => e.Priority).ToArray(); + MetadataProviders = GetExports<BaseMetadataProvider>(allTypes).OrderBy(e => e.Priority).ToArray(); } /// <summary> @@ -365,14 +365,6 @@ namespace MediaBrowser.Controller await base.ReloadInternal().ConfigureAwait(false); ReloadResourcePools(); - InstallationManager = (InstallationManager)ApplicationHost.CreateInstance(typeof(InstallationManager)); - FFMpegManager = (FFMpegManager)ApplicationHost.CreateInstance(typeof(FFMpegManager)); - LibraryManager = (LibraryManager)ApplicationHost.CreateInstance(typeof(LibraryManager)); - UserManager = (UserManager)ApplicationHost.CreateInstance(typeof(UserManager)); - ImageManager = (ImageManager)ApplicationHost.CreateInstance(typeof(ImageManager)); - ProviderManager = (ProviderManager)ApplicationHost.CreateInstance(typeof(ProviderManager)); - UserDataManager = (UserDataManager)ApplicationHost.CreateInstance(typeof(UserDataManager)); - PluginSecurityManager = (PluginSecurityManager)ApplicationHost.CreateInstance(typeof(PluginSecurityManager)); ReloadFileSystemManager(); @@ -441,15 +433,6 @@ namespace MediaBrowser.Controller DisplayPreferencesRepository = GetRepository(DisplayPreferencesRepositories, Configuration.DisplayPreferencesRepository); var displayPreferencesRepoTask = DisplayPreferencesRepository.Initialize(); - // Sort the resolvers by priority - EntityResolvers = EntityResolvers.OrderBy(e => e.Priority).ToArray(); - - // Sort the providers by priority - MetadataProviders = MetadataProviders.OrderBy(e => e.Priority).ToArray(); - - // Sort the image processors by priority - ImageEnhancers = ImageEnhancers.OrderBy(e => e.Priority).ToArray(); - await Task.WhenAll(itemRepoTask, userRepoTask, userDataRepoTask, displayPreferencesRepoTask).ConfigureAwait(false); } @@ -488,7 +471,7 @@ namespace MediaBrowser.Controller { DisposeFileSystemManager(); - FileSystemManager = new FileSystemManager(this, Logger); + FileSystemManager = new FileSystemManager(this, Logger, TaskManager); FileSystemManager.StartWatchers(); } diff --git a/MediaBrowser.Controller/Library/ItemResolveArgs.cs b/MediaBrowser.Controller/Library/ItemResolveArgs.cs index c95300f745..4d58af4370 100644 --- a/MediaBrowser.Controller/Library/ItemResolveArgs.cs +++ b/MediaBrowser.Controller/Library/ItemResolveArgs.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using MediaBrowser.Controller.IO; namespace MediaBrowser.Controller.Library { diff --git a/MediaBrowser.Controller/Localization/BaseStrings.cs b/MediaBrowser.Controller/Localization/BaseStrings.cs index c76df7c7c8..22486d90dc 100644 --- a/MediaBrowser.Controller/Localization/BaseStrings.cs +++ b/MediaBrowser.Controller/Localization/BaseStrings.cs @@ -1,9 +1,6 @@ -using MediaBrowser.Common.Localization; -using System.ComponentModel.Composition; - + namespace MediaBrowser.Controller.Localization { - [Export(typeof(LocalizedStringData))] public class BaseStrings : LocalizedStringData { public BaseStrings() diff --git a/MediaBrowser.Controller/Localization/LocalizedStringData.cs b/MediaBrowser.Controller/Localization/LocalizedStringData.cs new file mode 100644 index 0000000000..71200b8c84 --- /dev/null +++ b/MediaBrowser.Controller/Localization/LocalizedStringData.cs @@ -0,0 +1,51 @@ +using System.IO; +using System.Xml.Serialization; + +namespace MediaBrowser.Controller.Localization +{ + /// <summary> + /// Class LocalizedStringData + /// </summary> + public class LocalizedStringData + { + /// <summary> + /// The this version + /// </summary> + [XmlIgnore] + public string ThisVersion = "1.0000"; + /// <summary> + /// The prefix + /// </summary> + [XmlIgnore] + public string Prefix = ""; + /// <summary> + /// The file name + /// </summary> + public string FileName; //this is public so it will serialize and we know where to save ourselves + /// <summary> + /// The version + /// </summary> + public string Version = ""; //this will get saved so we can check it against us for changes + + /// <summary> + /// Saves this instance. + /// </summary> + public void Save() + { + Save(FileName); + } + + /// <summary> + /// Saves the specified file. + /// </summary> + /// <param name="file">The file.</param> + public void Save(string file) + { + var xs = new XmlSerializer(GetType()); + using (var fs = new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.None)) + { + xs.Serialize(fs, this); + } + } + } +} diff --git a/MediaBrowser.Controller/Localization/LocalizedStrings.cs b/MediaBrowser.Controller/Localization/LocalizedStrings.cs index 01b2595919..6405be5f84 100644 --- a/MediaBrowser.Controller/Localization/LocalizedStrings.cs +++ b/MediaBrowser.Controller/Localization/LocalizedStrings.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Localization; -using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Logging; using System; using System.Collections.Concurrent; using System.Globalization; diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index f9765d8523..213c30bac5 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -64,7 +64,6 @@ <HintPath>..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll</HintPath> </Reference> <Reference Include="System" /> - <Reference Include="System.ComponentModel.Composition" /> <Reference Include="System.Core" /> <Reference Include="System.Data" /> <Reference Include="System.Drawing" /> @@ -108,6 +107,7 @@ <Compile Include="Entities\CollectionFolder.cs" /> <Compile Include="Entities\Year.cs" /> <Compile Include="Extensions\XmlExtensions.cs" /> + <Compile Include="IO\FileSystem.cs" /> <Compile Include="IO\FileSystemManager.cs" /> <Compile Include="IO\NetworkShares.cs" /> <Compile Include="Library\ChildrenChangedEventArgs.cs" /> @@ -118,6 +118,7 @@ <Compile Include="Localization\AURatingsDictionary.cs" /> <Compile Include="Localization\BaseStrings.cs" /> <Compile Include="Localization\GBRatingsDictionary.cs" /> + <Compile Include="Localization\LocalizedStringData.cs" /> <Compile Include="Localization\LocalizedStrings.cs" /> <Compile Include="Localization\NLRatingsDictionary.cs" /> <Compile Include="Localization\Ratings.cs" /> diff --git a/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs b/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs index ab0f37b96e..16b120ebdc 100644 --- a/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs +++ b/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers /// <summary> /// Provides metadata for Folders and all subclasses by parsing folder.xml /// </summary> - [Export(typeof(BaseMetadataProvider))] public class FolderProviderFromXml : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs index 9858764069..4c3250ff40 100644 --- a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs +++ b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs @@ -3,7 +3,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading; @@ -14,7 +13,6 @@ namespace MediaBrowser.Controller.Providers /// <summary> /// Provides images for all types by looking for standard images - folder, backdrop, logo, etc. /// </summary> - [Export(typeof(BaseMetadataProvider))] public class ImageFromMediaLocationProvider : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs b/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs index 114176e2c9..fcc31a75e8 100644 --- a/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs +++ b/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs @@ -1,9 +1,8 @@ -using System.Globalization; -using MediaBrowser.Common.IO; -using MediaBrowser.Common.Win32; +using MediaBrowser.Common.Win32; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.IO; using System; -using System.ComponentModel.Composition; +using System.Globalization; using System.IO; using System.Linq; @@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers /// <summary> /// Provides images for generic types by looking for standard images in the IBN /// </summary> - [Export(typeof(BaseMetadataProvider))] public class ImagesByNameProvider : ImageFromMediaLocationProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegAudioImageProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegAudioImageProvider.cs index 523192d4e3..907c692b80 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegAudioImageProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegAudioImageProvider.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// <summary> /// Uses ffmpeg to create video images /// </summary> - [Export(typeof(BaseMetadataProvider))] public class FFMpegAudioImageProvider : BaseFFMpegImageProvider<Audio> { diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs index b884d6c2d7..636454cd0b 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.Threading; using System.Threading.Tasks; @@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// <summary> /// Uses ffmpeg to create video images /// </summary> - [Export(typeof(BaseMetadataProvider))] public class FFMpegVideoImageProvider : BaseFFMpegImageProvider<Video> { /// <summary> @@ -23,8 +21,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// Initializes a new instance of the <see cref="FFMpegVideoImageProvider" /> class. /// </summary> /// <param name="isoManager">The iso manager.</param> - [ImportingConstructor] - public FFMpegVideoImageProvider([Import("isoManager")] IIsoManager isoManager) + public FFMpegVideoImageProvider(IIsoManager isoManager) { _isoManager = isoManager; } diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs index 49c829fffe..01711d7713 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs @@ -5,7 +5,6 @@ using MediaBrowser.Controller.MediaInfo; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -15,7 +14,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// <summary> /// Extracts audio information using ffprobe /// </summary> - [Export(typeof(BaseMetadataProvider))] public class FFProbeAudioInfoProvider : BaseFFProbeProvider<Audio> { /// <summary> diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs index 58fda20bb8..443d28b670 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs @@ -6,7 +6,6 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.MediaInfo; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading; @@ -17,7 +16,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// <summary> /// Extracts video information using ffprobe /// </summary> - [Export(typeof(BaseMetadataProvider))] public class FFProbeVideoInfoProvider : BaseFFProbeProvider<Video> { /// <summary> @@ -43,8 +41,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// <param name="isoManager">The iso manager.</param> /// <param name="blurayExaminer">The bluray examiner.</param> /// <exception cref="System.ArgumentNullException">blurayExaminer</exception> - [ImportingConstructor] - public FFProbeVideoInfoProvider([Import("isoManager")] IIsoManager isoManager, [Import("blurayExaminer")] IBlurayExaminer blurayExaminer) + public FFProbeVideoInfoProvider(IIsoManager isoManager, IBlurayExaminer blurayExaminer) : base() { if (blurayExaminer == null) diff --git a/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs b/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs index 38e5475230..e833e49318 100644 --- a/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs +++ b/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs @@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Net; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -15,7 +14,6 @@ namespace MediaBrowser.Controller.Providers.Movies /// <summary> /// Class FanArtMovieProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] class FanArtMovieProvider : FanartBaseProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs index 2319e5cfa4..72f8a3fc74 100644 --- a/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs +++ b/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs @@ -7,7 +7,6 @@ using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Globalization; using System.IO; using System.Linq; @@ -29,7 +28,6 @@ namespace MediaBrowser.Controller.Providers.Movies /// <summary> /// Class MovieDbProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] public class MovieDbProvider : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs index ad5f6626be..45079dddaa 100644 --- a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs +++ b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs @@ -1,7 +1,6 @@ using MediaBrowser.Common.Serialization; using MediaBrowser.Controller.Entities; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.Movies /// <summary> /// Class MovieProviderFromJson /// </summary> - [Export(typeof(BaseMetadataProvider))] public class MovieProviderFromJson : MovieDbProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs index b180fa580f..274930bc8c 100644 --- a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs +++ b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.Movies /// <summary> /// Class MovieProviderFromXml /// </summary> - [Export(typeof(BaseMetadataProvider))] public class MovieProviderFromXml : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs b/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs index 19a707be30..b4b4933e28 100644 --- a/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs +++ b/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs @@ -1,7 +1,6 @@ using MediaBrowser.Common.Serialization; using MediaBrowser.Controller.Entities; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers.Movies /// <summary> /// Class PersonProviderFromJson /// </summary> - [Export(typeof(BaseMetadataProvider))] class PersonProviderFromJson : TmdbPersonProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs b/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs index 4cdfc58940..7b5d62fb0e 100644 --- a/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs +++ b/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs @@ -4,7 +4,6 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.Net; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Globalization; using System.IO; using System.Linq; @@ -17,7 +16,6 @@ namespace MediaBrowser.Controller.Providers.Movies /// <summary> /// Class TmdbPersonProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] public class TmdbPersonProvider : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/SortNameProvider.cs b/MediaBrowser.Controller/Providers/SortNameProvider.cs index 071732f3e3..933b0c78c3 100644 --- a/MediaBrowser.Controller/Providers/SortNameProvider.cs +++ b/MediaBrowser.Controller/Providers/SortNameProvider.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.TV; -using System.ComponentModel.Composition; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Providers /// <summary> /// Class SortNameProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] public class SortNameProvider : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs b/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs index a493ce746f..c6210f74c2 100644 --- a/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.TV /// <summary> /// Class EpisodeImageFromMediaLocationProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] public class EpisodeImageFromMediaLocationProvider : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs b/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs index 08d0988eb9..7a96e368c9 100644 --- a/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs +++ b/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.TV /// <summary> /// Class EpisodeProviderFromXml /// </summary> - [Export(typeof(BaseMetadataProvider))] public class EpisodeProviderFromXml : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs b/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs index 2640e04825..05ab172a8e 100644 --- a/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs @@ -4,7 +4,6 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Net; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -12,7 +11,6 @@ using System.Xml; namespace MediaBrowser.Controller.Providers.TV { - [Export(typeof(BaseMetadataProvider))] class FanArtTVProvider : FanartBaseProvider { protected string FanArtBaseUrl = "http://api.fanart.tv/webservice/series/{0}/{1}/xml/all/1/1"; diff --git a/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs b/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs index d1d931a62f..b065981148 100644 --- a/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs @@ -5,7 +5,6 @@ using MediaBrowser.Controller.Resolvers.TV; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Net; using System; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading; @@ -18,7 +17,6 @@ namespace MediaBrowser.Controller.Providers.TV /// <summary> /// Class RemoteEpisodeProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] class RemoteEpisodeProvider : BaseMetadataProvider { diff --git a/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs b/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs index 277b6d891f..3e7f6b1a2b 100644 --- a/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs @@ -5,7 +5,6 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.Net; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -16,7 +15,6 @@ namespace MediaBrowser.Controller.Providers.TV /// <summary> /// Class RemoteSeasonProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] class RemoteSeasonProvider : BaseMetadataProvider { diff --git a/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs b/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs index 985aa0262a..b8941dbba3 100644 --- a/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs @@ -7,7 +7,6 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.Net; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Net; using System.Text; @@ -20,7 +19,6 @@ namespace MediaBrowser.Controller.Providers.TV /// <summary> /// Class RemoteSeriesProvider /// </summary> - [Export(typeof(BaseMetadataProvider))] class RemoteSeriesProvider : BaseMetadataProvider { diff --git a/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs b/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs index c92841fb65..aa2cde28da 100644 --- a/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs +++ b/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -12,7 +11,6 @@ namespace MediaBrowser.Controller.Providers.TV /// <summary> /// Class SeriesProviderFromXml /// </summary> - [Export(typeof(BaseMetadataProvider))] public class SeriesProviderFromXml : BaseMetadataProvider { /// <summary> diff --git a/MediaBrowser.Controller/Resolvers/Audio/AudioResolver.cs b/MediaBrowser.Controller/Resolvers/Audio/AudioResolver.cs index f827bf0477..6e1bbfbfe3 100644 --- a/MediaBrowser.Controller/Resolvers/Audio/AudioResolver.cs +++ b/MediaBrowser.Controller/Resolvers/Audio/AudioResolver.cs @@ -1,16 +1,26 @@ using MediaBrowser.Controller.Library; -using System.ComponentModel.Composition; namespace MediaBrowser.Controller.Resolvers.Audio { - [Export(typeof(IBaseItemResolver))] + /// <summary> + /// Class AudioResolver + /// </summary> public class AudioResolver : BaseItemResolver<Entities.Audio.Audio> { + /// <summary> + /// Gets the priority. + /// </summary> + /// <value>The priority.</value> public override ResolverPriority Priority { get { return ResolverPriority.Last; } } - + + /// <summary> + /// Resolves the specified args. + /// </summary> + /// <param name="args">The args.</param> + /// <returns>Entities.Audio.Audio.</returns> protected override Entities.Audio.Audio Resolve(ItemResolveArgs args) { // Return audio if the path is a file and has a matching extension diff --git a/MediaBrowser.Controller/Resolvers/Audio/MusicAlbumResolver.cs b/MediaBrowser.Controller/Resolvers/Audio/MusicAlbumResolver.cs index 8b2e49f313..d8d2c326d8 100644 --- a/MediaBrowser.Controller/Resolvers/Audio/MusicAlbumResolver.cs +++ b/MediaBrowser.Controller/Resolvers/Audio/MusicAlbumResolver.cs @@ -1,17 +1,27 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; -using System.ComponentModel.Composition; namespace MediaBrowser.Controller.Resolvers.Audio { - [Export(typeof(IBaseItemResolver))] + /// <summary> + /// Class MusicAlbumResolver + /// </summary> public class MusicAlbumResolver : BaseItemResolver<MusicAlbum> { + /// <summary> + /// Gets the priority. + /// </summary> + /// <value>The priority.</value> public override ResolverPriority Priority { get { return ResolverPriority.Third; } // we need to be ahead of the generic folder resolver but behind the movie one } - + + /// <summary> + /// Resolves the specified args. + /// </summary> + /// <param name="args">The args.</param> + /// <returns>MusicAlbum.</returns> protected override MusicAlbum Resolve(ItemResolveArgs args) { if (!args.IsDirectory) return null; diff --git a/MediaBrowser.Controller/Resolvers/Audio/MusicArtistResolver.cs b/MediaBrowser.Controller/Resolvers/Audio/MusicArtistResolver.cs index 8060e8d334..45f96d3aba 100644 --- a/MediaBrowser.Controller/Resolvers/Audio/MusicArtistResolver.cs +++ b/MediaBrowser.Controller/Resolvers/Audio/MusicArtistResolver.cs @@ -1,18 +1,28 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; -using System.ComponentModel.Composition; using System.Linq; namespace MediaBrowser.Controller.Resolvers.Audio { - [Export(typeof(IBaseItemResolver))] + /// <summary> + /// Class MusicArtistResolver + /// </summary> public class MusicArtistResolver : BaseItemResolver<MusicArtist> { + /// <summary> + /// Gets the priority. + /// </summary> + /// <value>The priority.</value> public override ResolverPriority Priority { get { return ResolverPriority.Third; } // we need to be ahead of the generic folder resolver but behind the movie one } + /// <summary> + /// Resolves the specified args. + /// </summary> + /// <param name="args">The args.</param> + /// <returns>MusicArtist.</returns> protected override MusicArtist Resolve(ItemResolveArgs args) { if (!args.IsDirectory) return null; diff --git a/MediaBrowser.Controller/Resolvers/CoreResolutionIgnoreRule.cs b/MediaBrowser.Controller/Resolvers/CoreResolutionIgnoreRule.cs index d237f68f32..770b673a51 100644 --- a/MediaBrowser.Controller/Resolvers/CoreResolutionIgnoreRule.cs +++ b/MediaBrowser.Controller/Resolvers/CoreResolutionIgnoreRule.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Library; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Linq; namespace MediaBrowser.Controller.Resolvers @@ -9,7 +8,6 @@ namespace MediaBrowser.Controller.Resolvers /// <summary> /// Provides the core resolver ignore rules /// </summary> - [Export(typeof(IResolutionIgnoreRule))] public class CoreResolutionIgnoreRule : IResolutionIgnoreRule { /// <summary> @@ -27,6 +25,11 @@ namespace MediaBrowser.Controller.Resolvers "extrafanart" }; + /// <summary> + /// Shoulds the ignore. + /// </summary> + /// <param name="args">The args.</param> + /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> public bool ShouldIgnore(ItemResolveArgs args) { // Ignore hidden files and folders diff --git a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs index 75e1305268..f406cb1851 100644 --- a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs +++ b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Common.Win32; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; using System; using System.Collections.Generic; diff --git a/MediaBrowser.Controller/Resolvers/FolderResolver.cs b/MediaBrowser.Controller/Resolvers/FolderResolver.cs index e37c18692d..c356b8c844 100644 --- a/MediaBrowser.Controller/Resolvers/FolderResolver.cs +++ b/MediaBrowser.Controller/Resolvers/FolderResolver.cs @@ -1,13 +1,11 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; -using System.ComponentModel.Composition; namespace MediaBrowser.Controller.Resolvers { /// <summary> /// Class FolderResolver /// </summary> - [Export(typeof(IBaseItemResolver))] public class FolderResolver : BaseFolderResolver<Folder> { /// <summary> diff --git a/MediaBrowser.Controller/Resolvers/LocalTrailerResolver.cs b/MediaBrowser.Controller/Resolvers/LocalTrailerResolver.cs index c26b0ce37e..a61e010b3c 100644 --- a/MediaBrowser.Controller/Resolvers/LocalTrailerResolver.cs +++ b/MediaBrowser.Controller/Resolvers/LocalTrailerResolver.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using System; -using System.ComponentModel.Composition; using System.IO; namespace MediaBrowser.Controller.Resolvers @@ -9,7 +8,6 @@ namespace MediaBrowser.Controller.Resolvers /// <summary> /// Class LocalTrailerResolver /// </summary> - [Export(typeof(IBaseItemResolver))] public class LocalTrailerResolver : BaseVideoResolver<Trailer> { /// <summary> diff --git a/MediaBrowser.Controller/Resolvers/Movies/BoxSetResolver.cs b/MediaBrowser.Controller/Resolvers/Movies/BoxSetResolver.cs index ccca0cfabb..2eee2a98bb 100644 --- a/MediaBrowser.Controller/Resolvers/Movies/BoxSetResolver.cs +++ b/MediaBrowser.Controller/Resolvers/Movies/BoxSetResolver.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Library; using System; -using System.ComponentModel.Composition; using System.IO; namespace MediaBrowser.Controller.Resolvers.Movies @@ -9,7 +8,6 @@ namespace MediaBrowser.Controller.Resolvers.Movies /// <summary> /// Class BoxSetResolver /// </summary> - [Export(typeof(IBaseItemResolver))] public class BoxSetResolver : BaseFolderResolver<BoxSet> { /// <summary> diff --git a/MediaBrowser.Controller/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Controller/Resolvers/Movies/MovieResolver.cs index 14f6357478..9443221a3f 100644 --- a/MediaBrowser.Controller/Resolvers/Movies/MovieResolver.cs +++ b/MediaBrowser.Controller/Resolvers/Movies/MovieResolver.cs @@ -6,7 +6,6 @@ using MediaBrowser.Controller.Providers.Movies; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; namespace MediaBrowser.Controller.Resolvers.Movies @@ -14,7 +13,6 @@ namespace MediaBrowser.Controller.Resolvers.Movies /// <summary> /// Class MovieResolver /// </summary> - [Export(typeof(IBaseItemResolver))] public class MovieResolver : BaseVideoResolver<Movie> { /// <summary> diff --git a/MediaBrowser.Controller/Resolvers/TV/EpisodeResolver.cs b/MediaBrowser.Controller/Resolvers/TV/EpisodeResolver.cs index f2f3ce122d..d1789bcbb5 100644 --- a/MediaBrowser.Controller/Resolvers/TV/EpisodeResolver.cs +++ b/MediaBrowser.Controller/Resolvers/TV/EpisodeResolver.cs @@ -1,14 +1,20 @@ -using System; -using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; -using System.ComponentModel.Composition; using MediaBrowser.Model.Entities; +using System; namespace MediaBrowser.Controller.Resolvers.TV { - [Export(typeof(IBaseItemResolver))] + /// <summary> + /// Class EpisodeResolver + /// </summary> public class EpisodeResolver : BaseVideoResolver<Episode> { + /// <summary> + /// Resolves the specified args. + /// </summary> + /// <param name="args">The args.</param> + /// <returns>Episode.</returns> protected override Episode Resolve(ItemResolveArgs args) { // If the parent is a Season or Series, then this is an Episode if the VideoResolver returns something @@ -40,6 +46,11 @@ namespace MediaBrowser.Controller.Resolvers.TV return null; } + /// <summary> + /// Sets the initial item values. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="args">The args.</param> protected override void SetInitialItemValues(Episode item, ItemResolveArgs args) { base.SetInitialItemValues(item, args); diff --git a/MediaBrowser.Controller/Resolvers/TV/SeasonResolver.cs b/MediaBrowser.Controller/Resolvers/TV/SeasonResolver.cs index 6569c85bc8..9ea4742079 100644 --- a/MediaBrowser.Controller/Resolvers/TV/SeasonResolver.cs +++ b/MediaBrowser.Controller/Resolvers/TV/SeasonResolver.cs @@ -1,13 +1,19 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using System; -using System.ComponentModel.Composition; namespace MediaBrowser.Controller.Resolvers.TV { - [Export(typeof(IBaseItemResolver))] + /// <summary> + /// Class SeasonResolver + /// </summary> public class SeasonResolver : BaseFolderResolver<Season> { + /// <summary> + /// Resolves the specified args. + /// </summary> + /// <param name="args">The args.</param> + /// <returns>Season.</returns> protected override Season Resolve(ItemResolveArgs args) { if (args.Parent is Series && args.IsDirectory) @@ -21,6 +27,11 @@ namespace MediaBrowser.Controller.Resolvers.TV return null; } + /// <summary> + /// Sets the initial item values. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="args">The args.</param> protected override void SetInitialItemValues(Season item, ItemResolveArgs args) { base.SetInitialItemValues(item, args); diff --git a/MediaBrowser.Controller/Resolvers/TV/SeriesResolver.cs b/MediaBrowser.Controller/Resolvers/TV/SeriesResolver.cs index 7c0bc3df14..c973cfe874 100644 --- a/MediaBrowser.Controller/Resolvers/TV/SeriesResolver.cs +++ b/MediaBrowser.Controller/Resolvers/TV/SeriesResolver.cs @@ -3,7 +3,6 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.IO; namespace MediaBrowser.Controller.Resolvers.TV @@ -11,7 +10,6 @@ namespace MediaBrowser.Controller.Resolvers.TV /// <summary> /// Class SeriesResolver /// </summary> - [Export(typeof(IBaseItemResolver))] public class SeriesResolver : BaseFolderResolver<Series> { /// <summary> diff --git a/MediaBrowser.Controller/Resolvers/VideoResolver.cs b/MediaBrowser.Controller/Resolvers/VideoResolver.cs index bfb364349b..5f2f8d9544 100644 --- a/MediaBrowser.Controller/Resolvers/VideoResolver.cs +++ b/MediaBrowser.Controller/Resolvers/VideoResolver.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Model.Entities; using System; -using System.ComponentModel.Composition; using System.IO; namespace MediaBrowser.Controller.Resolvers @@ -10,7 +9,6 @@ namespace MediaBrowser.Controller.Resolvers /// <summary> /// Resolves a Path into a Video /// </summary> - [Export(typeof(IBaseItemResolver))] public class VideoResolver : BaseVideoResolver<Video> { /// <summary> diff --git a/MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs b/MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs index d3d30ed771..1a64bb8532 100644 --- a/MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs +++ b/MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs @@ -1,19 +1,30 @@ using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller.Entities; -using MediaBrowser.Model.Tasks; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Controller.ScheduledTasks { - [Export(typeof(IScheduledTask))] + /// <summary> + /// Class ChapterImagesTask + /// </summary> class ChapterImagesTask : BaseScheduledTask<Kernel> { /// <summary> + /// Initializes a new instance of the <see cref="ChapterImagesTask" /> class. + /// </summary> + /// <param name="kernel">The kernel.</param> + /// <param name="logger"></param> + public ChapterImagesTask(Kernel kernel, ITaskManager taskManager, ILogger logger) + : base(kernel, taskManager, logger) + { + } + + /// <summary> /// Creates the triggers that define when the task will run /// </summary> /// <returns>IEnumerable{BaseTaskTrigger}.</returns> diff --git a/MediaBrowser.Controller/ScheduledTasks/ImageCleanupTask.cs b/MediaBrowser.Controller/ScheduledTasks/ImageCleanupTask.cs index 57fc280deb..8dd0895c96 100644 --- a/MediaBrowser.Controller/ScheduledTasks/ImageCleanupTask.cs +++ b/MediaBrowser.Controller/ScheduledTasks/ImageCleanupTask.cs @@ -1,11 +1,9 @@ -using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.ScheduledTasks; +using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Model.Tasks; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading; @@ -16,10 +14,19 @@ namespace MediaBrowser.Controller.ScheduledTasks /// <summary> /// Class ImageCleanupTask /// </summary> - [Export(typeof(IScheduledTask))] public class ImageCleanupTask : BaseScheduledTask<Kernel> { /// <summary> + /// Initializes a new instance of the <see cref="ImageCleanupTask" /> class. + /// </summary> + /// <param name="kernel">The kernel.</param> + /// <param name="logger"></param> + public ImageCleanupTask(Kernel kernel, ITaskManager taskManager, ILogger logger) + : base(kernel, taskManager, logger) + { + } + + /// <summary> /// Creates the triggers that define when the task will run /// </summary> /// <returns>IEnumerable{BaseTaskTrigger}.</returns> diff --git a/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs b/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs index 2a91f07160..ee55ff2e9e 100644 --- a/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs +++ b/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs @@ -1,7 +1,7 @@ using MediaBrowser.Common.ScheduledTasks; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Threading; using System.Threading.Tasks; @@ -10,10 +10,19 @@ namespace MediaBrowser.Controller.ScheduledTasks /// <summary> /// Class PeopleValidationTask /// </summary> - [Export(typeof(IScheduledTask))] public class PeopleValidationTask : BaseScheduledTask<Kernel> { /// <summary> + /// Initializes a new instance of the <see cref="PeopleValidationTask" /> class. + /// </summary> + /// <param name="kernel">The kernel.</param> + /// <param name="logger"></param> + public PeopleValidationTask(Kernel kernel, ITaskManager taskManager, ILogger logger) + : base(kernel, taskManager, logger) + { + } + + /// <summary> /// Creates the triggers that define when the task will run /// </summary> /// <returns>IEnumerable{BaseTaskTrigger}.</returns> diff --git a/MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs b/MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs index 3d79193d5e..854c3b82f8 100644 --- a/MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs +++ b/MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs @@ -1,9 +1,8 @@ using MediaBrowser.Common.ScheduledTasks; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; -using MediaBrowser.Model.Tasks; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.IO; using System.Linq; using System.Threading; @@ -14,10 +13,19 @@ namespace MediaBrowser.Controller.ScheduledTasks /// <summary> /// Plugin Update Task /// </summary> - [Export(typeof(IScheduledTask))] public class PluginUpdateTask : BaseScheduledTask<Kernel> { /// <summary> + /// Initializes a new instance of the <see cref="PluginUpdateTask" /> class. + /// </summary> + /// <param name="kernel">The kernel.</param> + /// <param name="logger"></param> + public PluginUpdateTask(Kernel kernel, ITaskManager taskManager, ILogger logger) + : base(kernel, taskManager, logger) + { + } + + /// <summary> /// Creates the triggers that define when the task will run /// </summary> /// <returns>IEnumerable{BaseTaskTrigger}.</returns> diff --git a/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs b/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs index f0fcb8aba3..76e60f2ef9 100644 --- a/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs +++ b/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs @@ -1,8 +1,8 @@ using MediaBrowser.Common.ScheduledTasks; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; using System; using System.Collections.Generic; -using System.ComponentModel.Composition; using System.Threading; using System.Threading.Tasks; @@ -11,10 +11,19 @@ namespace MediaBrowser.Controller.ScheduledTasks /// <summary> /// Class RefreshMediaLibraryTask /// </summary> - [Export(typeof(IScheduledTask))] public class RefreshMediaLibraryTask : BaseScheduledTask<Kernel> { /// <summary> + /// Initializes a new instance of the <see cref="RefreshMediaLibraryTask" /> class. + /// </summary> + /// <param name="kernel">The kernel.</param> + /// <param name="logger"></param> + public RefreshMediaLibraryTask(Kernel kernel, ITaskManager taskManager, ILogger logger) + : base(kernel, taskManager, logger) + { + } + + /// <summary> /// Gets the default triggers. /// </summary> /// <returns>IEnumerable{BaseTaskTrigger}.</returns> @@ -22,7 +31,7 @@ namespace MediaBrowser.Controller.ScheduledTasks { return new BaseTaskTrigger[] { - new StartupTrigger(Kernel), + new StartupTrigger(), new SystemEventTrigger{ SystemEvent = SystemEvent.WakeFromSleep}, |
