FEATURE: propogate improvements from CLI version to web-backend
This commit is contained in:
@@ -17,19 +17,16 @@ class TracklistEntry(BaseModel):
|
||||
|
||||
@validator("ts")
|
||||
def validate_timestamp(cls, v: str) -> str:
|
||||
"""Basic timestamp validation (format and range)."""
|
||||
v = v.strip()
|
||||
if not v:
|
||||
raise ValueError("Timestamp cannot be empty")
|
||||
|
||||
# Check for range format (start-end)
|
||||
if "-" in v:
|
||||
parts = v.split("-", 1)
|
||||
start = parts[0].strip()
|
||||
end = parts[1].strip()
|
||||
if not start or not end:
|
||||
raise ValueError("Invalid range format. Expected 'start-end'")
|
||||
# Validate each part with the same logic
|
||||
for ts in [start, end]:
|
||||
cls._validate_single_timestamp(ts)
|
||||
else:
|
||||
@@ -39,7 +36,6 @@ class TracklistEntry(BaseModel):
|
||||
|
||||
@staticmethod
|
||||
def _validate_single_timestamp(ts: str) -> None:
|
||||
"""Validate a single timestamp (mm:ss or HH:MM:SS)."""
|
||||
parts = ts.split(":")
|
||||
if len(parts) not in (2, 3):
|
||||
raise ValueError(f"Invalid timestamp format: {ts}. Expected mm:ss or HH:MM:SS")
|
||||
@@ -55,4 +51,30 @@ class SplitRequest(BaseModel):
|
||||
|
||||
task_id: str = Field(..., description="Task ID from upload")
|
||||
tracklist: List[TracklistEntry] = Field(..., description="List of tracks")
|
||||
options: dict = Field(default_factory=dict, description="All CLI options")
|
||||
|
||||
# Container and codec options
|
||||
container: Optional[str] = Field(None, description="Output container (auto-detect if None)")
|
||||
audio_codec: Optional[str] = Field("copy", description="Audio codec (copy or encoder name)")
|
||||
video_codec: Optional[str] = Field("copy", description="Video codec (copy or encoder name)")
|
||||
subtitle_codec: Optional[str] = Field("copy", description="Subtitle codec (copy or encoder name)")
|
||||
video_quality: Optional[int] = Field(None, description="Video quality (encoder-specific integer)")
|
||||
|
||||
# Stream handling
|
||||
drop_video: bool = Field(False, description="Remove video streams")
|
||||
drop_subs: bool = Field(False, description="Remove subtitle streams")
|
||||
|
||||
# Filename options
|
||||
number_tracks: bool = Field(False, description="Prepend track numbers")
|
||||
replace_bad_chars: bool = Field(False, description="Replace bad characters")
|
||||
replacement_char: str = Field("_", description="Replacement character")
|
||||
bad_chars: str = Field(r'!@#№$;:%^&?*(){}[]\/<>+=~`\' ', description="Bad characters to replace")
|
||||
skip_existing: bool = Field(False, description="Skip existing files")
|
||||
output_template: str = Field("%an-%tn.%ext", description="Output filename template")
|
||||
|
||||
# Metadata options
|
||||
album: Optional[str] = Field(None, description="Album name")
|
||||
comment: Optional[str] = Field(None, description="Comment")
|
||||
no_comment: bool = Field(False, description="Ignore comment")
|
||||
comment_stream: Optional[int] = Field(None, description="Comment stream index")
|
||||
merge_comments: bool = Field(False, description="Merge all comments")
|
||||
comment_separator: str = Field("; ", description="Separator for merged comments")
|
||||
|
||||
Reference in New Issue
Block a user