From 623a45d1ec1f7e636defd139b35b615b1a64af91 Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Fri, 2 Dec 2022 12:04:42 +0900 Subject: feat: !WIP nrk radio --- src/Endpoints/EndpointBase.cs | 6 + src/Endpoints/RadioSearchEndpoint.cs | 17 +++ src/I2R.LightNews.csproj | 2 + src/Models/RadioCategorySearchResult.cs | 58 ++++++++++ src/Models/RadioSeries.cs | 18 +++ src/Pages/Index.cshtml | 82 ++++++------- src/Pages/Index.cshtml.cs | 10 +- src/Pages/NrkRadio.cshtml | 12 ++ src/Pages/NrkRadio.cshtml.cs | 13 +++ src/Pages/Shared/_Layout.cshtml | 7 +- src/Program.cs | 10 +- src/RadioIndexDb.cs | 57 +++++++++ src/Services/GrabberService.cs | 193 ------------------------------- src/Services/NrkNewsService.cs | 193 +++++++++++++++++++++++++++++++ src/Services/NrkRadioService.cs | 31 +++++ src/Utilities/SqliteConnectionHelpers.cs | 14 +++ src/wwwroot/radio.js | 4 + 17 files changed, 481 insertions(+), 246 deletions(-) create mode 100644 src/Endpoints/EndpointBase.cs create mode 100644 src/Endpoints/RadioSearchEndpoint.cs create mode 100644 src/Models/RadioCategorySearchResult.cs create mode 100644 src/Models/RadioSeries.cs create mode 100644 src/Pages/NrkRadio.cshtml create mode 100644 src/Pages/NrkRadio.cshtml.cs create mode 100644 src/RadioIndexDb.cs delete mode 100644 src/Services/GrabberService.cs create mode 100644 src/Services/NrkNewsService.cs create mode 100644 src/Services/NrkRadioService.cs create mode 100644 src/Utilities/SqliteConnectionHelpers.cs create mode 100644 src/wwwroot/radio.js (limited to 'src') diff --git a/src/Endpoints/EndpointBase.cs b/src/Endpoints/EndpointBase.cs new file mode 100644 index 0000000..e1b1d3d --- /dev/null +++ b/src/Endpoints/EndpointBase.cs @@ -0,0 +1,6 @@ +using Microsoft.AspNetCore.Mvc; + +namespace I2R.LightNews.Endpoints; + +public class EndpointBase : ControllerBase +{ } \ No newline at end of file diff --git a/src/Endpoints/RadioSearchEndpoint.cs b/src/Endpoints/RadioSearchEndpoint.cs new file mode 100644 index 0000000..79f24ce --- /dev/null +++ b/src/Endpoints/RadioSearchEndpoint.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.Mvc; + +namespace I2R.LightNews.Endpoints; + +public class RadioSearchEndpoint : EndpointBase +{ + private readonly NrkRadioService _radio; + + public RadioSearchEndpoint(NrkRadioService radio) { + _radio = radio; + } + + [HttpGet("~/radio-search")] + public async Task HandleASync(string q) { + + } +} \ No newline at end of file diff --git a/src/I2R.LightNews.csproj b/src/I2R.LightNews.csproj index b8d7ed9..3170a74 100644 --- a/src/I2R.LightNews.csproj +++ b/src/I2R.LightNews.csproj @@ -9,6 +9,8 @@ + + diff --git a/src/Models/RadioCategorySearchResult.cs b/src/Models/RadioCategorySearchResult.cs new file mode 100644 index 0000000..7fd4c5d --- /dev/null +++ b/src/Models/RadioCategorySearchResult.cs @@ -0,0 +1,58 @@ +using System.Text.Json.Serialization; + +namespace I2R.LightNews.Models; + +public class RadioCategorySearchResult +{ + [JsonPropertyName("_links")] + public LinksModel Links { get; set; } + + public List Letters { get; set; } + public string Title { get; set; } + public List Series { get; set; } + public long TotalCount { get; set; } + + public class SeriesModel + { + [JsonPropertyName("_links")] + public LinksModel Links { get; set; } + + public Guid Id { get; set; } + public string SeriesId { get; set; } + public string SeasonId { get; set; } + public string Title { get; set; } + public string Type { get; set; } + public string InitialCharacter { get; set; } + public List Images { get; set; } + + public class ImageModel + { + public string Uri { get; set; } + public int Width { get; set; } + } + + public class LinksModel + { + public RadioCategorySearchResult.LinksModel.LinkModel CustomSeason { get; set; } + } + } + + public class LetterModel + { + public string Letter { get; set; } + public int Count { get; set; } + public string Link { get; set; } + } + + public class LinksModel + { + public LinkModel NextPage { get; set; } + public LinkModel LastPage { get; set; } + + + public class LinkModel + { + public string Href { get; set; } + } + } +} \ No newline at end of file diff --git a/src/Models/RadioSeries.cs b/src/Models/RadioSeries.cs new file mode 100644 index 0000000..6bd4efe --- /dev/null +++ b/src/Models/RadioSeries.cs @@ -0,0 +1,18 @@ +namespace I2R.LightNews.Models; + +public class RadioSeries +{ + public string Name { get; set; } + public string Description { get; set; } + public string Type { get; set; } + public Uri CanonicalUri { get; set; } + public List Episodes { get; set; } + + public class Episode + { + public string Title { get; set; } + public string Subtitle { get; set; } + public Uri SourceUri { get; set; } + public Uri CanonicalUri { get; set; } + } +} \ No newline at end of file diff --git a/src/Pages/Index.cshtml b/src/Pages/Index.cshtml index 0501e3e..076e4f6 100644 --- a/src/Pages/Index.cshtml +++ b/src/Pages/Index.cshtml @@ -26,62 +26,64 @@

- @section scripts { - - } - } else if (Model.Article != default) { -
-
-

@Model.Article.Title

-

@Model.Article.Subtitle

-
-
+}} else if (Model.Article != default) { +
+ Detaljer +
+ @foreach (var author in Model.Article.Authors) { + @author.Name: @author.Title +
+ } +
+
+ @if (Model.Article.PublishedAt != default) { + Publisert: @Model.Article.PublishedAt.ToString("dd-MM-yyyy hh:mm:ss") + } + @if (Model.Article.UpdatedAt != default) { +
+ Oppdatert: @Model.Article.UpdatedAt.ToString("dd-MM-yyyy hh:mm:ss") + } +
+ + Les på nrk.no + +
+
+
+
+

@Model.Article.Title

+

@Model.Article.Subtitle

+
+
-
- @Html.Raw(Model.Article.Content) -
+
+ @Html.Raw(Model.Article.Content) +
-
-
- @foreach (var author in Model.Article.Authors) { - @author.Name: @author.Title -
- } -
-
- @if (Model.Article.PublishedAt != default) { - Publisert: @Model.Article.PublishedAt.ToString("dd-MM-yyyy hh:mm:ss") - } - @if (Model.Article.UpdatedAt != default) { -
- Oppdatert: @Model.Article.UpdatedAt.ToString("dd-MM-yyyy hh:mm:ss") - } -
- - Les på nrk.no - -
-
+
+ +
@section scripts { -}} \ No newline at end of file +} } \ No newline at end of file diff --git a/src/Pages/Index.cshtml.cs b/src/Pages/Index.cshtml.cs index 666c75e..bea663d 100644 --- a/src/Pages/Index.cshtml.cs +++ b/src/Pages/Index.cshtml.cs @@ -6,11 +6,11 @@ namespace I2R.LightNews.Pages; public class IndexModel : PageModel { private readonly ILogger _logger; - private readonly GrabberService _grabber; + private readonly NrkNewsService _nrkNews; - public IndexModel(ILogger logger, GrabberService grabber) { + public IndexModel(ILogger logger, NrkNewsService nrkNews) { _logger = logger; - _grabber = grabber; + _nrkNews = nrkNews; } public NewsSource FrontPage { get; set; } @@ -25,7 +25,7 @@ public class IndexModel : PageModel if (url.IsNullOrWhiteSpace()) { FrontPage = site switch { - "nrk" => await _grabber.GrabNrkAsync(), + "nrk" => await _nrkNews.GrabNrkAsync(), _ => default }; @@ -34,7 +34,7 @@ public class IndexModel : PageModel } } else { Article = site switch { - "nrk" => await _grabber.GrabNrkArticleAsync(url), + "nrk" => await _nrkNews.GrabNrkArticleAsync(url), _ => default }; diff --git a/src/Pages/NrkRadio.cshtml b/src/Pages/NrkRadio.cshtml new file mode 100644 index 0000000..4679c0f --- /dev/null +++ b/src/Pages/NrkRadio.cshtml @@ -0,0 +1,12 @@ +@page "/nrk-radio" +@model I2R.LightNews.Pages.NrkRadio +@{ + Layout = "_Layout"; +} + + +
+ +@section Scripts { + +} \ No newline at end of file diff --git a/src/Pages/NrkRadio.cshtml.cs b/src/Pages/NrkRadio.cshtml.cs new file mode 100644 index 0000000..f536c19 --- /dev/null +++ b/src/Pages/NrkRadio.cshtml.cs @@ -0,0 +1,13 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace I2R.LightNews.Pages; + +public class NrkRadio : PageModel +{ + public string FrontPageDataJSON { get; set; } + + public ActionResult OnGet() { + return Page(); + } +} \ No newline at end of file diff --git a/src/Pages/Shared/_Layout.cshtml b/src/Pages/Shared/_Layout.cshtml index c3ca817..d9022fc 100644 --- a/src/Pages/Shared/_Layout.cshtml +++ b/src/Pages/Shared/_Layout.cshtml @@ -12,12 +12,7 @@