Added tune previews
This commit is contained in:
@@ -35,64 +35,12 @@ async def set_score(
|
||||
score = scores_service.get_score_by_id(score_id=score_id, tema_id=tema_id)
|
||||
if not score:
|
||||
raise HTTPException(status_code=404, detail="Could not find lyric!")
|
||||
|
||||
tune = lilypond_build.tune_from_tema_id(tema_id=tema_id, score_source=source)
|
||||
tune_source = lilypond_source.tune_source(tune=tune)
|
||||
pdf_result, png_result = await render_tune(tune_source=tune_source, tema_id=tema_id)
|
||||
if errors := pdf_result.error:
|
||||
new_score = dataclasses.replace(
|
||||
score,
|
||||
source=source,
|
||||
title=title,
|
||||
errors=errors,
|
||||
)
|
||||
elif png_result is None:
|
||||
raise RuntimeError(f"Received empty png_result with pdf_result: {pdf_result}")
|
||||
elif errors := png_result.error:
|
||||
new_score = dataclasses.replace(
|
||||
score,
|
||||
source=source,
|
||||
title=title,
|
||||
errors=errors,
|
||||
)
|
||||
else:
|
||||
pdf_file = pdf_result.result
|
||||
png_file = png_result.result
|
||||
new_score = dataclasses.replace(
|
||||
score,
|
||||
source=source,
|
||||
title=title,
|
||||
pdf_url=files.get_db_file_path(pdf_file) if pdf_file else None,
|
||||
img_url=files.get_db_file_path(png_file) if png_file else None,
|
||||
errors=[],
|
||||
)
|
||||
new_score = await scores_service.render_score(score=score, title=title, source=source)
|
||||
scores_service.update_score(score=new_score)
|
||||
files.clean_orphan_files()
|
||||
return scores_fragments.score(request=request, logged_in=logged_in, score=new_score)
|
||||
|
||||
|
||||
async def render_tune(
|
||||
tune_source: str,
|
||||
tema_id: int,
|
||||
) -> tuple[lilypond_render.RenderResult, lilypond_render.RenderResult | None]:
|
||||
async with files.tmp_file(content=tune_source) as source_file:
|
||||
pdf_file = files.create_tema_filename(tema_id=tema_id)
|
||||
pdf_result = await lilypond_render.render_file(
|
||||
input_file=source_file,
|
||||
output=lilypond_render.RenderOutput.PDF,
|
||||
output_file=pdf_file,
|
||||
)
|
||||
if pdf_result.error:
|
||||
return pdf_result, None
|
||||
png_file = files.create_tema_filename(tema_id=tema_id)
|
||||
png_result = await lilypond_render.render_file(
|
||||
input_file=source_file,
|
||||
output=lilypond_render.RenderOutput.PNG_CROPPED,
|
||||
output_file=png_file,
|
||||
)
|
||||
return pdf_result, png_result
|
||||
|
||||
|
||||
@router.post("/api/tema/{tema_id}/score")
|
||||
def add_score(
|
||||
request: Request,
|
||||
|
||||
Reference in New Issue
Block a user