added first result table with containing the tracks (prototype)

This commit is contained in:
2018-12-29 00:44:47 +01:00
parent 590c73f834
commit 20f0b767e8
6 changed files with 49 additions and 19 deletions

View File

@@ -6,6 +6,6 @@ namespace Tv7Playlist.Core
{ {
public interface IPlaylistLoader public interface IPlaylistLoader
{ {
Task<IReadOnlyCollection<ParsedTrack>> LoadPlaylistFromUrl(); Task<IReadOnlyCollection<ParsedTrack>> LoadPlaylistFromUrl(string url);
} }
} }

View File

@@ -12,27 +12,23 @@ namespace Tv7Playlist.Core
{ {
private readonly ILogger<PlaylistLoader> _logger; private readonly ILogger<PlaylistLoader> _logger;
private readonly IPlaylistParser _playlistParser; private readonly IPlaylistParser _playlistParser;
private readonly string _tv7Url;
public PlaylistLoader(ILogger<PlaylistLoader> logger, IAppConfig appConfig, IPlaylistParser playlistParser) public PlaylistLoader(ILogger<PlaylistLoader> logger, IPlaylistParser playlistParser)
{ {
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); _logger = logger ?? throw new ArgumentNullException(nameof(logger));
_playlistParser = playlistParser ?? throw new ArgumentNullException(nameof(playlistParser)); _playlistParser = playlistParser ?? throw new ArgumentNullException(nameof(playlistParser));
_tv7Url = appConfig.TV7Url;
} }
public async Task<IReadOnlyCollection<ParsedTrack>> LoadPlaylistFromUrl() public async Task<IReadOnlyCollection<ParsedTrack>> LoadPlaylistFromUrl(string url)
{ {
using (var httpClient = new HttpClient()) using (var httpClient = new HttpClient())
{ {
_logger.LogInformation(LoggingEvents.Playlist, "Downloading playlist from {tv7url}", _tv7Url); _logger.LogInformation(LoggingEvents.Playlist, "Downloading playlist from {tv7url}", url);
var tv7Response = await httpClient.GetAsync(_tv7Url); var tv7Response = await httpClient.GetAsync(url);
if (!tv7Response.IsSuccessStatusCode) if (!tv7Response.IsSuccessStatusCode)
{ {
_logger.LogWarning(LoggingEvents.PlaylistNotFound, "Could not download playlist from {tv7url}. The StatusCode was: {StatusCode}", _tv7Url, tv7Response.StatusCode); _logger.LogWarning(LoggingEvents.PlaylistNotFound, "Could not download playlist from {tv7url}. The StatusCode was: {StatusCode}", url, tv7Response.StatusCode);
} }
return await ParseTracksFromResponseAsync(tv7Response); return await ParseTracksFromResponseAsync(tv7Response);

View File

@@ -6,6 +6,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Tv7Playlist.Core;
using Tv7Playlist.Models; using Tv7Playlist.Models;
namespace Tv7Playlist.Controllers namespace Tv7Playlist.Controllers
@@ -13,19 +14,22 @@ namespace Tv7Playlist.Controllers
public class HomeController : Controller public class HomeController : Controller
{ {
private readonly ILogger<HomeController> _logger; private readonly ILogger<HomeController> _logger;
private readonly IAppConfig _appConfig;
private readonly IPlaylistLoader _playlistLoader;
public HomeController(ILogger<HomeController> logger, IConfiguration configuration) public HomeController(ILogger<HomeController> logger, IAppConfig appConfig, IPlaylistLoader playlistLoader)
{ {
if (configuration == null) throw new ArgumentNullException(nameof(configuration));
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); _logger = logger ?? throw new ArgumentNullException(nameof(logger));
_appConfig = appConfig ?? throw new ArgumentNullException(nameof(appConfig));
var appConfig = configuration.Get<AppConfig>(); _playlistLoader = playlistLoader ?? throw new ArgumentNullException(nameof(playlistLoader));
} }
public IActionResult Index() public async Task<IActionResult> Index()
{ {
return View(); var tracks = await _playlistLoader.LoadPlaylistFromUrl(_appConfig.TV7Url);
var model = new HomeModel(tracks);
return View(model);
} }
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using Tv7Playlist.Core.Parsers;
namespace Tv7Playlist.Models
{
public class HomeModel
{
public IReadOnlyCollection<ParsedTrack> Tracks { get; }
public HomeModel(IReadOnlyCollection<ParsedTrack> tracks)
{
Tracks = tracks ?? throw new ArgumentNullException(nameof(tracks));
}
}
}

View File

@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk.Web"> <Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework> <TargetFramework>netcoreapp2.2</TargetFramework>

View File

@@ -1,4 +1,5 @@
@{ @model HomeModel;
@{
ViewData["Title"] = "TV7 Playlist"; ViewData["Title"] = "TV7 Playlist";
} }
@@ -6,3 +7,16 @@
<h1 class="display-4">Welcome</h1> <h1 class="display-4">Welcome</h1>
<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p> <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div> </div>
<table>
@{
foreach (var track in Model.Tracks)
{
<tr>
<td>@track.Id</td>
<td>@track.Name</td>
<td>@track.Url</td>
</tr>
}
}
</table>