feat: adiciona suporte para definir título e faixa padrão em faixas de áudio e legenda

This commit is contained in:
2026-03-01 01:55:22 -03:00
parent c7031cbdce
commit 1f163ca0fc
15 changed files with 294 additions and 16 deletions
+32 -2
View File
@@ -1,13 +1,15 @@
use eframe::egui;
use crate::adapters::filesystem::FilePickerAdapter;
use crate::domain::value_objects::{FilePath, SyncOffset, TrackLanguage};
use crate::ui::components::{language_field::LanguageField, sync_offset_field::SyncOffsetField};
use eframe::egui;
/// Evento emitido ao confirmar adição de faixa de áudio.
pub struct AddAudioTrackRequest {
pub path: FilePath,
pub offset: SyncOffset,
pub language: TrackLanguage,
pub is_default: bool,
pub title: String,
}
/// Formulário para adicionar uma faixa de áudio externa.
@@ -15,6 +17,8 @@ pub struct AddAudioTrackForm {
selected_path: Option<FilePath>,
offset_field: SyncOffsetField,
language_field: LanguageField,
is_default: bool,
title_input: String,
}
impl AddAudioTrackForm {
@@ -23,6 +27,8 @@ impl AddAudioTrackForm {
selected_path: None,
offset_field: SyncOffsetField::new(SyncOffset::default()),
language_field: LanguageField::new(None),
is_default: false,
title_input: String::new(),
}
}
@@ -48,6 +54,22 @@ impl AddAudioTrackForm {
self.offset_field.ui(ui, "Atraso:");
self.language_field.ui(ui);
ui.horizontal(|ui| {
ui.label("Nome da faixa:");
ui.text_edit_singleline(&mut self.title_input)
.on_hover_text(
"Nome exibido no player (ex: \"Português\", \"Comentários\").\n\
Deixe vazio para remover o nome original do arquivo fonte.\n\
Recomendado para evitar nomes como \"ISO Media file produced by Google Inc.\"",
);
});
ui.checkbox(&mut self.is_default, "Definir como faixa padrão")
.on_hover_text(
"Marca esta faixa como padrão no container MKV.\n\
Recomendado para que players como Jellyfin selecionem este áudio automaticamente.",
);
ui.add_space(4.0);
let can_add = self.selected_path.is_some();
@@ -60,11 +82,19 @@ impl AddAudioTrackForm {
self.offset_field.parse(),
self.language_field.parse(),
) {
result = Some(AddAudioTrackRequest { path, offset, language });
result = Some(AddAudioTrackRequest {
path,
offset,
language,
is_default: self.is_default,
title: self.title_input.trim().to_string(),
});
// Reset form
self.selected_path = None;
self.offset_field = SyncOffsetField::new(SyncOffset::default());
self.language_field = LanguageField::new(None);
self.is_default = false;
self.title_input = String::new();
}
}
});