feat: implement migration tracking and history management for PostgreSQL

This commit is contained in:
2026-05-04 12:47:12 -04:00
parent e67c191843
commit 4ccd84342b
12 changed files with 191 additions and 192 deletions
@@ -1223,29 +1223,26 @@ namespace Emby.Server.Implementations.Library
private async Task RunPostScanTasks(IProgress<double> progress, CancellationToken cancellationToken)
{
var tasks = PostScanTasks.ToList();
var numComplete = 0;
var numTasks = tasks.Count;
foreach (var task in tasks)
if (numTasks == 0)
{
// Prevent access to modified closure
var currentNumComplete = numComplete;
_itemRepository.UpdateInheritedValues();
progress.Report(100);
return;
}
var progressValues = new double[numTasks];
async Task RunOneTask(ILibraryPostScanTask task, int taskIndex)
{
_logger.LogDebug("Running post-scan task {0}", task.GetType().Name);
var innerProgress = new Progress<double>(pct =>
{
double innerPercent = pct;
innerPercent /= 100;
innerPercent += currentNumComplete;
innerPercent /= numTasks;
innerPercent *= 100;
progress.Report(innerPercent);
progressValues[taskIndex] = pct;
progress.Report(progressValues.Average());
});
_logger.LogDebug("Running post-scan task {0}", task.GetType().Name);
try
{
await task.Run(innerProgress, cancellationToken).ConfigureAwait(false);
@@ -1260,12 +1257,12 @@ namespace Emby.Server.Implementations.Library
_logger.LogError(ex, "Error running post-scan task");
}
numComplete++;
double percent = numComplete;
percent /= numTasks;
progress.Report(percent * 100);
progressValues[taskIndex] = 100;
progress.Report(progressValues.Average());
}
await Task.WhenAll(tasks.Select((task, i) => RunOneTask(task, i))).ConfigureAwait(false);
_itemRepository.UpdateInheritedValues();
progress.Report(100);
@@ -1997,7 +1994,7 @@ namespace Emby.Server.Implementations.Library
/// <inheritdoc />
public void CreateItems(IReadOnlyList<BaseItem> items, BaseItem? parent, CancellationToken cancellationToken)
{
_itemRepository.SaveItems(items, cancellationToken);
_itemRepository.SaveItemsAsync(items, cancellationToken).GetAwaiter().GetResult();
foreach (var item in items)
{
@@ -2165,7 +2162,7 @@ namespace Emby.Server.Implementations.Library
item.DateLastSaved = DateTime.UtcNow;
}
_itemRepository.SaveItems(items, cancellationToken);
await _itemRepository.SaveItemsAsync(items, cancellationToken).ConfigureAwait(false);
if (parent is Folder folder)
{