added playlist loader
registered appconfig as singleton added config interfaces
This commit is contained in:
13
Tv7Playlist.Core/IAppConfig.cs
Normal file
13
Tv7Playlist.Core/IAppConfig.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
namespace Tv7Playlist.Core
|
||||
{
|
||||
public interface IAppConfig
|
||||
{
|
||||
string TV7Url { get; set; }
|
||||
|
||||
SourceTypeEnum SourceType { get; set; }
|
||||
|
||||
string UdpxyUrl { get; set; }
|
||||
|
||||
string DownloadFileName { get; set; }
|
||||
}
|
||||
}
|
11
Tv7Playlist.Core/IPlaylistLoader.cs
Normal file
11
Tv7Playlist.Core/IPlaylistLoader.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Tv7Playlist.Core.Parsers;
|
||||
|
||||
namespace Tv7Playlist.Core
|
||||
{
|
||||
public interface IPlaylistLoader
|
||||
{
|
||||
Task<IReadOnlyCollection<ParsedTrack>> LoadPlaylistFromUrl();
|
||||
}
|
||||
}
|
@@ -6,6 +6,6 @@ namespace Tv7Playlist.Core.Parsers
|
||||
{
|
||||
public interface IPlaylistParser
|
||||
{
|
||||
Task<IReadOnlyCollection<ParsedTrack>> ParseFromStream(Stream stream);
|
||||
Task<IReadOnlyCollection<ParsedTrack>> ParseFromStreamAsync(Stream stream);
|
||||
}
|
||||
}
|
@@ -20,7 +20,7 @@ namespace Tv7Playlist.Core.Parsers.M3u
|
||||
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||||
}
|
||||
|
||||
public async Task<IReadOnlyCollection<ParsedTrack>> ParseFromStream(Stream stream)
|
||||
public async Task<IReadOnlyCollection<ParsedTrack>> ParseFromStreamAsync(Stream stream)
|
||||
{
|
||||
if (stream == null) throw new ArgumentNullException(nameof(stream));
|
||||
|
||||
|
@@ -10,7 +10,7 @@ namespace Tv7Playlist.Core.Parsers.Xspf
|
||||
{
|
||||
public class XspfParser : IPlaylistParser
|
||||
{
|
||||
public Task<IReadOnlyCollection<ParsedTrack>> ParseFromStream(Stream stream)
|
||||
public Task<IReadOnlyCollection<ParsedTrack>> ParseFromStreamAsync(Stream stream)
|
||||
{
|
||||
var deserializedList = DeserializePlaylist(stream);
|
||||
|
||||
|
52
Tv7Playlist.Core/PlaylistLoader.cs
Normal file
52
Tv7Playlist.Core/PlaylistLoader.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Tv7Playlist.Core.Parsers;
|
||||
|
||||
namespace Tv7Playlist.Core
|
||||
{
|
||||
public class PlaylistLoader : IPlaylistLoader
|
||||
{
|
||||
private readonly ILogger<PlaylistLoader> _logger;
|
||||
private readonly IPlaylistParser _playlistParser;
|
||||
private readonly string _tv7Url;
|
||||
|
||||
public PlaylistLoader(ILogger<PlaylistLoader> logger, IAppConfig appConfig, IPlaylistParser playlistParser)
|
||||
{
|
||||
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||||
_playlistParser = playlistParser ?? throw new ArgumentNullException(nameof(playlistParser));
|
||||
|
||||
_tv7Url = appConfig.TV7Url;
|
||||
|
||||
}
|
||||
|
||||
public async Task<IReadOnlyCollection<ParsedTrack>> LoadPlaylistFromUrl()
|
||||
{
|
||||
using (var httpClient = new HttpClient())
|
||||
{
|
||||
_logger.LogInformation(LoggingEvents.Playlist, "Downloading playlist from {tv7url}", _tv7Url);
|
||||
|
||||
var tv7Response = await httpClient.GetAsync(_tv7Url);
|
||||
if (!tv7Response.IsSuccessStatusCode)
|
||||
{
|
||||
_logger.LogWarning(LoggingEvents.PlaylistNotFound, "Could not download playlist from {tv7url}. The StatusCode was: {StatusCode}", _tv7Url, tv7Response.StatusCode);
|
||||
}
|
||||
|
||||
return await ParseTracksFromResponseAsync(tv7Response);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<IReadOnlyCollection<ParsedTrack>> ParseTracksFromResponseAsync(HttpResponseMessage tv7Response)
|
||||
{
|
||||
_logger.LogInformation(LoggingEvents.Playlist, "Parse");
|
||||
|
||||
using (var tv7ReadStream = await tv7Response.Content.ReadAsStreamAsync())
|
||||
{
|
||||
return await _playlistParser.ParseFromStreamAsync(tv7ReadStream);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
8
Tv7Playlist.Core/SourceTypeEnum.cs
Normal file
8
Tv7Playlist.Core/SourceTypeEnum.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace Tv7Playlist.Core
|
||||
{
|
||||
public enum SourceTypeEnum
|
||||
{
|
||||
M3U,
|
||||
Xspf
|
||||
}
|
||||
}
|
@@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
|
Reference in New Issue
Block a user