fix(downloads): clip long titles to fit display_name (VARCHAR 255)
A download whose source title exceeded 255 chars (e.g. a recipe baked into a Facebook video's title) failed with a StringDataRightTruncation: the worker auto-fills an empty display_name from the title, which overflows the 255-char column. Clip the title to 255 at every point it flows into display_name (worker completion paths + enqueue); the full title is untouched on the asset. Pre-existing latent bug, surfaced by an unusually long title. Release v0.31.1.
This commit is contained in:
parent
ccbcc34bd3
commit
33fad8911b
4 changed files with 14 additions and 4 deletions
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
||||||
0.31.0
|
0.31.1
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,7 @@ def enqueue(
|
||||||
source_ref=source_ref,
|
source_ref=source_ref,
|
||||||
profile_id=profile_id,
|
profile_id=profile_id,
|
||||||
profile_snapshot=spec,
|
profile_snapshot=spec,
|
||||||
display_name=display_name or (asset.title if asset.status == "ready" else None),
|
display_name=display_name or (asset.title[:255] if asset.status == "ready" and asset.title else None),
|
||||||
status="queued",
|
status="queued",
|
||||||
queue_pos=_next_queue_pos(db),
|
queue_pos=_next_queue_pos(db),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -203,7 +203,8 @@ def _finish_from_cache(job_id: int, asset_id: int) -> None:
|
||||||
job.progress = 100
|
job.progress = 100
|
||||||
job.phase = None
|
job.phase = None
|
||||||
if not job.display_name:
|
if not job.display_name:
|
||||||
job.display_name = asset.title
|
# display_name is VARCHAR(255); a title can be longer (e.g. a recipe in the title).
|
||||||
|
job.display_name = asset.title[:255] if asset.title else None
|
||||||
asset.last_access_at = datetime.now(timezone.utc)
|
asset.last_access_at = datetime.now(timezone.utc)
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
|
|
@ -425,7 +426,8 @@ def _download(job_id: int, asset_id: int, source_kind: str, source_ref: str, spe
|
||||||
job.speed_bps = None
|
job.speed_bps = None
|
||||||
job.eta_s = None
|
job.eta_s = None
|
||||||
if not job.display_name:
|
if not job.display_name:
|
||||||
job.display_name = meta.title
|
# display_name is VARCHAR(255) — clip a long title (see _fill_asset_meta_early).
|
||||||
|
job.display_name = meta.title[:255] if meta.title else None
|
||||||
db.commit()
|
db.commit()
|
||||||
log.info("job %s done: %s", job_id, rel)
|
log.info("job %s done: %s", job_id, rel)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,14 @@ export interface ReleaseEntry {
|
||||||
}
|
}
|
||||||
|
|
||||||
export const RELEASE_NOTES: ReleaseEntry[] = [
|
export const RELEASE_NOTES: ReleaseEntry[] = [
|
||||||
|
{
|
||||||
|
version: "0.31.1",
|
||||||
|
date: "2026-07-07",
|
||||||
|
summary: "Fix: a download could fail when the video's title was very long.",
|
||||||
|
fixes: [
|
||||||
|
"Downloads: fixed a download failing right at the end when the source's title was very long (e.g. a whole recipe in the title) — the auto-filled display name overflowed its limit. Long titles are now trimmed for the name; the full title still shows everywhere else.",
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
version: "0.31.0",
|
version: "0.31.0",
|
||||||
date: "2026-07-07",
|
date: "2026-07-07",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue