重大变更
- 由于 E 站 Cookie 策略变更,不再支持 Cookie 登录
- 登录时自动选择 exhentai (如果可用)
- 不再提供默认下载路径
- 手动排序更改为以添加时间/上传时间/标题/下载标签/页数对下载列表排序
- 由于数据库结构变更,此版本导出的数据将无法被旧版本导入
新功能
- 下载画廊时生成 ComicInfo.xml 格式元数据
- 归档下载时生成 ComicInfo.xml 格式元数据 #711
- 归档下载支持第三方下载管理器 #79
- 保存下载结果为 CBZ 压缩包 #660
- 清除
igneous
Cookie (将于下次搜索时重新获取) - 随机打开本地收藏/下载中的画廊 #695
- 随机在搜索结果中跳转
- 以网格模式查看下载列表
- 本地收藏/历史/下载中的标签搜索 #860
改进
- 搜索时优先显示已选择的类别卡片
- 多处性能优化
Bug 修复
- 显示模式为 Thumbnail 时无法点击上传者卡片 #653
- [Marshmallow] GIF 只显示第一帧
- 无法在
定时请求新闻页面
关闭时开启隐藏 HV 事件通知
- 响应正文含有无效 UTF-8 字符导致解码失败 #643
- 某些情况下应用崩溃 #710
- 画廊名称包含非法路径字符时无法保存图片 #815
- 无法解码超长图片 #732
- E 站变更导致种子解析失败 #880
- E 站不再支持相似扫描导致图片搜索无法使用
- 杂项修复
已知问题
- Android 14 上使用手势导航返回时过渡动画过早结束 #775
What's Changed
- Update dependency io.github.fornewid:material-motion-compose-core to v1.1.1 by @renovate in #637
- Update compose.destinations to v1.9.61 by @renovate in #638
- Update actions/cache action to v4 by @renovate in #640
- Update compose.destinations to v1.9.62 by @renovate in #639
- Update dependency org.chromium.net:cronet-api to v119 by @renovate in #641
- Update dependency io.coil-kt.coil3:coil-bom to v3.0.0-alpha03 by @renovate in #648
- Refactor FilterScreen dialog to Compose, animateItemPlacement by @revonateB0T in #651
- Update plugin spotless to v6.25.0 by @renovate in #652
- Update dependency com.android.application to v8.2.2 by @renovate in #654
- Fix uploader chip not clickable in thumbnail mode by @FooIbar in #655
- Update Kotlin, KSP and Compose Compiler by @FooIbar in #656
- Use spotless's default ktlint version by @FooIbar in #657
- Update dependency dev.chrisbanes.compose:compose-bom to v2024.01.00-alpha03 by @renovate in #659
- Update compose.destinations to v1.10.0 by @renovate in #661
- Update gradle/gradle-build-action action to v3 by @renovate in #662
- Generate ComicInfo.xml on download by @FooIbar in #663
- Fix sad panda check false positive by @FooIbar in #664
- Update xz to v5.4.6 by @FooIbar in #666
- Update actions/upload-artifact action to v4 by @renovate in #667
- Upstream SearchBar Predictive Back support by @FooIbar in #668
- Restore download from ComicInfo.xml if available by @FooIbar in #665
- Update dependency io.github.fornewid:material-motion-compose-core to v1.1.2 by @renovate in #670
- Drop CookieSignInScreen and SelectSiteScreen by @FooIbar in #669
- Prepare to save downloaded gallery as cbz archive by @FooIbar in #671
- Allow clearing igneous cookie without signing out by @FooIbar in #673
- Update dependency io.github.fornewid:material-motion-compose-core to v1.2.0 by @renovate in #674
- Refactor some dialogs to Compose by @FooIbar in #675
- Don't use app-specific dir as default download dir by @FooIbar in #676
- Update dependency gradle to v8.6 by @renovate in #678
- Lazily initialize image cache on background thread by @FooIbar in #679
- Update compose snapshot and remove workaround by @FooIbar in #680
- Add back GifDecoder as service loader is disabled by @FooIbar in #681
- Update dependency io.coil-kt.coil3:coil-bom to v3.0.0-alpha04 by @renovate in #677
- Add support for non-UTF-8 encoded archives by @FooIbar in #682
- Lazily initialize image cache of PageLoader by @FooIbar in #684
- Refactor image saving to run on background thread by @FooIbar in #683
- Update dependency sh.calvin.reorderable:reorderable to v1.3.0 by @renovate in #686
- Revert "Update dependency sh.calvin.reorderable:reorderable to v1.3.0" by @revonateB0T in #687
- Initial draft support export as cbz by @revonateB0T in #685
- Ensure images use .jpg extension instead of .jpeg by @FooIbar in #689
- Update dependency sh.calvin.reorderable:reorderable to v1.3.1 by @renovate in #691
- Update snapshot by @revonateB0T in #693
- Move reading progress to database by @FooIbar in #694
- Rename .thumb to thumb.jpg so it can be previewed by @FooIbar in #696
- Decouple hideHvEvents and requestNews settings by @FooIbar in #697
- Refine exporting downloaded gallery as cbz archive by @FooIbar in #698
- Update androidx.navigation to v2.7.7 by @renovate in #699
- Update dependency androidx.compose.material3:material3 to v1.2.0 by @renovate in #701
- Refactor select item dialog API to take List by @FooIbar in #702
- Refactor remaining dialogs to Compose by @FooIbar in #703
- Fix crash when visiting newer version galleries by @FooIbar in #705
- Update dependency com.squareup.okio:okio-jvm to v3.8.0 by @renovate in #706
- Implement random walk in localFav by @revonateB0T in #707
- Update compose snapshot by @revonateB0T in #709
- Initial support for third-party download manager by @FooIbar in #712
- Generate ComicInfo.xml on archive download by @FooIbar in #713
- Support grid view in DownloadsScreen by @FooIbar in #714
- Add animation for DownloadsScreen grid view switch by @FooIbar in #717
- Simplify GalleryList state a bit by @revonateB0T in #718
- Fix failed to generate ComicInfo.xml on API < 33 by @FooIbar in #719
- Remember ImageRequest by @revonateB0T in #720
- Implement check ripple by @revonateB0T in #721
- Replace
printStackTrace
with proper priority log by @FooIbar in #722 - Don't trim gallery detail cache, Resolve #710 by @FooIbar in #723
- Cleanup
Log
usage and make logging configurable by @FooIbar in #724 - Fix exported archive extension on older platform by @FooIbar in #725
- Refactor
Context.decodeBitmap
to non-blocking by @FooIbar in #727 - Fix current page in goto dialog on ToplistScreen by @FooIbar in #728
- Attempt to parse received keyword as URL first by @FooIbar in #729
- Update compose snapshot by @revonateB0T in #731
- Update NDK by @revonateB0T in #733
- Implement random walk in search results by @FooIbar in #734
- Introduce delegateSnapshotUpdate dsl by @revonateB0T in #735
- Update compose.destinations to v1.10.1 by @renovate in #736
- Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-android to v1.8.0 by @renovate in #737
- Update compose snapshot by @revonateB0T in #738
- Update kotlin & compose compiler by @revonateB0T in #739
- Refactor Paging API usage by @revonateB0T in #740
- Fix thumbnails not updating in grid view by @FooIbar in #741
- Update dependency org.jetbrains.kotlinx:kotlinx-serialization-json-okio to v1.6.3 by @renovate in #743
- Migrate to Corrosion, rust-android-gradle is dead by @FooIbar in #742
- Upstream Navigation by @revonateB0T in #744
- Enable compiler nonSkippingGroupOptimization by @revonateB0T in #747
- Address cmake warning: "Policy CMP0077 is not set" by @FooIbar in #748
- Build with Android 15 preview SDK by @FooIbar in #749
- Separate build tasks to accelerate CI by @FooIbar in #751
- Optimize CI caching policy by @FooIbar in #754
- Re-enable gradle configuration cache by @FooIbar in #746
- Address showTip usage, Part 1 by @revonateB0T in #757
- Make
GalleryInfo.token
non-null, upgrade db by @FooIbar in #761 - Animated FabLayout snackbar padding by @revonateB0T in #760
- Refactor snackbarPadding by @revonateB0T in #763
- Skip H@H on force retry by @FooIbar in #762
- Reset progress indicator on retry by @FooIbar in #764
- Implement sort modes and random walk for downloads by @FooIbar in #767
- Workaround for image search by @FooIbar in #768
- Relax GalleryList recomposition by @revonateB0T in #770
- Workaround and update compose snapshot by @revonateB0T in #771
- Update dependency sh.calvin.reorderable:reorderable to v1.3.2 by @renovate in #772
- Update dependency com.android.application to v8.4.0-alpha11 by @renovate in #773
- Updates by @revonateB0T in #774
- Update snapshot by @FooIbar in #777
- Refactor confirm remove download dialog by @FooIbar in #776
- Introduce DownloadsFilterState by @FooIbar in #769
- Handle invalid UTF-8 characters in response body by @FooIbar in #778
- Update liblzma to v5.6.0 by @FooIbar in #779
- Various cleanups by @revonateB0T in #780
- Move sha1 digest calculation to native function by @FooIbar in #781
- Move to rust sha1 impl by @revonateB0T in #782
- Enable simd by @revonateB0T in #783
- Move checked category filter cards to first by @FooIbar in #784
- Treat download as finished if archive file exists by @FooIbar in #785
- Use anyhow, Fuck off error handling by @revonateB0T in #787
- Anyhow for parser by @revonateB0T in #788
- Refactor Image with coil Interceptor by @revonateB0T in #791
- Ignore leading zeros when sorting archive entries by @FooIbar in #792
- Show pages instead of language in downloads' badge by @FooIbar in #793
- Implement sort downloads by page count by @FooIbar in #794
- Fix skip H@H key parsing by @FooIbar in #795
- Don't dup fd when calculate sha1 by @revonateB0T in #796
- Updates by @revonateB0T in #797
- Show gallery pages in history by @FooIbar in #798
- Initial Compose ReaderScreen by @revonateB0T in #799
- Coroutinize DownloadManager by @FooIbar in #801
- Update dependency io.arrow-kt:arrow-stack to v1.2.2 by @renovate in #802
- Reader updates by @revonateB0T in #800
- Update compose snapshot by @revonateB0T in #805
- Polymorphic pager by @revonateB0T in #804
- Crop & StartPage by @revonateB0T in #807
- Initial save downloaded gallery as cbz archive by @FooIbar in #808
- Zero-copy read for 0-compression archives by @revonateB0T in #809
- Minor fixes for new reader by @FooIbar in #803
- Update aboutlibraries to v11 (major) by @renovate in #810
- Fix zero-copy branch condition for an edge case by @FooIbar in #813
- Update snapshot by @revonateB0T in #814
- Update dependency io.coil-kt.coil3:coil-bom to v3.0.0-alpha05 by @renovate in #816
- Fix forbidden filename characters in gallery title by @FooIbar in #817
- Update dependency com.google.devtools.ksp to v2.0.0-Beta4-1.0.18 by @renovate in #818
- Cache display name and mime type for document file by @FooIbar in #820
- Sort only entries in external archive files by @FooIbar in #821
- Revert "Build with Android 15 preview SDK" by @FooIbar in #819
- Update dependency io.arrow-kt:arrow-stack to v1.2.3 by @renovate in #822
- Avoid SAF overhead when save-as-cbz is enabled by @FooIbar in #823
- Update dependency io.coil-kt.coil3:coil-bom to v3.0.0-alpha06 by @renovate in #825
- Update dependency com.android.application to v8.4.0-alpha12 by @renovate in #824
- Address GlobalScope usage and minor cleanup by @FooIbar in #826
- Fix archive memleak by @revonateB0T in #828
- Updates for ReaderScreen by @revonateB0T in #827
- CropBorder use Compose IntRect by @revonateB0T in #830
- Update page state on image extraction failure by @FooIbar in #831
- Migrate to kotlinx datetime [2/2] by @FooIbar in #833
- Update dependency org.jetbrains.kotlinx:kotlinx-datetime to v0.6.0-RC.2 by @renovate in #834
- Fix simple language generation for favorites by @FooIbar in #835
- Implement Reader Page Actions by @revonateB0T in #836
- Composing by @revonateB0T in #837
- Workaround incorrect fling velocity on zoom end by @FooIbar in #838
- Decouple search FAB from SearchBarScreen by @FooIbar in #839
- Implement title keyword search in history by @FooIbar in #840
- Cleanups by @revonateB0T in #841
- Update empty hint in HistoryScreen by @revonateB0T in #843
- Support FTS for history and local favorites search by @FooIbar in #842
- Cleanup by @revonateB0T in #844
- Implement remaining PageSheet Actions by @revonateB0T in #846
- Fix simple language generation for ComicInfo by @FooIbar in #848
- Don't crop borders for webtoons by @FooIbar in #849
- Workaround for prepending before the first item by @FooIbar in #850
- Fix general setting update on reading mode changes by @FooIbar in #851
- Fix webtoon last visible item position calculation by @FooIbar in #852
- Refactor tag namespace to use value class by @FooIbar in #853
- Initial Setting Pager by @revonateB0T in #854
- Don't fetch metadata if source is GalleryDetail by @FooIbar in #855
- Implement some reader settings by @revonateB0T in #856
- Remaining GeneralSettings Layout by @revonateB0T in #857
- Update compose.destinations to v1.10.2 by @renovate in #858
- Implement ColorFilterSetting by @revonateB0T in #859
- Initial support for local tag search by @FooIbar in #861
- Fix navigating on non-main thread by @FooIbar in #862
- Update zh-TW translation by @5idereal in #863
- Implement VolumeKeysHandler by @FooIbar in #864
- Make sure slider value has single source of truth by @FooIbar in #865
- Fix page state update on cache entry removed by @FooIbar in #866
- Update dependency androidx.browser:browser to v1.8.0 by @renovate in #868
- Update dependencies by @revonateB0T in #869
- Implement remaining of ColorFilterSetting by @revonateB0T in #867
- Add remaining settings layout by @revonateB0T in #870
- Move to Compose Reader Settings Now by @revonateB0T in #871
- MDC-Android is OUT by @revonateB0T in #872
- Updates to SettingPager by @revonateB0T in #873
- Fix torrent parsing by @FooIbar in #874
- Update dependency com.android.application to v8.4.0-alpha13 by @renovate in #876
- Update dependency com.google.devtools.ksp to v2.0.0-Beta4-1.0.19 by @renovate in #877
- Workaround for crash on delete text button click by @FooIbar in #875
- Fix duplicate subscription on page state by @FooIbar in #878
- Update softprops/action-gh-release action to v2 by @renovate in #882
- Increase
bringCursorIntoView
workaround delay by @FooIbar in #885 - Clarify message for no current torrents by @FooIbar in #886
- Fix temp download directory cleanup by @FooIbar in #888
- Address code review comments by @FooIbar in #887
- Update liblzma to v5.6.1 by @FooIbar in #889
- Prepare changelog for 1.11.0 by @FooIbar in #881
Known Issue
- Back gesture transition ends prematurely on Android 14 #775
New Contributors
Full Changelog: 1.10.3...1.11.0