Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 20 May 13:05

Added

  • 편집기 탭 내 오디오 싱크 플레이어 연동 (Audio Sync Player):
    • TranscriptEditorWidget 내에 PySide6.QtMultimedia 기반 QMediaPlayerQAudioOutput 객체 탑재.
    • 플레이어 제어 바 UI 추가: 재생/일시정지 버튼, 수평 방향 QSlider 진행 바, 재생 시간 표시 레이블, 선택 구간 재생 버튼, 재생 싱크 스크롤 활성화 체크박스.
    • 작업 오디오 소스 자동 매핑: load_job(job_id) 호출 시 cache/jobs/<job_id>/processed.wav (전처리 캐시) 존재를 최우선 점검하고, 미발견 시 SQLite DB에서 job의 source_path를 쿼리하여 원본 미디어 재생 소스로 대체 재생.
    • 세그먼트 테이블 행 더블클릭(cellDoubleClicked) 및 "선택 구간 재생" 시 해당 세그먼트의 start_sec로 플레이어 seek 및 자동 재생.
    • 플레이어 재생 시간 변화(positionChanged) 시 현재 위치에 해당하는 테이블 행을 하이라이트(Select) 처리하며, 스크롤 싱크 옵션이 활성화된 경우 해당 행이 중앙에 오도록 자동 스크롤(scrollToItem) 연동.
  • 메인 화면 다중 작업 배치 큐 UX 개선 (Batch Queue UX):
    • 파일 큐 처리 상태 머신 구현: 대기 목록 내 아이템들에 대기 상태 문자열([대기], [진행 중], [완료], [실패])을 추가하여 실시간 시각화.
    • 순차 처리 기동 루프(_start_next_queue_item): 스레드가 완전히 해제된 시점(_on_thread_finished)에 다음 파일의 변환을 기동시켜 리소스 경합 방지.
    • 연속성 정책 반영: 다중 파일 변환 도중 특정 개별 파일 변환이 실패하더라도 전체 배치 처리를 멈추지 않고, 해당 행만 [실패] 표기 후 다음 작업을 연쇄 변환.
    • 변환 중단(Cancel) 기능: 진행 중 "변환 중단" 버튼 클릭 시 확인 다이얼로그를 통해 대기 중인 모든 큐를 일괄 파기하고 워커 스레드를 정지(terminate()).
    • 변환 진행 중 파일 추가/제거/비우기 동작 시도에 대한 안전 가드 팝업 경고 추가.

Tests

  • tests/test_batch_queue.py를 신규 추가하여, 다중 파일 배치 큐 가동, 순차 변환, 실패 시의 연속성 기동, 변환 중환 및 큐 일괄 파기 등 상태 머신 시뮬레이션 테스트 3건 작성 완료.
  • python -m pytest: 100/100 PASS (총 100개 테스트)
  • python -m ruff check .: PASS

Feature: Delete UX & Privacy Control & Doc Alignment

Added

  • 작업/캐시 삭제 기능 보강 (Delete UX):
    • CLI jobs delete <job_id> 명령어 추가: 지정된 작업 ID의 DB 데이터와 캐시 오디오 디렉터리(cache/jobs/<job_id>)를 재확인 절차를 거쳐 영구 연쇄 삭제합니다.
    • CLI jobs clean-cache 명령어 추가: DB 내 활성 작업 목록과 대조하여 등록되지 않은 방치 캐시 디렉터리(고스트 캐시)만 안전하게 일괄 정리합니다.
    • GUI 최근 작업 목록(recent_list)에 우클릭 컨텍스트 메뉴 및 "작업 및 캐시 삭제" 액션 추가: QMessageBox 대화상자로 안전하게 재확인 후 DB 레코드와 물리 캐시를 연쇄 삭제 처리하고 목록을 자동 갱신합니다.
  • 최근 작업 기록 저장 비활성화 옵션 (Privacy Control):
    • Settings 데이터클래스에 keep_history (기본값: True) 필드를 탑재하고 JSON 설정 파일 연동 및 형변환 가드 처리를 추가했습니다.
    • STT 변환 시(run_transcribe), keep_history가 False이면 persist 매개변수를 강제 비활성화하여 DB 영속화 저장을 전면 우회하도록 처리했습니다.
    • GUI 설정 그룹에 "최근 작업 기록 저장 및 표시" 체크박스 위젯을 추가하여 즉시 저장 및 리프레시되도록 했습니다. 기능 비활성화 시 목록에 고지 문구 노출 및 컨텍스트 메뉴 진입을 차단합니다.

Changed

  • Jamo Fuzzy 매칭 문서 상태 갱신 (Doc Alignment):
    • docs/design/jamo-fuzzy-matching.md 설계 노트의 상태를 구현 완료 (v1.0 완비)로 변경하고 6절에 2글자 단어 한계와 임계값 0.75~0.80 상향 조정 가이드를 보완했습니다.

Tests

  • tests/test_settings_service.pykeep_history 형변환 및 역직렬화 단위 테스트 추가.
  • tests/test_transcribe_persistence.pykeep_history가 False일 때 DB 트랜잭션 및 영속화를 생략하는지에 대한 Mocking 기반 통합 테스트 추가.
  • python -m pytest: 97/97 PASS
  • python -m ruff check .: PASS

Branding: 설교필기 PulpitInk 전체 리네이밍

Changed

  • 프로젝트 전체 브랜딩을 SermonScript에서 설교필기 (PulpitInk) 로 변경했습니다.
  • Python 패키지명: sermonscriptpulpitink, CLI 명령: pulpitink
  • GUI 타이틀바: 설교필기 (PulpitInk), QMessageBox 다이얼로그: 설교필기
  • 클래스: SermonScriptErrorPulpitInkError
  • PyInstaller spec: pulpitink.spec, pulpitink-sidecar.spec
  • 빌드 산출물: PulpitInk_Portable_*.zip, EXE: PulpitInk.exe
  • GitHub 저장소: jeiel85/sermon-scriptjeiel85/pulpitink
  • 데이터 경로: %LOCALAPPDATA%\PulpitInk\PulpitInk\
  • DB/로그: pulpitink.db, pulpitink.log
  • 환경변수: PULPITINK_ROOT

Tests

  • ruff check .: All checks passed
  • pytest: 95/95 passed

Documentation: README repository guide

Changed

  • GitHub Pages 랜딩 페이지가 별도로 생긴 뒤 README를 저장소 안내 문서 역할에 맞게 재정비했습니다.
  • 상단 대형 랜딩 이미지를 제거하고 설치, 사용, 데이터 저장 위치, 개발 검증, 프로젝트 구조 중심으로 구성했습니다.

Documentation: GitHub Pages landing

Added

  • GitHub Pages용 정적 랜딩 페이지 docs/index.html을 추가했습니다.
  • GitHub Pages에서 정적 파일을 그대로 제공하도록 docs/.nojekyll을 추가했습니다.

Changed

  • README와 프로젝트 홈페이지 URL을 https://jeiel85.github.io/pulpitink/ 기준으로 갱신했습니다.

Documentation: GitHub landing page

Changed

  • README.md를 GitHub 랜딩 페이지 역할에 맞게 갱신했습니다.
    사용자가 제공한 랜딩 이미지를 상단에 배치하고, 현재 구현된 GUI/CLI/STT/편집/Export/배포 상태를 기준으로 빠른 시작과 기능표를 정리했습니다.
  • 프로젝트 메타데이터의 GitHub URL을 실제 저장소인 https://github.com/jeiel85/pulpitink로 정정했습니다.

Added

  • docs/assets/pulpitink-landing.png 랜딩 이미지를 추가했습니다.