mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-04 06:48:35 +01:00
Merge pull request #12798 from JPVenson/feature/EFUserData
Refactor library.db into jellyfin.db and EFCore
This commit is contained in:
@@ -74,10 +74,11 @@ namespace MediaBrowser.Providers.Manager
|
||||
public virtual async Task<ItemUpdateType> RefreshMetadata(BaseItem item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
|
||||
{
|
||||
var itemOfType = (TItemType)item;
|
||||
|
||||
var updateType = ItemUpdateType.None;
|
||||
|
||||
var libraryOptions = LibraryManager.GetLibraryOptions(item);
|
||||
var isFirstRefresh = item.DateLastRefreshed == default;
|
||||
var hasRefreshedMetadata = true;
|
||||
var hasRefreshedImages = true;
|
||||
|
||||
var requiresRefresh = libraryOptions.AutomaticRefreshIntervalDays > 0 && (DateTime.UtcNow - item.DateLastRefreshed).TotalDays >= libraryOptions.AutomaticRefreshIntervalDays;
|
||||
|
||||
@@ -131,9 +132,10 @@ namespace MediaBrowser.Providers.Manager
|
||||
People = LibraryManager.GetPeople(item)
|
||||
};
|
||||
|
||||
bool hasRefreshedMetadata = true;
|
||||
bool hasRefreshedImages = true;
|
||||
var isFirstRefresh = item.DateLastRefreshed == default;
|
||||
var beforeSaveResult = BeforeSave(itemOfType, isFirstRefresh || refreshOptions.ReplaceAllMetadata || refreshOptions.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || requiresRefresh || refreshOptions.ForceSave, updateType);
|
||||
updateType |= beforeSaveResult;
|
||||
|
||||
updateType = await SaveInternal(item, refreshOptions, updateType, isFirstRefresh, requiresRefresh, metadataResult, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
// Next run metadata providers
|
||||
if (refreshOptions.MetadataRefreshMode != MetadataRefreshMode.None)
|
||||
@@ -188,43 +190,43 @@ namespace MediaBrowser.Providers.Manager
|
||||
}
|
||||
}
|
||||
|
||||
var beforeSaveResult = BeforeSave(itemOfType, isFirstRefresh || refreshOptions.ReplaceAllMetadata || refreshOptions.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || requiresRefresh || refreshOptions.ForceSave, updateType);
|
||||
updateType |= beforeSaveResult;
|
||||
|
||||
// Save if changes were made, or it's never been saved before
|
||||
if (refreshOptions.ForceSave || updateType > ItemUpdateType.None || isFirstRefresh || refreshOptions.ReplaceAllMetadata || requiresRefresh)
|
||||
if (hasRefreshedMetadata && hasRefreshedImages)
|
||||
{
|
||||
if (item.IsFileProtocol)
|
||||
{
|
||||
var file = TryGetFile(item.Path, refreshOptions.DirectoryService);
|
||||
if (file is not null)
|
||||
{
|
||||
item.DateModified = file.LastWriteTimeUtc;
|
||||
}
|
||||
}
|
||||
|
||||
// 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)
|
||||
{
|
||||
updateType |= ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
|
||||
if (hasRefreshedMetadata && hasRefreshedImages)
|
||||
{
|
||||
item.DateLastRefreshed = DateTime.UtcNow;
|
||||
}
|
||||
else
|
||||
{
|
||||
item.DateLastRefreshed = default;
|
||||
}
|
||||
|
||||
// Save to database
|
||||
await SaveItemAsync(metadataResult, updateType, cancellationToken).ConfigureAwait(false);
|
||||
item.DateLastRefreshed = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
updateType = await SaveInternal(item, refreshOptions, updateType, isFirstRefresh, requiresRefresh, metadataResult, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
await AfterMetadataRefresh(itemOfType, refreshOptions, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
return updateType;
|
||||
|
||||
async Task<ItemUpdateType> SaveInternal(BaseItem item, MetadataRefreshOptions refreshOptions, ItemUpdateType updateType, bool isFirstRefresh, bool requiresRefresh, MetadataResult<TItemType> metadataResult, CancellationToken cancellationToken)
|
||||
{
|
||||
// Save if changes were made, or it's never been saved before
|
||||
if (refreshOptions.ForceSave || updateType > ItemUpdateType.None || isFirstRefresh || refreshOptions.ReplaceAllMetadata || requiresRefresh)
|
||||
{
|
||||
if (item.IsFileProtocol)
|
||||
{
|
||||
var file = TryGetFile(item.Path, refreshOptions.DirectoryService);
|
||||
if (file is not null)
|
||||
{
|
||||
item.DateModified = file.LastWriteTimeUtc;
|
||||
}
|
||||
}
|
||||
|
||||
// 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)
|
||||
{
|
||||
updateType |= ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
|
||||
// Save to database
|
||||
await SaveItemAsync(metadataResult, updateType, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
return updateType;
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplySearchResult(ItemLookupInfo lookupInfo, RemoteSearchResult result)
|
||||
@@ -322,17 +324,17 @@ namespace MediaBrowser.Providers.Manager
|
||||
return false;
|
||||
}
|
||||
|
||||
protected virtual IList<BaseItem> GetChildrenForMetadataUpdates(TItemType item)
|
||||
protected virtual IReadOnlyList<BaseItem> GetChildrenForMetadataUpdates(TItemType item)
|
||||
{
|
||||
if (item is Folder folder)
|
||||
{
|
||||
return folder.GetRecursiveChildren();
|
||||
}
|
||||
|
||||
return Array.Empty<BaseItem>();
|
||||
return [];
|
||||
}
|
||||
|
||||
protected virtual ItemUpdateType UpdateMetadataFromChildren(TItemType item, IList<BaseItem> children, bool isFullRefresh, ItemUpdateType currentUpdateType)
|
||||
protected virtual ItemUpdateType UpdateMetadataFromChildren(TItemType item, IReadOnlyList<BaseItem> children, bool isFullRefresh, ItemUpdateType currentUpdateType)
|
||||
{
|
||||
var updateType = ItemUpdateType.None;
|
||||
|
||||
@@ -371,7 +373,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
return updateType;
|
||||
}
|
||||
|
||||
private ItemUpdateType UpdateCumulativeRunTimeTicks(TItemType item, IList<BaseItem> children)
|
||||
private ItemUpdateType UpdateCumulativeRunTimeTicks(TItemType item, IReadOnlyList<BaseItem> children)
|
||||
{
|
||||
if (item is Folder folder && folder.SupportsCumulativeRunTimeTicks)
|
||||
{
|
||||
@@ -395,7 +397,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
return ItemUpdateType.None;
|
||||
}
|
||||
|
||||
private ItemUpdateType UpdateDateLastMediaAdded(TItemType item, IList<BaseItem> children)
|
||||
private ItemUpdateType UpdateDateLastMediaAdded(TItemType item, IReadOnlyList<BaseItem> children)
|
||||
{
|
||||
var updateType = ItemUpdateType.None;
|
||||
|
||||
@@ -429,7 +431,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
return updateType;
|
||||
}
|
||||
|
||||
private ItemUpdateType UpdatePremiereDate(TItemType item, IList<BaseItem> children)
|
||||
private ItemUpdateType UpdatePremiereDate(TItemType item, IReadOnlyList<BaseItem> children)
|
||||
{
|
||||
var updateType = ItemUpdateType.None;
|
||||
|
||||
@@ -467,7 +469,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
return updateType;
|
||||
}
|
||||
|
||||
private ItemUpdateType UpdateGenres(TItemType item, IList<BaseItem> children)
|
||||
private ItemUpdateType UpdateGenres(TItemType item, IReadOnlyList<BaseItem> children)
|
||||
{
|
||||
var updateType = ItemUpdateType.None;
|
||||
|
||||
@@ -488,7 +490,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
return updateType;
|
||||
}
|
||||
|
||||
private ItemUpdateType UpdateStudios(TItemType item, IList<BaseItem> children)
|
||||
private ItemUpdateType UpdateStudios(TItemType item, IReadOnlyList<BaseItem> children)
|
||||
{
|
||||
var updateType = ItemUpdateType.None;
|
||||
|
||||
@@ -509,7 +511,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
return updateType;
|
||||
}
|
||||
|
||||
private ItemUpdateType UpdateOfficialRating(TItemType item, IList<BaseItem> children)
|
||||
private ItemUpdateType UpdateOfficialRating(TItemType item, IReadOnlyList<BaseItem> children)
|
||||
{
|
||||
var updateType = ItemUpdateType.None;
|
||||
|
||||
@@ -1142,13 +1144,8 @@ namespace MediaBrowser.Providers.Manager
|
||||
}
|
||||
}
|
||||
|
||||
private static void MergePeople(List<PersonInfo> source, List<PersonInfo> target)
|
||||
private static void MergePeople(IReadOnlyList<PersonInfo> source, IReadOnlyList<PersonInfo> target)
|
||||
{
|
||||
if (target is null)
|
||||
{
|
||||
target = new List<PersonInfo>();
|
||||
}
|
||||
|
||||
foreach (var person in target)
|
||||
{
|
||||
var normalizedName = person.Name.RemoveDiacritics();
|
||||
|
||||
@@ -270,7 +270,9 @@ namespace MediaBrowser.Providers.Manager
|
||||
try
|
||||
{
|
||||
var fileStream = AsyncFile.OpenRead(source);
|
||||
await new ImageSaver(_configurationManager, _libraryMonitor, _fileSystem, _logger).SaveImage(item, fileStream, mimeType, type, imageIndex, saveLocallyWithMedia, cancellationToken).ConfigureAwait(false);
|
||||
await new ImageSaver(_configurationManager, _libraryMonitor, _fileSystem, _logger)
|
||||
.SaveImage(item, fileStream, mimeType, type, imageIndex, saveLocallyWithMedia, cancellationToken)
|
||||
.ConfigureAwait(false);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user