Use new ReadAllLines extensions

This commit is contained in:
Bond_009 2021-01-08 23:57:27 +01:00
parent 95b1cf532b
commit ddb04dc12b
7 changed files with 48 additions and 51 deletions

View file

@ -10,6 +10,7 @@ using System.Text.Json;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Json; using MediaBrowser.Common.Json;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
@ -307,13 +308,11 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
{ {
using (var reader = new StreamReader(source)) using (var reader = new StreamReader(source))
{ {
while (!reader.EndOfStream) await foreach (var line in reader.ReadAllLinesAsync().ConfigureAwait(false))
{ {
var line = await reader.ReadLineAsync().ConfigureAwait(false);
var bytes = Encoding.UTF8.GetBytes(Environment.NewLine + line); var bytes = Encoding.UTF8.GetBytes(Environment.NewLine + line);
await target.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false); await target.WriteAsync(bytes.AsMemory()).ConfigureAwait(false);
await target.FlushAsync().ConfigureAwait(false); await target.FlushAsync().ConfigureAwait(false);
} }
} }

View file

@ -182,16 +182,16 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
await using var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false); await using var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
using var sr = new StreamReader(stream, System.Text.Encoding.UTF8); using var sr = new StreamReader(stream, System.Text.Encoding.UTF8);
var tuners = new List<LiveTvTunerInfo>(); var tuners = new List<LiveTvTunerInfo>();
while (!sr.EndOfStream) await foreach (var line in sr.ReadAllLinesAsync().ConfigureAwait(false))
{ {
string line = StripXML(sr.ReadLine()); string stripedLine = StripXML(line);
if (line.Contains("Channel", StringComparison.Ordinal)) if (stripedLine.Contains("Channel", StringComparison.Ordinal))
{ {
LiveTvTunerStatus status; LiveTvTunerStatus status;
var index = line.IndexOf("Channel", StringComparison.OrdinalIgnoreCase); var index = stripedLine.IndexOf("Channel", StringComparison.OrdinalIgnoreCase);
var name = line.Substring(0, index - 1); var name = stripedLine.Substring(0, index - 1);
var currentChannel = line.Substring(index + 7); var currentChannel = stripedLine.Substring(index + 7);
if (currentChannel != "none") if (string.Equals(currentChannel, "none", StringComparison.Ordinal))
{ {
status = LiveTvTunerStatus.LiveTv; status = LiveTvTunerStatus.LiveTv;
} }

View file

@ -35,16 +35,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
// Read the file and display it line by line. // Read the file and display it line by line.
using (var reader = new StreamReader(await GetListingsStream(info, cancellationToken).ConfigureAwait(false))) using (var reader = new StreamReader(await GetListingsStream(info, cancellationToken).ConfigureAwait(false)))
{ {
return GetChannels(reader, channelIdPrefix, info.Id); return await GetChannelsAsync(reader, channelIdPrefix, info.Id).ConfigureAwait(false);
}
}
public List<ChannelInfo> ParseString(string text, string channelIdPrefix, string tunerHostId)
{
// Read the file and display it line by line.
using (var reader = new StringReader(text))
{
return GetChannels(reader, channelIdPrefix, tunerHostId);
} }
} }
@ -70,43 +61,42 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
private const string ExtInfPrefix = "#EXTINF:"; private const string ExtInfPrefix = "#EXTINF:";
private List<ChannelInfo> GetChannels(TextReader reader, string channelIdPrefix, string tunerHostId) private async Task<List<ChannelInfo>> GetChannelsAsync(TextReader reader, string channelIdPrefix, string tunerHostId)
{ {
var channels = new List<ChannelInfo>(); var channels = new List<ChannelInfo>();
string line;
string extInf = string.Empty; string extInf = string.Empty;
while ((line = reader.ReadLine()) != null) await foreach (var line in reader.ReadAllLinesAsync().ConfigureAwait(false))
{ {
line = line.Trim(); var trimmedLine = line.Trim();
if (string.IsNullOrWhiteSpace(line)) if (string.IsNullOrWhiteSpace(trimmedLine))
{ {
continue; continue;
} }
if (line.StartsWith("#EXTM3U", StringComparison.OrdinalIgnoreCase)) if (trimmedLine.StartsWith("#EXTM3U", StringComparison.OrdinalIgnoreCase))
{ {
continue; continue;
} }
if (line.StartsWith(ExtInfPrefix, StringComparison.OrdinalIgnoreCase)) if (trimmedLine.StartsWith(ExtInfPrefix, StringComparison.OrdinalIgnoreCase))
{ {
extInf = line.Substring(ExtInfPrefix.Length).Trim(); extInf = trimmedLine.Substring(ExtInfPrefix.Length).Trim();
_logger.LogInformation("Found m3u channel: {0}", extInf); _logger.LogInformation("Found m3u channel: {0}", extInf);
} }
else if (!string.IsNullOrWhiteSpace(extInf) && !line.StartsWith('#')) else if (!string.IsNullOrWhiteSpace(extInf) && !trimmedLine.StartsWith('#'))
{ {
var channel = GetChannelnfo(extInf, tunerHostId, line); var channel = GetChannelnfo(extInf, tunerHostId, trimmedLine);
if (string.IsNullOrWhiteSpace(channel.Id)) if (string.IsNullOrWhiteSpace(channel.Id))
{ {
channel.Id = channelIdPrefix + line.GetMD5().ToString("N", CultureInfo.InvariantCulture); channel.Id = channelIdPrefix + trimmedLine.GetMD5().ToString("N", CultureInfo.InvariantCulture);
} }
else else
{ {
channel.Id = channelIdPrefix + channel.Id.GetMD5().ToString("N", CultureInfo.InvariantCulture); channel.Id = channelIdPrefix + channel.Id.GetMD5().ToString("N", CultureInfo.InvariantCulture);
} }
channel.Path = line; channel.Path = trimmedLine;
channels.Add(channel); channels.Add(channel);
extInf = string.Empty; extInf = string.Empty;
} }

View file

@ -7,6 +7,7 @@ using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Json; using MediaBrowser.Common.Json;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
@ -72,8 +73,7 @@ namespace Emby.Server.Implementations.Localization
using (var str = _assembly.GetManifestResourceStream(resource)) using (var str = _assembly.GetManifestResourceStream(resource))
using (var reader = new StreamReader(str)) using (var reader = new StreamReader(str))
{ {
string line; await foreach (var line in reader.ReadAllLinesAsync().ConfigureAwait(false))
while ((line = await reader.ReadLineAsync().ConfigureAwait(false)) != null)
{ {
if (string.IsNullOrWhiteSpace(line)) if (string.IsNullOrWhiteSpace(line))
{ {
@ -118,10 +118,8 @@ namespace Emby.Server.Implementations.Localization
using (var stream = _assembly.GetManifestResourceStream(ResourcePath)) using (var stream = _assembly.GetManifestResourceStream(ResourcePath))
using (var reader = new StreamReader(stream)) using (var reader = new StreamReader(stream))
{ {
while (!reader.EndOfStream) await foreach (var line in reader.ReadAllLinesAsync().ConfigureAwait(false))
{ {
var line = await reader.ReadLineAsync().ConfigureAwait(false);
if (string.IsNullOrWhiteSpace(line)) if (string.IsNullOrWhiteSpace(line))
{ {
continue; continue;
@ -179,7 +177,7 @@ namespace Emby.Server.Implementations.Localization
/// <inheritdoc /> /// <inheritdoc />
public IEnumerable<CountryInfo> GetCountries() public IEnumerable<CountryInfo> GetCountries()
{ {
StreamReader reader = new StreamReader(_assembly.GetManifestResourceStream("Emby.Server.Implementations.Localization.countries.json")); using StreamReader reader = new StreamReader(_assembly.GetManifestResourceStream("Emby.Server.Implementations.Localization.countries.json"));
return JsonSerializer.Deserialize<IEnumerable<CountryInfo>>(reader.ReadToEnd(), _jsonOptions); return JsonSerializer.Deserialize<IEnumerable<CountryInfo>>(reader.ReadToEnd(), _jsonOptions);
} }

View file

@ -118,10 +118,7 @@ namespace Jellyfin.Api.Helpers
/// <returns>The playlist text as a string.</returns> /// <returns>The playlist text as a string.</returns>
public static string GetLivePlaylistText(string path, StreamState state) public static string GetLivePlaylistText(string path, StreamState state)
{ {
using var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); var text = File.ReadAllText(path);
using var reader = new StreamReader(stream);
var text = reader.ReadToEnd();
var segmentFormat = EncodingHelper.GetSegmentFileExtension(state.Request.SegmentContainer).TrimStart('.'); var segmentFormat = EncodingHelper.GetSegmentFileExtension(state.Request.SegmentContainer).TrimStart('.');
if (string.Equals(segmentFormat, "mp4", StringComparison.OrdinalIgnoreCase)) if (string.Equals(segmentFormat, "mp4", StringComparison.OrdinalIgnoreCase))

View file

@ -35,11 +35,11 @@ namespace MediaBrowser.Common.Extensions
} }
/// <summary> /// <summary>
/// Reads all lines in the <see cref="StreamReader" />. /// Reads all lines in the <see cref="TextReader" />.
/// </summary> /// </summary>
/// <param name="reader">The <see cref="StreamReader" /> to read from.</param> /// <param name="reader">The <see cref="TextReader" /> to read from.</param>
/// <returns>All lines in the stream.</returns> /// <returns>All lines in the stream.</returns>
public static IEnumerable<string> ReadAllLines(this StreamReader reader) public static IEnumerable<string> ReadAllLines(this TextReader reader)
{ {
string? line; string? line;
while ((line = reader.ReadLine()) != null) while ((line = reader.ReadLine()) != null)
@ -47,5 +47,19 @@ namespace MediaBrowser.Common.Extensions
yield return line; yield return line;
} }
} }
/// <summary>
/// Reads all lines in the <see cref="TextReader" />.
/// </summary>
/// <param name="reader">The <see cref="TextReader" /> to read from.</param>
/// <returns>All lines in the stream.</returns>
public static async IAsyncEnumerable<string> ReadAllLinesAsync(this TextReader reader)
{
string? line;
while ((line = await reader.ReadLineAsync().ConfigureAwait(false)) != null)
{
yield return line;
}
}
} }
} }

View file

@ -8,6 +8,7 @@ using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
@ -177,13 +178,11 @@ namespace MediaBrowser.Providers.Studios
{ {
var lines = new List<string>(); var lines = new List<string>();
while (!reader.EndOfStream) foreach (var line in reader.ReadAllLines())
{ {
var text = reader.ReadLine(); if (!string.IsNullOrWhiteSpace(line))
if (!string.IsNullOrWhiteSpace(text))
{ {
lines.Add(text); lines.Add(line);
} }
} }