Covers were being attached to the nearest existing SoftwareRelease even when
no release actually matched the cover's region, e.g. a Spanish cover landing
on a Japanese release just because it was the only release present. The
importer no longer guesses: it stops trying to attach covers to a release at
all, clustering them by Software + MobyGames cover-group id instead.
SoftwareReleaseId becomes an optional, admin-only manual curation field, with
a new bulk "assign whole group to a release" action in the cover admin UI. A
new repair-covers command retroactively detaches previously misassigned
covers using data already recorded during import, no re-scraping needed.
- Updated SoundSynthVideosController to return ProblemDetails for bad requests and conflicts.
- Modified UsersController to return ProblemDetails for user not found and account purge failures.
- Enhanced BooksService, DocumentsService, GpusService, InstructionSetExtensionsService, MachineFamiliesService, MagazinesService, ResolutionsService, ScreensService, SoftwareFamiliesService, SoftwarePlatformsService, SoftwareVersionsService, SoundSynthsService, and WwpcImportsService to utilize ExtractDetail for error messages from ApiException.
- Introduced ExtractDetail method to standardize error message extraction from ApiException across multiple services.
- Implemented methods to delete admin-staged pending photos and commit batches for GPU, Machine, Processor, and Sound Synth photos in their respective services.
- Added JavaScript helpers for batch uploading photos via XHR for GPU, Machine, Processor, and Sound Synth admin pages, including progress tracking and error handling.
- Each upload helper supports multiple image formats and enforces size limits.
- Added Identify method in Photos class for content-sniffing image formats and dimensions using ImageMagick.
- Introduced GenerateThumbnailJpeg method for creating JPEG thumbnails from images.
- Updated Program.cs to register BatchUploadJobStore and BatchUploadJobReaperService for managing batch upload jobs.
- Refactored SoftwareCovers.razor to replace single image upload with a batch upload dialog.
- Created SoftwareCoversBatchUploadDialog.razor and its code-behind for handling batch uploads, including staging, committing, and displaying upload progress.
- Added JavaScript helper (software-cover-batch-upload.js) for managing XHR-based uploads with progress reporting.
- Enhanced SoftwareReleasesService with methods for deleting pending covers and committing batch uploads.
- Updated _Host.cshtml to include the new JavaScript file for batch uploads.
- Created migration to add SoftwareCoverCaptionTranslations table with necessary fields and constraints.
- Updated MarechaiContext to include DbSet for SoftwareCoverCaptionTranslation.
- Implemented SoftwareCoverCaptionTranslation model to represent translations for software cover captions.
- Enhanced SoftwareCoversController to support fetching localized captions based on language.
- Introduced SoftwareCoverCaptionTranslationProvider for managing translation logic and background processing.
- Updated admin UI to allow editing of canonical captions, reflecting changes in localized captions.
- Modified SoftwareService to include language parameter when fetching software covers.
- Changed image source paths in Gpus, Machines, Magazines, People, Processors, Software, SoundSynths, and Suggestions pages to point to 4K versions of images.
- Removed lower resolution options (hd and 1440p) from <source> elements and <img> tags.
- Ensured consistent use of 4K images for all relevant assets to enhance user experience.
- Updated resource files for English, Spanish, French, and Italian to include new strings related to cover image suggestions and uploads.
- Implemented a new method in SoftwareReleasesService to delete pending cover images.
- Introduced a new JavaScript file for handling multi-file uploads of software cover images with progress tracking and cancellation support.
- Eliminated HEIF and HEIC formats from various controllers, helpers, and views.
- Updated image format handling in SoundSynthPhotosController, AvatarFileCleaner, and Photos helper.
- Removed references to HEIF/HEIC in Admin, Books, Gpus, Machines, Magazines, People, and Software pages.
- Adjusted image format mappings in Program.cs to exclude HEIF/HEIC.
- Created migration to add SoftwareCovers table with necessary fields and relationships.
- Updated MarechaiContext to include DbSet for SoftwareCovers and configured relationships.
- Implemented SoftwareCover model with properties for managing cover details.
- Enhanced SoftwareRelease model to include a collection of SoftwareCovers.
- Developed SoftwareCoversController for handling cover uploads, retrieval, updates, and deletions.
- Integrated cover display in ReleaseView and View components with responsive image handling.
- Added localization support for "Covers" in English and Spanish resource files.
- Implemented service methods for fetching cover data by software and release.