mirror of
https://github.com/TheFunny/TelegramTwitterMediaBot.git
synced 2026-09-23 23:32:05 +00:00
`cookie()` cached the device cookies only on success: the `Option<String>` it held could not tell "not fetched yet" from "the fetch failed", so a failed fingerprint meant *every* later post re-asked the SPI endpoint — one extra round trip per post, forever, exactly the case the fingerprint exists for (a flagged IP, where that endpoint is the thing answering `-352`/412). The cache is now `Option<Option<String>>`: the outer level is "an attempt has been made", the inner one is the cookie it produced, so a failure is remembered as no-cookie and reaches the request path unchanged. The guard is also dropped before the request instead of being held across it, which had serialized every concurrent bilibili fetch behind that one round trip. A racing first pair still costs a duplicate fingerprint call (`get_or_insert`, first writer wins) — never a wrong cookie. Verified live: the 5 bilibili tests (`--ignored`, including `live_fingerprint_yields_device_cookies` and the four dynamic fetches that send the cookie) pass. The failure path itself has no unit test: `SPI_URL` is a const, so there is no seam to make the endpoint fail on demand. `cargo fmt --check`, `cargo clippy --workspace --all-targets --locked -- -D warnings` and `cargo test --workspace --locked` clean.