Files
tv7playlist/Tv7Playlist/Controllers/PlaylistApiController.cs

63 lines
2.2 KiB
C#

using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Tv7Playlist.Core;
namespace Tv7Playlist.Controllers
{
[Route("api/playlist")]
[ApiController]
public class PlaylistApiController : Controller
{
private const string PlayListContentType = "audio/mpegurl";
private readonly IAppConfig _appConfig;
private readonly ILogger<HomeController> _logger;
private readonly IPlaylistBuilder _playlistBuilder;
private readonly IPlaylistSynchronizer _playlistSynchronizer;
public PlaylistApiController(ILogger<HomeController> logger, IPlaylistSynchronizer playlistSynchronizer,
IPlaylistBuilder playlistBuilder, IAppConfig appConfig)
{
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_playlistSynchronizer = playlistSynchronizer ?? throw new ArgumentNullException(nameof(playlistSynchronizer));
_playlistBuilder = playlistBuilder ?? throw new ArgumentNullException(nameof(playlistBuilder));
_appConfig = appConfig ?? throw new ArgumentNullException(nameof(appConfig));
}
[HttpGet]
[Route("")]
public async Task<IActionResult> GetPlaylist()
{
var playlistStream = await _playlistBuilder.GeneratePlaylistAsync();
var downloadFileName = GetDownloadFileName();
_logger.LogInformation(LoggingEvents.Playlist, "Sending updated playlist {filename}",
downloadFileName);
return new FileStreamResult(playlistStream, PlayListContentType)
{
FileDownloadName = downloadFileName
};
}
[HttpPost]
[Route("")]
public async Task<IActionResult> Synchronize()
{
await _playlistSynchronizer.SynchronizeAsync();
return Ok();
}
private string GetDownloadFileName()
{
var downloadFileName = _appConfig.DownloadFileName;
if (string.IsNullOrEmpty(downloadFileName)) downloadFileName = "playlist.m3u";
return downloadFileName;
}
}
}