3.0.5768.1

This commit is contained in:
Luke Pulverenti 2015-10-17 11:05:12 -04:00
parent 317a487229
commit 034c0b95b2
10 changed files with 113 additions and 54 deletions

View File

@ -416,6 +416,8 @@ namespace MediaBrowser.Common.Implementations
/// </summary> /// </summary>
protected virtual void FindParts() protected virtual void FindParts()
{ {
RegisterModules();
ConfigurationManager.AddParts(GetExports<IConfigurationFactory>()); ConfigurationManager.AddParts(GetExports<IConfigurationFactory>());
Plugins = GetExports<IPlugin>(); Plugins = GetExports<IPlugin>();
} }
@ -481,7 +483,6 @@ namespace MediaBrowser.Common.Implementations
IsoManager = new IsoManager(); IsoManager = new IsoManager();
RegisterSingleInstance(IsoManager); RegisterSingleInstance(IsoManager);
RegisterModules();
return Task.FromResult (true); return Task.FromResult (true);
} }
@ -524,6 +525,14 @@ namespace MediaBrowser.Common.Implementations
} }
catch (ReflectionTypeLoadException ex) catch (ReflectionTypeLoadException ex)
{ {
if (ex.LoaderExceptions != null)
{
foreach (var loaderException in ex.LoaderExceptions)
{
Logger.Error("LoaderException: " + loaderException.Message);
}
}
// If it fails we can still get a list of the Types it was able to resolve // If it fails we can still get a list of the Types it was able to resolve
return ex.Types.Where(t => t != null); return ex.Types.Where(t => t != null);
} }

View File

@ -10,6 +10,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using CommonIO; using CommonIO;
using MediaBrowser.Common.Extensions;
namespace MediaBrowser.Common.Implementations.Configuration namespace MediaBrowser.Common.Implementations.Configuration
{ {
@ -33,7 +34,7 @@ namespace MediaBrowser.Common.Implementations.Configuration
/// Occurs when [configuration updating]. /// Occurs when [configuration updating].
/// </summary> /// </summary>
public event EventHandler<ConfigurationUpdateEventArgs> NamedConfigurationUpdating; public event EventHandler<ConfigurationUpdateEventArgs> NamedConfigurationUpdating;
/// <summary> /// <summary>
/// Occurs when [named configuration updated]. /// Occurs when [named configuration updated].
/// </summary> /// </summary>
@ -89,8 +90,8 @@ namespace MediaBrowser.Common.Implementations.Configuration
} }
} }
private ConfigurationStore[] _configurationStores = {}; private ConfigurationStore[] _configurationStores = { };
private IConfigurationFactory[] _configurationFactories = {}; private IConfigurationFactory[] _configurationFactories = { };
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="BaseConfigurationManager" /> class. /// Initializes a new instance of the <see cref="BaseConfigurationManager" /> class.
@ -228,9 +229,15 @@ namespace MediaBrowser.Common.Implementations.Configuration
{ {
var file = GetConfigurationFile(key); var file = GetConfigurationFile(key);
var configurationType = _configurationStores var configurationInfo = _configurationStores
.First(i => string.Equals(i.Key, key, StringComparison.OrdinalIgnoreCase)) .FirstOrDefault(i => string.Equals(i.Key, key, StringComparison.OrdinalIgnoreCase));
.ConfigurationType;
if (configurationInfo == null)
{
throw new ResourceNotFoundException("Configuration with key " + key + " not found.");
}
var configurationType = configurationInfo.ConfigurationType;
lock (_configurationSyncLock) lock (_configurationSyncLock)
{ {
@ -285,7 +292,7 @@ namespace MediaBrowser.Common.Implementations.Configuration
NewConfiguration = configuration NewConfiguration = configuration
}, Logger); }, Logger);
_configurations.AddOrUpdate(key, configuration, (k, v) => configuration); _configurations.AddOrUpdate(key, configuration, (k, v) => configuration);
var path = GetConfigurationFile(key); var path = GetConfigurationFile(key);

View File

@ -465,6 +465,13 @@ namespace MediaBrowser.Providers.Manager
var url = image.Url; var url = image.Url;
if (EnableImageStub(item, type))
{
SaveImageStub(item, type, url);
result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate;
return true;
}
try try
{ {
var response = await provider.GetImageResponse(url, cancellationToken).ConfigureAwait(false); var response = await provider.GetImageResponse(url, cancellationToken).ConfigureAwait(false);
@ -488,6 +495,28 @@ namespace MediaBrowser.Providers.Manager
return false; return false;
} }
private bool EnableImageStub(IHasImages item, ImageType type)
{
if (item.LocationType == LocationType.Remote || item.LocationType == LocationType.Virtual)
{
return true;
}
return true;
}
private void SaveImageStub(IHasImages item, ImageType imageType, string url)
{
var newIndex = item.AllowsMultipleImages(imageType) ? item.GetImages(imageType).Count() : 0;
item.SetImage(new ItemImageInfo
{
Path = url,
Type = imageType
}, newIndex);
}
private async Task DownloadBackdrops(IHasImages item, ImageType imageType, int limit, IRemoteImageProvider provider, RefreshResult result, IEnumerable<RemoteImageInfo> images, int minWidth, CancellationToken cancellationToken) private async Task DownloadBackdrops(IHasImages item, ImageType imageType, int limit, IRemoteImageProvider provider, RefreshResult result, IEnumerable<RemoteImageInfo> images, int minWidth, CancellationToken cancellationToken)
{ {
foreach (var image in images.Where(i => i.Type == imageType)) foreach (var image in images.Where(i => i.Type == imageType))
@ -504,6 +533,13 @@ namespace MediaBrowser.Providers.Manager
var url = image.Url; var url = image.Url;
if (EnableImageStub(item, imageType))
{
SaveImageStub(item, imageType, url);
result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate;
return;
}
try try
{ {
var response = await provider.GetImageResponse(url, cancellationToken).ConfigureAwait(false); var response = await provider.GetImageResponse(url, cancellationToken).ConfigureAwait(false);

View File

@ -20,6 +20,9 @@ using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using CommonIO; using CommonIO;
using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Model.Channels;
using MediaBrowser.Providers.TV; using MediaBrowser.Providers.TV;
namespace MediaBrowser.Providers.Movies namespace MediaBrowser.Providers.Movies
@ -59,6 +62,30 @@ namespace MediaBrowser.Providers.Movies
public bool Supports(IHasImages item) public bool Supports(IHasImages item)
{ {
//var channelItem = item as IChannelMediaItem;
//if (channelItem != null)
//{
// if (channelItem.ContentType == ChannelMediaContentType.Movie)
// {
// return true;
// }
// if (channelItem.ContentType == ChannelMediaContentType.MovieExtra)
// {
// if (channelItem.ExtraType == ExtraType.Trailer)
// {
// return true;
// }
// }
//}
// Supports images for tv movies
//var tvProgram = item as LiveTvProgram;
//if (tvProgram != null && tvProgram.IsMovie)
//{
// return true;
//}
return item is Movie || item is BoxSet || item is MusicVideo; return item is Movie || item is BoxSet || item is MusicVideo;
} }

View File

@ -71,15 +71,6 @@ namespace MediaBrowser.Providers.Movies
public IEnumerable<ImageType> GetSupportedImages(IHasImages item) public IEnumerable<ImageType> GetSupportedImages(IHasImages item)
{ {
if (item is ChannelVideoItem || item is LiveTvProgram)
{
// Too many channel items to allow backdrops here
return new List<ImageType>
{
ImageType.Primary
};
}
return new List<ImageType> return new List<ImageType>
{ {
ImageType.Primary, ImageType.Primary,

View File

@ -42,6 +42,7 @@ namespace MediaBrowser.Server.Implementations.Channels
private readonly IFileSystem _fileSystem; private readonly IFileSystem _fileSystem;
private readonly IJsonSerializer _jsonSerializer; private readonly IJsonSerializer _jsonSerializer;
private readonly IHttpClient _httpClient; private readonly IHttpClient _httpClient;
private readonly IProviderManager _providerManager;
private readonly ILocalizationManager _localization; private readonly ILocalizationManager _localization;
private readonly ConcurrentDictionary<Guid, bool> _refreshedItems = new ConcurrentDictionary<Guid, bool>(); private readonly ConcurrentDictionary<Guid, bool> _refreshedItems = new ConcurrentDictionary<Guid, bool>();
@ -51,7 +52,7 @@ namespace MediaBrowser.Server.Implementations.Channels
private Timer _refreshTimer; private Timer _refreshTimer;
private Timer _clearDownloadCountsTimer; private Timer _clearDownloadCountsTimer;
public ChannelManager(IUserManager userManager, IDtoService dtoService, ILibraryManager libraryManager, ILogger logger, IServerConfigurationManager config, IFileSystem fileSystem, IUserDataManager userDataManager, IJsonSerializer jsonSerializer, ILocalizationManager localization, IHttpClient httpClient) public ChannelManager(IUserManager userManager, IDtoService dtoService, ILibraryManager libraryManager, ILogger logger, IServerConfigurationManager config, IFileSystem fileSystem, IUserDataManager userDataManager, IJsonSerializer jsonSerializer, ILocalizationManager localization, IHttpClient httpClient, IProviderManager providerManager)
{ {
_userManager = userManager; _userManager = userManager;
_dtoService = dtoService; _dtoService = dtoService;
@ -63,6 +64,7 @@ namespace MediaBrowser.Server.Implementations.Channels
_jsonSerializer = jsonSerializer; _jsonSerializer = jsonSerializer;
_localization = localization; _localization = localization;
_httpClient = httpClient; _httpClient = httpClient;
_providerManager = providerManager;
_refreshTimer = new Timer(s => _refreshedItems.Clear(), null, TimeSpan.FromHours(3), TimeSpan.FromHours(3)); _refreshTimer = new Timer(s => _refreshedItems.Clear(), null, TimeSpan.FromHours(3), TimeSpan.FromHours(3));
_clearDownloadCountsTimer = new Timer(s => _downloadCounts.Clear(), null, TimeSpan.FromHours(24), TimeSpan.FromHours(24)); _clearDownloadCountsTimer = new Timer(s => _downloadCounts.Clear(), null, TimeSpan.FromHours(24), TimeSpan.FromHours(24));
@ -649,7 +651,7 @@ namespace MediaBrowser.Server.Implementations.Channels
var internalItems = await Task.WhenAll(itemTasks).ConfigureAwait(false); var internalItems = await Task.WhenAll(itemTasks).ConfigureAwait(false);
internalItems = ApplyFilters(internalItems, query.Filters, user).ToArray(); internalItems = ApplyFilters(internalItems, query.Filters, user).ToArray();
await RefreshIfNeeded(internalItems, new Progress<double>(), cancellationToken).ConfigureAwait(false); RefreshIfNeeded(internalItems);
if (query.StartIndex.HasValue) if (query.StartIndex.HasValue)
{ {
@ -814,7 +816,7 @@ namespace MediaBrowser.Server.Implementations.Channels
var internalResult = await GetAllMediaInternal(query, cancellationToken).ConfigureAwait(false); var internalResult = await GetAllMediaInternal(query, cancellationToken).ConfigureAwait(false);
await RefreshIfNeeded(internalResult.Items, new Progress<double>(), cancellationToken).ConfigureAwait(false); RefreshIfNeeded(internalResult.Items);
var dtoOptions = new DtoOptions(); var dtoOptions = new DtoOptions();
@ -954,7 +956,7 @@ namespace MediaBrowser.Server.Implementations.Channels
} }
} }
return await GetReturnItems(internalItems, providerTotalRecordCount, user, query, progress, cancellationToken).ConfigureAwait(false); return await GetReturnItems(internalItems, providerTotalRecordCount, user, query).ConfigureAwait(false);
} }
public async Task<QueryResult<BaseItemDto>> GetChannelItems(ChannelItemQuery query, CancellationToken cancellationToken) public async Task<QueryResult<BaseItemDto>> GetChannelItems(ChannelItemQuery query, CancellationToken cancellationToken)
@ -1123,9 +1125,7 @@ namespace MediaBrowser.Server.Implementations.Channels
private async Task<QueryResult<BaseItem>> GetReturnItems(IEnumerable<BaseItem> items, private async Task<QueryResult<BaseItem>> GetReturnItems(IEnumerable<BaseItem> items,
int? totalCountFromProvider, int? totalCountFromProvider,
User user, User user,
ChannelItemQuery query, ChannelItemQuery query)
IProgress<double> progress,
CancellationToken cancellationToken)
{ {
items = ApplyFilters(items, query.Filters, user); items = ApplyFilters(items, query.Filters, user);
@ -1148,7 +1148,7 @@ namespace MediaBrowser.Server.Implementations.Channels
} }
var returnItemArray = all.ToArray(); var returnItemArray = all.ToArray();
await RefreshIfNeeded(returnItemArray, progress, cancellationToken).ConfigureAwait(false); RefreshIfNeeded(returnItemArray);
return new QueryResult<BaseItem> return new QueryResult<BaseItem>
{ {
@ -1272,32 +1272,22 @@ namespace MediaBrowser.Server.Implementations.Channels
return item; return item;
} }
private async Task RefreshIfNeeded(BaseItem[] programs, IProgress<double> progress, CancellationToken cancellationToken) private void RefreshIfNeeded(BaseItem[] programs)
{ {
var numComplete = 0;
var numItems = programs.Length;
foreach (var program in programs) foreach (var program in programs)
{ {
await RefreshIfNeeded(program, cancellationToken).ConfigureAwait(false); RefreshIfNeeded(program);
numComplete++;
double percent = numComplete;
percent /= numItems;
progress.Report(percent * 100);
} }
} }
private readonly Task _cachedTask = Task.FromResult(true); private void RefreshIfNeeded(BaseItem program)
private Task RefreshIfNeeded(BaseItem program, CancellationToken cancellationToken)
{ {
if (!_refreshedItems.ContainsKey(program.Id)) if (!_refreshedItems.ContainsKey(program.Id))
{ {
_refreshedItems.TryAdd(program.Id, true); _refreshedItems.TryAdd(program.Id, true);
return program.RefreshMetadata(cancellationToken); _providerManager.QueueRefresh(program.Id, new MetadataRefreshOptions(_fileSystem));
} }
return _cachedTask;
} }
internal IChannel GetChannelProvider(Channel channel) internal IChannel GetChannelProvider(Channel channel)

View File

@ -225,19 +225,18 @@ namespace MediaBrowser.Server.Implementations.Persistence
var columns = string.Join(",", _mediaStreamSaveColumns); var columns = string.Join(",", _mediaStreamSaveColumns);
string[] queries = { string[] queries = {
"INSERT INTO mediastreams("+columns+") SELECT "+columns+" FROM MediaInfoOld.mediastreams;" "REPLACE INTO mediastreams("+columns+") SELECT "+columns+" FROM MediaInfoOld.mediastreams;"
}; };
try try
{ {
_connection.RunQueries(queries, _logger); _connection.RunQueries(queries, _logger);
File.Delete(file);
} }
catch (Exception ex) catch (Exception ex)
{ {
throw ex; _logger.ErrorException("Error migrating media info database", ex);
} }
File.Delete(file);
} }
private void MigrateChapters(string file) private void MigrateChapters(string file)
@ -247,19 +246,18 @@ namespace MediaBrowser.Server.Implementations.Persistence
SqliteExtensions.Attach(_connection, backupFile, "ChaptersOld"); SqliteExtensions.Attach(_connection, backupFile, "ChaptersOld");
string[] queries = { string[] queries = {
"INSERT INTO "+ChaptersTableName+"(ItemId, ChapterIndex, StartPositionTicks, Name, ImagePath) SELECT ItemId, ChapterIndex, StartPositionTicks, Name, ImagePath FROM ChaptersOld.Chapters;" "REPLACE INTO "+ChaptersTableName+"(ItemId, ChapterIndex, StartPositionTicks, Name, ImagePath) SELECT ItemId, ChapterIndex, StartPositionTicks, Name, ImagePath FROM ChaptersOld.Chapters;"
}; };
try try
{ {
_connection.RunQueries(queries, _logger); _connection.RunQueries(queries, _logger);
File.Delete(file);
} }
catch (Exception ex) catch (Exception ex)
{ {
throw ex; _logger.ErrorException("Error migrating chapter database", ex);
} }
File.Delete(file);
} }
/// <summary> /// <summary>

View File

@ -8,7 +8,6 @@ using MediaBrowser.Common.Events;
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Implementations; using MediaBrowser.Common.Implementations;
using MediaBrowser.Common.Implementations.ScheduledTasks; using MediaBrowser.Common.Implementations.ScheduledTasks;
using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Common.Progress; using MediaBrowser.Common.Progress;
using MediaBrowser.Controller; using MediaBrowser.Controller;
@ -477,7 +476,7 @@ namespace MediaBrowser.Server.Startup.Common
progress.Report(15); progress.Report(15);
ChannelManager = new ChannelManager(UserManager, DtoService, LibraryManager, LogManager.GetLogger("ChannelManager"), ServerConfigurationManager, FileSystemManager, UserDataManager, JsonSerializer, LocalizationManager, HttpClient); ChannelManager = new ChannelManager(UserManager, DtoService, LibraryManager, LogManager.GetLogger("ChannelManager"), ServerConfigurationManager, FileSystemManager, UserDataManager, JsonSerializer, LocalizationManager, HttpClient, ProviderManager);
RegisterSingleInstance(ChannelManager); RegisterSingleInstance(ChannelManager);
MediaSourceManager = new MediaSourceManager(ItemRepository, UserManager, LibraryManager, LogManager.GetLogger("MediaSourceManager"), JsonSerializer, FileSystemManager); MediaSourceManager = new MediaSourceManager(ItemRepository, UserManager, LibraryManager, LogManager.GetLogger("MediaSourceManager"), JsonSerializer, FileSystemManager);
@ -524,8 +523,7 @@ namespace MediaBrowser.Server.Startup.Common
await RegisterMediaEncoder(innerProgress).ConfigureAwait(false); await RegisterMediaEncoder(innerProgress).ConfigureAwait(false);
progress.Report(90); progress.Report(90);
EncodingManager = new EncodingManager(FileSystemManager, Logger, EncodingManager = new EncodingManager(FileSystemManager, Logger, MediaEncoder, ChapterManager);
MediaEncoder, ChapterManager);
RegisterSingleInstance(EncodingManager); RegisterSingleInstance(EncodingManager);
var sharingRepo = new SharingRepository(LogManager, ApplicationPaths); var sharingRepo = new SharingRepository(LogManager, ApplicationPaths);

View File

@ -20,9 +20,9 @@ namespace MediaBrowser.Server.Startup.Common.Migrations
_taskManager = taskManager; _taskManager = taskManager;
} }
public void Run() public async void Run()
{ {
var name = "5767"; var name = "5767.1";
if (_config.Configuration.Migrations.Contains(name, StringComparer.OrdinalIgnoreCase)) if (_config.Configuration.Migrations.Contains(name, StringComparer.OrdinalIgnoreCase))
{ {
@ -38,6 +38,9 @@ namespace MediaBrowser.Server.Startup.Common.Migrations
_taskManager.QueueScheduledTask<RefreshMediaLibraryTask>(); _taskManager.QueueScheduledTask<RefreshMediaLibraryTask>();
}); });
// Wait a few minutes before marking this as done. Make sure the server doesn't get restarted.
await Task.Delay(300000).ConfigureAwait(false);
var list = _config.Configuration.Migrations.ToList(); var list = _config.Configuration.Migrations.ToList();
list.Add(name); list.Add(name);
_config.Configuration.Migrations = list.ToArray(); _config.Configuration.Migrations = list.ToArray();

View File

@ -1,4 +1,4 @@
using System.Reflection; using System.Reflection;
//[assembly: AssemblyVersion("3.0.*")] //[assembly: AssemblyVersion("3.0.*")]
[assembly: AssemblyVersion("3.0.5768.0")] [assembly: AssemblyVersion("3.0.5768.1")]