From e0637e99817d20c6368f024a8f381e6de93a3965 Mon Sep 17 00:00:00 2001 From: sHa Date: Mon, 29 Dec 2025 20:10:34 +0000 Subject: [PATCH] fix: Remove unused resolution frame class method from formatter order --- dist/renamer-0.5.2-py3-none-any.whl | Bin 0 -> 46069 bytes pyproject.toml | 2 +- renamer/extractors/mediainfo_extractor.py | 35 ++++++--------------- renamer/formatters/formatter.py | 1 - renamer/formatters/resolution_formatter.py | 35 --------------------- uv.lock | 2 +- 6 files changed, 11 insertions(+), 64 deletions(-) create mode 100644 dist/renamer-0.5.2-py3-none-any.whl diff --git a/dist/renamer-0.5.2-py3-none-any.whl b/dist/renamer-0.5.2-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..3ac3360e2bea7bed4ee7c05882e9b783be217d4e GIT binary patch literal 46069 zcmaI7V~{A@vNhVaZQHhO+qSjZwr$(pt8LqMueNP>zjeO%-4}bGxbZ3?e^ft_7kzy?2M=X6 z2&rl5DOp-23JIARIT`t*eJSdRS=Bjd8VZH6DcUi5s(=ay8Vdi3618L$QnIu|bX4MW zhT)zH%8ZCw2F3Ewrq9Byp~OU${7{{EZyp^0(JXA4dw-j3Kn zu1Zh`#5TPr4FH9IEz$zgT*(y%06>Nn008bEi!^j__`AMkEnE97Hl**K-oO+^jVK#5 zS@@UXVZ3-UH!A{r^Uhx!C?N#W$!XzgN}>}pE4O~Vm^~52#ZMcKwP~O*(j?{_*{fm2 zku84^1o@-rXwxhg5n3$I)#B4+8wu*H-1i=%?`u&S2XH+H@2RQUFn#BhItWgPP-(Q| zlRD6vbmLoHGaJv(nr?*%xra2&rBtAM*QZ{ zj-@6Uf5Y_pO|r8Vny!1cOK!^N=n@}kZYV5o7aQp|NH0Di>Y2Z5R%=tO8e*@7W}Y@SDJ0Qkgx98FJ-y2T%bFOGy>=$S!dbK#8P%6&qot(!u+f}R5f^WkZgXM z?<|*_bYnaY@^
HfVa?*>dsE-lghD36#1ssl? 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

~AxA#PL68Ye<@ss$lAU@sq!qAZjS;>Q5g)` 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 BR;&O3 literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml index 9b9ab7d..1c15733 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "renamer" -version = "0.5.1" +version = "0.5.2" description = "Terminal-based media file renamer and metadata viewer" readme = "README.md" requires-python = ">=3.11" diff --git a/renamer/extractors/mediainfo_extractor.py b/renamer/extractors/mediainfo_extractor.py index 1b7b5fb..c722a20 100644 --- a/renamer/extractors/mediainfo_extractor.py +++ b/renamer/extractors/mediainfo_extractor.py @@ -71,43 +71,26 @@ class MediaInfoExtractor: if not self.video_tracks: return None height = getattr(self.video_tracks[0], 'height', None) - width = getattr(self.video_tracks[0], 'width', None) - if not height or not width: + if not height: return None # Check if interlaced interlaced = getattr(self.video_tracks[0], 'interlaced', None) scan_type = 'i' if interlaced == 'Yes' else 'p' - # First, try to match width to typical widths - matching_classes = [] - for frame_class, info in FRAME_CLASSES.items(): - if width in info['typical_widths'] and frame_class.endswith(scan_type): - matching_classes.append((frame_class, info)) - - if matching_classes: - # If multiple matches, choose the one with closest height - closest = min(matching_classes, key=lambda x: abs(height - x[1]['nominal_height'])) - return closest[0] - - # If no width match, fall back to height-based matching - # First try exact match - frame_class = f"{height}{scan_type}" - if frame_class in FRAME_CLASSES: - return frame_class - - # Find closest height with same scan type - closest_height = None + # Find the closest frame class based on height + closest_class = None min_diff = float('inf') - for fc, info in FRAME_CLASSES.items(): - if fc.endswith(scan_type): + for frame_class, info in FRAME_CLASSES.items(): + if frame_class.endswith(scan_type): diff = abs(height - info['nominal_height']) if diff < min_diff: min_diff = diff - closest_height = info['nominal_height'] + closest_class = frame_class - if closest_height and min_diff <= 100: - return f"{closest_height}{scan_type}" + # Return the closest match if within reasonable distance + if closest_class and min_diff <= 100: + return closest_class return None @cached_method() diff --git a/renamer/formatters/formatter.py b/renamer/formatters/formatter.py index f719991..68bb78f 100644 --- a/renamer/formatters/formatter.py +++ b/renamer/formatters/formatter.py @@ -34,7 +34,6 @@ class FormatterApplier: DateFormatter.format_modification_date, DateFormatter.format_year, ExtensionFormatter.format_extension_info, - ResolutionFormatter.get_frame_class_from_resolution, ResolutionFormatter.format_resolution_dimensions, TrackFormatter.format_video_track, TrackFormatter.format_audio_track, diff --git a/renamer/formatters/resolution_formatter.py b/renamer/formatters/resolution_formatter.py index cdf401d..53b8557 100644 --- a/renamer/formatters/resolution_formatter.py +++ b/renamer/formatters/resolution_formatter.py @@ -1,41 +1,6 @@ -from renamer.constants import FRAME_CLASSES - class ResolutionFormatter: """Class for formatting video resolutions and frame classes""" - @staticmethod - def get_frame_class_from_resolution(resolution: str) -> str: - """Convert resolution string (WIDTHxHEIGHT) to frame class (480p, 720p, etc.)""" - if not resolution: - return 'Unclassified' - - try: - # Extract height from WIDTHxHEIGHT format - if 'x' in resolution: - height = int(resolution.split('x')[1]) - else: - # Try to extract number directly - import re - match = re.search(r'(\d{3,4})', resolution) - if match: - height = int(match.group(1)) - else: - return 'Unclassified' - - # Find the closest frame class based on nominal height - closest_class = 'Unclassified' - min_diff = float('inf') - for frame_class, info in FRAME_CLASSES.items(): - nominal_height = info['nominal_height'] - diff = abs(height - nominal_height) - if diff < min_diff: - min_diff = diff - closest_class = frame_class - - return closest_class - except (ValueError, IndexError): - return 'Unclassified' - @staticmethod def format_resolution_dimensions(resolution: tuple[int, int]) -> str: """Format resolution as WIDTHxHEIGHT""" diff --git a/uv.lock b/uv.lock index ceb5dc0..314488d 100644 --- a/uv.lock +++ b/uv.lock @@ -342,7 +342,7 @@ wheels = [ [[package]] name = "renamer" -version = "0.5.1" +version = "0.5.2" source = { editable = "." } dependencies = [ { name = "langcodes" },