63 lines
1.9 KiB
C#
63 lines
1.9 KiB
C#
|
|
|
|
/// <summary>
|
|
/// Service to manage favorite movies using local storage
|
|
/// </summary>
|
|
/// <param name="localStorage">The local storage service</param>
|
|
class ManageFavorite(Blazored.LocalStorage.ILocalStorageService localStorage)
|
|
{
|
|
// Inject the local storage service
|
|
private readonly Blazored.LocalStorage.ILocalStorageService LocalStorage = localStorage;
|
|
private readonly List<Movie> Movies = [];
|
|
|
|
/// <summary>
|
|
/// Load favorite movies from local storage
|
|
/// Use Immediately after service instantiation otherwise the list will be empty
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async Task LoadFavorites()
|
|
{
|
|
var favorites = await LocalStorage.GetItemAsync<List<Movie>>("favorite") ?? [];
|
|
Movies.Clear();
|
|
Movies.AddRange(favorites);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Check if a movie is favorite or not
|
|
/// </summary>
|
|
/// <param name="movieID">The movie ID to check</param>
|
|
/// <returns>True if the movie is favorite, otherwise false</returns>
|
|
public bool IsFavorite(string movieID)
|
|
{
|
|
return Movies.Any(m => m.IdIMDB == movieID);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Toggle favorite status of a movie (by ID)
|
|
/// </summary>
|
|
/// <param name="movie">The movie ID to toggle</param>
|
|
/// <returns>The new favorite status</returns>
|
|
public async Task<bool> ToggleFavoriteMovie(Movie movie)
|
|
{
|
|
if (!IsFavorite(movie.IdIMDB))
|
|
{
|
|
Movies.Add(movie);
|
|
}
|
|
else
|
|
{
|
|
Movies.RemoveAll(m => m.IdIMDB == movie.IdIMDB);
|
|
}
|
|
|
|
await LocalStorage.SetItemAsync("favorite", Movies);
|
|
return IsFavorite(movie.IdIMDB);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get the list of favorite movie IDs
|
|
/// </summary>
|
|
/// <returns>The list of favorite movie IDs</returns>
|
|
public List<Movie> GetFavoriteMovies()
|
|
{
|
|
return Movies;
|
|
}
|
|
} |