mirror of
https://github.com/shadoll/moma.git
synced 2026-08-28 03:27:34 +00:00
feat: Introduce poster rendering views with multiple engines feat: Implement ASCII art poster renderer using PIL feat: Create base class for poster renderers feat: Add RichPixels renderer for high-quality terminal image display feat: Implement Viu terminal image viewer renderer feat: Add ProposedFilenameView for generating standardized filenames feat: Create RenameConfirmScreen for renaming files with confirmation feat: Implement SettingsScreen for configuring application settings feat: Add custom PosterWidget for rendering poster images
7.8 KiB
7.8 KiB
Changelog
All notable changes to the moma project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Future Plans
See REFACTORING_PROGRESS.md and ToDo.md for upcoming features and improvements.
[0.7.0-dev] - 2026-01-01
Major Refactoring (Phases 1-3)
This development version represents a significant refactoring effort focused on code quality, architecture, and maintainability.
Phase 3: Code Quality (COMPLETED)
Added
- Type Hints: Complete type coverage for
DefaultExtractor(21 methods) - Mypy Integration: Added mypy>=1.0.0 as dev dependency for type checking
- Comprehensive Docstrings: Added module + class + method docstrings to 5 key files:
default_extractor.py- 22 docstringsextractor.py- Enhanced with examplesfileinfo_extractor.py- Enhanced with Args/Returnsmetadata_extractor.py- Enhanced with examplesformatter.py- Enhanced FormatterApplier
Changed
- Constants Reorganization: Split monolithic
constants.pyinto 8 logical modules:media_constants.py- Media typessource_constants.py- Video sourcesframe_constants.py- Frame classes and quality indicatorsmoviedb_constants.py- Database identifiersedition_constants.py- Special editionslang_constants.py- Skip words for language detectionyear_constants.py- Dynamic year validationcyrillic_constants.py- Character mappings
- Dynamic Year Validation: Replaced hardcoded year values with
is_valid_year()function - Language Extraction: Simplified using
langcodes.Language.get()for dynamic validation (~80 lines removed)
Removed
- Code Duplication: Eliminated ~95 lines of duplicated code:
- ~80 lines of hardcoded language lists
- ~15 lines of duplicated movie DB pattern matching
- Hardcoded Values: Removed hardcoded quality indicators, year values, Cyrillic mappings
Phase 2: Architecture Foundation (COMPLETED)
Added
- Base Classes and Protocols (409 lines):
DataExtractorProtocol defining extractor interface (23 methods)FormatterABCs:DataFormatter,TextFormatter,MarkupFormatter,CompositeFormatter
- Service Layer (935 lines):
FileTreeService: Directory scanning and validationMetadataService: Thread-pooled metadata extraction with cancellation supportRenameService: Filename validation, sanitization, and atomic renaming
- Utility Modules (953 lines):
PatternExtractor: Centralized regex pattern matchingLanguageCodeExtractor: Language code processingFrameClassMatcher: Resolution/frame class matching
- Command Palette Integration:
AppCommandProvider: 8 main app commandsCacheCommandProvider: 7 cache management commands- Access via Ctrl+P
Improved
- Thread Safety: MetadataService uses ThreadPoolExecutor with Lock for concurrent operations
- Testability: Services can be tested independently of UI
- Reusability: Clear interfaces and separation of concerns
Phase 1: Critical Bug Fixes (COMPLETED)
Fixed
- Cache Key Generation Bug: Fixed critical variable scoping issue in cache system
- Resource Leaks: Fixed file handle leaks in tests (proper context managers)
- Exception Handling: Replaced bare
except:clauses with specific exceptions
Added
- Thread Safety: Added
threading.RLockto cache for concurrent access - Logging: Comprehensive logging throughout extractors and formatters:
- Debug: Language code conversions, metadata reads
- Warning: Network failures, API errors, MediaInfo parse failures
- Error: Formatter application failures
Changed
- Unified Cache Subsystem (500 lines):
- Modular architecture:
core.py,types.py,strategies.py,managers.py,decorators.py - 4 cache key strategies:
FilepathMethodStrategy,APIRequestStrategy,SimpleKeyStrategy,CustomStrategy - Enhanced decorators:
@cached_method(),@cached_api(),@cached_property() - Cache manager operations:
clear_all(),clear_by_prefix(),clear_expired(),compact_cache()
- Modular architecture:
Phase 5: Test Coverage (PARTIALLY COMPLETED - 4/6)
Added
- Service Tests (30+ tests): FileTreeService, MetadataService, RenameService
- Utility Tests (70+ tests): PatternExtractor, LanguageCodeExtractor, FrameClassMatcher
- Formatter Tests (40+ tests): All formatter classes and FormatterApplier
- Cache Tests (18 tests): Cache subsystem functionality
- Dataset Organization:
filename_patterns.json: 46 comprehensive test casesframe_class_tests.json: 25 frame class test cases- Sample file generator:
fill_sample_mediafiles.py - Dataset loaders in
conftest.py
Changed
- Test Organization: Consolidated test data into
src/test/datasets/ - Total Tests: 560 tests (1 skipped), all passing
Documentation Improvements
Added
- ENGINEERING_GUIDE.md: Comprehensive 900+ line technical reference
- CHANGELOG.md: This file
Changed
- CLAUDE.md: Streamlined to pointer to ENGINEERING_GUIDE.md
- AI_AGENT.md: Marked as deprecated, points to ENGINEERING_GUIDE.md
- DEVELOP.md: Streamlined with references to ENGINEERING_GUIDE.md
- README.md: Streamlined user guide with references
Removed
- Outdated version information from documentation files
- Duplicated content now in ENGINEERING_GUIDE.md
Breaking Changes
Cache System
- Cache key format changed: Old cache files are invalid
- Migration: Users should clear cache:
rm -rf ~/.cache/moma/ - Impact: No data loss, just cache miss on first run after upgrade
Dependencies
- Added: mypy>=1.0.0 as dev dependency
Statistics
Code Quality Metrics
- Lines Added: ~3,497 lines
- Phase 1: ~500 lines (cache subsystem)
- Phase 2: ~2,297 lines (base classes + services + utilities)
- Phase 3: ~200 lines (docstrings)
- Phase 5: ~500 lines (new tests)
- Lines Removed: ~290 lines through code duplication elimination
- Net Gain: ~3,207 lines of quality code
Test Coverage
- Total Tests: 560 (was 518)
- New Tests: +42 tests (+8%)
- Pass Rate: 100% (559 passed, 1 skipped)
Architecture Improvements
- ✅ Protocols and ABCs for consistent interfaces
- ✅ Service layer with dependency injection
- ✅ Thread pool for concurrent operations
- ✅ Utility modules for shared logic
- ✅ Command palette for unified access
- ✅ Type hints and mypy integration
- ✅ Comprehensive docstrings
[0.6.0] - 2025-12-31
Added
- Initial cache subsystem implementation
- Basic service layer structure
- Protocol definitions for extractors
Changed
- Refactored cache key generation
- Improved error handling
[0.5.10] - Previous Release
Features
- Dual display modes (technical/catalog)
- TMDB integration with poster display
- Settings configuration UI
- Persistent caching with TTL
- Intelligent file renaming
- Color-coded information display
- Keyboard and mouse navigation
- Help screen with key bindings
Version History Summary
- 0.7.0-dev (2026-01-01): Major refactoring - code quality, architecture, testing
- 0.6.0 (2025-12-31): Cache improvements, service layer foundation
- 0.5.x: Settings, caching, catalog mode, poster display
- 0.4.x: TMDB integration
- 0.3.x: Enhanced extractors and formatters
- 0.2.x: Initial TUI with basic metadata
Links
- ENGINEERING_GUIDE.md - Complete technical documentation
- REFACTORING_PROGRESS.md - Future refactoring plans
- ToDo.md - Current task list
Last Updated: 2026-01-01