- Thumbnails + channel icons stay cached: pin an explicit 256MB Coil disk cache + sized memory cache via SingletonImageLoader.Factory. Coil's default disk cap is 2% of the device's free space, so on a storage-tight phone the subs feed (most image-heavy screen) thrashed it and re-downloaded thumbnails on every visit. - SponsorBlock + Return-YouTube-Dislike clients moved Kotlin -> Rust (strawcore net.rs: fetchSponsorSegments / fetchRydVotes). SponsorBlock keeps its privacy-preserving SHA-256 hash-prefix lookup. Kotlin is now a thin shim mapping the FFI records onto the SbSegment/RydVotes domain types; behavior identical. Migration #2 of "all backend -> Rust". - Fix crash: extract_channel_id sliced the channel URL by a length derived from a lowercased copy of itself; to_lowercase() can change byte length on non-ASCII, so a non-ASCII URL tail could panic across the FFI and abort the app on a feed refresh. Now matches the prefix case-insensitively against the original with length + char-boundary guards. - Fix autoplay hijack: advancing to the next video resolves over ~500ms; if you manually start a different video meanwhile, autoplay would replace your choice with the stale next-up. Added a staleness fence. Verified: cargo check/test/clippy on the wrapper, full Android compileDebugKotlin green, adversarial FFI pre-push audit passed.
63 lines
2.8 KiB
TOML
63 lines
2.8 KiB
TOML
[package]
|
|
name = "strawcore"
|
|
version = "0.1.0"
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
authors.workspace = true
|
|
repository.workspace = true
|
|
|
|
[lib]
|
|
# cdylib — the .so that Android loads via System.loadLibrary("strawcore").
|
|
# staticlib — kept in case we ever want to link statically for a benchmark.
|
|
crate-type = ["cdylib", "staticlib"]
|
|
|
|
[dependencies]
|
|
# UniFFI generates the Kotlin bindings + the JNI glue. proc-macro mode
|
|
# (no .udl file) — annotate Rust fns directly with #[uniffi::export].
|
|
# `tokio` feature wires `#[uniffi::export(async_runtime = "tokio")]` so async
|
|
# fns surface as suspend fun on the Kotlin side.
|
|
uniffi = { version = "0.28", features = ["cli", "tokio"] }
|
|
# Tokio multi-thread runtime — needed to host spawn_blocking around the
|
|
# blocking strawcore_core HTTP calls so Kotlin `suspend fun` semantics
|
|
# survive.
|
|
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync"] }
|
|
# The actual YT extractor lives in Sulkta-Coop/strawcore. Renamed locally
|
|
# to `strawcore_core` to avoid collision with this wrapper crate's name
|
|
# (which has to stay `strawcore` so the .so name + Kotlin loadLibrary
|
|
# call keep working).
|
|
strawcore-core = { path = "../../../strawcore" }
|
|
# rquickjs-sys is pulled transitively by strawcore-core → rquickjs. The
|
|
# Android target has no pre-generated bindings — flip on the `bindgen`
|
|
# feature so cargo regenerates at build time. Direct dep so the feature
|
|
# flag propagates (cargo's unified feature resolver lifts this to the
|
|
# transitive use). Build host needs libclang installed.
|
|
rquickjs-sys = { version = "0.11", default-features = false, features = ["bindgen"] }
|
|
# Error glue.
|
|
thiserror = "1"
|
|
# Android log integration — `log::info!()` ends up in `adb logcat -s strawcore`.
|
|
log = "0.4"
|
|
android_logger = { version = "0.14", default-features = false }
|
|
# subscription RSS feed fan-out. reqwest dedupes against
|
|
# strawcore-core's already-pulled reqwest; quick-xml is small (~200KB);
|
|
# futures for buffer_unordered. rustls-tls avoids the NDK openssl headers
|
|
# headache.
|
|
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "gzip", "stream"] }
|
|
quick-xml = "0.36"
|
|
futures = "0.3"
|
|
# RYD + SponsorBlock JSON clients (net.rs). serde/serde_json are already in
|
|
# the dependency tree via strawcore-core; declaring them here lets the
|
|
# wrapper parse the two small enrichment endpoints directly. sha2 powers
|
|
# SponsorBlock's privacy-preserving SHA-256 hash-prefix lookup.
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
sha2 = "0.10"
|
|
|
|
[build-dependencies]
|
|
uniffi = { version = "0.28", features = ["build"] }
|
|
|
|
[[bin]]
|
|
# Generates Kotlin bindings from the compiled .so:
|
|
# cargo run --bin uniffi-bindgen generate --library target/.../libstrawcore.so \
|
|
# --language kotlin --out-dir ../../strawApp/src/main/kotlin
|
|
name = "uniffi-bindgen"
|
|
path = "src/uniffi-bindgen.rs"
|