Sph.2026 05 14.01#71
Merged
Merged
Conversation
Migrate all image processing from SixLabors.ImageSharp to SkiaSharp via a new IImageProcessor abstraction. This change: - Introduces IImageProcessor interface and ImageProcessor implementation using SkiaSharp for all image operations (identify, resize, convert, hash computation) - Refactors ImageConvertor, ImageValidator, ImageHasher, and AtlMetaTag to accept IImageProcessor via dependency injection - Updates all services and Blazor components to inject IImageProcessor - Adds null-safety checks for IdentifyAsync results since SkiaSharp can return null for unidentifiable images - Registers IImageProcessor as singleton in DI containers - Removes direct SixLabors.ImageSharp package dependency - Suppresses NU1902 for transitive ImageSharp via IdSharp.Tagging - Bumps various NuGet package versions
Update VersionPrefix to 2.1.0 in Melodee.Blazor and Melodee.Cli csproj files, update docs/VERSION, and add 2.1.0 changelog entry documenting the SixLabors.ImageSharp to SkiaSharp migration.
- Bump DecentDB.EntityFrameworkCore from 2.4.2 to 2.7.0 - Bump SkiaSharp from 3.116.1 to 3.119.2 - Bump Dapper from 2.1.72 to 2.1.79 - Bump Radzen.Blazor from 10.4.3 to 10.4.4 - Bump coverlet.collector, Jint, NBomber, MarkdownEditor, Scalar.AspNetCore - Set min-width on album detail action column for layout stability - Remove unnecessary EnsureArtistAliasTableAsync call in MusicBrainz repository
Move dashboard data loading from OnInitializedAsync to OnAfterRenderAsync so skeleton placeholders render immediately instead of blocking the initial page render. Also update SkiaSharp.NativeAssets.Linux from 3.116.1 to 3.119.2 to align with the SkiaSharp package version.
Password reset endpoint now only returns reset tokens in development mode. In production, a generic message is returned and tokens are delivered via email only. Also includes: - Eliminate N+1 queries in bulk delete operations (SongService, AlbumService, ArtistService) by batch-loading entities - Extract Quartz scheduling into ScheduleJobIfConfigured helper, reducing Program.cs by ~150 lines - Remove JavaScript/TypeScript from CodeQL CI analysis - Update EF Core model snapshot with numeric precision and product version bump
…ventions Simplify implementation tracking from separate changes files in .copilot-tracking/ to updating plan files directly. Update references to standards locations (.github/instructions/ and .kilo/) and change record output path (design/docs/).
Replace HttpClient-based API requests with direct calls to PartySessionService, PartyQueueService, PartyPlaybackService, and PartySessionEndpointRegistryService via dependency injection. User identity is now resolved through IAuthService.CurrentUser rather than cookie-based authentication. Eliminates ~20 HTTP round-trips per user interaction in party mode Blazor components. Also fix GitHub project URLs in About page and Docker instructions, and register PartyModeService in DI container.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What's New in 2.1.0
SkiaSharp Image Processing
All image processing has migrated from
SixLabors.ImageSharptoSkiaSharp, replacing the legacy library with a more performant and actively maintained alternative.IImageProcessorabstraction for decode, encode, resize, format detection, and hash generationSkiaSharp.NativeAssets.Linuxon Linux) — no extra runtime dependencies neededDashboard Performance
Page loads are faster and feel more responsive thanks to targeted optimizations.
OnAfterRenderAsync— skeleton placeholders render immediately instead of blocking the initial page paintDoctorService.NeedsAttentionAsyncfast path uses lightweight file-existence checks, cutting dashboard first-render time by ~5 secondsBulk Delete Performance
Deleting large collections is now significantly faster.
SongService,AlbumService, andArtistServicebatch-load entities in a single query instead of executing N+1 queries per itemParty Mode Optimization
Party Mode has been refactored for direct in-process performance.
PartyModeServicenow calls domain services (PartySessionService,PartyQueueService,PartyPlaybackService,PartySessionEndpointRegistryService) directly via dependency injection instead of making HTTP requests to the same applicationIAuthServicerather than cookie authenticationDeveloper Experience
Building and maintaining Melodee is now easier for contributors.
InitialBaselinemigration — smaller repository, faster CI builds, no fragile migration chainsProgram.csfrom 1,046 to ~860 lines.kilo/project configuration with slash commands (/build,/test,/test-mql,/lint,/migrate,/coverage) and amelodee-developeragent for consistent workflowsSecurity Hardening
Additional Improvements
EnsureArtistAliasTableAsynccall in MusicBrainz repository