Files
WatchIt/WatchIt.Website/WatchIt.Website/Pages/MediaPage.razor.cs

125 lines
3.7 KiB
C#
Raw Normal View History

2024-09-20 23:37:55 +02:00
using System.Diagnostics;
using Microsoft.AspNetCore.Components;
2024-09-19 22:58:39 +02:00
using WatchIt.Common.Model.Genres;
2024-09-19 13:36:01 +02:00
using WatchIt.Common.Model.Media;
2024-09-19 22:58:39 +02:00
using WatchIt.Common.Model.Movies;
2024-09-19 13:36:01 +02:00
using WatchIt.Website.Services.Utility.Authentication;
using WatchIt.Website.Services.WebAPI.Media;
using WatchIt.Website.Services.WebAPI.Movies;
namespace WatchIt.Website.Pages;
public partial class MediaPage : ComponentBase
2024-09-19 13:36:01 +02:00
{
#region SERVICES
[Inject] public NavigationManager NavigationManager { get; set; } = default!;
[Inject] public IAuthenticationService AuthenticationService { get; set; } = default!;
[Inject] public IMoviesWebAPIService MoviesWebAPIService { get; set; } = default!;
[Inject] public IMediaWebAPIService MediaWebAPIService { get; set; } = default!;
#endregion
#region PARAMETERS
[Parameter]
public long Id { get; set; }
#endregion
#region FIELDS
private bool _loaded;
2024-09-19 13:36:01 +02:00
private string? _error;
private MediaResponse? _media;
private User? _user;
2024-09-19 22:58:39 +02:00
private MediaPhotoResponse? _background;
2024-09-19 13:36:01 +02:00
private MediaPosterResponse? _poster;
private IEnumerable<GenreResponse> _genres;
private MediaRatingResponse _globalRating;
private MovieResponse? _movie;
2024-09-20 23:37:55 +02:00
private short? _userRating;
2024-09-19 13:36:01 +02:00
#endregion
#region PRIVATE METHODS
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
List<Task> step1Tasks = new List<Task>();
List<Task> step2Tasks = new List<Task>();
List<Task> endTasks = new List<Task>();
// STEP 0
step1Tasks.AddRange(
[
MediaWebAPIService.GetMedia(Id, data => _media = data, () => _error = $"Media with id {Id} was not found")
]);
// STEP 1
await Task.WhenAll(step1Tasks);
2024-09-19 13:36:01 +02:00
if (_error is null)
{
step2Tasks.AddRange(
2024-09-19 13:36:01 +02:00
[
Task.Run(async () => _user = await AuthenticationService.GetUserAsync())
]);
endTasks.AddRange(
[
MediaWebAPIService.PostMediaView(Id),
MediaWebAPIService.GetPhotoMediaRandomBackground(Id, data => _background = data),
MediaWebAPIService.GetPoster(Id, data => _poster = data),
MediaWebAPIService.GetMediaGenres(Id, data => _genres = data),
MediaWebAPIService.GetMediaRating(Id, data => _globalRating = data),
_media.Type == MediaType.Movie ? MoviesWebAPIService.Get(Id, data => _movie = data) : Task.CompletedTask,
2024-09-19 13:36:01 +02:00
]);
}
// STEP 2
await Task.WhenAll(step2Tasks);
if (_error is null && _user is not null)
2024-09-20 23:37:55 +02:00
{
endTasks.AddRange(
2024-09-20 23:37:55 +02:00
[
MediaWebAPIService.GetMediaRatingByUser(Id, _user.Id, data => _userRating = data)
2024-09-20 23:37:55 +02:00
]);
}
2024-09-19 13:36:01 +02:00
// END
await Task.WhenAll(endTasks);
2024-09-19 13:36:01 +02:00
_loaded = true;
StateHasChanged();
}
}
2024-09-20 23:37:55 +02:00
private async Task AddRating(short rating)
{
if (_userRating == rating)
{
await MediaWebAPIService.DeleteMediaRating(Id);
_userRating = null;
}
else
{
await MediaWebAPIService.PutMediaRating(Id, new MediaRatingRequest(rating));
_userRating = rating;
}
await MediaWebAPIService.GetMediaRating(Id, data => _globalRating = data);
}
2024-09-19 13:36:01 +02:00
#endregion
}