31 lines
724 B
Python
31 lines
724 B
Python
from dataclasses import dataclass
|
|
from enum import Enum
|
|
from typing import Tuple
|
|
|
|
from serato_doctor.models.track import DiskTrack
|
|
|
|
|
|
class DuplicateKind(str, Enum):
|
|
EXACT_NAME = "exact_name"
|
|
CLOUD_CONFLICT = "cloud_conflict"
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class DuplicateGroup:
|
|
"""A deterministic group of files that warrants duplicate review."""
|
|
|
|
kind: DuplicateKind
|
|
comparison_key: str
|
|
tracks: Tuple[DiskTrack, ...]
|
|
|
|
@property
|
|
def extra_files(self) -> int:
|
|
return max(0, len(self.tracks) - 1)
|
|
|
|
@property
|
|
def display_name(self) -> str:
|
|
return min(
|
|
(track.filename for track in self.tracks),
|
|
key=lambda name: (len(name), name.casefold()),
|
|
)
|