Files
BadNote/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png

4 lines
586 B
Plaintext
Raw Normal View History

Fix bugs across app + server, optimize UI/UX, add Gitea CI Bug fixes (Flutter): - Wrap multi-statement DB writes (insert/update/delete note, deleteDocument, deletePageData, OCR FTS merge, migrations) in transactions to prevent data loss on interruption and a read-modify-write FTS race. - Fix PdfDocument leaks on exception (try/finally dispose) and preserve image aspect ratio when stamping images onto PDF pages. - Guard file-picker against empty selection (was .single -> crash). - Fix eraser ConcurrentModificationError and unmodifiable-list crash on PDF pages; capture page synchronously on save to stop wrong-page data loss. - Fix Riverpod DB-not-ready races, broken pull-to-refresh, settings load race, and search N+1; transform stored annotations on PDF page rotation. - Normalize pen pressure for devices without a pressure range. - PPT: single source of truth for slide strokes so ink displays and exports. UI/UX: - Material 3 typography, theme-aware colors (dark-mode fixes), hover cursors and right-click/visible actions on desktop, keyboard shortcuts (undo/redo/ save/find), toolbar overflow handling, friendlier empty states, semantic OCR status badges, relative timestamps, 1-based page indicators, large-deck PPT navigation, and a scratchpad-scope label in split view. Server (optional backend): - Persist JWT secret (was per-process random), block path traversal in storage, fix CORS '*'+credentials, add OCR job ownership checks, last-writer-wins sync guard, constant-time login, and split out heavy OCR deps so the API/tests run without them. CI: Gitea workflows for format+analyze+test (Linux, system sqlite) and a Windows release build; pristine `flutter analyze`, all Flutter and server tests green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 03:18:00 +08:00
<EFBFBD>PNG

IHDRPP<00><><02><00>PLTE<54><45><EFBFBD>T<EFBFBD><54>)<29><>W<><57><EFBFBD><EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58>}<7D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>h<><68><EFBFBD><EFBFBD> ^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W<><57><EFBFBD><EFBFBD>F<EFBFBD><46>*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75>r<EFBFBD><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>U<><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a<EFBFBD><61>.<2E><>U<>O<>8_<38><5F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><78>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>[<5B>M<><4D><EFBFBD><EFBFBD>$<24><>!<21><>G~=k<><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#n<>Cw<43><77>ʑ]IDATX<54><58><EFBFBD><EFBFBD>V<EFBFBD>0ES<45><53>T<EFBFBD>*<2A><> K<>U;X<><58><EFBFBD>3<EFBFBD><33>e <20>.)<29><>>d<64>^<5E>f<EFBFBD><66> <0C>Sg<53>j<EFBFBD><6A> <20>M<EFBFBD>W<EFBFBD><57><EFBFBD>#<23>K<EFBFBD>s<18>Ր<EFBFBD><04><><EFBFBD>2<EFBFBD>^<5E>/ই<>az<61><1E><><EFBFBD>q:=^:)<29><>w{#<1F>!v<><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>G<EFBFBD>"<22><><EFBFBD><0E><10>w<EFBFBD><77>f8<66>z<EFBFBD>;<3B>k<EFBFBD><6B> <0B>P
wH<0F>EZF<5A><46>'<27><>=h<19>cnYVܪ<56>©<EFBFBD>x<EFBFBD>$Iܪ<49>"<22><>1<EFBFBD><31>Ҩz<08><>n<EFBFBD>=R<>~u<><08><>=1<><31>գ<>Q<EFBFBD>@2<><32><EFBFBD>#<23><>|<7C><>|<7C><>&b<18><><EFBFBD>o1 <0B><><EFBFBD>6.+<2B><><EFBFBD>0<EFBFBD><30>1<EFBFBD>Q<EFBFBD><51>o<EFBFBD><6F>E3.<2E><><EFBFBD><EFBFBD><EFBFBD>˓mi<6D><69>̾<EFBFBD><CCBE><1F>4vPfZ<14><>ԕ<EFBFBD>e<EFBFBD><65>V<EFBFBD>S<EFBFBD>e֥M<01><>65^F<>m<EFBFBD><11><>lˈH<13>e<EFBFBD><65><EFBFBD>˜k|<7C>1 N`<06><>_<> <20>p<EFBFBD>[<5B>IEND<4E>B`<60>