mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-03-06 10:16:18 +00:00
sync updates
This commit is contained in:
@@ -29,7 +29,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
{
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
private readonly ISyncRepository _syncRepo;
|
||||
private readonly ISyncManager _syncManager;
|
||||
private readonly SyncManager _syncManager;
|
||||
private readonly ILogger _logger;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly ITVSeriesManager _tvSeriesManager;
|
||||
@@ -38,7 +38,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
private readonly IConfigurationManager _config;
|
||||
private readonly IFileSystem _fileSystem;
|
||||
|
||||
public SyncJobProcessor(ILibraryManager libraryManager, ISyncRepository syncRepo, ISyncManager syncManager, ILogger logger, IUserManager userManager, ITVSeriesManager tvSeriesManager, IMediaEncoder mediaEncoder, ISubtitleEncoder subtitleEncoder, IConfigurationManager config, IFileSystem fileSystem)
|
||||
public SyncJobProcessor(ILibraryManager libraryManager, ISyncRepository syncRepo, SyncManager syncManager, ILogger logger, IUserManager userManager, ITVSeriesManager tvSeriesManager, IMediaEncoder mediaEncoder, ISubtitleEncoder subtitleEncoder, IConfigurationManager config, IFileSystem fileSystem)
|
||||
{
|
||||
_libraryManager = libraryManager;
|
||||
_syncRepo = syncRepo;
|
||||
@@ -106,6 +106,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
};
|
||||
|
||||
await _syncRepo.Create(jobItem).ConfigureAwait(false);
|
||||
_syncManager.OnSyncJobItemCreated(jobItem);
|
||||
|
||||
jobItems.Add(jobItem);
|
||||
}
|
||||
@@ -184,11 +185,19 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
{
|
||||
job.Status = SyncJobStatus.Cancelled;
|
||||
}
|
||||
else if (jobItems.All(i => i.Status == SyncJobItemStatus.ReadyToTransfer))
|
||||
{
|
||||
job.Status = SyncJobStatus.ReadyToTransfer;
|
||||
}
|
||||
else if (jobItems.All(i => i.Status == SyncJobItemStatus.Transferring))
|
||||
{
|
||||
job.Status = SyncJobStatus.Transferring;
|
||||
}
|
||||
else if (jobItems.Any(i => i.Status == SyncJobItemStatus.Converting))
|
||||
{
|
||||
job.Status = SyncJobStatus.Converting;
|
||||
}
|
||||
else if (pct >= 100)
|
||||
else if (jobItems.All(i => i.Status == SyncJobItemStatus.Cancelled || i.Status == SyncJobItemStatus.Failed || i.Status == SyncJobItemStatus.Synced || i.Status == SyncJobItemStatus.RemovedFromDevice))
|
||||
{
|
||||
if (jobItems.Any(i => i.Status == SyncJobItemStatus.Failed))
|
||||
{
|
||||
@@ -201,12 +210,12 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
}
|
||||
else
|
||||
{
|
||||
job.Status = SyncJobStatus.Transferring;
|
||||
job.Status = SyncJobStatus.Queued;
|
||||
}
|
||||
|
||||
await _syncRepo.Update(job).ConfigureAwait(false);
|
||||
|
||||
((SyncManager)_syncManager).OnSyncJobUpdated(job);
|
||||
_syncManager.OnSyncJobUpdated(job);
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<BaseItem>> GetItemsForSync(SyncCategory? category, string parentId, IEnumerable<string> itemIds, User user, bool unwatchedOnly)
|
||||
@@ -414,7 +423,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
{
|
||||
jobItem.Status = SyncJobItemStatus.Failed;
|
||||
_logger.Error("Unable to locate library item for JobItem {0}, ItemId {1}", jobItem.Id, jobItem.ItemId);
|
||||
await _syncRepo.Update(jobItem).ConfigureAwait(false);
|
||||
await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -423,7 +432,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
{
|
||||
jobItem.Status = SyncJobItemStatus.Failed;
|
||||
_logger.Error("Unable to locate SyncTarget for JobItem {0}, SyncTargetId {1}", jobItem.Id, jobItem.TargetId);
|
||||
await _syncRepo.Update(jobItem).ConfigureAwait(false);
|
||||
await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -490,7 +499,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
if (streamInfo.PlayMethod == PlayMethod.Transcode)
|
||||
{
|
||||
// Save the job item now since conversion could take a while
|
||||
await _syncRepo.Update(jobItem).ConfigureAwait(false);
|
||||
await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
await UpdateJobStatus(job).ConfigureAwait(false);
|
||||
|
||||
try
|
||||
@@ -504,7 +513,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
if ((DateTime.UtcNow - lastJobUpdate).TotalSeconds >= DatabaseProgressUpdateIntervalSeconds)
|
||||
{
|
||||
jobItem.Progress = pct / 2;
|
||||
await _syncRepo.Update(jobItem).ConfigureAwait(false);
|
||||
await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
await UpdateJobStatus(job).ConfigureAwait(false);
|
||||
}
|
||||
});
|
||||
@@ -528,7 +537,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
|
||||
if (jobItem.Status == SyncJobItemStatus.Failed || jobItem.Status == SyncJobItemStatus.Queued)
|
||||
{
|
||||
await _syncRepo.Update(jobItem).ConfigureAwait(false);
|
||||
await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -555,14 +564,14 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
if (externalSubs.Count > 0)
|
||||
{
|
||||
// Save the job item now since conversion could take a while
|
||||
await _syncRepo.Update(jobItem).ConfigureAwait(false);
|
||||
await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
|
||||
await ConvertSubtitles(jobItem, externalSubs, streamInfo, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
jobItem.Progress = 50;
|
||||
jobItem.Status = SyncJobItemStatus.Transferring;
|
||||
await _syncRepo.Update(jobItem).ConfigureAwait(false);
|
||||
jobItem.Status = SyncJobItemStatus.ReadyToTransfer;
|
||||
await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private bool RequiresExtraction(SubtitleStreamInfo stream, MediaSourceInfo mediaSource)
|
||||
@@ -666,7 +675,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
}
|
||||
|
||||
jobItem.Status = SyncJobItemStatus.Converting;
|
||||
await _syncRepo.Update(jobItem).ConfigureAwait(false);
|
||||
await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
await UpdateJobStatus(job).ConfigureAwait(false);
|
||||
|
||||
try
|
||||
@@ -680,7 +689,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
if ((DateTime.UtcNow - lastJobUpdate).TotalSeconds >= DatabaseProgressUpdateIntervalSeconds)
|
||||
{
|
||||
jobItem.Progress = pct / 2;
|
||||
await _syncRepo.Update(jobItem).ConfigureAwait(false);
|
||||
await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
await UpdateJobStatus(job).ConfigureAwait(false);
|
||||
}
|
||||
});
|
||||
@@ -704,7 +713,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
|
||||
if (jobItem.Status == SyncJobItemStatus.Failed || jobItem.Status == SyncJobItemStatus.Queued)
|
||||
{
|
||||
await _syncRepo.Update(jobItem).ConfigureAwait(false);
|
||||
await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -729,8 +738,8 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
}
|
||||
|
||||
jobItem.Progress = 50;
|
||||
jobItem.Status = SyncJobItemStatus.Transferring;
|
||||
await _syncRepo.Update(jobItem).ConfigureAwait(false);
|
||||
jobItem.Status = SyncJobItemStatus.ReadyToTransfer;
|
||||
await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private async Task Sync(SyncJobItem jobItem, Photo item, DeviceProfile profile, CancellationToken cancellationToken)
|
||||
@@ -738,17 +747,17 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
jobItem.OutputPath = item.Path;
|
||||
|
||||
jobItem.Progress = 50;
|
||||
jobItem.Status = SyncJobItemStatus.Transferring;
|
||||
await _syncRepo.Update(jobItem).ConfigureAwait(false);
|
||||
jobItem.Status = SyncJobItemStatus.ReadyToTransfer;
|
||||
await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private async Task SyncGeneric(SyncJobItem jobItem, BaseItem item, CancellationToken cancellationToken)
|
||||
{
|
||||
jobItem.OutputPath = item.Path;
|
||||
|
||||
|
||||
jobItem.Progress = 50;
|
||||
jobItem.Status = SyncJobItemStatus.Transferring;
|
||||
await _syncRepo.Update(jobItem).ConfigureAwait(false);
|
||||
jobItem.Status = SyncJobItemStatus.ReadyToTransfer;
|
||||
await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private async Task<string> DownloadFile(SyncJobItem jobItem, MediaSourceInfo mediaSource, CancellationToken cancellationToken)
|
||||
|
||||
@@ -52,6 +52,8 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
public event EventHandler<GenericEventArgs<SyncJobCreationResult>> SyncJobCreated;
|
||||
public event EventHandler<GenericEventArgs<SyncJob>> SyncJobCancelled;
|
||||
public event EventHandler<GenericEventArgs<SyncJob>> SyncJobUpdated;
|
||||
public event EventHandler<GenericEventArgs<SyncJobItem>> SyncJobItemUpdated;
|
||||
public event EventHandler<GenericEventArgs<SyncJobItem>> SyncJobItemCreated;
|
||||
|
||||
public SyncManager(ILibraryManager libraryManager, ISyncRepository repo, IImageProcessor imageProcessor, ILogger logger, IUserManager userManager, Func<IDtoService> dtoService, IApplicationHost appHost, ITVSeriesManager tvSeriesManager, Func<IMediaEncoder> mediaEncoder, IFileSystem fileSystem, Func<ISubtitleEncoder> subtitleEncoder, IConfigurationManager config)
|
||||
{
|
||||
@@ -202,6 +204,32 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
}
|
||||
}
|
||||
|
||||
internal async Task UpdateSyncJobItemInternal(SyncJobItem jobItem)
|
||||
{
|
||||
await _repo.Update(jobItem).ConfigureAwait(false);
|
||||
|
||||
if (SyncJobUpdated != null)
|
||||
{
|
||||
EventHelper.FireEventIfNotNull(SyncJobItemUpdated, this, new GenericEventArgs<SyncJobItem>
|
||||
{
|
||||
Argument = jobItem
|
||||
|
||||
}, _logger);
|
||||
}
|
||||
}
|
||||
|
||||
internal void OnSyncJobItemCreated(SyncJobItem job)
|
||||
{
|
||||
if (SyncJobUpdated != null)
|
||||
{
|
||||
EventHelper.FireEventIfNotNull(SyncJobItemCreated, this, new GenericEventArgs<SyncJobItem>
|
||||
{
|
||||
Argument = job
|
||||
|
||||
}, _logger);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<QueryResult<SyncJob>> GetJobs(SyncJobQuery query)
|
||||
{
|
||||
var result = _repo.GetJobs(query);
|
||||
@@ -504,7 +532,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
}
|
||||
}
|
||||
|
||||
await _repo.Update(jobItem).ConfigureAwait(false);
|
||||
await UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
|
||||
var processor = GetSyncJobProcessor();
|
||||
|
||||
@@ -610,7 +638,10 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
var jobItemResult = GetJobItems(new SyncJobItemQuery
|
||||
{
|
||||
TargetId = targetId,
|
||||
Statuses = new List<SyncJobItemStatus> { SyncJobItemStatus.Transferring }
|
||||
Statuses = new List<SyncJobItemStatus>
|
||||
{
|
||||
SyncJobItemStatus.ReadyToTransfer
|
||||
}
|
||||
});
|
||||
|
||||
return jobItemResult.Items
|
||||
@@ -669,7 +700,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
{
|
||||
// Content is no longer on the device
|
||||
jobItem.Status = SyncJobItemStatus.RemovedFromDevice;
|
||||
await _repo.Update(jobItem).ConfigureAwait(false);
|
||||
await UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -761,7 +792,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
jobItem.Progress = 0;
|
||||
jobItem.IsMarkedForRemoval = false;
|
||||
|
||||
await _repo.Update(jobItem).ConfigureAwait(false);
|
||||
await UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
|
||||
var processor = GetSyncJobProcessor();
|
||||
|
||||
@@ -772,7 +803,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
{
|
||||
var jobItem = _repo.GetJobItem(id);
|
||||
|
||||
if (jobItem.Status != SyncJobItemStatus.Queued && jobItem.Status != SyncJobItemStatus.Transferring && jobItem.Status != SyncJobItemStatus.Converting)
|
||||
if (jobItem.Status != SyncJobItemStatus.Queued && jobItem.Status != SyncJobItemStatus.ReadyToTransfer && jobItem.Status != SyncJobItemStatus.Converting)
|
||||
{
|
||||
throw new ArgumentException("Operation is not valid for this job item");
|
||||
}
|
||||
@@ -781,7 +812,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
jobItem.Progress = 0;
|
||||
jobItem.IsMarkedForRemoval = true;
|
||||
|
||||
await _repo.Update(jobItem).ConfigureAwait(false);
|
||||
await UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
|
||||
var processor = GetSyncJobProcessor();
|
||||
|
||||
@@ -814,7 +845,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
|
||||
jobItem.IsMarkedForRemoval = true;
|
||||
|
||||
await _repo.Update(jobItem).ConfigureAwait(false);
|
||||
await UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
|
||||
var processor = GetSyncJobProcessor();
|
||||
|
||||
@@ -832,7 +863,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
|
||||
jobItem.IsMarkedForRemoval = false;
|
||||
|
||||
await _repo.Update(jobItem).ConfigureAwait(false);
|
||||
await UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
|
||||
|
||||
var processor = GetSyncJobProcessor();
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
|
||||
public Task Execute(CancellationToken cancellationToken, IProgress<double> progress)
|
||||
{
|
||||
return new SyncJobProcessor(_libraryManager, _syncRepo, _syncManager, _logger, _userManager, _tvSeriesManager, _mediaEncoder, _subtitleEncoder, _config, _fileSystem)
|
||||
return new SyncJobProcessor(_libraryManager, _syncRepo, (SyncManager)_syncManager, _logger, _userManager, _tvSeriesManager, _mediaEncoder, _subtitleEncoder, _config, _fileSystem)
|
||||
.Sync(progress, cancellationToken);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user