diff options
10 files changed, 69 insertions, 26 deletions
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index 66822d852..939a17314 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -122,15 +122,19 @@ namespace MediaBrowser.Api.UserLibrary /// The _library manager /// </summary> private readonly ILibraryManager _libraryManager; + private readonly ILibrarySearchEngine _searchEngine; /// <summary> /// Initializes a new instance of the <see cref="ItemsService" /> class. /// </summary> /// <param name="userManager">The user manager.</param> - public ItemsService(IUserManager userManager, ILibraryManager libraryManager) + /// <param name="libraryManager">The library manager.</param> + /// <param name="searchEngine">The search engine.</param> + public ItemsService(IUserManager userManager, ILibraryManager libraryManager, ILibrarySearchEngine searchEngine) { _userManager = userManager; _libraryManager = libraryManager; + _searchEngine = searchEngine; } /// <summary> @@ -400,7 +404,7 @@ namespace MediaBrowser.Api.UserLibrary if (!string.IsNullOrEmpty(term)) { - items = _libraryManager.Search(items, request.SearchTerm); + items = _searchEngine.Search(items, request.SearchTerm); } return items; diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs index a69e06460..84a39db69 100644 --- a/MediaBrowser.Controller/Library/ILibraryManager.cs +++ b/MediaBrowser.Controller/Library/ILibraryManager.cs @@ -175,14 +175,6 @@ namespace MediaBrowser.Controller.Library SortOrder sortOrder); /// <summary> - /// Sorts the specified items. - /// </summary> - /// <param name="items">The items.</param> - /// <param name="searchTerm">The search term.</param> - /// <returns>IEnumerable{BaseItem}.</returns> - IEnumerable<BaseItem> Search(IEnumerable<BaseItem> items, string searchTerm); - - /// <summary> /// Ensure supplied item has only one instance throughout /// </summary> /// <param name="item"></param> diff --git a/MediaBrowser.Controller/Library/ILibrarySearchEngine.cs b/MediaBrowser.Controller/Library/ILibrarySearchEngine.cs new file mode 100644 index 000000000..082ebf7b3 --- /dev/null +++ b/MediaBrowser.Controller/Library/ILibrarySearchEngine.cs @@ -0,0 +1,19 @@ +using MediaBrowser.Controller.Entities; +using System.Collections.Generic; + +namespace MediaBrowser.Controller.Library +{ + /// <summary> + /// Interface ILibrarySearchEngine + /// </summary> + public interface ILibrarySearchEngine + { + /// <summary> + /// Sorts the specified items. + /// </summary> + /// <param name="items">The items.</param> + /// <param name="searchTerm">The search term.</param> + /// <returns>IEnumerable{BaseItem}.</returns> + IEnumerable<BaseItem> Search(IEnumerable<BaseItem> items, string searchTerm); + } +} diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index ba9812d33..02f15b94a 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -88,6 +88,7 @@ <Compile Include="Entities\Movies\BoxSet.cs" /> <Compile Include="Entities\Movies\Movie.cs" /> <Compile Include="Entities\Person.cs" /> + <Compile Include="Library\ILibrarySearchEngine.cs" /> <Compile Include="Library\PlaybackProgressEventArgs.cs" /> <Compile Include="Entities\Studio.cs" /> <Compile Include="Entities\Trailer.cs" /> diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index bf21e7500..cf12d6ad5 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -817,21 +817,5 @@ namespace MediaBrowser.Server.Implementations.Library return comparer; } - - /// <summary> - /// Sorts the specified items. - /// </summary> - /// <param name="items">The items.</param> - /// <param name="searchTerm">The search term.</param> - /// <returns>IEnumerable{BaseItem}.</returns> - public IEnumerable<BaseItem> Search(IEnumerable<BaseItem> items, string searchTerm) - { - if (string.IsNullOrEmpty(searchTerm)) - { - throw new ArgumentNullException("searchTerm"); - } - - return items.Where(i => i.Name.StartsWith(searchTerm, StringComparison.OrdinalIgnoreCase)); - } } } diff --git a/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs b/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs new file mode 100644 index 000000000..e0e5c3541 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs @@ -0,0 +1,32 @@ +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace MediaBrowser.Server.Implementations.Library +{ + /// <summary> + /// Class LuceneSearchEngine + /// http://www.codeproject.com/Articles/320219/Lucene-Net-ultra-fast-search-for-MVC-or-WebForms + /// </summary> + public class LuceneSearchEngine : ILibrarySearchEngine + { + /// <summary> + /// Sorts the specified items. + /// </summary> + /// <param name="items">The items.</param> + /// <param name="searchTerm">The search term.</param> + /// <returns>IEnumerable{BaseItem}.</returns> + /// <exception cref="System.ArgumentNullException">searchTerm</exception> + public IEnumerable<BaseItem> Search(IEnumerable<BaseItem> items, string searchTerm) + { + if (string.IsNullOrEmpty(searchTerm)) + { + throw new ArgumentNullException("searchTerm"); + } + + return items.Where(i => i.Name.StartsWith(searchTerm, StringComparison.OrdinalIgnoreCase)); + } + } +} diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 9aac84f29..90ab86fe4 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -125,6 +125,7 @@ <Compile Include="IO\DirectoryWatchers.cs" /> <Compile Include="Library\CoreResolutionIgnoreRule.cs" /> <Compile Include="Library\LibraryManager.cs" /> + <Compile Include="Library\LuceneSearchEngine.cs" /> <Compile Include="Library\ResolverHelper.cs" /> <Compile Include="Library\Resolvers\Audio\AudioResolver.cs" /> <Compile Include="Library\Resolvers\Audio\MusicAlbumResolver.cs" /> diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 7c43b9293..131d0a7e7 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -212,6 +212,8 @@ namespace MediaBrowser.ServerApplication ProviderManager = new ProviderManager(HttpClient, ServerConfigurationManager, DirectoryWatchers, LogManager); RegisterSingleInstance(ProviderManager); + RegisterSingleInstance<ILibrarySearchEngine>(() => new LuceneSearchEngine()); + SetKernelProperties(); SetStaticProperties(); } diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj index cc71d5df6..0d6625872 100644 --- a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj +++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj @@ -119,10 +119,16 @@ <Reference Include="Hardcodet.Wpf.TaskbarNotification"> <HintPath>..\packages\Hardcodet.Wpf.TaskbarNotification.1.0.4.0\lib\net40\Hardcodet.Wpf.TaskbarNotification.dll</HintPath> </Reference> + <Reference Include="ICSharpCode.SharpZipLib"> + <HintPath>..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> + </Reference> <Reference Include="Ionic.Zip, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\DotNetZip.1.9.1.8\lib\net20\Ionic.Zip.dll</HintPath> </Reference> + <Reference Include="Lucene.Net"> + <HintPath>..\packages\Lucene.Net.3.0.3\lib\NET40\Lucene.Net.dll</HintPath> + </Reference> <Reference Include="MediaBrowser.IsoMounter, Version=1.0.4827.21973, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\MediaBrowser.IsoMounting.3.0.51\lib\net45\MediaBrowser.IsoMounter.dll</HintPath> diff --git a/MediaBrowser.ServerApplication/packages.config b/MediaBrowser.ServerApplication/packages.config index 1dcbfc4c0..43836635f 100644 --- a/MediaBrowser.ServerApplication/packages.config +++ b/MediaBrowser.ServerApplication/packages.config @@ -2,10 +2,12 @@ <packages> <package id="DotNetZip" version="1.9.1.8" targetFramework="net45" /> <package id="Hardcodet.Wpf.TaskbarNotification" version="1.0.4.0" targetFramework="net45" /> + <package id="Lucene.Net" version="3.0.3" targetFramework="net45" /> <package id="MediaBrowser.IsoMounting" version="3.0.51" targetFramework="net45" /> <package id="NLog" version="2.0.0.2000" targetFramework="net45" /> <package id="ServiceStack.Common" version="3.9.42" targetFramework="net45" /> <package id="ServiceStack.Text" version="3.9.42" targetFramework="net45" /> + <package id="SharpZipLib" version="0.86.0" targetFramework="net45" /> <package id="SimpleInjector" version="2.0.0-beta5" targetFramework="net45" /> <package id="System.Data.SQLite" version="1.0.84.0" targetFramework="net45" /> </packages>
\ No newline at end of file |
