Escollir partitura del tema en un set
This commit is contained in:
@@ -26,15 +26,34 @@ def unknown_tune() -> lilypond_model.LilypondTune:
|
||||
)
|
||||
|
||||
|
||||
def tune_from_tema(tema: model.Tema | None, score_source: str | None = None) -> lilypond_model.LilypondTune:
|
||||
def tune_from_tema(
|
||||
tema: model.Tema | None,
|
||||
score_source: str | None = None,
|
||||
score_id: int | None = None,
|
||||
) -> lilypond_model.LilypondTune:
|
||||
"""
|
||||
The given `tema` is assumed to have properties, lyrics and scores (if source is None)
|
||||
"""
|
||||
if tema is None:
|
||||
return unknown_tune()
|
||||
|
||||
# Determine the score source to use
|
||||
effective_source = score_source
|
||||
if effective_source is None and tema.scores:
|
||||
if score_id is not None:
|
||||
# Find the specific score by ID
|
||||
for score in tema.scores:
|
||||
if score.id == score_id:
|
||||
effective_source = score.source
|
||||
break
|
||||
if effective_source is None:
|
||||
# Fallback to main_score or first score
|
||||
main = tema.main_score()
|
||||
effective_source = main.source if main else tema.scores[0].source
|
||||
|
||||
return lilypond_model.LilypondTune(
|
||||
header=lilypond_model.HeaderData.from_tema(tema=tema),
|
||||
score_source=score_source or (tema.scores[0].source if tema.scores else None),
|
||||
score_source=effective_source,
|
||||
lyrics=lilypond_model.LyricsText.from_lyrics(lyrics=tema.lyrics[0]) if tema.lyrics else None,
|
||||
)
|
||||
|
||||
@@ -84,15 +103,23 @@ def set_from_set(set_entry: playlists_model.Set) -> lilypond_model.LilypondSet:
|
||||
"""
|
||||
The tune_set is assumed to be enriched with tunes
|
||||
"""
|
||||
tema_ids = [tema_in_set.tema_id for tema_in_set in set_entry.temes]
|
||||
temes_by_id = {
|
||||
tema_in_set.tema_id: tema_in_set.tema
|
||||
for tema_in_set in set_entry.temes
|
||||
if tema_in_set.id is not None and tema_in_set.tema
|
||||
}
|
||||
temes = [temes_by_id[tema_id] if tema_id is not None else None for tema_id in tema_ids]
|
||||
temes = [temes_by_id.get(t.tema_id) for t in set_entry.temes]
|
||||
set_title = build_set_title(temes=temes)
|
||||
tunes = tunes_from_temes(temes)
|
||||
|
||||
# Build tunes with score_id consideration
|
||||
tunes = [
|
||||
tune_from_tema(
|
||||
tema=temes_by_id.get(tema_in_set.tema_id),
|
||||
score_id=tema_in_set.score_id,
|
||||
)
|
||||
for tema_in_set in set_entry.temes
|
||||
]
|
||||
|
||||
return lilypond_model.LilypondSet(
|
||||
title=set_title,
|
||||
tunes=tunes
|
||||
|
||||
Reference in New Issue
Block a user