Root had grown to 30 entries, most of it generated output and one-off scripts. It now holds 12. Docs: - Merge HARDWARE_SETUP, HARDWARE_PINOUT, GPIO_BUTTONS and ACCELEROMETER_PAGE_FLIP into a single docs/HARDWARE.md - Move ARCHITECTURE, REQUIREMENTS and HAL_IMPLEMENTATION_SPEC to docs/, leaving only README.md in the root - Update cross-references in README, setup_rpi.py and install_hardware_drivers.sh, and re-base ARCHITECTURE's source links Merging surfaced three errors, reconciled against hardware_config.json: - The power button was documented as GPIO 21 to GND with a pull-up. It is active high (pull_up: false); wiring it as documented reads as permanently pressed. - GPIO_BUTTONS used GPIO 23 for next-page; it is GPIO 27. - The FT5316 INT pin was routed to GPIO 27, which collides with the next-page button. Now documented as a conflict. Scripts: - Move debug_overlay_links.py and debug_previous_page.py to scripts/debug/ - Rename test_pagination_visual.py to scripts/debug/visualize_pagination.py; it renders output and asserts nothing, so the test_ prefix was misleading - Fix the __file__-relative paths these three relied on - Track update_pyweblayout.sh under scripts/ Tests: - Reword the backward-navigation tests, which described a pyWebLayout bug that is now fixed, as regression tests Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
89 lines
2.9 KiB
Python
89 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Debug previous_page issue.
|
|
"""
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).parents[2]))
|
|
|
|
from dreader.application import EbookReader
|
|
|
|
def debug_previous():
|
|
"""Debug previous_page functionality."""
|
|
|
|
epub_path = Path("tests/data/library-epub/pg11-images-3.epub")
|
|
|
|
print("=" * 70)
|
|
print("Debug Previous Page")
|
|
print("=" * 70)
|
|
|
|
reader = EbookReader(page_size=(800, 1200))
|
|
reader.load_epub(str(epub_path))
|
|
|
|
print(f"\nLoaded: {reader.book_title}")
|
|
print(f"Manager type: {type(reader.manager)}")
|
|
print(f"Manager has previous_page: {hasattr(reader.manager, 'previous_page')}")
|
|
|
|
# Check manager's state
|
|
if reader.manager:
|
|
print(f"\nManager state:")
|
|
print(f" current_position: {reader.manager.current_position}")
|
|
if hasattr(reader.manager, 'page_buffer'):
|
|
print(f" page_buffer length: {len(reader.manager.page_buffer)}")
|
|
if hasattr(reader.manager, 'buffer'):
|
|
print(f" buffer: {reader.manager.buffer}")
|
|
|
|
# Try going forward first
|
|
print("\n" + "-" * 70)
|
|
print("Going forward 3 pages...")
|
|
print("-" * 70)
|
|
|
|
for i in range(3):
|
|
page = reader.next_page()
|
|
if page:
|
|
print(f" Forward {i+1}: position = {reader.manager.current_position}")
|
|
else:
|
|
print(f" Forward {i+1}: FAILED")
|
|
|
|
if reader.manager:
|
|
print(f"\nAfter forward navigation:")
|
|
print(f" current_position: {reader.manager.current_position}")
|
|
if hasattr(reader.manager, 'page_buffer'):
|
|
print(f" page_buffer length: {len(reader.manager.page_buffer)}")
|
|
if len(reader.manager.page_buffer) > 0:
|
|
print(f" page_buffer[0]: {reader.manager.page_buffer[0].position if hasattr(reader.manager.page_buffer[0], 'position') else 'N/A'}")
|
|
|
|
# Now try going backward
|
|
print("\n" + "-" * 70)
|
|
print("Trying to go backward...")
|
|
print("-" * 70)
|
|
|
|
# Try calling previous_page directly on manager
|
|
if reader.manager:
|
|
print("\nCalling manager.previous_page() directly...")
|
|
result = reader.manager.previous_page()
|
|
print(f" Result: {type(result) if result else None}")
|
|
if result:
|
|
print(f" Result has render(): {hasattr(result, 'render')}")
|
|
print(f" Position after: {reader.manager.current_position}")
|
|
else:
|
|
print(f" Result is None")
|
|
print(f" Position still: {reader.manager.current_position}")
|
|
|
|
# Try via reader.previous_page()
|
|
print("\nCalling reader.previous_page()...")
|
|
page = reader.previous_page()
|
|
if page:
|
|
print(f" SUCCESS: Got page {page.size}")
|
|
print(f" Position: {reader.manager.current_position}")
|
|
else:
|
|
print(f" FAILED: Got None")
|
|
print(f" Position: {reader.manager.current_position}")
|
|
|
|
reader.close()
|
|
|
|
if __name__ == "__main__":
|
|
debug_previous()
|