Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/JellyBox/AppServices.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Net.Http.Headers;
using JellyBox.Models;
using JellyBox.Services;
using JellyBox.ViewModels;
using Jellyfin.Sdk;
Expand Down Expand Up @@ -59,9 +60,10 @@ private AppServices()
serviceCollection.AddScoped<JellyfinApiClient>();

serviceCollection.AddSingleton<AppSettings>();
serviceCollection.AddSingleton<NavigationManager>();
serviceCollection.AddSingleton<CardFactory>();
serviceCollection.AddSingleton<DeviceProfileManager>();
serviceCollection.AddSingleton<JellyfinImageResolver>();
serviceCollection.AddSingleton<NavigationManager>();

// View Models
serviceCollection.AddTransient<HomeViewModel>();
Expand Down
23 changes: 16 additions & 7 deletions src/JellyBox/Models/CardFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,23 @@

namespace JellyBox.Models;

internal static class CardFactory
#pragma warning disable CA1812 // Avoid uninstantiated internal classes. Used via dependency injection.
internal sealed class CardFactory
#pragma warning restore CA1812 // Avoid uninstantiated internal classes
{
public static Card CreateFromItem(
private readonly JellyfinImageResolver _imageResolver;
private readonly NavigationManager _navigationManager;

public CardFactory(JellyfinImageResolver imageResolver, NavigationManager navigationManager)
{
_imageResolver = imageResolver;
_navigationManager = navigationManager;
}

public Card CreateFromItem(
BaseItemDto item,
CardShape shape,
ImageType? preferredImageType,
JellyfinImageResolver imageResolver,
NavigationManager navigationManager)
ImageType? preferredImageType)
{
double aspectRatio = GetAspectRatio(shape);
ImageType imageType;
Expand Down Expand Up @@ -48,15 +57,15 @@ public static Card CreateFromItem(
}

int imageHeight = (int)Math.Round(imageWidth / aspectRatio);
JellyfinImage image = imageResolver.ResolveImage(item, imageType, imageWidth, imageHeight);
JellyfinImage image = _imageResolver.ResolveImage(item, imageType, imageWidth, imageHeight);

return new Card
{
Name = item.Name!,
ImageWidth = imageWidth,
ImageHeight = imageHeight,
Image = image,
NavigateCommand = new RelayCommand(() => navigationManager.NavigateToItem(item)),
NavigateCommand = new RelayCommand(() => _navigationManager.NavigateToItem(item)),
};
}

Expand Down
12 changes: 4 additions & 8 deletions src/JellyBox/ViewModels/HomeViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using System.Collections.ObjectModel;
using CommunityToolkit.Mvvm.ComponentModel;
using JellyBox.Models;
using JellyBox.Services;
using Jellyfin.Sdk;
using Jellyfin.Sdk.Generated.Models;

Expand All @@ -12,19 +11,16 @@ internal sealed partial class HomeViewModel : ObservableObject
#pragma warning restore CA1812 // Avoid uninstantiated internal classes
{
private readonly JellyfinApiClient _jellyfinApiClient;
private readonly JellyfinImageResolver _imageResolver;
private readonly NavigationManager _navigationManager;
private readonly CardFactory _cardFactory;

public ObservableCollection<Section> Sections { get; } = new();

public HomeViewModel(
JellyfinApiClient jellyfinApiClient,
JellyfinImageResolver imageResolver,
NavigationManager navigationManager)
CardFactory cardFactory)
{
_jellyfinApiClient = jellyfinApiClient;
_imageResolver = imageResolver;
_navigationManager = navigationManager;
_cardFactory = cardFactory;
}

public async void Initialize()
Expand Down Expand Up @@ -103,7 +99,7 @@ public async void Initialize()
continue;
}

cards.Add(CardFactory.CreateFromItem(item, cardShape, preferredImageType, _imageResolver, _navigationManager));
cards.Add(_cardFactory.CreateFromItem(item, cardShape, preferredImageType));
}

return new Section
Expand Down
9 changes: 6 additions & 3 deletions src/JellyBox/ViewModels/ItemDetailsViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ internal sealed partial class ItemDetailsViewModel : ObservableObject
private readonly JellyfinApiClient _jellyfinApiClient;
private readonly JellyfinImageResolver _imageResolver;
private readonly NavigationManager _navigationManager;
private readonly CardFactory _cardFactory;

[ObservableProperty]
public partial BaseItemDto? Item { get; set; }
Expand Down Expand Up @@ -101,11 +102,13 @@ internal sealed partial class ItemDetailsViewModel : ObservableObject
public ItemDetailsViewModel(
JellyfinApiClient jellyfinApiClient,
JellyfinImageResolver imageResolver,
NavigationManager navigationManager)
NavigationManager navigationManager,
CardFactory cardFactory)
{
_jellyfinApiClient = jellyfinApiClient;
_imageResolver = imageResolver;
_navigationManager = navigationManager;
_cardFactory = cardFactory;
}

internal async void HandleParameters(ItemDetails.Parameters parameters)
Expand Down Expand Up @@ -468,7 +471,7 @@ private void UpdateUserData()
continue;
}

cards.Add(CardFactory.CreateFromItem(item, CardShape.Backdrop, ImageType.Thumb, _imageResolver, _navigationManager));
cards.Add(_cardFactory.CreateFromItem(item, CardShape.Backdrop, ImageType.Thumb));
}

return new Section
Expand Down Expand Up @@ -560,7 +563,7 @@ private void UpdateUserData()
continue;
}

cards.Add(CardFactory.CreateFromItem(item, cardShape, ImageType.Thumb, _imageResolver, _navigationManager));
cards.Add(_cardFactory.CreateFromItem(item, cardShape, ImageType.Thumb));
}

// TODO: Support list view for Type == MusicAlbum | Season
Expand Down
12 changes: 4 additions & 8 deletions src/JellyBox/ViewModels/MoviesViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using System.Collections.ObjectModel;
using CommunityToolkit.Mvvm.ComponentModel;
using JellyBox.Models;
using JellyBox.Services;
using JellyBox.Views;
using Jellyfin.Sdk;
using Jellyfin.Sdk.Generated.Models;
Expand All @@ -13,21 +12,18 @@ internal sealed partial class MoviesViewModel : ObservableObject
#pragma warning restore CA1812 // Avoid uninstantiated internal classes
{
private readonly JellyfinApiClient _jellyfinApiClient;
private readonly JellyfinImageResolver _imageResolver;
private readonly NavigationManager _navigationManager;
private readonly CardFactory _cardFactory;

private Guid? _collectionItemId;

public ObservableCollection<Card> Movies { get; } = new();

public MoviesViewModel(
JellyfinApiClient jellyfinApiClient,
JellyfinImageResolver imageResolver,
NavigationManager navigationManager)
CardFactory cardFactory)
{
_jellyfinApiClient = jellyfinApiClient;
_imageResolver = imageResolver;
_navigationManager = navigationManager;
_cardFactory = cardFactory;
}

public void HandleParameters(Movies.Parameters parameters)
Expand Down Expand Up @@ -65,7 +61,7 @@ private async Task InitializeMoviesAsync()
continue;
}

Movies.Add(CardFactory.CreateFromItem(item, CardShape.Portrait, preferredImageType: null, _imageResolver, _navigationManager));
Movies.Add(_cardFactory.CreateFromItem(item, CardShape.Portrait, preferredImageType: null));
}
}
}
Expand Down
12 changes: 4 additions & 8 deletions src/JellyBox/ViewModels/ShowsViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using System.Collections.ObjectModel;
using CommunityToolkit.Mvvm.ComponentModel;
using JellyBox.Models;
using JellyBox.Services;
using JellyBox.Views;
using Jellyfin.Sdk;
using Jellyfin.Sdk.Generated.Models;
Expand All @@ -13,21 +12,18 @@ internal sealed partial class ShowsViewModel : ObservableObject
#pragma warning restore CA1812 // Avoid uninstantiated internal classes
{
private readonly JellyfinApiClient _jellyfinApiClient;
private readonly JellyfinImageResolver _imageResolver;
private readonly NavigationManager _navigationManager;
private readonly CardFactory _cardFactory;

private Guid? _collectionItemId;

public ObservableCollection<Card> Shows { get; } = new();

public ShowsViewModel(
JellyfinApiClient jellyfinApiClient,
JellyfinImageResolver imageResolver,
NavigationManager navigationManager)
CardFactory cardFactory)
{
_jellyfinApiClient = jellyfinApiClient;
_imageResolver = imageResolver;
_navigationManager = navigationManager;
_cardFactory = cardFactory;
}

public void HandleParameters(Shows.Parameters parameters)
Expand Down Expand Up @@ -66,7 +62,7 @@ private async Task InitializeShowsAsync()
continue;
}

Shows.Add(CardFactory.CreateFromItem(item, CardShape.Portrait, preferredImageType: null, _imageResolver, _navigationManager));
Shows.Add(_cardFactory.CreateFromItem(item, CardShape.Portrait, preferredImageType: null));
}
}
}
Expand Down