aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Jellyfin.Api/Controllers/LiveTvController.cs4
-rw-r--r--MediaBrowser.Controller/LiveTv/ITunerHostManager.cs3
-rw-r--r--src/Jellyfin.LiveTv/TunerHosts/TunerHostManager.cs25
3 files changed, 12 insertions, 20 deletions
diff --git a/Jellyfin.Api/Controllers/LiveTvController.cs b/Jellyfin.Api/Controllers/LiveTvController.cs
index 1a2a3caae..27eb88b60 100644
--- a/Jellyfin.Api/Controllers/LiveTvController.cs
+++ b/Jellyfin.Api/Controllers/LiveTvController.cs
@@ -1144,8 +1144,8 @@ public class LiveTvController : BaseJellyfinApiController
[HttpGet("Tuners/Discover")]
[Authorize(Policy = Policies.LiveTvManagement)]
[ProducesResponseType(StatusCodes.Status200OK)]
- public async Task<ActionResult<IEnumerable<TunerHostInfo>>> DiscoverTuners([FromQuery] bool newDevicesOnly = false)
- => await _tunerHostManager.DiscoverTuners(newDevicesOnly, CancellationToken.None).ConfigureAwait(false);
+ public IAsyncEnumerable<TunerHostInfo> DiscoverTuners([FromQuery] bool newDevicesOnly = false)
+ => _tunerHostManager.DiscoverTuners(newDevicesOnly);
/// <summary>
/// Gets a live tv recording stream.
diff --git a/MediaBrowser.Controller/LiveTv/ITunerHostManager.cs b/MediaBrowser.Controller/LiveTv/ITunerHostManager.cs
index 7e4caaf13..3df6066f6 100644
--- a/MediaBrowser.Controller/LiveTv/ITunerHostManager.cs
+++ b/MediaBrowser.Controller/LiveTv/ITunerHostManager.cs
@@ -34,9 +34,8 @@ public interface ITunerHostManager
/// Discovers the available tuners.
/// </summary>
/// <param name="newDevicesOnly">A value indicating whether to only return new devices.</param>
- /// <param name="cancellationToken">The <see cref="CancellationToken"/> to use.</param>
/// <returns>The <see cref="TunerHostInfo"/>s.</returns>
- Task<List<TunerHostInfo>> DiscoverTuners(bool newDevicesOnly, CancellationToken cancellationToken);
+ IAsyncEnumerable<TunerHostInfo> DiscoverTuners(bool newDevicesOnly);
/// <summary>
/// Scans for tuner devices that have changed URLs.
diff --git a/src/Jellyfin.LiveTv/TunerHosts/TunerHostManager.cs b/src/Jellyfin.LiveTv/TunerHosts/TunerHostManager.cs
index 04eb8293a..3e4b0e13f 100644
--- a/src/Jellyfin.LiveTv/TunerHosts/TunerHostManager.cs
+++ b/src/Jellyfin.LiveTv/TunerHosts/TunerHostManager.cs
@@ -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>();
}
}
}