Commit Graph
6 Commits
Author SHA1 Message Date
john-okeefe 11039cfb89 fix(ebook-reader): Replace ReflowableBook with UniversalReader type system
BREAKING CHANGE: Unify ebook reader type system to match actual data structures

Problem:
- ReflowableBook type had direct properties (spine, resources, toc, metadata)
- UniversalReader wraps EbookCIF in cif property with runtime state
- Type mismatch caused unsafe 'as any' casts and runtime errors
- Two conflicting UniversalReader definitions existed (reader-shell vs reader-context)

Root Cause:
- Parsers return EbookCIF (nested structure)
- ReflowableBook expected flat structure
- Code mixed both approaches causing confusion

Changes:

Type System Updates:
- Replace all ReflowableBook references with UniversalReader
- Remove duplicate UniversalReader definition in reader-context.ts
- Import UniversalReader from canonical source (reader-shell.ts)
- Update all function signatures across reflowable module

Property Access Patterns:
- book.cif.spine instead of book.spine
- book.cif.resources instead of book.resources
- book.cif.toc instead of book.toc
- book.cif.metadata instead of book.metadata

Fixed Modules:
- reader-shell.ts: UniversalReader object construction
- reader-context.ts: Remove duplicate interface, import from reader-shell
- reader-navigation.ts: Remove unsafe type casts, fix property access
- reader-services.ts: Align with UniversalReader structure
- reflowable/navigation.ts: Update all navigation function signatures
- reflowable/progress-tracker.ts: Update tracker function signatures
- reflowable/parser.ts: Return UniversalReader with proper structure
- reflowable/page-calculator.ts: Update calculation function signatures
- reflowable/ebook/search.ts: Fix property access patterns
- types/reader.d.ts: Remove duplicate type definitions

Impact:
-  Type-safe throughout ebook reader
-  Matches actual data structures from parsers
-  No more unsafe type casts
-  Single source of truth for UniversalReader
-  Aligns with EbookCIF format from API/parsers

Files changed: 10
Lines changed: +320, -180
2026-04-10 23:21:10 -04:00
john-okeefe c7dd8029de refactor(reader): integrate page-based navigation into core system
Update core reader infrastructure to support new page-based navigation system
for reflowable formats while maintaining existing functionality for PDF, comic,
and manga formats.

## Core Integration Changes

### reader-context.ts
- Update imports to use new formats/reflowable module paths
- Maintain backward compatibility with existing type definitions

### reader-navigation.ts
- **Replace spine-based scrolling with page-based navigation**
- Integrate reflowable navigation modules for ebook handling
- Add imports for new navigation, progress tracking, and content rendering
- Implement discrete page navigation (no scrolling within pages)

## Navigation System Upgrade

### Previous (Broken)
- Spine-based scrolling: Scroll through entire chapters
- No page boundaries: Couldn't track position within content
- Progress tracking failed: No granular position data
- Position saving broken: Only saved chapter, not page

### New (Working)
- Page-based navigation: Discrete page boundaries
- CFI progress tracking: Precise position within content
- Position restoration: Accurate page restoration on reload
- Real pagination: Actual page numbers instead of chapter offsets

## Format Support

### Reflowable Formats (EPUB, FB2, TXT, HTML)
- Use new page-based navigation system
- Support for CFI-based progress tracking
- Proper pagination with word-count estimation
- Page content extraction and rendering

### PDF, Comic, Manga
- Maintain existing navigation functionality
- No changes to working systems
- Preserve user experience for these formats

## Technical Implementation

- ReflowableBook type casting for type safety
- Navigation functions (nextPage, previousPage, goToPage)
- Progress tracking integration
- Content rendering with page data
- UI updates for page indicators

This integration fixes the core pagination issues that prevented proper reading
progress tracking and position management for reflowable formats.
2026-04-09 14:53:36 -04:00
john-okeefe 6805d0b66d fix(ebook-reader): load SVG images and fix progress update ID
- Add SVG image support: process <image xlink:href=...> elements
  in addition to HTML <img> tags for cover pages and embedded images
- Fix progress update: use 'id' from API response instead of
  'media_item_id' which the backend never returns for this endpoint
- Update reader context interfaces to include currentPage field
- Add debug logging for all resource keys to help troubleshoot
  image loading issues in future epubs
2026-04-06 17:01:05 -04:00
john-okeefe 4cb9bdbac1 fix: resolve TypeScript errors in reader module
- reader-context.ts: fix event type to use ReaderEventType instead of string
- page-calculator.ts: add pagesInChapter property to ChapterPageInfo interface
- reader-navigation.ts: remove unused getScrollPositionForPage import
2026-04-05 21:30:16 -04:00
john-okeefe ceab60e3d1 feat: initialize page calculation on reader load
- Add pageCalculationResult and currentScrollPosition to UniversalReader type
- Add settings:changed event type for settings change notifications
- Call initializePageCalculation after reader ready in reader-shell.ts
- Add tabindex to reader-content for keyboard navigation focus
2026-04-05 21:14:58 -04:00
john-okeefe 96d90db036 feat(reader): add core infrastructure for feature-based architecture
- Add reader-context.ts: defines ReaderContext interface and factory
- Add reader-events.ts: event bus for feature communication
- Add reader-state.ts: centralized state management
- Add reader-navigation.ts: unified navigation and rendering API
- Add reader-services.ts: shared services (progress, chapters)
- Establishes foundation for Feature Registration Pattern
2026-04-04 13:37:47 -04:00