Artem Akymenko
|
0b953d48e8
|
refactor: heading transforms + dedup moved to shared layer
- conversion_planner.py: caps normalization in _build_chapters()
- conversion_executor.py: heading dedup + state machine via headings_equivalent()
- Fixed seg_start_time → chapter_body_start bug in executor
- Removed getattr fallback defaults in both adapters
- Added 4 tests for caps normalization and heading dedup
- Updated ARCHITECTURE_REFACTOR_PLAN.md with deferred WebUI cleanup
|
2026-07-26 11:41:59 +03:00 |
|
Artem Akymenko
|
0ee5bb0496
|
refactor: config objects for feature toggles in ConversionRequest
|
2026-07-24 19:17:36 +03:00 |
|
Artem Akymenko
|
d3682e7672
|
refactor: dynamic ConversionRequest validation, remove 'or default' from adapters
- __post_init__: _apply_none_defaults() iterates dataclasses.fields() dynamically
- _NUMERIC_CONSTRAINTS and _ENUM_CONSTRAINTS dicts replace per-field if chains
- Both adapters pass values as-is (no 'or default' fallbacks)
- 18 validation tests + updated adapter tests for Enum assertions
|
2026-07-22 11:33:44 +00:00 |
|
Artem Akymenko
|
df5705779e
|
refactor: extract ConversionCancelled to conversion_ports
- Single definition in application layer
- Both adapters import from ports instead of defining locally
|
2026-07-22 11:06:14 +03:00 |
|
Artem Akymenko
|
17700426fd
|
clean: dead code removal + unused imports
- executor: remove dead subtitle_writer stub (lines 121-125)
- executor: replace getattr with direct field access on ResolvedVoice
- service: remove duplicate split_pattern import
- service: remove unused import time
- planner: remove unused import os
- adapters: remove unused import threading, time
|
2026-07-22 07:21:23 +00:00 |
|
Artem Akymenko
|
d0e42ee691
|
fix: executor subtitle_writer leak + adapter Path/None-default fixes
- executor: manage subtitle_writer via ExitStack (stack.callback)
- executor: remove manual subtitle_writer.close()
- WebUI adapter: wrap source_path, output_folder, cover_image_path in Path()
- WebUI adapter: remove unused threading/time imports
- PyQt adapter: fix getattr(attr, None) or default for 4 fields
|
2026-07-21 11:47:36 +00:00 |
|
Artem Akymenko
|
fd659d0f4f
|
feat: PyQt adapter
Converts PyQt ConversionThread to ConversionRequest for the application layer.
Functions:
- build_conversion_request_from_thread(thread) -> ConversionRequest
- PyQtEvents: wraps thread signals for logging, progress, cancellation
- PyQtPipelineProvider: wraps existing backend
- PyQtVoiceResolver: wraps load_voice_cached
Subtitle file/timestamp special paths remain in ConversionThread.run().
|
2026-07-21 11:29:47 +03:00 |
|