sync fixes
This commit is contained in:
parent
7c17c5182f
commit
20f239824f
|
@ -29,19 +29,19 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The server identifier.</value>
|
/// <value>The server identifier.</value>
|
||||||
public string ServerId { get; set; }
|
public string ServerId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the id.
|
/// Gets or sets the id.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The id.</value>
|
/// <value>The id.</value>
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the playlist item identifier.
|
/// Gets or sets the playlist item identifier.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The playlist item identifier.</value>
|
/// <value>The playlist item identifier.</value>
|
||||||
public string PlaylistItemId { get; set; }
|
public string PlaylistItemId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the date created.
|
/// Gets or sets the date created.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -50,7 +50,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
|
|
||||||
public DateTime? DateLastMediaAdded { get; set; }
|
public DateTime? DateLastMediaAdded { get; set; }
|
||||||
public ExtraType? ExtraType { get; set; }
|
public ExtraType? ExtraType { get; set; }
|
||||||
|
|
||||||
public int? AirsBeforeSeasonNumber { get; set; }
|
public int? AirsBeforeSeasonNumber { get; set; }
|
||||||
public int? AirsAfterSeasonNumber { get; set; }
|
public int? AirsAfterSeasonNumber { get; set; }
|
||||||
public int? AirsBeforeEpisodeNumber { get; set; }
|
public int? AirsBeforeEpisodeNumber { get; set; }
|
||||||
|
@ -71,8 +71,21 @@ namespace MediaBrowser.Model.Dto
|
||||||
|
|
||||||
public int? AnimeSeriesIndex { get; set; }
|
public int? AnimeSeriesIndex { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether [supports synchronize].
|
||||||
|
/// </summary>
|
||||||
|
/// <value><c>null</c> if [supports synchronize] contains no value, <c>true</c> if [supports synchronize]; otherwise, <c>false</c>.</value>
|
||||||
public bool? SupportsSync { get; set; }
|
public bool? SupportsSync { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether this instance has synchronize job.
|
||||||
|
/// </summary>
|
||||||
|
/// <value><c>null</c> if [has synchronize job] contains no value, <c>true</c> if [has synchronize job]; otherwise, <c>false</c>.</value>
|
||||||
public bool? HasSyncJob { get; set; }
|
public bool? HasSyncJob { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether this instance is synced.
|
||||||
|
/// </summary>
|
||||||
|
/// <value><c>null</c> if [is synced] contains no value, <c>true</c> if [is synced]; otherwise, <c>false</c>.</value>
|
||||||
|
public bool? IsSynced { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the DVD season number.
|
/// Gets or sets the DVD season number.
|
||||||
|
@ -84,7 +97,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The DVD episode number.</value>
|
/// <value>The DVD episode number.</value>
|
||||||
public float? DvdEpisodeNumber { get; set; }
|
public float? DvdEpisodeNumber { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the name of the sort.
|
/// Gets or sets the name of the sort.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -97,7 +110,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The video3 D format.</value>
|
/// <value>The video3 D format.</value>
|
||||||
public Video3DFormat? Video3DFormat { get; set; }
|
public Video3DFormat? Video3DFormat { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the premiere date.
|
/// Gets or sets the premiere date.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -115,7 +128,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The media versions.</value>
|
/// <value>The media versions.</value>
|
||||||
public List<MediaSourceInfo> MediaSources { get; set; }
|
public List<MediaSourceInfo> MediaSources { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the critic rating.
|
/// Gets or sets the critic rating.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -127,7 +140,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The game system.</value>
|
/// <value>The game system.</value>
|
||||||
public string GameSystem { get; set; }
|
public string GameSystem { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the critic rating summary.
|
/// Gets or sets the critic rating summary.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -135,13 +148,13 @@ namespace MediaBrowser.Model.Dto
|
||||||
public string CriticRatingSummary { get; set; }
|
public string CriticRatingSummary { get; set; }
|
||||||
|
|
||||||
public List<string> MultiPartGameFiles { get; set; }
|
public List<string> MultiPartGameFiles { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the path.
|
/// Gets or sets the path.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The path.</value>
|
/// <value>The path.</value>
|
||||||
public string Path { get; set; }
|
public string Path { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the official rating.
|
/// Gets or sets the official rating.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -178,7 +191,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The name of the TMDB collection.</value>
|
/// <value>The name of the TMDB collection.</value>
|
||||||
public string TmdbCollectionName { get; set; }
|
public string TmdbCollectionName { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the taglines.
|
/// Gets or sets the taglines.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -196,7 +209,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The series genres.</value>
|
/// <value>The series genres.</value>
|
||||||
public List<string> SeriesGenres { get; set; }
|
public List<string> SeriesGenres { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the community rating.
|
/// Gets or sets the community rating.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -220,7 +233,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The original run time ticks.</value>
|
/// <value>The original run time ticks.</value>
|
||||||
public long? OriginalRunTimeTicks { get; set; }
|
public long? OriginalRunTimeTicks { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the run time ticks.
|
/// Gets or sets the run time ticks.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -232,7 +245,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The play access.</value>
|
/// <value>The play access.</value>
|
||||||
public PlayAccess PlayAccess { get; set; }
|
public PlayAccess PlayAccess { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the aspect ratio.
|
/// Gets or sets the aspect ratio.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -250,7 +263,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The season count.</value>
|
/// <value>The season count.</value>
|
||||||
public int? SeasonCount { get; set; }
|
public int? SeasonCount { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the players supported by a game.
|
/// Gets or sets the players supported by a game.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -262,7 +275,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value><c>null</c> if [is place holder] contains no value, <c>true</c> if [is place holder]; otherwise, <c>false</c>.</value>
|
/// <value><c>null</c> if [is place holder] contains no value, <c>true</c> if [is place holder]; otherwise, <c>false</c>.</value>
|
||||||
public bool? IsPlaceHolder { get; set; }
|
public bool? IsPlaceHolder { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the index number.
|
/// Gets or sets the index number.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -292,7 +305,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The soundtrack ids.</value>
|
/// <value>The soundtrack ids.</value>
|
||||||
public string[] SoundtrackIds { get; set; }
|
public string[] SoundtrackIds { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the provider ids.
|
/// Gets or sets the provider ids.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -304,7 +317,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value><c>null</c> if [is HD] contains no value, <c>true</c> if [is HD]; otherwise, <c>false</c>.</value>
|
/// <value><c>null</c> if [is HD] contains no value, <c>true</c> if [is HD]; otherwise, <c>false</c>.</value>
|
||||||
public bool? IsHD { get; set; }
|
public bool? IsHD { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets a value indicating whether this instance is folder.
|
/// Gets or sets a value indicating whether this instance is folder.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -399,7 +412,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The season identifier.</value>
|
/// <value>The season identifier.</value>
|
||||||
public string SeasonId { get; set; }
|
public string SeasonId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the special feature count.
|
/// Gets or sets the special feature count.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -447,7 +460,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The keywords.</value>
|
/// <value>The keywords.</value>
|
||||||
public List<string> Keywords { get; set; }
|
public List<string> Keywords { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the primary image aspect ratio, after image enhancements.
|
/// Gets or sets the primary image aspect ratio, after image enhancements.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -483,13 +496,13 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The type of the collection.</value>
|
/// <value>The type of the collection.</value>
|
||||||
public string CollectionType { get; set; }
|
public string CollectionType { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the display order.
|
/// Gets or sets the display order.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The display order.</value>
|
/// <value>The display order.</value>
|
||||||
public string DisplayOrder { get; set; }
|
public string DisplayOrder { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the album id.
|
/// Gets or sets the album id.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -506,7 +519,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The series primary image tag.</value>
|
/// <value>The series primary image tag.</value>
|
||||||
public string SeriesPrimaryImageTag { get; set; }
|
public string SeriesPrimaryImageTag { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the album artist.
|
/// Gets or sets the album artist.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -518,13 +531,13 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The album artists.</value>
|
/// <value>The album artists.</value>
|
||||||
public List<NameIdPair> AlbumArtists { get; set; }
|
public List<NameIdPair> AlbumArtists { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the name of the season.
|
/// Gets or sets the name of the season.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The name of the season.</value>
|
/// <value>The name of the season.</value>
|
||||||
public string SeasonName { get; set; }
|
public string SeasonName { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the media streams.
|
/// Gets or sets the media streams.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -629,7 +642,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The series studio.</value>
|
/// <value>The series studio.</value>
|
||||||
public string SeriesStudio { get; set; }
|
public string SeriesStudio { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the parent thumb item id.
|
/// Gets or sets the parent thumb item id.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -749,7 +762,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The music video count.</value>
|
/// <value>The music video count.</value>
|
||||||
public int? MusicVideoCount { get; set; }
|
public int? MusicVideoCount { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets a value indicating whether [enable internet providers].
|
/// Gets or sets a value indicating whether [enable internet providers].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -85,7 +85,7 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||||
|
|
||||||
public IEnumerable<BaseItemDto> GetBaseItemDtos(IEnumerable<BaseItem> items, DtoOptions options, User user = null, BaseItem owner = null)
|
public IEnumerable<BaseItemDto> GetBaseItemDtos(IEnumerable<BaseItem> items, DtoOptions options, User user = null, BaseItem owner = null)
|
||||||
{
|
{
|
||||||
var itemIdsWithSyncJobs = GetItemIdsWithSyncJobs(options).ToList();
|
var tuple = GetItemIdsWithSyncJobs(options);
|
||||||
|
|
||||||
var list = new List<BaseItemDto>();
|
var list = new List<BaseItemDto>();
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FillSyncInfo(dto, item, itemIdsWithSyncJobs, options, user);
|
FillSyncInfo(dto, item, tuple.Item1, tuple.Item2, options, user);
|
||||||
|
|
||||||
list.Add(dto);
|
list.Add(dto);
|
||||||
}
|
}
|
||||||
|
@ -145,29 +145,29 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||||
return dto;
|
return dto;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<string> GetItemIdsWithSyncJobs(DtoOptions options)
|
private Tuple<IEnumerable<string>, IEnumerable<string>> GetItemIdsWithSyncJobs(DtoOptions options)
|
||||||
{
|
{
|
||||||
if (!options.Fields.Contains(ItemFields.SyncInfo))
|
if (!options.Fields.Contains(ItemFields.SyncInfo))
|
||||||
{
|
{
|
||||||
return new List<string>();
|
return new Tuple<IEnumerable<string>, IEnumerable<string>>(new List<string>(), new List<string>());
|
||||||
}
|
}
|
||||||
|
|
||||||
var deviceId = options.DeviceId;
|
var deviceId = options.DeviceId;
|
||||||
if (string.IsNullOrWhiteSpace(deviceId))
|
if (string.IsNullOrWhiteSpace(deviceId))
|
||||||
{
|
{
|
||||||
return new List<string>();
|
return new Tuple<IEnumerable<string>, IEnumerable<string>>(new List<string>(), new List<string>());
|
||||||
}
|
}
|
||||||
|
|
||||||
var caps = _deviceManager().GetCapabilities(deviceId);
|
var caps = _deviceManager().GetCapabilities(deviceId);
|
||||||
if (caps == null || !caps.SupportsSync)
|
if (caps == null || !caps.SupportsSync)
|
||||||
{
|
{
|
||||||
return new List<string>();
|
return new Tuple<IEnumerable<string>, IEnumerable<string>>(new List<string>(), new List<string>());
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = _syncManager.GetLibraryItemIds(new SyncJobItemQuery
|
var result1 = _syncManager.GetLibraryItemIds(new SyncJobItemQuery
|
||||||
{
|
{
|
||||||
TargetId = deviceId,
|
TargetId = deviceId,
|
||||||
Statuses = new SyncJobItemStatus[]
|
Statuses = new[]
|
||||||
{
|
{
|
||||||
SyncJobItemStatus.Converting,
|
SyncJobItemStatus.Converting,
|
||||||
SyncJobItemStatus.Queued,
|
SyncJobItemStatus.Queued,
|
||||||
|
@ -176,7 +176,16 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return result.Items;
|
var result2 = _syncManager.GetLibraryItemIds(new SyncJobItemQuery
|
||||||
|
{
|
||||||
|
TargetId = deviceId,
|
||||||
|
Statuses = new[]
|
||||||
|
{
|
||||||
|
SyncJobItemStatus.Synced
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return new Tuple<IEnumerable<string>, IEnumerable<string>>(result1.Items, result2.Items);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FillSyncInfo(BaseItemDto dto, BaseItem item, DtoOptions options, User user)
|
private void FillSyncInfo(BaseItemDto dto, BaseItem item, DtoOptions options, User user)
|
||||||
|
@ -189,11 +198,14 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||||
|
|
||||||
if (dto.SupportsSync ?? false)
|
if (dto.SupportsSync ?? false)
|
||||||
{
|
{
|
||||||
dto.HasSyncJob = GetItemIdsWithSyncJobs(options).Contains(dto.Id, StringComparer.OrdinalIgnoreCase);
|
var tuple = GetItemIdsWithSyncJobs(options);
|
||||||
|
|
||||||
|
dto.HasSyncJob = tuple.Item1.Contains(dto.Id, StringComparer.OrdinalIgnoreCase);
|
||||||
|
dto.IsSynced = tuple.Item2.Contains(dto.Id, StringComparer.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FillSyncInfo(BaseItemDto dto, BaseItem item, IEnumerable<string> itemIdsWithSyncJobs, DtoOptions options, User user)
|
private void FillSyncInfo(BaseItemDto dto, BaseItem item, IEnumerable<string> itemIdsWithPendingSyncJobs, IEnumerable<string> syncedItemIds, DtoOptions options, User user)
|
||||||
{
|
{
|
||||||
if (options.Fields.Contains(ItemFields.SyncInfo))
|
if (options.Fields.Contains(ItemFields.SyncInfo))
|
||||||
{
|
{
|
||||||
|
@ -203,7 +215,8 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||||
|
|
||||||
if (dto.SupportsSync ?? false)
|
if (dto.SupportsSync ?? false)
|
||||||
{
|
{
|
||||||
dto.HasSyncJob = itemIdsWithSyncJobs.Contains(dto.Id, StringComparer.OrdinalIgnoreCase);
|
dto.HasSyncJob = itemIdsWithPendingSyncJobs.Contains(dto.Id, StringComparer.OrdinalIgnoreCase);
|
||||||
|
dto.IsSynced = syncedItemIds.Contains(dto.Id, StringComparer.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,7 +282,7 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fields.Contains(ItemFields.Studios))
|
if (fields.Contains(ItemFields.Studios))
|
||||||
{
|
{
|
||||||
AttachStudios(dto, item);
|
AttachStudios(dto, item);
|
||||||
|
|
|
@ -394,7 +394,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||||
AddMetadata = false
|
AddMetadata = false
|
||||||
});
|
});
|
||||||
|
|
||||||
await SyncJobItems(result.Items, true, progress, cancellationToken).ConfigureAwait(false);
|
await SyncJobItems(result.Items, enableConversion, progress, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task SyncJobItems(SyncJobItem[] items, bool enableConversion, IProgress<double> progress, CancellationToken cancellationToken)
|
public async Task SyncJobItems(SyncJobItem[] items, bool enableConversion, IProgress<double> progress, CancellationToken cancellationToken)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user