aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-01-23 13:05:41 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-01-23 13:05:41 -0500
commit145285784bfb6a2fcd0e9234d569d7ad5083516f (patch)
tree67642bd67d7e05ce58e6592681e772974088ee10 /MediaBrowser.Server.Implementations
parent6cfc103bd3112e0a91e1c9154261f62cdee4525f (diff)
trim tv objects
Diffstat (limited to 'MediaBrowser.Server.Implementations')
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs18
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs63
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs138
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs18
4 files changed, 153 insertions, 84 deletions
diff --git a/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs b/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs
index d04ebe32d..f1e10e175 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs
@@ -76,22 +76,20 @@ namespace MediaBrowser.Server.Implementations.LiveTv
private async Task<bool> DownloadImage(LiveTvChannel item, CancellationToken cancellationToken)
{
- var channelInfo = item.ChannelInfo;
-
Stream imageStream = null;
string contentType = null;
- if (!string.IsNullOrEmpty(channelInfo.ImagePath))
+ if (!string.IsNullOrEmpty(item.ProviderImagePath))
{
- contentType = "image/" + Path.GetExtension(channelInfo.ImagePath).ToLower();
- imageStream = _fileSystem.GetFileStream(channelInfo.ImagePath, FileMode.Open, FileAccess.Read, FileShare.Read, true);
+ contentType = "image/" + Path.GetExtension(item.ProviderImagePath).ToLower();
+ imageStream = _fileSystem.GetFileStream(item.ProviderImagePath, FileMode.Open, FileAccess.Read, FileShare.Read, true);
}
- else if (!string.IsNullOrEmpty(channelInfo.ImageUrl))
+ else if (!string.IsNullOrEmpty(item.ProviderImageUrl))
{
var options = new HttpRequestOptions
{
CancellationToken = cancellationToken,
- Url = channelInfo.ImageUrl
+ Url = item.ProviderImageUrl
};
var response = await _httpClient.GetResponse(options).ConfigureAwait(false);
@@ -105,7 +103,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
imageStream = response.Content;
contentType = response.ContentType;
}
- else if (channelInfo.HasImage ?? true)
+ else if (item.HasProviderImage ?? true)
{
var service = _liveTvManager.Services.FirstOrDefault(i => string.Equals(i.Name, item.ServiceName, StringComparison.OrdinalIgnoreCase));
@@ -113,7 +111,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
try
{
- var response = await service.GetChannelImageAsync(channelInfo.Id, cancellationToken).ConfigureAwait(false);
+ var response = await service.GetChannelImageAsync(item.ExternalId, cancellationToken).ConfigureAwait(false);
if (response != null)
{
@@ -131,7 +129,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
if (imageStream != null)
{
// Dummy up the original url
- var url = item.ServiceName + channelInfo.Id;
+ var url = item.ServiceName + item.ExternalId;
await _providerManager.SaveImage(item, imageStream, contentType, ImageType.Primary, null, url, cancellationToken).ConfigureAwait(false);
return true;
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs
index 2fea919b0..094506199 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs
@@ -74,7 +74,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
if (channel != null)
{
- dto.ChannelName = channel.ChannelInfo.Name;
+ dto.ChannelName = channel.Name;
}
return dto;
@@ -280,18 +280,16 @@ namespace MediaBrowser.Server.Implementations.LiveTv
/// <returns>ChannelInfoDto.</returns>
public ChannelInfoDto GetChannelInfoDto(LiveTvChannel info, LiveTvProgram currentProgram, User user = null)
{
- var channelInfo = info.ChannelInfo;
-
var dto = new ChannelInfoDto
{
Name = info.Name,
ServiceName = info.ServiceName,
- ChannelType = channelInfo.ChannelType,
- Number = channelInfo.Number,
+ ChannelType = info.ChannelType,
+ Number = info.Number,
Type = info.GetClientTypeName(),
Id = info.Id.ToString("N"),
MediaType = info.MediaType,
- ExternalId = channelInfo.Id
+ ExternalId = info.ExternalId
};
if (user != null)
@@ -316,37 +314,40 @@ namespace MediaBrowser.Server.Implementations.LiveTv
public ProgramInfoDto GetProgramInfoDto(LiveTvProgram item, LiveTvChannel channel, User user = null)
{
- var program = item.ProgramInfo;
-
var dto = new ProgramInfoDto
{
- Id = GetInternalProgramId(item.ServiceName, program.Id).ToString("N"),
- ChannelId = GetInternalChannelId(item.ServiceName, program.ChannelId).ToString("N"),
- Overview = program.Overview,
- EndDate = program.EndDate,
- Genres = program.Genres,
- ExternalId = program.Id,
- Name = program.Name,
+ Id = GetInternalProgramId(item.ServiceName, item.ExternalId).ToString("N"),
+ ChannelId = GetInternalChannelId(item.ServiceName, item.ExternalChannelId).ToString("N"),
+ Overview = item.Overview,
+ Genres = item.Genres,
+ ExternalId = item.ExternalId,
+ Name = item.Name,
ServiceName = item.ServiceName,
- StartDate = program.StartDate,
- OfficialRating = program.OfficialRating,
- IsHD = program.IsHD,
- OriginalAirDate = program.OriginalAirDate,
- Audio = program.Audio,
- CommunityRating = GetClientCommunityRating(program.CommunityRating),
- IsRepeat = program.IsRepeat,
- EpisodeTitle = program.EpisodeTitle,
- IsMovie = program.IsMovie,
- IsSeries = program.IsSeries,
- IsSports = program.IsSports,
- IsLive = program.IsLive,
- IsNews = program.IsNews,
- IsKids = program.IsKids,
- IsPremiere = program.IsPremiere,
- RunTimeTicks = (program.EndDate - program.StartDate).Ticks,
+ StartDate = item.StartDate,
+ OfficialRating = item.OfficialRating,
+ IsHD = item.IsHD,
+ OriginalAirDate = item.PremiereDate,
+ Audio = item.Audio,
+ CommunityRating = GetClientCommunityRating(item.CommunityRating),
+ IsRepeat = item.IsRepeat,
+ EpisodeTitle = item.EpisodeTitle,
+ IsMovie = item.IsMovie,
+ IsSeries = item.IsSeries,
+ IsSports = item.IsSports,
+ IsLive = item.IsLive,
+ IsNews = item.IsNews,
+ IsKids = item.IsKids,
+ IsPremiere = item.IsPremiere,
Type = "Program"
};
+ if (item.EndDate.HasValue)
+ {
+ dto.EndDate = item.EndDate.Value;
+
+ dto.RunTimeTicks = (item.EndDate.Value - item.StartDate).Ticks;
+ }
+
if (channel != null)
{
dto.ChannelName = channel.Name;
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index f62efd9da..92df78fb9 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -126,9 +126,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
double number = 0;
- if (!string.IsNullOrEmpty(i.ChannelInfo.Number))
+ if (!string.IsNullOrEmpty(i.Number))
{
- double.TryParse(i.ChannelInfo.Number, out number);
+ double.TryParse(i.Number, out number);
}
return number;
@@ -140,9 +140,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
double number = 0;
- if (!string.IsNullOrEmpty(i.ChannelInfo.Number))
+ if (!string.IsNullOrEmpty(i.Number))
{
- double.TryParse(i.ChannelInfo.Number, out number);
+ double.TryParse(i.Number, out number);
}
return number;
@@ -163,7 +163,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
}
var returnChannels = allEnumerable
- .Select(i => _tvDtoService.GetChannelInfoDto(i, GetCurrentProgram(i.ChannelInfo.Id), user))
+ .Select(i => _tvDtoService.GetChannelInfoDto(i, GetCurrentProgram(i.ExternalId), user))
.ToArray();
var result = new QueryResult<ChannelInfoDto>
@@ -251,9 +251,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv
var channel = GetInternalChannel(id);
- _logger.Info("Opening channel stream from {0}, external channel Id: {1}", service.Name, channel.ChannelInfo.Id);
+ _logger.Info("Opening channel stream from {0}, external channel Id: {1}", service.Name, channel.ExternalId);
- var result = await service.GetChannelStream(channel.ChannelInfo.Id, cancellationToken).ConfigureAwait(false);
+ var result = await service.GetChannelStream(channel.ExternalId, cancellationToken).ConfigureAwait(false);
if (!string.IsNullOrEmpty(result.Id))
{
@@ -313,8 +313,18 @@ namespace MediaBrowser.Server.Implementations.LiveTv
isNew = true;
}
- item.ChannelInfo = channelInfo;
+ item.ChannelType = channelInfo.ChannelType;
+ item.ProviderImageUrl = channelInfo.ImageUrl;
+ item.HasProviderImage = channelInfo.HasImage;
+ item.ProviderImagePath = channelInfo.ImagePath;
+ item.ExternalId = channelInfo.Id;
item.ServiceName = serviceName;
+ item.Number = channelInfo.Number;
+
+ if (string.IsNullOrEmpty(item.Name))
+ {
+ item.Name = channelInfo.Name;
+ }
// Set this now so we don't cause additional file system access during provider executions
item.ResetResolveArgs(fileInfo);
@@ -346,9 +356,34 @@ namespace MediaBrowser.Server.Implementations.LiveTv
}
item.ChannelType = channelType;
- item.ProgramInfo = info;
item.ServiceName = serviceName;
+ item.Audio = info.Audio;
+ item.ExternalChannelId = info.ChannelId;
+ item.CommunityRating = info.CommunityRating;
+ item.EndDate = info.EndDate;
+ item.EpisodeTitle = info.EpisodeTitle;
+ item.ExternalId = info.Id;
+ item.Genres = info.Genres;
+ item.HasProviderImage = info.HasImage;
+ item.IsHD = info.IsHD;
+ item.IsKids = info.IsKids;
+ item.IsLive = info.IsLive;
+ item.IsMovie = info.IsMovie;
+ item.IsNews = info.IsNews;
+ item.IsPremiere = info.IsPremiere;
+ item.IsRepeat = info.IsRepeat;
+ item.IsSeries = info.IsSeries;
+ item.IsSports = info.IsSports;
+ item.Name = info.Name;
+ item.OfficialRating = info.OfficialRating;
+ item.Overview = info.Overview;
+ item.PremiereDate = info.OriginalAirDate;
+ item.ProviderImagePath = info.ImagePath;
+ item.ProviderImageUrl = info.ImageUrl;
+ item.RunTimeTicks = (info.EndDate - info.StartDate).Ticks;
+ item.StartDate = info.StartDate;
+
await item.RefreshMetadata(cancellationToken, forceSave: isNew, resetResolveArgs: false);
return item;
@@ -410,7 +445,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
private LiveTvChannel GetChannel(LiveTvProgram program)
{
- var programChannelId = program.ProgramInfo.ChannelId;
+ var programChannelId = program.ExternalChannelId;
var internalProgramChannelId = _tvDtoService.GetInternalChannelId(program.ServiceName, programChannelId);
@@ -438,28 +473,28 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
var val = query.MinEndDate.Value;
- programs = programs.Where(i => i.ProgramInfo.EndDate >= val);
+ programs = programs.Where(i => i.EndDate.HasValue && i.EndDate.Value >= val);
}
if (query.MinStartDate.HasValue)
{
var val = query.MinStartDate.Value;
- programs = programs.Where(i => i.ProgramInfo.StartDate >= val);
+ programs = programs.Where(i => i.StartDate >= val);
}
if (query.MaxEndDate.HasValue)
{
var val = query.MaxEndDate.Value;
- programs = programs.Where(i => i.ProgramInfo.EndDate <= val);
+ programs = programs.Where(i => i.EndDate.HasValue && i.EndDate.Value <= val);
}
if (query.MaxStartDate.HasValue)
{
var val = query.MaxStartDate.Value;
- programs = programs.Where(i => i.ProgramInfo.StartDate <= val);
+ programs = programs.Where(i => i.StartDate <= val);
}
if (query.ChannelIdList.Length > 0)
@@ -469,7 +504,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
programs = programs.Where(i =>
{
- var programChannelId = i.ProgramInfo.ChannelId;
+ var programChannelId = i.ExternalChannelId;
var internalProgramChannelId = _tvDtoService.GetInternalChannelId(serviceName, programChannelId);
@@ -537,13 +572,13 @@ namespace MediaBrowser.Server.Implementations.LiveTv
.Select(i => _libraryManager.GetGenre(i))
.ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase);
- programs = programList.OrderByDescending(i => GetRecommendationScore(i.ProgramInfo, user.Id, serviceName, genres))
- .ThenBy(i => i.ProgramInfo.StartDate);
+ programs = programList.OrderByDescending(i => GetRecommendationScore(i, user.Id, serviceName, genres))
+ .ThenBy(i => i.StartDate);
if (query.Limit.HasValue)
{
programs = programs.Take(query.Limit.Value)
- .OrderBy(i => i.ProgramInfo.StartDate);
+ .OrderBy(i => i.StartDate);
}
var returnArray = programs
@@ -566,7 +601,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
return result;
}
- private int GetRecommendationScore(ProgramInfo program, Guid userId, string serviceName, Dictionary<string, Genre> genres)
+ private int GetRecommendationScore(LiveTvProgram program, Guid userId, string serviceName, Dictionary<string, Genre> genres)
{
var score = 0;
@@ -580,7 +615,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
score++;
}
- var internalChannelId = _tvDtoService.GetInternalChannelId(serviceName, program.ChannelId);
+ var internalChannelId = _tvDtoService.GetInternalChannelId(serviceName, program.ExternalChannelId);
var channel = GetInternalChannel(internalChannelId);
var channelUserdata = _userDataManager.GetUserData(userId, channel.GetUserDataKey());
@@ -724,9 +759,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv
var start = DateTime.UtcNow.AddHours(-1);
var end = start.AddDays(guideDays);
- var channelPrograms = await service.GetProgramsAsync(currentChannel.ChannelInfo.Id, start, end, cancellationToken).ConfigureAwait(false);
+ var channelPrograms = await service.GetProgramsAsync(currentChannel.ExternalId, start, end, cancellationToken).ConfigureAwait(false);
- var programTasks = channelPrograms.Select(program => GetProgram(program, currentChannel.ChannelInfo.ChannelType, service.Name, cancellationToken));
+ var programTasks = channelPrograms.Select(program => GetProgram(program, currentChannel.ChannelType, service.Name, cancellationToken));
var programEntities = await Task.WhenAll(programTasks).ConfigureAwait(false);
programs.AddRange(programEntities);
@@ -1033,7 +1068,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
var internalChannelId = _tvDtoService.GetInternalChannelId(service.Name, i.ChannelId);
var channel = GetInternalChannel(internalChannelId);
- channelName = channel == null ? null : channel.ChannelInfo.Name;
+ channelName = channel == null ? null : channel.Name;
}
return _tvDtoService.GetSeriesTimerInfoDto(i, service, channelName);
@@ -1052,7 +1087,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
var channel = GetInternalChannel(id);
- var dto = _tvDtoService.GetChannelInfoDto(channel, GetCurrentProgram(channel.ChannelInfo.Id), user);
+ var dto = _tvDtoService.GetChannelInfoDto(channel, GetCurrentProgram(channel.ExternalId), user);
return Task.FromResult(dto);
}
@@ -1062,15 +1097,48 @@ namespace MediaBrowser.Server.Implementations.LiveTv
var now = DateTime.UtcNow;
return _programs.Values
- .Where(i => string.Equals(externalChannelId, i.ProgramInfo.ChannelId, StringComparison.OrdinalIgnoreCase))
- .OrderBy(i => i.ProgramInfo.StartDate)
- .SkipWhile(i => now >= i.ProgramInfo.EndDate)
+ .Where(i => string.Equals(externalChannelId, i.ExternalChannelId, StringComparison.OrdinalIgnoreCase))
+ .OrderBy(i => i.StartDate)
+ .SkipWhile(i => now >= (i.EndDate ?? DateTime.MinValue))
.FirstOrDefault();
}
- private async Task<SeriesTimerInfo> GetNewTimerDefaultsInternal(CancellationToken cancellationToken, ProgramInfo program = null)
+ private async Task<SeriesTimerInfo> GetNewTimerDefaultsInternal(CancellationToken cancellationToken, LiveTvProgram program = null)
{
- var info = await ActiveService.GetNewTimerDefaultsAsync(cancellationToken, program).ConfigureAwait(false);
+ ProgramInfo programInfo = null;
+
+ if (program != null)
+ {
+ programInfo = new ProgramInfo
+ {
+ Audio = program.Audio,
+ ChannelId = program.ExternalChannelId,
+ CommunityRating = program.CommunityRating,
+ EndDate = program.EndDate ?? DateTime.MinValue,
+ EpisodeTitle = program.EpisodeTitle,
+ Genres = program.Genres,
+ HasImage = program.HasProviderImage,
+ Id = program.ExternalId,
+ IsHD = program.IsHD,
+ IsKids = program.IsKids,
+ IsLive = program.IsLive,
+ IsMovie = program.IsMovie,
+ IsNews = program.IsNews,
+ IsPremiere = program.IsPremiere,
+ IsRepeat = program.IsRepeat,
+ IsSeries = program.IsSeries,
+ IsSports = program.IsSports,
+ OriginalAirDate = program.PremiereDate,
+ Overview = program.Overview,
+ StartDate = program.StartDate,
+ ImagePath = program.ProviderImagePath,
+ ImageUrl = program.ProviderImageUrl,
+ Name = program.Name,
+ OfficialRating = program.OfficialRating
+ };
+ }
+
+ var info = await ActiveService.GetNewTimerDefaultsAsync(cancellationToken, programInfo).ConfigureAwait(false);
info.Id = null;
@@ -1088,7 +1156,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
public async Task<SeriesTimerInfoDto> GetNewTimerDefaults(string programId, CancellationToken cancellationToken)
{
- var program = GetInternalProgram(programId).ProgramInfo;
+ var program = GetInternalProgram(programId);
var programDto = await GetProgram(programId, cancellationToken).ConfigureAwait(false);
var defaults = await GetNewTimerDefaultsInternal(cancellationToken, program).ConfigureAwait(false);
@@ -1104,13 +1172,17 @@ namespace MediaBrowser.Server.Implementations.LiveTv
info.Name = program.Name;
info.ChannelId = programDto.ChannelId;
info.ChannelName = programDto.ChannelName;
- info.EndDate = program.EndDate;
info.StartDate = program.StartDate;
info.Name = program.Name;
info.Overview = program.Overview;
info.ProgramId = programDto.Id;
info.ExternalProgramId = programDto.ExternalId;
+ if (program.EndDate.HasValue)
+ {
+ info.EndDate = program.EndDate.Value;
+ }
+
return info;
}
@@ -1299,8 +1371,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
var programs = _programs.ToList();
- var startDate = programs.Select(i => i.Value.ProgramInfo.StartDate).Min();
- var endDate = programs.Select(i => i.Value.ProgramInfo.StartDate).Max();
+ var startDate = programs.Select(i => i.Value.StartDate).Min();
+ var endDate = programs.Select(i => i.Value.StartDate).Max();
return new GuideInfo
{
diff --git a/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs b/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs
index 7c343f77c..041925cdd 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs
@@ -76,22 +76,20 @@ namespace MediaBrowser.Server.Implementations.LiveTv
private async Task<bool> DownloadImage(LiveTvProgram item, CancellationToken cancellationToken)
{
- var programInfo = item.ProgramInfo;
-
Stream imageStream = null;
string contentType = null;
- if (!string.IsNullOrEmpty(programInfo.ImagePath))
+ if (!string.IsNullOrEmpty(item.ProviderImagePath))
{
- contentType = "image/" + Path.GetExtension(programInfo.ImagePath).ToLower();
- imageStream = _fileSystem.GetFileStream(programInfo.ImagePath, FileMode.Open, FileAccess.Read, FileShare.Read, true);
+ contentType = "image/" + Path.GetExtension(item.ProviderImagePath).ToLower();
+ imageStream = _fileSystem.GetFileStream(item.ProviderImagePath, FileMode.Open, FileAccess.Read, FileShare.Read, true);
}
- else if (!string.IsNullOrEmpty(programInfo.ImageUrl))
+ else if (!string.IsNullOrEmpty(item.ProviderImageUrl))
{
var options = new HttpRequestOptions
{
CancellationToken = cancellationToken,
- Url = programInfo.ImageUrl
+ Url = item.ProviderImageUrl
};
var response = await _httpClient.GetResponse(options).ConfigureAwait(false);
@@ -105,7 +103,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
imageStream = response.Content;
contentType = response.ContentType;
}
- else if (programInfo.HasImage ?? true)
+ else if (item.HasProviderImage ?? true)
{
var service = _liveTvManager.Services.FirstOrDefault(i => string.Equals(i.Name, item.ServiceName, StringComparison.OrdinalIgnoreCase));
@@ -113,7 +111,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
try
{
- var response = await service.GetProgramImageAsync(programInfo.Id, programInfo.ChannelId, cancellationToken).ConfigureAwait(false);
+ var response = await service.GetProgramImageAsync(item.ExternalId, item.ExternalChannelId, cancellationToken).ConfigureAwait(false);
if (response != null)
{
@@ -131,7 +129,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
if (imageStream != null)
{
// Dummy up the original url
- var url = item.ServiceName + programInfo.Id;
+ var url = item.ServiceName + item.ExternalId;
await _providerManager.SaveImage(item, imageStream, contentType, ImageType.Primary, null, url, cancellationToken).ConfigureAwait(false);
return true;