Add the Read in BookOrbit button and /issues/{date}/read redirect

The signed-in issue page shows a Read in BookOrbit button (only when the
integration is active and the Standard EPUB exists) that hits
/issues/{date}/read. The route redirects to the cached BookOrbit reader
URL, or resolves the ids through OPDS on first click and caches them;
?refresh=1 re-resolves. Not indexed yet is a 503, upstream failures 502.
Includes the implementation plan.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Va5eMEmWEnjMXBsBob5FDW
This commit is contained in:
2026-09-05 05:20:34 +00:00
co-authored by Claude Fable 5.1
parent e370fcaeb2
commit 9aff78ebf1
5 changed files with 453 additions and 17 deletions
+8 -1
View File
@@ -526,10 +526,17 @@ pub struct IssueMeta {
pub reading_minutes: i64,
}
/// The issue name for a date, without an edition tag:
/// "The Daily EPUB — 2026-08-15". Shared by [`IssueMeta::title`] and callers
/// that only have a date (the BookOrbit lookup matches OPDS titles against it).
pub fn issue_title(date: Date) -> String {
format!("The Daily EPUB — {date}")
}
impl IssueMeta {
/// The issue's name, without an edition tag: "The Daily EPUB — 2026-08-15".
pub fn title(&self) -> String {
format!("The Daily EPUB — {}", self.date)
issue_title(self.date)
}
/// `dc:title` for one edition: [`title`](Self::title) plus the edition tag