v1.2.0-ko.14
1.2.0-ko.142026년 4월 29일
새 기능 — 책별 독서 타이머 (Reading Timer)
이번 릴리스는 책마다 누적 독서 시간을 자동으로 기록하는 독서 타이머 기능을 도입합니다.
핵심
- EPUB과 TXT 두 리더 모두에서 책을 펼치는 순간부터 독서 시간이 자동 누적됩니다.
- 누적 시간은 책의 캐시 디렉터리(
.crosspoint/)에 16바이트 바이너리로 저장되어, 책을 닫고 다시 열어도 이어서 계산됩니다./reading_stats.bin - 리더 메뉴 상단 진행률 라인 우측에 누적 시간 칩이 표시됩니다 (
Reading Time: 1h 23m). - 메뉴에 독서 타이머 초기화 / Reset Reading Timer 항목이 추가되었습니다 — 두 단계 확인 후에만 누적 값이 0으로 리셋됩니다.
동작 디테일
| 상황 | 동작 |
|---|---|
| 사용자가 페이지를 넘기거나 메뉴에서 돌아옴 | 누적 진행 |
| 자동 페이지 넘김 활성 중 | 누적 진행 (장시간 무인 읽기에서도 끊기지 않음) |
| 5분 동안 입력 없음 | 일시 정지 (다음 입력 시 재개) |
| 메뉴/서브 액티비티 진입 | 그동안의 시간은 누적되지 않음 (메뉴 시간 제외) |
| 30초 미만 짧은 세션 | 저장 생략 (SD 카드 마모 방지) |
| 활성 독서 5분마다 | 자동 중간 저장 |
| 리더 종료 시 | 잔여 시간 드레인 후 최종 저장 |
기술 내용
- 신규 모듈:
src/util/ReadingStats.{h,cpp},src/util/ReadingTimer.{h,cpp} - 저장 포맷: 16바이트 (magic
'TIME', version=1, totalSeconds u32, sessionCount u32, little-endian) - 시간 누적은
millis()기반이며 49.7일 롤오버에 안전한uint32_t차감을 사용합니다. - 단일 tick이 2초를 초과하면 서브 액티비티/슬립 갭으로 간주하여 누적에서 제외합니다.
uint32초 단위 카운터로 약 136년치 시간을 다룰 수 있습니다.
i18n
STR_READING_TIME— 독서 시간 / Reading TimeSTR_RESET_READING_TIMER— 독서 타이머 초기화 / Reset Reading TimerSTR_RESET_READING_TIMER_PROMPT— 이 책의 독서 시간을 초기화할까요? / Reset this book's reading time?
호환성
- 기존
progress.bin,book.bin,section.bin캐시 포맷에는 영향 없음. reading_stats.bin은 책당 새로 생성되는 파일이며, 없으면 0초로 시작합니다.- 기존에 읽던 책의 누적 시간은 이 빌드를 처음 켠 시점부터 0초로 시작합니다.
빌드 정보
- 환경: ESP32-C3 (Xteink X4)
- Flash 사용량: ~99.7%
- DRAM 사용량: ~51.2%
변경 파일
src/util/ReadingStats.{h,cpp}(신규)src/util/ReadingTimer.{h,cpp}(신규)src/activities/reader/{Epub,Txt}Reader{,Menu}Activity.{h,cpp}lib/I18n/translations/{english,korean}.yamlplatformio.ini(버전 범프)