Remove unnecessary allocations in TunerHostManager

This commit is contained in:
Patrick Barron
2024-01-12 20:56:58 -05:00
parent 9c2c066e6f
commit c23a038ba8
3 changed files with 12 additions and 20 deletions

View File

@@ -5,7 +5,6 @@ using System.Linq;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using Jellyfin.Extensions;
using Jellyfin.LiveTv.Configuration;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Extensions;
@@ -101,10 +100,8 @@ public class TunerHostManager : ITunerHostManager
}
/// <inheritdoc />
public async Task<List<TunerHostInfo>> DiscoverTuners(bool newDevicesOnly, CancellationToken cancellationToken)
public async IAsyncEnumerable<TunerHostInfo> DiscoverTuners(bool newDevicesOnly)
{
var list = new List<TunerHostInfo>();
var configuredDeviceIds = _config.GetLiveTvConfiguration().TunerHosts
.Where(i => !string.IsNullOrWhiteSpace(i.DeviceId))
.Select(i => i.DeviceId)
@@ -112,19 +109,15 @@ public class TunerHostManager : ITunerHostManager
foreach (var host in _tunerHosts)
{
var discoveredDevices = await DiscoverDevices(host, TunerDiscoveryDurationMs, cancellationToken).ConfigureAwait(false);
if (newDevicesOnly)
var discoveredDevices = await DiscoverDevices(host, TunerDiscoveryDurationMs, CancellationToken.None).ConfigureAwait(false);
foreach (var tuner in discoveredDevices)
{
discoveredDevices = discoveredDevices
.Where(d => !configuredDeviceIds.Contains(d.DeviceId, StringComparison.OrdinalIgnoreCase))
.ToList();
if (!newDevicesOnly || !configuredDeviceIds.Contains(tuner.DeviceId, StringComparer.OrdinalIgnoreCase))
{
yield return tuner;
}
}
list.AddRange(discoveredDevices);
}
return list;
}
/// <inheritdoc />
@@ -158,7 +151,7 @@ public class TunerHostManager : ITunerHostManager
}
}
private async Task<List<TunerHostInfo>> DiscoverDevices(ITunerHost host, int discoveryDurationMs, CancellationToken cancellationToken)
private async Task<IList<TunerHostInfo>> DiscoverDevices(ITunerHost host, int discoveryDurationMs, CancellationToken cancellationToken)
{
try
{
@@ -175,7 +168,7 @@ public class TunerHostManager : ITunerHostManager
{
_logger.LogError(ex, "Error discovering tuner devices");
return new List<TunerHostInfo>();
return Array.Empty<TunerHostInfo>();
}
}
}