aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-10-14 01:02:30 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-10-14 01:02:30 -0400
commit1f7e1f5c4a9051c7fa13a09b4d895cf58ee1b3bf (patch)
tree71574dbddce9fd8a6d668d2146eac5aaa1e9bf8a
parent574a7962808f65108b62d9b1426e533e2a104375 (diff)
boxset image fixes
-rw-r--r--MediaBrowser.Api/StartupWizardService.cs1
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs3
-rw-r--r--MediaBrowser.Controller/Entities/IHasMetadata.cs6
-rw-r--r--MediaBrowser.Controller/Providers/ImageRefreshMode.cs8
-rw-r--r--MediaBrowser.Model/Configuration/ServerConfiguration.cs2
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs36
-rw-r--r--MediaBrowser.Server.Implementations/Collections/CollectionImageProvider.cs11
-rw-r--r--MediaBrowser.Server.Implementations/Collections/CollectionManager.cs15
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs6
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs21
-rw-r--r--MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs2
-rw-r--r--MediaBrowser.Server.Implementations/UserViews/CollectionFolderImageProvider.cs2
-rw-r--r--MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs2
14 files changed, 95 insertions, 22 deletions
diff --git a/MediaBrowser.Api/StartupWizardService.cs b/MediaBrowser.Api/StartupWizardService.cs
index 962334cdc..399c81ae8 100644
--- a/MediaBrowser.Api/StartupWizardService.cs
+++ b/MediaBrowser.Api/StartupWizardService.cs
@@ -73,6 +73,7 @@ namespace MediaBrowser.Api
_config.Configuration.DisableXmlSavers = true;
_config.Configuration.DisableStartupScan = true;
_config.Configuration.EnableUserViews = true;
+ _config.Configuration.EnableDateLastRefresh = true;
_config.SaveConfiguration();
}
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 59d2a4bc7..22ca607ba 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -342,6 +342,9 @@ namespace MediaBrowser.Controller.Entities
public DateTime DateLastSaved { get; set; }
+ [IgnoreDataMember]
+ public DateTime DateLastRefreshed { get; set; }
+
/// <summary>
/// The logger
/// </summary>
diff --git a/MediaBrowser.Controller/Entities/IHasMetadata.cs b/MediaBrowser.Controller/Entities/IHasMetadata.cs
index b8c3e2823..4eb25718e 100644
--- a/MediaBrowser.Controller/Entities/IHasMetadata.cs
+++ b/MediaBrowser.Controller/Entities/IHasMetadata.cs
@@ -31,6 +31,12 @@ namespace MediaBrowser.Controller.Entities
DateTime DateLastSaved { get; set; }
/// <summary>
+ /// Gets or sets the date last refreshed.
+ /// </summary>
+ /// <value>The date last refreshed.</value>
+ DateTime DateLastRefreshed { get; set; }
+
+ /// <summary>
/// Updates to repository.
/// </summary>
/// <param name="updateReason">The update reason.</param>
diff --git a/MediaBrowser.Controller/Providers/ImageRefreshMode.cs b/MediaBrowser.Controller/Providers/ImageRefreshMode.cs
index df10c91f6..73ef4b8cd 100644
--- a/MediaBrowser.Controller/Providers/ImageRefreshMode.cs
+++ b/MediaBrowser.Controller/Providers/ImageRefreshMode.cs
@@ -8,14 +8,14 @@ namespace MediaBrowser.Controller.Providers
None = 0,
/// <summary>
- /// The default
+ /// Existing images will be validated
/// </summary>
- Default = 1,
+ ValidationOnly = 1,
/// <summary>
- /// Existing images will be validated
+ /// The default
/// </summary>
- ValidationOnly = 2,
+ Default = 2,
/// <summary>
/// All providers will be executed to search for new metadata
diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
index 5121fcd6f..06a35ac0d 100644
--- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs
+++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
@@ -224,6 +224,8 @@ namespace MediaBrowser.Model.Configuration
public bool EnableVideoFrameByFrameAnalysis { get; set; }
+ public bool EnableDateLastRefresh { get; set; }
+
/// <summary>
/// Initializes a new instance of the <see cref="ServerConfiguration" /> class.
/// </summary>
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index f40f17588..316809fa8 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -12,6 +12,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using CommonIO;
+using MediaBrowser.Controller.Entities.Movies;
namespace MediaBrowser.Providers.Manager
{
@@ -82,7 +83,7 @@ namespace MediaBrowser.Providers.Manager
/// <returns>ProviderResult.</returns>
protected MetadataStatus GetLastResult(IHasMetadata item)
{
- if (item.DateLastSaved == default(DateTime))
+ if (GetLastRefreshDate(item) == default(DateTime))
{
return new MetadataStatus { ItemId = item.Id };
}
@@ -181,11 +182,13 @@ namespace MediaBrowser.Providers.Manager
}
}
- var beforeSaveResult = await BeforeSave(itemOfType, item.DateLastSaved == default(DateTime) || refreshOptions.ReplaceAllMetadata || refreshOptions.MetadataRefreshMode == MetadataRefreshMode.FullRefresh, updateType).ConfigureAwait(false);
+ var isFirstRefresh = GetLastRefreshDate(item) == default(DateTime);
+
+ var beforeSaveResult = await BeforeSave(itemOfType, isFirstRefresh || refreshOptions.ReplaceAllMetadata || refreshOptions.MetadataRefreshMode == MetadataRefreshMode.FullRefresh, updateType).ConfigureAwait(false);
updateType = updateType | beforeSaveResult;
// Save if changes were made, or it's never been saved before
- if (refreshOptions.ForceSave || updateType > ItemUpdateType.None || item.DateLastSaved == default(DateTime) || refreshOptions.ReplaceAllMetadata)
+ if (refreshOptions.ForceSave || updateType > ItemUpdateType.None || isFirstRefresh || refreshOptions.ReplaceAllMetadata)
{
// If any of these properties are set then make sure the updateType is not None, just to force everything to save
if (refreshOptions.ForceSave || refreshOptions.ReplaceAllMetadata)
@@ -193,6 +196,11 @@ namespace MediaBrowser.Providers.Manager
updateType = updateType | ItemUpdateType.MetadataDownload;
}
+ if (refreshOptions.MetadataRefreshMode >= MetadataRefreshMode.Default && refreshOptions.ImageRefreshMode >= ImageRefreshMode.Default)
+ {
+ item.DateLastRefreshed = DateTime.UtcNow;
+ }
+
// Save to database
await SaveItem(metadataResult, updateType, cancellationToken).ConfigureAwait(false);
}
@@ -207,6 +215,26 @@ namespace MediaBrowser.Providers.Manager
return updateType;
}
+ private DateTime GetLastRefreshDate(IHasMetadata item)
+ {
+ if (item.DateLastRefreshed != default(DateTime))
+ {
+ return item.DateLastRefreshed;
+ }
+
+ if (ServerConfigurationManager.Configuration.EnableDateLastRefresh)
+ {
+ return item.DateLastRefreshed;
+ }
+
+ if (item is BoxSet)
+ {
+ return item.DateLastRefreshed;
+ }
+
+ return item.DateLastSaved;
+ }
+
protected async Task SaveItem(MetadataResult<TItemType> result, ItemUpdateType reason, CancellationToken cancellationToken)
{
if (result.Item.SupportsPeople && result.People != null)
@@ -222,7 +250,7 @@ namespace MediaBrowser.Providers.Manager
item.AfterMetadataRefresh();
return _cachedTask;
}
-
+
private readonly Task<ItemUpdateType> _cachedResult = Task.FromResult(ItemUpdateType.None);
/// <summary>
/// Befores the save.
diff --git a/MediaBrowser.Server.Implementations/Collections/CollectionImageProvider.cs b/MediaBrowser.Server.Implementations/Collections/CollectionImageProvider.cs
index b88e45980..5ff182844 100644
--- a/MediaBrowser.Server.Implementations/Collections/CollectionImageProvider.cs
+++ b/MediaBrowser.Server.Implementations/Collections/CollectionImageProvider.cs
@@ -22,6 +22,17 @@ namespace MediaBrowser.Server.Implementations.Collections
{
}
+ protected override bool Supports(IHasImages item)
+ {
+ // Right now this is the only way to prevent this image from getting created ahead of internet image providers
+ if (!item.IsLocked)
+ {
+ return false;
+ }
+
+ return base.Supports(item);
+ }
+
protected override Task<List<BaseItem>> GetItemsWithImages(IHasImages item)
{
var playlist = (BoxSet)item;
diff --git a/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs b/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs
index 8a19ee431..5c98e401f 100644
--- a/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs
+++ b/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs
@@ -73,7 +73,7 @@ namespace MediaBrowser.Server.Implementations.Collections
try
{
- _fileSystem.CreateDirectory(path);
+ _fileSystem.CreateDirectory(path);
var collection = new BoxSet
{
@@ -93,7 +93,12 @@ namespace MediaBrowser.Server.Implementations.Collections
if (options.ItemIdList.Count > 0)
{
- await AddToCollection(collection.Id, options.ItemIdList, false);
+ await AddToCollection(collection.Id, options.ItemIdList, false, new MetadataRefreshOptions(_fileSystem)
+ {
+ // The initial adding of items is going to create a local metadata file
+ // This will cause internet metadata to be skipped as a result
+ MetadataRefreshMode = MetadataRefreshMode.FullRefresh
+ });
}
else
{
@@ -145,10 +150,10 @@ namespace MediaBrowser.Server.Implementations.Collections
public Task AddToCollection(Guid collectionId, IEnumerable<Guid> ids)
{
- return AddToCollection(collectionId, ids, true);
+ return AddToCollection(collectionId, ids, true, new MetadataRefreshOptions(_fileSystem));
}
- private async Task AddToCollection(Guid collectionId, IEnumerable<Guid> ids, bool fireEvent)
+ private async Task AddToCollection(Guid collectionId, IEnumerable<Guid> ids, bool fireEvent, MetadataRefreshOptions refreshOptions)
{
var collection = _libraryManager.GetItemById(collectionId) as BoxSet;
@@ -186,7 +191,7 @@ namespace MediaBrowser.Server.Implementations.Collections
await collection.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
- _providerManager.QueueRefresh(collection.Id, new MetadataRefreshOptions(_fileSystem));
+ _providerManager.QueueRefresh(collection.Id, refreshOptions);
if (fireEvent)
{
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index 93e660fd3..06b9ecabe 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -1699,7 +1699,7 @@ namespace MediaBrowser.Server.Implementations.Library
if (!refresh)
{
- refresh = (DateTime.UtcNow - item.DateLastSaved) >= _viewRefreshInterval;
+ refresh = (DateTime.UtcNow - item.DateLastRefreshed) >= _viewRefreshInterval;
}
if (refresh)
@@ -1796,7 +1796,7 @@ namespace MediaBrowser.Server.Implementations.Library
await item.UpdateToRepository(ItemUpdateType.MetadataEdit, cancellationToken).ConfigureAwait(false);
}
- var refresh = isNew || (DateTime.UtcNow - item.DateLastSaved) >= _viewRefreshInterval;
+ var refresh = isNew || (DateTime.UtcNow - item.DateLastRefreshed) >= _viewRefreshInterval;
if (refresh)
{
@@ -1866,7 +1866,7 @@ namespace MediaBrowser.Server.Implementations.Library
await item.UpdateToRepository(ItemUpdateType.MetadataEdit, cancellationToken).ConfigureAwait(false);
}
- var refresh = isNew || (DateTime.UtcNow - item.DateLastSaved) >= _viewRefreshInterval;
+ var refresh = isNew || (DateTime.UtcNow - item.DateLastRefreshed) >= _viewRefreshInterval;
if (refresh)
{
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index 40e837ed7..65125da66 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -706,7 +706,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
isNew = true;
}
-
+
item.ChannelId = _tvDtoService.GetInternalChannelId(serviceName, info.ChannelId).ToString("N");
item.CommunityRating = info.CommunityRating;
item.OfficialRating = info.OfficialRating;
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
index 4b8388582..cede9350e 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
@@ -197,6 +197,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
_connection.AddColumn(_logger, "TypedBaseItems", "IsHD", "BIT");
_connection.AddColumn(_logger, "TypedBaseItems", "ExternalEtag", "Text");
_connection.AddColumn(_logger, "TypedBaseItems", "ExternalImagePath", "Text");
+ _connection.AddColumn(_logger, "TypedBaseItems", "DateLastRefreshed", "DATETIME");
PrepareStatements();
@@ -291,7 +292,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
"PreferredMetadataCountryCode",
"IsHD",
"ExternalEtag",
- "ExternalImagePath"
+ "ExternalImagePath",
+ "DateLastRefreshed"
};
private readonly string[] _mediaStreamSaveColumns =
@@ -378,7 +380,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
"PreferredMetadataCountryCode",
"IsHD",
"ExternalEtag",
- "ExternalImagePath"
+ "ExternalImagePath",
+ "DateLastRefreshed"
};
_saveItemCommand = _connection.CreateCommand();
_saveItemCommand.CommandText = "replace into TypedBaseItems (" + string.Join(",", saveColumns.ToArray()) + ") values (";
@@ -599,6 +602,15 @@ namespace MediaBrowser.Server.Implementations.Persistence
_saveItemCommand.GetParameter(index++).Value = item.ExternalEtag;
_saveItemCommand.GetParameter(index++).Value = item.ExternalImagePath;
+ if (item.DateLastRefreshed == default(DateTime))
+ {
+ _saveItemCommand.GetParameter(index++).Value = null;
+ }
+ else
+ {
+ _saveItemCommand.GetParameter(index++).Value = item.DateLastRefreshed;
+ }
+
_saveItemCommand.Transaction = transaction;
_saveItemCommand.ExecuteNonQuery();
@@ -820,6 +832,11 @@ namespace MediaBrowser.Server.Implementations.Persistence
item.ExternalImagePath = reader.GetString(23);
}
+ if (!reader.IsDBNull(24))
+ {
+ item.DateLastRefreshed = reader.GetDateTime(24).ToUniversalTime();
+ }
+
return item;
}
diff --git a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs b/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs
index cc0140d68..47ec47f8f 100644
--- a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs
+++ b/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs
@@ -33,7 +33,7 @@ namespace MediaBrowser.Server.Implementations.Photos
ImageProcessor = imageProcessor;
}
- public virtual bool Supports(IHasImages item)
+ protected virtual bool Supports(IHasImages item)
{
return true;
}
diff --git a/MediaBrowser.Server.Implementations/UserViews/CollectionFolderImageProvider.cs b/MediaBrowser.Server.Implementations/UserViews/CollectionFolderImageProvider.cs
index a699bfabf..9247edadb 100644
--- a/MediaBrowser.Server.Implementations/UserViews/CollectionFolderImageProvider.cs
+++ b/MediaBrowser.Server.Implementations/UserViews/CollectionFolderImageProvider.cs
@@ -92,7 +92,7 @@ namespace MediaBrowser.Server.Implementations.UserViews
return GetFinalItems(items.Where(i => i.HasImage(ImageType.Primary) || i.HasImage(ImageType.Thumb)).ToList(), 8);
}
- public override bool Supports(IHasImages item)
+ protected override bool Supports(IHasImages item)
{
return item is CollectionFolder;
}
diff --git a/MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs b/MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs
index 2b18218a8..8dfbe38f1 100644
--- a/MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs
+++ b/MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs
@@ -131,7 +131,7 @@ namespace MediaBrowser.Server.Implementations.UserViews
return GetFinalItems(items.Where(i => i.HasImage(ImageType.Primary)).ToList());
}
- public override bool Supports(IHasImages item)
+ protected override bool Supports(IHasImages item)
{
var view = item as UserView;
if (view != null)