diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-02-08 15:02:35 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-02-08 15:02:35 -0500 |
| commit | d0f1a836216e87d6e03c7c3ebdbd78c0e7ddcf76 (patch) | |
| tree | 3c53dde326431758a0e93368495035ec5e8510ab /MediaBrowser.Server.Implementations | |
| parent | 12757d094b4998be8b56fc51e5199358d819d0da (diff) | |
added more image providers
Diffstat (limited to 'MediaBrowser.Server.Implementations')
5 files changed, 152 insertions, 188 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index 998895cbf..f355f4bf6 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Resolvers; diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index fe4283368..8489624fc 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -192,6 +192,7 @@ <Compile Include="Roku\RokuControllerFactory.cs" /> <Compile Include="ScheduledTasks\PeopleValidationTask.cs" /> <Compile Include="ScheduledTasks\ChapterImagesTask.cs" /> + <Compile Include="ScheduledTasks\RefreshIntrosTask.cs" /> <Compile Include="ScheduledTasks\RefreshMediaLibraryTask.cs" /> <Compile Include="ServerApplicationPaths.cs" /> <Compile Include="ServerManager\ServerManager.cs" /> diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs index 8a82c062d..eb6e142c1 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs @@ -1,10 +1,9 @@ -using System.IO; -using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Configuration; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Logging; using System; -using System.Collections.Generic; using System.Data; +using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -17,8 +16,6 @@ namespace MediaBrowser.Server.Implementations.Persistence private readonly ILogger _logger; - private IDbCommand _deleteInfosCommand; - private IDbCommand _saveInfoCommand; private IDbCommand _saveStatusCommand; private readonly IApplicationPaths _appPaths; @@ -48,16 +45,13 @@ namespace MediaBrowser.Server.Implementations.Persistence /// <returns>Task.</returns> public async Task Initialize() { - var dbFile = Path.Combine(_appPaths.DataPath, "providerinfo.db"); + var dbFile = Path.Combine(_appPaths.DataPath, "refreshinfo.db"); _connection = await SqliteExtensions.ConnectToDb(dbFile, _logger).ConfigureAwait(false); string[] queries = { - "create table if not exists providerinfos (ItemId GUID, ProviderId GUID, ProviderVersion TEXT, FileStamp GUID, LastRefreshStatus TEXT, LastRefreshed datetime, PRIMARY KEY (ItemId, ProviderId))", - "create index if not exists idx_providerinfos on providerinfos(ItemId, ProviderId)", - - "create table if not exists MetadataStatus (ItemId GUID PRIMARY KEY, DateLastMetadataRefresh datetime, DateLastImagesRefresh datetime, LastStatus TEXT, LastErrorMessage TEXT, MetadataProvidersRefreshed TEXT, ImageProvidersRefreshed TEXT)", + "create table if not exists MetadataStatus (ItemId GUID PRIMARY KEY, ItemName TEXT, SeriesName TEXT, DateLastMetadataRefresh datetime, DateLastImagesRefresh datetime, LastStatus TEXT, LastErrorMessage TEXT, MetadataProvidersRefreshed TEXT, ImageProvidersRefreshed TEXT)", "create index if not exists idx_MetadataStatus on MetadataStatus(ItemId)", //pragmas @@ -73,21 +67,11 @@ namespace MediaBrowser.Server.Implementations.Persistence _shrinkMemoryTimer = new SqliteShrinkMemoryTimer(_connection, _writeLock, _logger); } - private static readonly string[] SaveHistoryColumns = - { - "ItemId", - "ProviderId", - "ProviderVersion", - "FileStamp", - "LastRefreshStatus", - "LastRefreshed" - }; - - private readonly string[] _historySelectColumns = SaveHistoryColumns.Skip(1).ToArray(); - private static readonly string[] StatusColumns = { "ItemId", + "ItemName", + "SeriesName", "DateLastMetadataRefresh", "DateLastImagesRefresh", "LastStatus", @@ -106,21 +90,6 @@ namespace MediaBrowser.Server.Implementations.Persistence /// </summary> private void PrepareStatements() { - _deleteInfosCommand = _connection.CreateCommand(); - _deleteInfosCommand.CommandText = "delete from providerinfos where ItemId=@ItemId"; - _deleteInfosCommand.Parameters.Add(_deleteInfosCommand, "@ItemId"); - - _saveInfoCommand = _connection.CreateCommand(); - - _saveInfoCommand.CommandText = string.Format("replace into providerinfos ({0}) values ({1})", - string.Join(",", SaveHistoryColumns), - string.Join(",", SaveHistoryColumns.Select(i => "@" + i).ToArray())); - - foreach (var col in SaveHistoryColumns) - { - _saveInfoCommand.Parameters.Add(_saveInfoCommand, "@" + col); - } - _saveStatusCommand = _connection.CreateCommand(); _saveStatusCommand.CommandText = string.Format("replace into MetadataStatus ({0}) values ({1})", @@ -133,132 +102,6 @@ namespace MediaBrowser.Server.Implementations.Persistence } } - public IEnumerable<BaseProviderInfo> GetProviderHistory(Guid itemId) - { - if (itemId == Guid.Empty) - { - throw new ArgumentNullException("itemId"); - } - - using (var cmd = _connection.CreateCommand()) - { - var cmdText = "select " + string.Join(",", _historySelectColumns) + " from providerinfos where"; - - cmdText += " ItemId=@ItemId"; - cmd.Parameters.Add(cmd, "@ItemId", DbType.Guid).Value = itemId; - - cmd.CommandText = cmdText; - - using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult)) - { - while (reader.Read()) - { - yield return GetBaseProviderInfo(reader); - } - } - } - } - - /// <summary> - /// Gets the base provider information. - /// </summary> - /// <param name="reader">The reader.</param> - /// <returns>BaseProviderInfo.</returns> - private BaseProviderInfo GetBaseProviderInfo(IDataReader reader) - { - var item = new BaseProviderInfo - { - ProviderId = reader.GetGuid(0) - }; - - if (!reader.IsDBNull(1)) - { - item.ProviderVersion = reader.GetString(1); - } - - item.FileStamp = reader.GetGuid(2); - item.LastRefreshStatus = (ProviderRefreshStatus)Enum.Parse(typeof(ProviderRefreshStatus), reader.GetString(3), true); - item.LastRefreshed = reader.GetDateTime(4).ToUniversalTime(); - - return item; - } - - public async Task SaveProviderHistory(Guid id, IEnumerable<BaseProviderInfo> infos, CancellationToken cancellationToken) - { - if (id == Guid.Empty) - { - throw new ArgumentNullException("id"); - } - - if (infos == null) - { - throw new ArgumentNullException("infos"); - } - - cancellationToken.ThrowIfCancellationRequested(); - - await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false); - - IDbTransaction transaction = null; - - try - { - transaction = _connection.BeginTransaction(); - - _deleteInfosCommand.GetParameter(0).Value = id; - - _deleteInfosCommand.Transaction = transaction; - - _deleteInfosCommand.ExecuteNonQuery(); - - foreach (var stream in infos) - { - cancellationToken.ThrowIfCancellationRequested(); - - _saveInfoCommand.GetParameter(0).Value = id; - _saveInfoCommand.GetParameter(1).Value = stream.ProviderId; - _saveInfoCommand.GetParameter(2).Value = stream.ProviderVersion; - _saveInfoCommand.GetParameter(3).Value = stream.FileStamp; - _saveInfoCommand.GetParameter(4).Value = stream.LastRefreshStatus.ToString(); - _saveInfoCommand.GetParameter(5).Value = stream.LastRefreshed; - - _saveInfoCommand.Transaction = transaction; - _saveInfoCommand.ExecuteNonQuery(); - } - - transaction.Commit(); - } - catch (OperationCanceledException) - { - if (transaction != null) - { - transaction.Rollback(); - } - - throw; - } - catch (Exception e) - { - _logger.ErrorException("Failed to save provider info:", e); - - if (transaction != null) - { - transaction.Rollback(); - } - - throw; - } - finally - { - if (transaction != null) - { - transaction.Dispose(); - } - - _writeLock.Release(); - } - } - public MetadataStatus GetMetadataStatus(Guid itemId) { if (itemId == Guid.Empty) @@ -296,32 +139,42 @@ namespace MediaBrowser.Server.Implementations.Persistence if (!reader.IsDBNull(1)) { - result.DateLastMetadataRefresh = reader.GetDateTime(1).ToUniversalTime(); + result.ItemName = reader.GetString(1); } if (!reader.IsDBNull(2)) { - result.DateLastImagesRefresh = reader.GetDateTime(2).ToUniversalTime(); + result.SeriesName = reader.GetString(2); } if (!reader.IsDBNull(3)) { - result.LastStatus = (ProviderRefreshStatus)Enum.Parse(typeof(ProviderRefreshStatus), reader.GetString(3), true); + result.DateLastMetadataRefresh = reader.GetDateTime(3).ToUniversalTime(); } if (!reader.IsDBNull(4)) { - result.LastErrorMessage = reader.GetString(4); + result.DateLastImagesRefresh = reader.GetDateTime(4).ToUniversalTime(); } if (!reader.IsDBNull(5)) { - result.MetadataProvidersRefreshed = reader.GetString(5).Split('|').Where(i => !string.IsNullOrEmpty(i)).Select(i => new Guid(i)).ToList(); + result.LastStatus = (ProviderRefreshStatus)Enum.Parse(typeof(ProviderRefreshStatus), reader.GetString(5), true); } if (!reader.IsDBNull(6)) { - result.ImageProvidersRefreshed = reader.GetString(6).Split('|').Where(i => !string.IsNullOrEmpty(i)).Select(i => new Guid(i)).ToList(); + result.LastErrorMessage = reader.GetString(6); + } + + if (!reader.IsDBNull(7)) + { + result.MetadataProvidersRefreshed = reader.GetString(7).Split('|').Where(i => !string.IsNullOrEmpty(i)).Select(i => new Guid(i)).ToList(); + } + + if (!reader.IsDBNull(8)) + { + result.ImageProvidersRefreshed = reader.GetString(8).Split('|').Where(i => !string.IsNullOrEmpty(i)).Select(i => new Guid(i)).ToList(); } return result; @@ -345,12 +198,14 @@ namespace MediaBrowser.Server.Implementations.Persistence transaction = _connection.BeginTransaction(); _saveStatusCommand.GetParameter(0).Value = status.ItemId; - _saveStatusCommand.GetParameter(1).Value = status.DateLastMetadataRefresh; - _saveStatusCommand.GetParameter(2).Value = status.DateLastImagesRefresh; - _saveStatusCommand.GetParameter(3).Value = status.LastStatus.ToString(); - _saveStatusCommand.GetParameter(4).Value = status.LastErrorMessage; - _saveStatusCommand.GetParameter(5).Value = string.Join("|", status.MetadataProvidersRefreshed.ToArray()); - _saveStatusCommand.GetParameter(6).Value = string.Join("|", status.ImageProvidersRefreshed.ToArray()); + _saveStatusCommand.GetParameter(1).Value = status.ItemName; + _saveStatusCommand.GetParameter(2).Value = status.SeriesName; + _saveStatusCommand.GetParameter(3).Value = status.DateLastMetadataRefresh; + _saveStatusCommand.GetParameter(4).Value = status.DateLastImagesRefresh; + _saveStatusCommand.GetParameter(5).Value = status.LastStatus.ToString(); + _saveStatusCommand.GetParameter(6).Value = status.LastErrorMessage; + _saveStatusCommand.GetParameter(7).Value = string.Join("|", status.MetadataProvidersRefreshed.ToArray()); + _saveStatusCommand.GetParameter(8).Value = string.Join("|", status.ImageProvidersRefreshed.ToArray()); _saveStatusCommand.Transaction = transaction; diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs new file mode 100644 index 000000000..a65b46f64 --- /dev/null +++ b/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs @@ -0,0 +1,103 @@ +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Library; +using MediaBrowser.Model.Logging; +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Server.Implementations.ScheduledTasks +{ + /// <summary> + /// Class RefreshIntrosTask + /// </summary> + public class RefreshIntrosTask : ILibraryPostScanTask + { + /// <summary> + /// The _library manager + /// </summary> + private readonly ILibraryManager _libraryManager; + /// <summary> + /// The _logger + /// </summary> + private readonly ILogger _logger; + + private readonly IFileSystem _fileSystem; + + /// <summary> + /// Initializes a new instance of the <see cref="RefreshIntrosTask" /> class. + /// </summary> + /// <param name="libraryManager">The library manager.</param> + /// <param name="logger">The logger.</param> + /// <param name="fileSystem">The file system.</param> + public RefreshIntrosTask(ILibraryManager libraryManager, ILogger logger, IFileSystem fileSystem) + { + _libraryManager = libraryManager; + _logger = logger; + _fileSystem = fileSystem; + } + + /// <summary> + /// Runs the specified progress. + /// </summary> + /// <param name="progress">The progress.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>Task.</returns> + public async Task Run(IProgress<double> progress, CancellationToken cancellationToken) + { + var files = _libraryManager.GetAllIntroFiles().ToList(); + + var numComplete = 0; + + foreach (var file in files) + { + cancellationToken.ThrowIfCancellationRequested(); + + try + { + await RefreshIntro(file, cancellationToken).ConfigureAwait(false); + } + catch (OperationCanceledException) + { + throw; + } + catch (Exception ex) + { + _logger.ErrorException("Error refreshing intro {0}", ex, file); + } + + numComplete++; + double percent = numComplete; + percent /= files.Count; + progress.Report(percent * 100); + } + } + + /// <summary> + /// Refreshes the intro. + /// </summary> + /// <param name="path">The path.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>Task.</returns> + private async Task RefreshIntro(string path, CancellationToken cancellationToken) + { + var item = _libraryManager.ResolvePath(_fileSystem.GetFileSystemInfo(path)); + + if (item == null) + { + _logger.Error("Intro resolver returned null for {0}", path); + return; + } + + var dbItem = _libraryManager.GetItemById(item.Id); + + if (dbItem != null) + { + item = dbItem; + } + + // Force the save if it's a new item + await item.RefreshMetadata(cancellationToken).ConfigureAwait(false); + } + } +} diff --git a/MediaBrowser.Server.Implementations/ServerApplicationPaths.cs b/MediaBrowser.Server.Implementations/ServerApplicationPaths.cs index abb60a1d5..c36c49df0 100644 --- a/MediaBrowser.Server.Implementations/ServerApplicationPaths.cs +++ b/MediaBrowser.Server.Implementations/ServerApplicationPaths.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.Implementations; +using System; +using MediaBrowser.Common.Implementations; using MediaBrowser.Controller; using System.IO; @@ -214,18 +215,6 @@ namespace MediaBrowser.Server.Implementations } /// <summary> - /// Gets the images data path. - /// </summary> - /// <value>The images data path.</value> - public string DownloadedImagesDataPath - { - get - { - return Path.Combine(DataPath, "remote-images"); - } - } - - /// <summary> /// Gets the artists path. /// </summary> /// <value>The artists path.</value> @@ -249,5 +238,20 @@ namespace MediaBrowser.Server.Implementations return Path.Combine(ItemsByNamePath, "GameGenre"); } } + + public string InternalMetadataPath + { + get + { + return Path.Combine(DataPath, "metadata"); + } + } + + public string GetInternalMetadataPath(Guid id) + { + var idString = id.ToString("N"); + + return Path.Combine(InternalMetadataPath, idString.Substring(0, 2), idString); + } } } |
