Files
moma/renamer/views/media_panel.py
T
sha 917d25b360 Add decorators for formatting various media attributes
- Introduced `DurationDecorators` for full and short duration formatting.
- Added `ExtensionDecorators` for formatting extension information.
- Created `ResolutionDecorators` for formatting resolution dimensions.
- Implemented `SizeDecorators` for full and short size formatting.
- Enhanced `TextDecorators` with additional formatting options including blue and grey text, URL formatting, and escaping rich markup.
- Developed `TrackDecorators` for formatting video, audio, and subtitle track data.
- Refactored `MediaPanelView` to utilize a new `MediaPanelProperties` class for cleaner property management and formatting.
- Updated `media_panel_properties.py` to include formatted properties for file info, TMDB data, metadata extraction, media info extraction, and filename extraction.
- Bumped version to 0.6.5 in `uv.lock`.
2026-01-03 10:13:17 +00:00

136 lines
4.6 KiB
Python

from .media_panel_properties import MediaPanelProperties
from ..formatters.conditional_decorators import conditional_decorators
class MediaPanelView:
"""View for assembling media data panels for display.
This view aggregates multiple formatters to create comprehensive
display panels for technical and catalog modes.
"""
def __init__(self, extractor):
self.extractor = extractor
self._props = MediaPanelProperties(extractor)
def file_info_panel(self) -> str:
"""Return formatted file info panel string"""
return "\n".join(
[
self.fileinfo_section(),
self.selected_section(),
self.tmdb_section(),
self.tracksinfo_section(),
self.filename_section(),
self.metadata_section(),
self.mediainfo_section(),
]
)
@conditional_decorators.wrap("", "\n")
def fileinfo_section(self) -> str:
"""Return formatted file info"""
return "\n".join(
[
self._props.title("File Info"),
self._props.file_path,
self._props.file_size,
self._props.file_name,
self._props.modification_time,
self._props.extension_fileinfo,
]
)
@conditional_decorators.wrap("", "\n")
def selected_section(self) -> str:
"""Return formatted selected data"""
return "\n".join(
[
self._props.title("Selected Data"),
self._props.selected_order,
self._props.selected_title,
self._props.selected_year,
self._props.selected_special_info,
self._props.selected_source,
self._props.selected_frame_class,
self._props.selected_hdr,
self._props.selected_audio_langs,
self._props.selected_database_info,
]
)
@conditional_decorators.wrap("", "\n")
def tmdb_section(self) -> str:
"""Return formatted TMDB data"""
return "\n".join(
[
self._props.title("TMDB Data"),
self._props.tmdb_id,
self._props.tmdb_title,
self._props.tmdb_original_title,
self._props.tmdb_year,
self._props.tmdb_database_info,
self._props.tmdb_url,
]
)
@conditional_decorators.wrap("", "\n")
def tracksinfo_section(self) -> str:
"""Return formatted tracks information panel"""
return "\n".join(
[
self._props.title("Tracks Info"),
*self._props.video_tracks,
*self._props.audio_tracks,
*self._props.subtitle_tracks,
]
)
@conditional_decorators.wrap("", "\n")
def filename_section(self) -> str:
"""Return formatted filename extracted data"""
return "\n".join(
[
self._props.title("Filename Extracted Data"),
self._props.filename_order,
self._props.filename_title,
self._props.filename_year,
self._props.filename_source,
self._props.filename_frame_class,
self._props.filename_hdr,
self._props.filename_audio_langs,
self._props.filename_special_info,
self._props.filename_movie_db,
]
)
@conditional_decorators.wrap("", "\n")
def metadata_section(self) -> str:
"""Return formatted metadata extraction data"""
return "\n".join(
[
self._props.title("Metadata Extraction"),
self._props.metadata_title,
self._props.metadata_duration,
self._props.metadata_artist,
]
)
@conditional_decorators.wrap("", "\n")
def mediainfo_section(self) -> str:
"""Return formatted media info extraction data"""
return "\n".join(
[
self._props.title("Media Info Extraction"),
self._props.mediainfo_duration,
self._props.mediainfo_frame_class,
self._props.mediainfo_resolution,
self._props.mediainfo_aspect_ratio,
self._props.mediainfo_hdr,
self._props.mediainfo_audio_langs,
self._props.mediainfo_anamorphic,
self._props.mediainfo_extension,
self._props.mediainfo_3d_layout,
]
)