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
{
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 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));
_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())
{
_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)
{
_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);

View File

@@ -6,6 +6,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Tv7Playlist.Core;
using Tv7Playlist.Models;
namespace Tv7Playlist.Controllers
@@ -13,19 +14,22 @@ namespace Tv7Playlist.Controllers
public class HomeController : Controller
{
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));
var appConfig = configuration.Get<AppConfig>();
_appConfig = appConfig ?? throw new ArgumentNullException(nameof(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)]

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>
<TargetFramework>netcoreapp2.2</TargetFramework>

View File

@@ -1,4 +1,5 @@
@{
@model HomeModel;
@{
ViewData["Title"] = "TV7 Playlist";
}
@@ -6,3 +7,16 @@
<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>
</div>
<table>
@{
foreach (var track in Model.Tracks)
{
<tr>
<td>@track.Id</td>
<td>@track.Name</td>
<td>@track.Url</td>
</tr>
}
}
</table>