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
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) {
-
+}} 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
+
+
+
+
-
- @Html.Raw(Model.Article.Content)
-
+
+ @Html.Raw(Model.Article.Content)
+
-
+
@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 @@