From 1ab403b3b3ca25e1161e441f9e7fec39dace2011 Mon Sep 17 00:00:00 2001 From: Berack96 Date: Tue, 20 Jan 2026 12:08:36 +0100 Subject: [PATCH] Home finished --- Components/Pages/Favorites.razor | 4 --- Components/Pages/Home.razor | 52 ++++++++++++++++++++++++++++++-- Components/Pages/Movie.razor | 11 +++++++ Components/Routes.razor | 3 +- Services/OmdbService.cs | 31 +++++++++++++------ 5 files changed, 84 insertions(+), 17 deletions(-) create mode 100644 Components/Pages/Movie.razor diff --git a/Components/Pages/Favorites.razor b/Components/Pages/Favorites.razor index a144f9f..2662792 100644 --- a/Components/Pages/Favorites.razor +++ b/Components/Pages/Favorites.razor @@ -1,5 +1,4 @@ @page "/favorites" -@rendermode InteractiveServer Favorites @@ -15,8 +14,5 @@ { var movies = await OmdbService.FetchMovies("Matrix"); var movieDetail = await OmdbService.FetchMovieDetail("tt11749868"); - - await JSRuntime.InvokeVoidAsync("console.log", movies); - await JSRuntime.InvokeVoidAsync("console.log", movieDetail); } } diff --git a/Components/Pages/Home.razor b/Components/Pages/Home.razor index 9001e0b..7d5fc28 100644 --- a/Components/Pages/Home.razor +++ b/Components/Pages/Home.razor @@ -2,6 +2,54 @@ Home -

Hello, world!

+
+ +
+ +

@((movies == null) ? "" : movies.TotalResults + " results found")

+
+
-Welcome to your new app. + + + + + + + + + + @if (movies?.Search != null) + { + @foreach (var movie in movies.Search) + { + + + + + + } + } + +
TitleYear
@movie.Title@movie.Year
+ + +@inject OmdbService OmdbService +@inject NavigationManager NavigationManager + +@code { + private string searchTitle = ""; + private MovieSearch? movies = null; + + private async Task OnMovieSelected(string imdbID) + { + NavigationManager.NavigateTo($"/movie/{imdbID}"); + } + + private async Task OnSearch() + { + movies = await OmdbService.FetchMovies(searchTitle); + } +} \ No newline at end of file diff --git a/Components/Pages/Movie.razor b/Components/Pages/Movie.razor new file mode 100644 index 0000000..a415d3b --- /dev/null +++ b/Components/Pages/Movie.razor @@ -0,0 +1,11 @@ +@page "/movie/{id}" + +Movie Details + +

TODO

+

Movie ID: @id

+ +@code { + [Parameter] + public string id { get; set; } +} diff --git a/Components/Routes.razor b/Components/Routes.razor index 105855d..43d695d 100644 --- a/Components/Routes.razor +++ b/Components/Routes.razor @@ -1,4 +1,5 @@ - +@rendermode InteractiveServer + diff --git a/Services/OmdbService.cs b/Services/OmdbService.cs index 0945c02..1b0d66b 100644 --- a/Services/OmdbService.cs +++ b/Services/OmdbService.cs @@ -8,6 +8,7 @@ using System.Text.Json; class OmdbService { private readonly string url; + private readonly HttpClient httpClient = new(); public OmdbService() { @@ -24,13 +25,9 @@ class OmdbService /// /// ID IMDB del film da cercare. /// Un oggetto Movie con i dettagli del film. - public async Task FetchMovieDetail(string id) + public async Task FetchMovieDetail(string id) { - var requestUrl = url + "&i=" + WebUtility.UrlEncode(id); - using var httpClient = new HttpClient(); - - var response = await httpClient.GetStringAsync(requestUrl); - return JsonSerializer.Deserialize(response)!; + return await FetchAsync("i", id); } @@ -39,12 +36,26 @@ class OmdbService /// /// Titolo dei film da cercare. /// >Una lista di oggetti Movie che corrispondono alla ricerca. - public async Task FetchMovies(string searchTitle) + public async Task FetchMovies(string searchTitle) { - var requestUrl = url + "&s=" + WebUtility.UrlEncode(searchTitle); - using var httpClient = new HttpClient(); + return await FetchAsync("s", searchTitle); + } + /// + /// Esegue una richiesta HTTP GET e deserializza la risposta JSON in un oggetto del tipo specificato. + /// + /// Tipo dell'oggetto di ritorno. + /// Parametro della query HTTP. + /// Valore del parametro della query HTTP. + /// Un oggetto del tipo specificato deserializzato dalla risposta JSON. + private async Task FetchAsync(string query, string value) + { + var requestUrl = url + "&" + query + "=" + WebUtility.UrlEncode(value); var response = await httpClient.GetStringAsync(requestUrl); - return JsonSerializer.Deserialize(response)!; + try { + return JsonSerializer.Deserialize(response)!; + } catch (JsonException) { + return default; + } } } \ No newline at end of file