mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-27 01:50:53 +01:00
@@ -22,6 +22,10 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
{
|
||||
public class LiveTvDtoService
|
||||
{
|
||||
private const string InternalVersionNumber = "4";
|
||||
|
||||
private const string ServiceName = "Emby";
|
||||
|
||||
private readonly ILogger _logger;
|
||||
private readonly IImageProcessor _imageProcessor;
|
||||
|
||||
@@ -32,13 +36,13 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
public LiveTvDtoService(
|
||||
IDtoService dtoService,
|
||||
IImageProcessor imageProcessor,
|
||||
ILoggerFactory loggerFactory,
|
||||
ILogger<LiveTvDtoService> logger,
|
||||
IApplicationHost appHost,
|
||||
ILibraryManager libraryManager)
|
||||
{
|
||||
_dtoService = dtoService;
|
||||
_imageProcessor = imageProcessor;
|
||||
_logger = loggerFactory.CreateLogger(nameof(LiveTvDtoService));
|
||||
_logger = logger;
|
||||
_appHost = appHost;
|
||||
_libraryManager = libraryManager;
|
||||
}
|
||||
@@ -161,7 +165,6 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
Limit = 1,
|
||||
ImageTypes = new ImageType[] { ImageType.Thumb },
|
||||
DtoOptions = new DtoOptions(false)
|
||||
|
||||
}).FirstOrDefault();
|
||||
|
||||
if (librarySeries != null)
|
||||
@@ -179,6 +182,7 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
_logger.LogError(ex, "Error");
|
||||
}
|
||||
}
|
||||
|
||||
image = librarySeries.GetImageInfo(ImageType.Backdrop, 0);
|
||||
if (image != null)
|
||||
{
|
||||
@@ -199,13 +203,12 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
|
||||
var program = _libraryManager.GetItemList(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new string[] { typeof(LiveTvProgram).Name },
|
||||
IncludeItemTypes = new string[] { nameof(LiveTvProgram) },
|
||||
ExternalSeriesId = programSeriesId,
|
||||
Limit = 1,
|
||||
ImageTypes = new ImageType[] { ImageType.Primary },
|
||||
DtoOptions = new DtoOptions(false),
|
||||
Name = string.IsNullOrEmpty(programSeriesId) ? seriesName : null
|
||||
|
||||
}).FirstOrDefault();
|
||||
|
||||
if (program != null)
|
||||
@@ -232,9 +235,10 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
try
|
||||
{
|
||||
dto.ParentBackdropImageTags = new string[]
|
||||
{
|
||||
{
|
||||
_imageProcessor.GetImageCacheTag(program, image)
|
||||
};
|
||||
};
|
||||
|
||||
dto.ParentBackdropItemId = program.Id.ToString("N", CultureInfo.InvariantCulture);
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -255,7 +259,6 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
Limit = 1,
|
||||
ImageTypes = new ImageType[] { ImageType.Thumb },
|
||||
DtoOptions = new DtoOptions(false)
|
||||
|
||||
}).FirstOrDefault();
|
||||
|
||||
if (librarySeries != null)
|
||||
@@ -273,6 +276,7 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
_logger.LogError(ex, "Error");
|
||||
}
|
||||
}
|
||||
|
||||
image = librarySeries.GetImageInfo(ImageType.Backdrop, 0);
|
||||
if (image != null)
|
||||
{
|
||||
@@ -298,7 +302,6 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
Limit = 1,
|
||||
ImageTypes = new ImageType[] { ImageType.Primary },
|
||||
DtoOptions = new DtoOptions(false)
|
||||
|
||||
}).FirstOrDefault();
|
||||
|
||||
if (program == null)
|
||||
@@ -311,7 +314,6 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
ImageTypes = new ImageType[] { ImageType.Primary },
|
||||
DtoOptions = new DtoOptions(false),
|
||||
Name = string.IsNullOrEmpty(programSeriesId) ? seriesName : null
|
||||
|
||||
}).FirstOrDefault();
|
||||
}
|
||||
|
||||
@@ -396,8 +398,6 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
return null;
|
||||
}
|
||||
|
||||
private const string InternalVersionNumber = "4";
|
||||
|
||||
public Guid GetInternalChannelId(string serviceName, string externalId)
|
||||
{
|
||||
var name = serviceName + externalId + InternalVersionNumber;
|
||||
@@ -405,7 +405,6 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
return _libraryManager.GetNewItemId(name.ToLowerInvariant(), typeof(LiveTvChannel));
|
||||
}
|
||||
|
||||
private const string ServiceName = "Emby";
|
||||
public string GetInternalTimerId(string externalId)
|
||||
{
|
||||
var name = ServiceName + externalId + InternalVersionNumber;
|
||||
|
||||
@@ -41,6 +41,10 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
/// </summary>
|
||||
public class LiveTvManager : ILiveTvManager, IDisposable
|
||||
{
|
||||
private const string ExternalServiceTag = "ExternalServiceId";
|
||||
|
||||
private const string EtagKey = "ProgramEtag";
|
||||
|
||||
private readonly IServerConfigurationManager _config;
|
||||
private readonly ILogger _logger;
|
||||
private readonly IItemRepository _itemRepo;
|
||||
@@ -91,7 +95,7 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
_userDataManager = userDataManager;
|
||||
_channelManager = channelManager;
|
||||
|
||||
_tvDtoService = new LiveTvDtoService(dtoService, imageProcessor, loggerFactory, appHost, _libraryManager);
|
||||
_tvDtoService = new LiveTvDtoService(dtoService, imageProcessor, loggerFactory.CreateLogger<LiveTvDtoService>(), appHost, _libraryManager);
|
||||
}
|
||||
|
||||
public event EventHandler<GenericEventArgs<TimerEventInfo>> SeriesTimerCancelled;
|
||||
@@ -178,7 +182,6 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
{
|
||||
Name = i.Name,
|
||||
Id = i.Type
|
||||
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
@@ -261,6 +264,7 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
var endTime = DateTime.UtcNow;
|
||||
_logger.LogInformation("Live stream opened after {0}ms", (endTime - startTime).TotalMilliseconds);
|
||||
}
|
||||
|
||||
info.RequiresClosing = true;
|
||||
|
||||
var idPrefix = service.GetType().FullName.GetMD5().ToString("N", CultureInfo.InvariantCulture) + "_";
|
||||
@@ -362,30 +366,37 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
{
|
||||
stream.BitRate = null;
|
||||
}
|
||||
|
||||
if (stream.Channels.HasValue && stream.Channels <= 0)
|
||||
{
|
||||
stream.Channels = null;
|
||||
}
|
||||
|
||||
if (stream.AverageFrameRate.HasValue && stream.AverageFrameRate <= 0)
|
||||
{
|
||||
stream.AverageFrameRate = null;
|
||||
}
|
||||
|
||||
if (stream.RealFrameRate.HasValue && stream.RealFrameRate <= 0)
|
||||
{
|
||||
stream.RealFrameRate = null;
|
||||
}
|
||||
|
||||
if (stream.Width.HasValue && stream.Width <= 0)
|
||||
{
|
||||
stream.Width = null;
|
||||
}
|
||||
|
||||
if (stream.Height.HasValue && stream.Height <= 0)
|
||||
{
|
||||
stream.Height = null;
|
||||
}
|
||||
|
||||
if (stream.SampleRate.HasValue && stream.SampleRate <= 0)
|
||||
{
|
||||
stream.SampleRate = null;
|
||||
}
|
||||
|
||||
if (stream.Level.HasValue && stream.Level <= 0)
|
||||
{
|
||||
stream.Level = null;
|
||||
@@ -427,7 +438,6 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
}
|
||||
}
|
||||
|
||||
private const string ExternalServiceTag = "ExternalServiceId";
|
||||
private LiveTvChannel GetChannel(ChannelInfo channelInfo, string serviceName, BaseItem parentFolder, CancellationToken cancellationToken)
|
||||
{
|
||||
var parentFolderId = parentFolder.Id;
|
||||
@@ -456,6 +466,7 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
{
|
||||
isNew = true;
|
||||
}
|
||||
|
||||
item.Tags = channelInfo.Tags;
|
||||
}
|
||||
|
||||
@@ -463,6 +474,7 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
{
|
||||
isNew = true;
|
||||
}
|
||||
|
||||
item.ParentId = parentFolderId;
|
||||
|
||||
item.ChannelType = channelInfo.ChannelType;
|
||||
@@ -472,24 +484,28 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
{
|
||||
forceUpdate = true;
|
||||
}
|
||||
|
||||
item.SetProviderId(ExternalServiceTag, serviceName);
|
||||
|
||||
if (!string.Equals(channelInfo.Id, item.ExternalId, StringComparison.Ordinal))
|
||||
{
|
||||
forceUpdate = true;
|
||||
}
|
||||
|
||||
item.ExternalId = channelInfo.Id;
|
||||
|
||||
if (!string.Equals(channelInfo.Number, item.Number, StringComparison.Ordinal))
|
||||
{
|
||||
forceUpdate = true;
|
||||
}
|
||||
|
||||
item.Number = channelInfo.Number;
|
||||
|
||||
if (!string.Equals(channelInfo.Name, item.Name, StringComparison.Ordinal))
|
||||
{
|
||||
forceUpdate = true;
|
||||
}
|
||||
|
||||
item.Name = channelInfo.Name;
|
||||
|
||||
if (!item.HasImage(ImageType.Primary))
|
||||
@@ -518,8 +534,6 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
return item;
|
||||
}
|
||||
|
||||
private const string EtagKey = "ProgramEtag";
|
||||
|
||||
private Tuple<LiveTvProgram, bool, bool> GetProgram(ProgramInfo info, Dictionary<Guid, LiveTvProgram> allExistingPrograms, LiveTvChannel channel, ChannelType channelType, string serviceName, CancellationToken cancellationToken)
|
||||
{
|
||||
var id = _tvDtoService.GetInternalProgramId(info.Id);
|
||||
|
||||
Reference in New Issue
Block a user