✨ feat(pdf): export markdown documents to PDF - #12
Conversation
dartdavros
left a comment
There was a problem hiding this comment.
Спасибо за PR! По критическому пути всё хорошо — экспорт ленивый и не влияет на cold start / открытие файла: рендер и декод эмодзи происходят только по действию пользователя, ассеты грузятся on-demand с кэшем, а команда доступна в режиме просмотра без входа в edit mode. Два замечания по реализации (inline).
| return; | ||
| } | ||
| catch (IOException) when (attempt < maxAttempts) | ||
| { |
There was a problem hiding this comment.
Синхронный renderer.Render(...) выполняется на вызывающем потоке до первого await, а в MainWindowViewModel.ExportPdfAsync вызов идёт с ConfigureAwait(true) — то есть вся вёрстка PDF крутится на UI-потоке и подвешивает окно на больших документах.
Для продукта, чьё ядро — отзывчивость и ощущение лёгкости (constitution §11, «measured performance»), это режет ровно то, что обещано. Предлагаю вынести CPU-bound рендер в фон, например обернуть создание документа и renderer.Render(...) в Task.Run(...), чтобы UI оставался отзывчивым во время экспорта.
|
|
||
| <ItemGroup> | ||
| <Content Include="Assets\NotoEmoji\**\*.png" CopyToOutputDirectory="PreserveNewest" /> | ||
| </ItemGroup> |
There was a problem hiding this comment.
SkiaSharp запинен на preview-версию (3.119.3-preview.1.1). Проект собирается под Native AOT для production-сборок, а SkiaSharp и так приходит транзитивно через Avalonia. Явный пин на preview, отличный от версии Avalonia.Skia, рискует конфликтом версий и проблемами при AOT-трим.
Лучше согласовать версию с той, что тянет Avalonia 12 (или убрать явную ссылку, если транзитивной достаточно), и не использовать preview в production-зависимостях.
Summary
Validation
dotnet build MarkMello.slndotnet test MarkMello.sln --no-build