- Rename the filesystem browse route from /api/asset/fs-browse to /api/asset/directory
(controller route, client URL, REST tests, and service log label).
- Remove the old /api/asset/browse endpoint and its BrowseAssets/GetDirectoryNames
repository code, plus the client BrowseAsync method. Repoint AlbumAssetPicker's
admin/curator folder browse to the /directory endpoint.
- Drop the now-unused pg_catalog.split_part DbFunction mapping.
- Refresh .env GIT_VERSION.
Replace full-table Load()/ToList() with keyset pagination (1000-row batches,
AsNoTracking) for asset existence, thumbnail, preview, and converted-video checks,
using ExecuteUpdateAsync to clear missing state without tracking overhead.
Make all heavy EF operations async and token-aware (LoadAsync/ToListAsync/
CountAsync/SaveChangesAsync/MigrateAsync) and check cancellation between every
batch so the job can be cancelled at any point. Refresh .env GIT_VERSION.
AssetBrowseResultDto.CurrentPath was populated but unused by the fs-browse flow.
Remove it from the DTO and FilesystemBrowseService, and refresh the .env GIT_VERSION.
- Per-step [N/8] console logging with loaded counts, elapsed time, and totals
- Meaningful web-UI status messages per step instead of a hardcoded string
- Live checked/total progress (console + web UI) across folder, asset, thumbnail,
preview, and converted-video loops
ConvertedPath defaults to /app/converted on the container's ephemeral writable layer,
so mp4s were lost when the container was recreated while the DB still referenced them.
Mirror the existing thumbnails/previews mounts with a converted volume.
- Add MediaService.VideoUrl for the display media endpoint
- ImagePreview renders a <video> (webp poster) for video MIME types; otherwise the existing <img>
- Download and 'View full size' use the video URL for animated assets
- Home and AlbumDetail pass the asset MIME type into the shared preview
- Classify .gif as EAssetType.Video via MimeTypes (moved image/gif to the Video registry)
- Add MediaRepository.GetConvertedData, served by the existing media/{id} endpoint
when a converted file exists on disk (with a fallback + warning log if missing)
- Expose the converted MIME type on AssetPreviewDto/AlbumAssetPreviewDto
so the frontend can detect video assets from a single MimeType field
Amber-highlights subdirectory entries that contain assets without an album,
adds a warning dot and open-folder icon, and shows a toolbar badge when the
current directory holds unassigned files directly.
Adds HasUnassignedAssets to directory entries and HasUnassignedFilesHere to
the browse result. The service computes both in a single parameterized
VALUES + EXISTS anti-join over the unique OriginalPath index, using ESCAPE ''
so Windows separator paths survive LIKE semantics.