feat: atualiza terminologia de "carrinho" para "fila" na interface de lote e ajusta comentários

This commit is contained in:
2026-03-01 00:37:56 -03:00
parent 3e38c51e3a
commit c7031cbdce
2 changed files with 30 additions and 13 deletions
+20 -4
View File
@@ -410,8 +410,12 @@ impl eframe::App for App {
{ {
match crate::infrastructure::persistence::load_session() { match crate::infrastructure::persistence::load_session() {
Ok(data) => { Ok(data) => {
let probe = FfprobeGateway;
// Restaura projeto único // Restaura projeto único
if let Some(project) = data.single_project { if let Some(mut project) = data.single_project {
// Re-executa ffprobe para garantir que existing_tracks
// está atualizado independentemente do que foi salvo.
let _ = LoadMediaInfo::execute(&mut project, &probe);
self.pending_source = self.pending_source =
Some(project.source.path.clone()); Some(project.source.path.clone());
self.pending_output = self.pending_output =
@@ -421,12 +425,20 @@ impl eframe::App for App {
self.project = Some(project); self.project = Some(project);
} }
// Restaura itens do lote (estado resetado para Idle) // Restaura itens do lote (estado resetado para Idle)
// Re-executa ffprobe em cada projeto para popular
// existing_tracks que podem estar vazios na sessão salva.
if !data.batch_projects.is_empty() { if !data.batch_projects.is_empty() {
use crate::ui::components::batch_panel::BatchItem; use crate::ui::components::batch_panel::BatchItem;
self.batch_items = data self.batch_items = data
.batch_projects .batch_projects
.into_iter() .into_iter()
.map(BatchItem::new) .map(|mut project| {
let _ = LoadMediaInfo::execute(
&mut project,
&probe,
);
BatchItem::new(project)
})
.collect(); .collect();
} }
let single_ok = self.project.is_some(); let single_ok = self.project.is_some();
@@ -568,10 +580,14 @@ impl eframe::App for App {
let events = self.batch_panel.ui(ui, &self.batch_items, is_processing); let events = self.batch_panel.ui(ui, &self.batch_items, is_processing);
for event in events { for event in events {
match event { match event {
BatchPanelEvent::AddItem(project) => { BatchPanelEvent::AddItem(mut project) => {
let probe = FfprobeGateway;
let _ = LoadMediaInfo::execute(&mut project, &probe);
self.batch_items.push(BatchItem::new(project)); self.batch_items.push(BatchItem::new(project));
} }
BatchPanelEvent::EditItem(idx, project) => { BatchPanelEvent::EditItem(idx, mut project) => {
let probe = FfprobeGateway;
let _ = LoadMediaInfo::execute(&mut project, &probe);
if let Some(item) = self.batch_items.get_mut(idx) { if let Some(item) = self.batch_items.get_mut(idx) {
item.project = project; item.project = project;
item.state = ExecutionState::Idle; item.state = ExecutionState::Idle;
+10 -9
View File
@@ -11,7 +11,8 @@ use crate::ui::components::{
// ── Tipos públicos ───────────────────────────────────────────────────────────── // ── Tipos públicos ─────────────────────────────────────────────────────────────
/// Um item no carrinho de lote — projeto completo com estado individual de execução. /// Um item na fila
/// de lote — projeto completo com estado individual de execução.
pub struct BatchItem { pub struct BatchItem {
pub project: Project, pub project: Project,
pub state: ExecutionState, pub state: ExecutionState,
@@ -30,11 +31,11 @@ impl BatchItem {
/// Eventos emitidos pelo `BatchPanel` para o `App`. /// Eventos emitidos pelo `BatchPanel` para o `App`.
pub enum BatchPanelEvent { pub enum BatchPanelEvent {
/// Novo projeto confirmado pelo usuário — adicionar ao carrinho. /// Novo projeto confirmado pelo usuário — adicionar à fila.
AddItem(Project), AddItem(Project),
/// Substituir o projeto de um item existente (edição confirmada). /// Substituir o projeto de um item existente (edição confirmada).
EditItem(usize, Project), EditItem(usize, Project),
/// Remover item do carinho pelo índice. /// Remover item da fila pelo índice.
RemoveItem(usize), RemoveItem(usize),
/// Iniciar o processamento sequencial de todos os itens aguardando. /// Iniciar o processamento sequencial de todos os itens aguardando.
ProcessAll, ProcessAll,
@@ -58,7 +59,7 @@ struct PendingSubtitle {
// ── BatchPanel ───────────────────────────────────────────────────────────────── // ── BatchPanel ─────────────────────────────────────────────────────────────────
/// Painel de modo lote: exibe o carrinho de projetos e um formulário inline /// Painel de modo lote: exibe a fila de projetos e um formulário inline
/// para adicionar ou editar itens sem abandonar a aba. /// para adicionar ou editar itens sem abandonar a aba.
pub struct BatchPanel { pub struct BatchPanel {
// Estado do formulário de adição / edição // Estado do formulário de adição / edição
@@ -138,18 +139,18 @@ impl BatchPanel {
ui.heading("Modo Lote"); ui.heading("Modo Lote");
ui.label( ui.label(
egui::RichText::new( egui::RichText::new(
"Adicione múltiplos projetos ao carrinho e processe-os sequencialmente.", "Adicione múltiplos projetos à fila e processe-os sequencialmente.",
) )
.weak() .weak()
.italics(), .italics(),
); );
ui.add_space(8.0); ui.add_space(8.0);
// ── Lista de itens do carrinho ───────────────────────────────────────── // ── Lista de itens da fila ─────────────────────────────────────────
if items.is_empty() && !self.form_open { if items.is_empty() && !self.form_open {
ui.label( ui.label(
egui::RichText::new( egui::RichText::new(
"Nenhum item no carrinho. Clique em \"+ Adicionar item\" para começar.", "Nenhum item na fila. Clique em \"+ Adicionar item\" para começar.",
) )
.weak() .weak()
.italics(), .italics(),
@@ -289,7 +290,7 @@ impl BatchPanel {
.fill(egui::Color32::DARK_RED), .fill(egui::Color32::DARK_RED),
) )
.on_hover_text( .on_hover_text(
"Interrompe o item em execução; os demais permanecem no carrinho.", "Interrompe o item em execução; os demais permanecem na fila.",
) )
.clicked() .clicked()
{ {
@@ -485,7 +486,7 @@ impl BatchPanel {
let confirm_label = if is_edit { let confirm_label = if is_edit {
"Salvar alterações" "Salvar alterações"
} else { } else {
"Adicionar ao carrinho" "Adicionar à fila"
}; };
if ui if ui