mirror of
https://github.com/shadoll/moma.git
synced 2026-08-28 03:27:34 +00:00
feat: Bump version to 0.2.5, enhance logging, normalize Cyrillic characters, and improve database info formatting
This commit is contained in:
@@ -1,16 +0,0 @@
|
||||
from pathlib import Path
|
||||
from ..constants import MEDIA_TYPES
|
||||
|
||||
|
||||
class ExtensionExtractor:
|
||||
"""Class for extracting extension information"""
|
||||
|
||||
@staticmethod
|
||||
def get_extension_name(file_path: Path) -> str:
|
||||
"""Get extension name without dot"""
|
||||
return file_path.suffix.lower().lstrip('.')
|
||||
|
||||
@staticmethod
|
||||
def get_extension_description(ext_name: str) -> str:
|
||||
"""Get description for extension"""
|
||||
return MEDIA_TYPES.get(ext_name, {}).get('description', f'Unknown extension .{ext_name}')
|
||||
@@ -41,6 +41,7 @@ class FormatterApplier:
|
||||
TrackFormatter.format_audio_track,
|
||||
TrackFormatter.format_subtitle_track,
|
||||
SpecialInfoFormatter.format_special_info,
|
||||
SpecialInfoFormatter.format_database_info,
|
||||
|
||||
# Text formatters second (transform text content)
|
||||
TextFormatter.uppercase,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from pathlib import Path
|
||||
from rich.markup import escape
|
||||
from .size_formatter import SizeFormatter
|
||||
from .date_formatter import DateFormatter
|
||||
from .extension_extractor import ExtensionExtractor
|
||||
from .extension_formatter import ExtensionFormatter
|
||||
from .text_formatter import TextFormatter
|
||||
from .track_formatter import TrackFormatter
|
||||
@@ -40,7 +40,7 @@ class MediaFormatter:
|
||||
"group": "File Info",
|
||||
"label": "Path",
|
||||
"label_formatters": [TextFormatter.bold],
|
||||
"value": self.extractor.get("file_path", "FileInfo"),
|
||||
"value": escape(str(self.extractor.get("file_path", "FileInfo"))),
|
||||
"display_formatters": [TextFormatter.blue],
|
||||
},
|
||||
{
|
||||
@@ -54,7 +54,7 @@ class MediaFormatter:
|
||||
"group": "File Info",
|
||||
"label": "Name",
|
||||
"label_formatters": [TextFormatter.bold],
|
||||
"value": self.extractor.get("file_name", "FileInfo"),
|
||||
"value": escape(str(self.extractor.get("file_name", "FileInfo"))),
|
||||
"display_formatters": [TextFormatter.cyan],
|
||||
},
|
||||
{
|
||||
@@ -283,26 +283,77 @@ class MediaFormatter:
|
||||
|
||||
def selected_data(self) -> list[str]:
|
||||
"""Return formatted selected data string"""
|
||||
import logging
|
||||
import os
|
||||
if os.getenv("FORMATTER_LOG"):
|
||||
frame_class = self.extractor.get("frame_class")
|
||||
audio_langs = self.extractor.get("audio_langs")
|
||||
logging.info(f"Selected data - frame_class: {frame_class!r}, audio_langs: {audio_langs!r}")
|
||||
# Also check from Filename source
|
||||
frame_class_filename = self.extractor.get("frame_class", "Filename")
|
||||
audio_langs_filename = self.extractor.get("audio_langs", "Filename")
|
||||
logging.info(f"From Filename - frame_class: {frame_class_filename!r}, audio_langs: {audio_langs_filename!r}")
|
||||
data = [
|
||||
{
|
||||
"label": "Selected Data",
|
||||
"label_formatters": [TextFormatter.bold, TextFormatter.uppercase],
|
||||
},
|
||||
{
|
||||
"label": "Order",
|
||||
"label_formatters": [TextFormatter.bold, TextFormatter.blue],
|
||||
"value": self.extractor.get("order") or "<None>",
|
||||
"value_formatters": [TextFormatter.yellow],
|
||||
},
|
||||
{
|
||||
"label": "Title",
|
||||
"label_formatters": [TextFormatter.bold, TextFormatter.yellow],
|
||||
"label_formatters": [TextFormatter.bold, TextFormatter.blue],
|
||||
"value": self.extractor.get("title") or "<None>",
|
||||
"value_formatters": [TextFormatter.blue],
|
||||
"value_formatters": [TextFormatter.yellow],
|
||||
},
|
||||
{
|
||||
"label": "Year",
|
||||
"label_formatters": [TextFormatter.bold, TextFormatter.blue],
|
||||
"value": self.extractor.get("year") or "<None>",
|
||||
"value_formatters": [TextFormatter.yellow, DateFormatter.format_year],
|
||||
},
|
||||
{
|
||||
"label": "Special info",
|
||||
"label_formatters": [TextFormatter.bold],
|
||||
"label_formatters": [TextFormatter.bold, TextFormatter.blue],
|
||||
"value": self.extractor.get("special_info") or "<None>",
|
||||
"value_formatters": [
|
||||
SpecialInfoFormatter.format_special_info,
|
||||
TextFormatter.blue,
|
||||
TextFormatter.yellow,
|
||||
],
|
||||
"display_formatters": [TextFormatter.yellow],
|
||||
},
|
||||
{
|
||||
"label": "Source",
|
||||
"label_formatters": [TextFormatter.bold, TextFormatter.blue],
|
||||
"value": self.extractor.get("source") or "<None>",
|
||||
"value_formatters": [TextFormatter.yellow],
|
||||
},
|
||||
{
|
||||
"label": "Frame class",
|
||||
"label_formatters": [TextFormatter.bold, TextFormatter.blue],
|
||||
"value": self.extractor.get("frame_class") or "<None>",
|
||||
"value_formatters": [TextFormatter.yellow],
|
||||
},
|
||||
{
|
||||
"label": "HDR",
|
||||
"label_formatters": [TextFormatter.bold, TextFormatter.blue],
|
||||
"value": self.extractor.get("hdr") or "<None>",
|
||||
"value_formatters": [TextFormatter.yellow],
|
||||
},
|
||||
{
|
||||
"label": "Audio langs",
|
||||
"label_formatters": [TextFormatter.bold, TextFormatter.blue],
|
||||
"value": self.extractor.get("audio_langs") or "<None>",
|
||||
"value_formatters": [TextFormatter.yellow],
|
||||
},
|
||||
{
|
||||
"label": "DBid",
|
||||
"label_formatters": [TextFormatter.bold, TextFormatter.blue],
|
||||
"value": self.extractor.get("movie_db") or "<None>",
|
||||
"value_formatters": [SpecialInfoFormatter.format_database_info, TextFormatter.yellow],
|
||||
}
|
||||
]
|
||||
return FormatterApplier.format_data_items(data)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from rich.markup import escape
|
||||
from .text_formatter import TextFormatter
|
||||
from .date_formatter import DateFormatter
|
||||
from .special_info_formatter import SpecialInfoFormatter
|
||||
@@ -16,7 +17,7 @@ class ProposedNameFormatter:
|
||||
self.__frame_class = extractor.get("frame_class") or None
|
||||
self.__hdr = f",{extractor.get('hdr')}" if extractor.get("hdr") else ""
|
||||
self.__audio_langs = extractor.get("audio_langs") or None
|
||||
self.__special_info = f" \[{SpecialInfoFormatter.format_special_info(extractor.get('special_info'))}]" if extractor.get("special_info") else ""
|
||||
self.__special_info = f" [{SpecialInfoFormatter.format_special_info(extractor.get('special_info'))}]" if extractor.get("special_info") else ""
|
||||
self.__extension = extractor.get("extension") or "ext"
|
||||
|
||||
def __str__(self) -> str:
|
||||
@@ -28,6 +29,7 @@ class ProposedNameFormatter:
|
||||
|
||||
def rename_line_formatted(self, file_path) -> str:
|
||||
"""Format the proposed name for display with color"""
|
||||
proposed = escape(str(self))
|
||||
if file_path.name == str(self):
|
||||
return f">> {TextFormatter.green(str(self))} <<"
|
||||
return f">> {TextFormatter.bold_yellow(str(self))} <<"
|
||||
return f">> {TextFormatter.green(proposed)} <<"
|
||||
return f">> {TextFormatter.bold_yellow(proposed)} <<"
|
||||
|
||||
@@ -8,4 +8,28 @@ class SpecialInfoFormatter:
|
||||
# Filter out None values and ensure all items are strings
|
||||
filtered = [str(item) for item in special_info if item is not None]
|
||||
return ", ".join(filtered)
|
||||
return special_info or ""
|
||||
return special_info or ""
|
||||
|
||||
@staticmethod
|
||||
def format_database_info(database_info):
|
||||
"""Format database info dictionary or tuple/list into a string"""
|
||||
import logging
|
||||
import os
|
||||
if os.getenv("FORMATTER_LOG"):
|
||||
logging.info(f"format_database_info called with: {database_info!r} (type: {type(database_info)})")
|
||||
if isinstance(database_info, dict) and 'name' in database_info and 'id' in database_info:
|
||||
db_name = database_info['name']
|
||||
db_id = database_info['id']
|
||||
result = f"{db_name}id-{db_id}"
|
||||
if os.getenv("FORMATTER_LOG"):
|
||||
logging.info(f"Formatted dict to: {result!r}")
|
||||
return result
|
||||
elif isinstance(database_info, (tuple, list)) and len(database_info) == 2:
|
||||
db_name, db_id = database_info
|
||||
result = f"{db_name}id-{db_id}"
|
||||
if os.getenv("FORMATTER_LOG"):
|
||||
logging.info(f"Formatted tuple/list to: {result!r}")
|
||||
return result
|
||||
if os.getenv("FORMATTER_LOG"):
|
||||
logging.info("Returning 'Unknown'")
|
||||
return "Unknown"
|
||||
Reference in New Issue
Block a user