Files
Transcriptarr/backend/scanning/detected_languages.py
Dasemu d28c4caa6a feat(scanning): add library scanner with rules engine
- Add ScanRule model with configurable conditions
- Add FileAnalyzer for ffprobe-based media analysis
- Add LibraryScanner with manual, scheduled and watcher modes
- Add LanguageDetector for audio language detection
- Support rule-based filtering with priority evaluation
2026-01-16 16:54:41 +01:00

42 lines
1.4 KiB
Python

"""Model for storing detected audio languages."""
from sqlalchemy import Column, Integer, String, DateTime, Index
from sqlalchemy.sql import func
from backend.core.database import Base
class DetectedLanguage(Base):
"""
Stores detected audio languages for files where metadata is undefined.
This cache prevents re-detecting the same file multiple times.
"""
__tablename__ = "detected_languages"
id = Column(Integer, primary_key=True, autoincrement=True)
file_path = Column(String(1024), nullable=False, unique=True, index=True)
detected_language = Column(String(10), nullable=False) # ISO 639-1 code
detection_confidence = Column(Integer, nullable=True) # 0-100
detected_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
# Indexes for performance
__table_args__ = (
Index('idx_detected_lang_path', 'file_path'),
Index('idx_detected_lang_language', 'detected_language'),
)
def __repr__(self):
return f"<DetectedLanguage {self.file_path}: {self.detected_language}>"
def to_dict(self) -> dict:
"""Convert to dictionary."""
return {
"id": self.id,
"file_path": self.file_path,
"detected_language": self.detected_language,
"detection_confidence": self.detection_confidence,
"detected_at": self.detected_at.isoformat() if self.detected_at else None,
}