mirror of
https://github.com/shadoll/moma.git
synced 2026-08-28 11:33:25 +00:00
9.6 KiB
9.6 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]
Added
- GitHub Actions CI (
ci.yml): runs tests + mypy on Python 3.11 and 3.12 for every push tomainand all PRs - GitHub Actions Release (
release.yml): triggered byv*.*.*tags — runs tests, builds wheel + tarball, publishes packages as GitHub Release assets
Future Plans
See docs/REFACTORING_PROGRESS.md and docs/ToDo.md for upcoming features and improvements.
[0.8.11] - 2026-04-11
Changed
- Renamed project package from
renamertomoma, CLI command is nowmoma - Main app class renamed
RenamerApp→MomaApp - Package source directory renamed
renamer/→src/ - Config path
~/.config/renamer/→~/.config/moma/ - Cache path
~/.cache/renamer/→~/.cache/moma/ - Migrated repository to GitHub:
git@github.com:shadoll/moma.git
[0.8.10] - 2026-04-10
Added
- OpenScreen: Dedicated screen for directory input with validation
- ConvertConfirmScreen: Conversion confirmation for AVI/MP4/WebM → MKV
- DeleteConfirmScreen: File deletion confirmation screen
- Singleton logging configuration (
logging_config.py)
Fixed
- Improved scan commands and key bindings usability
- MP4 and WebM support in conversion service
[0.7.10] - 2026-02-01
Added
- Poster rendering: ASCII art, Viu, and RichPixels poster display options
- HEVC encoding options: configurable CRF and preset in settings
- MPG/MPEG format support in conversion service
- Genre extraction added to media properties panel
- File icons in directory tree
- Delete file functionality with confirmation
Changed
- Refactored
FormatterApplierclass (removed, inlined) - Consolidated text color decorators
- Improved scan type detection for interlaced content
- Updated bitrate calculation in
TrackFormatter - Replaced dots with spaces in title normalization
Fixed
- Poster handling and rendering in catalog mode
- TMDB data retrieval improvements
[0.7.0] - 2026-01-01
Major Refactoring (Phases 1-3)
Significant refactoring 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: 11 main app commands (open, scan_local, scan, refresh, rename, convert, delete, toggle_mode, expand, settings, help)CacheCommandProvider: 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
- AGENTS.md: Comprehensive 900+ line technical reference
- CHANGELOG.md: This file
Changed
- CLAUDE.md: Streamlined to pointer to AGENTS.md
- AI_AGENT.md: Marked as deprecated, points to AGENTS.md
- DEVELOP.md: Streamlined with references to AGENTS.md
- README.md: Streamlined user guide with references
Removed
- Outdated version information from documentation files
- Duplicated content now in AGENTS.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
- AGENTS.md - Complete technical documentation
- docs/REFACTORING_PROGRESS.md - Future refactoring plans
- docs/ToDo.md - Current task list
Last Updated: 2026-04-11