diff --git a/Tv7Playlist/Controllers/ChannelApiController.cs b/Tv7Playlist/Controllers/ChannelApiController.cs new file mode 100644 index 0000000..898aa7a --- /dev/null +++ b/Tv7Playlist/Controllers/ChannelApiController.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; +using Tv7Playlist.Data; + +namespace Tv7Playlist.Controllers +{ + [Route("api/channels")] + [ApiController] + public class ChannelApiController : Controller + { + private readonly ILogger _logger; + private readonly PlaylistContext _playlistContext; + + public ChannelApiController(ILogger logger, PlaylistContext playlistContext) + { + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _playlistContext = playlistContext ?? throw new ArgumentNullException(nameof(playlistContext)); + } + + [HttpGet] + [Route("")] + public async Task GetAll() + { + var playlistEntries = + await _playlistContext.PlaylistEntries.AsNoTracking().OrderBy(e => e.Position).ToListAsync(); + var result = new {Data = playlistEntries}; + return Ok(result); + } + + [HttpPut] + [Route("disable")] + public async Task DisableChannels([FromBody] ICollection ids) + { + if (ids == null) return BadRequest(); + await UpdateEnabledForItems(ids, false); + return Ok(); + } + + [HttpPut] + [Route("enable")] + public async Task EnableChannels([FromBody] ICollection ids) + { + if (ids == null) return BadRequest(); + await UpdateEnabledForItems(ids, true); + return Ok(); + } + + [HttpDelete] + [Route("")] + public async Task DeleteChannels([FromBody] ICollection ids) + { + if (ids == null) return BadRequest(); + + foreach (var id in ids) + { + var entry = await _playlistContext.PlaylistEntries.FindAsync(id); + if (entry == null) + { + _logger.LogDebug($"Could not delete! Channel {id} not found"); + continue; + } + + _logger.LogInformation($"Deleting channel {id} - {entry.Name}"); + _playlistContext.PlaylistEntries.Remove(entry); + } + + await _playlistContext.SaveChangesAsync(); + + return Ok(); + } + + private async Task UpdateEnabledForItems(IEnumerable ids, bool isEnabled) + { + foreach (var id in ids) + { + var entry = await _playlistContext.PlaylistEntries.FindAsync(id); + if (entry == null) + { + _logger.LogDebug($"Could not set enabled state! Channel {id} not found"); + continue; + } + + _logger.LogInformation($"Setting enabled of channel {id} - {entry.Name} to {isEnabled}"); + entry.IsEnabled = isEnabled; + } + + await _playlistContext.SaveChangesAsync(); + } + } +} \ No newline at end of file diff --git a/Tv7Playlist/Controllers/PlaylistApiController.cs b/Tv7Playlist/Controllers/PlaylistApiController.cs index d45835d..61ce0ae 100644 --- a/Tv7Playlist/Controllers/PlaylistApiController.cs +++ b/Tv7Playlist/Controllers/PlaylistApiController.cs @@ -1,11 +1,8 @@ using System; -using System.Collections.Generic; -using System.Diagnostics; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Tv7Playlist.Core; -using Tv7Playlist.Data; namespace Tv7Playlist.Controllers { @@ -19,14 +16,13 @@ namespace Tv7Playlist.Controllers private readonly ILogger _logger; private readonly IPlaylistBuilder _playlistBuilder; - private readonly PlaylistContext _playlistContext; - public PlaylistApiController(ILogger logger, IPlaylistBuilder playlistBuilder, IAppConfig appConfig, PlaylistContext playlistContext) + public PlaylistApiController(ILogger logger, IPlaylistBuilder playlistBuilder, + IAppConfig appConfig) { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _playlistBuilder = playlistBuilder ?? throw new ArgumentNullException(nameof(playlistBuilder)); _appConfig = appConfig ?? throw new ArgumentNullException(nameof(appConfig)); - _playlistContext = playlistContext ?? throw new ArgumentNullException(nameof(playlistContext)); } [HttpGet] @@ -50,22 +46,6 @@ namespace Tv7Playlist.Controllers return await GetPlaylistInternal(true); } - [HttpPut] - [Route("disable")] - public async Task DisableChannels([FromBody]ICollection ids) - { - await UpdateEnabledForItems(ids, false); - return Ok(); - } - - [HttpPut] - [Route("enable")] - public async Task EnableChannels([FromBody]ICollection ids) - { - await UpdateEnabledForItems(ids, true); - return Ok(); - } - private async Task GetPlaylistInternal(bool useProxy) { var playlistStream = await _playlistBuilder.GeneratePlaylistAsync(useProxy); @@ -87,18 +67,5 @@ namespace Tv7Playlist.Controllers return downloadFileName; } - - private async Task UpdateEnabledForItems(IEnumerable ids, bool isEnabled) - { - foreach (var id in ids) - { - var entry = await _playlistContext.PlaylistEntries.FindAsync(id); - if (entry == null) continue; - - entry.IsEnabled = isEnabled; - } - - await _playlistContext.SaveChangesAsync(); - } } } \ No newline at end of file diff --git a/Tv7Playlist/Controllers/PlaylistEntryController.cs b/Tv7Playlist/Controllers/PlaylistEntryController.cs index 9e9f492..622c7ec 100644 --- a/Tv7Playlist/Controllers/PlaylistEntryController.cs +++ b/Tv7Playlist/Controllers/PlaylistEntryController.cs @@ -29,7 +29,6 @@ namespace Tv7Playlist.Controllers [HttpPost] [ValidateAntiForgeryToken] public async Task Edit(Guid id, PlaylistEntry updatedEntry) - //[Bind("PlaylistEntry.Id,PlaylistEntry.Position,PlaylistEntry.TrackNumberOverride,PlaylistEntry.NameOverride,PlaylistEntry.IsEnabled")] { if (updatedEntry == null) return NotFound(); @@ -54,47 +53,5 @@ namespace Tv7Playlist.Controllers return View(updatedEntry); } - - [HttpGet] - public async Task ToggleEnabled(Guid? id) - { - var entry = await _playlistContext.PlaylistEntries.FindAsync(id); - if (entry == null) return NotFound(); - - entry.IsEnabled = !entry.IsEnabled; - - await _playlistContext.SaveChangesAsync(); - - return RedirectToAction("Index", "Home"); - } - - [HttpGet] - [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] - public async Task Delete(Guid? id) - { - if (id == null) return NotFound(); - - var entry = await _playlistContext.PlaylistEntries.FindAsync(id); - if (entry == null) return NotFound(); - - return View(entry); - } - - [HttpPost] - [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] - [ValidateAntiForgeryToken] - public async Task DeleteConfirmed(Guid? id) - { - if (id == null) return NotFound(); - - var entry = await _playlistContext.PlaylistEntries.FindAsync(id); - if (entry == null) return NotFound(); - - _playlistContext.PlaylistEntries.Remove(entry); - - await _playlistContext.SaveChangesAsync(); - - return RedirectToAction("Index", "Home"); - } } } \ No newline at end of file diff --git a/Tv7Playlist/Views/Home/Index.cshtml b/Tv7Playlist/Views/Home/Index.cshtml index 95d0e71..ec25bd8 100644 --- a/Tv7Playlist/Views/Home/Index.cshtml +++ b/Tv7Playlist/Views/Home/Index.cshtml @@ -1,18 +1,9 @@ -@using Microsoft.AspNetCore.Mvc.Routing -@model HomeModel; +@model HomeModel; @{ ViewData["Title"] = "TV7 Playlist"; }
- - @*
*@ - @*
*@ - @* *@ - @* *@ - @*
*@ - @*
*@ -
@@ -20,7 +11,6 @@ - @@ -35,48 +25,82 @@ - @{ - for (var i = 0; i < Model.PlaylistEntries.Count; i++) - { - - - - - - - - - - - - - - - - - } - } + + + + + + + + + + + + + + +
Single Action Number Import Number Export Position
@Model.PlaylistEntries[i].Id - Edit - Delete - @{ - if (Model.PlaylistEntries[i].Entry.IsEnabled) - { - Disable - } - else - { - Enable - } - } - @Model.PlaylistEntries[i].Entry.ChannelNumberImport@Model.PlaylistEntries[i].Entry.ChannelNumberExport@Model.PlaylistEntries[i].Entry.Position@Model.PlaylistEntries[i].Entry.Name@Model.PlaylistEntries[i].Entry.EpgMatchName@Html.Raw(Model.PlaylistEntries[i].Entry.IsEnabled ? "Enabled" : "Disabled")@Html.Raw(Model.PlaylistEntries[i].Entry.IsAvailable ? "yes" : "no")@Model.PlaylistEntries[i].Entry.UrlProxy@Model.PlaylistEntries[i].Entry.UrlOriginal@Model.PlaylistEntries[i].Entry.Created.ToString("g")@Model.PlaylistEntries[i].Entry.Modified.ToString("g")
Number ImportNumber ExportPositionNameEPG NameEnabledAvailableURL ProxyURL OriginalCreatedModified
- -
- + \ No newline at end of file diff --git a/Tv7Playlist/Views/PlaylistEntry/Delete.cshtml b/Tv7Playlist/Views/PlaylistEntry/Delete.cshtml deleted file mode 100644 index 8940d35..0000000 --- a/Tv7Playlist/Views/PlaylistEntry/Delete.cshtml +++ /dev/null @@ -1,65 +0,0 @@ -@model Tv7Playlist.Data.PlaylistEntry; -@{ - ViewData["Title"] = $"Delete channel {Model.ChannelNumberExport} - {Model.Name}"; -} - -
-
-

Delete channel @Model.ChannelNumberExport - @Model.Name ?

-
-
- -
- -
- - -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
- -
-
- - Cancel -
-
-
- -@section Scripts { - @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); } -} \ No newline at end of file