Adiciona funcionalidade de upload de imagens PNG

Foi adicionada a funcionalidade de upload de imagens PNG para um
local de rede específico. No backend, a interface `IImageService`
e o serviço `ImageService` foram atualizados com o método
assíncrono `MoveFile`, que move arquivos para o destino desejado,
criando diretórios se necessário e exibindo mensagens de erro em
caso de falha.

No frontend, foi adicionado um botão "Upload" à interface gráfica
(`MainWindow.xaml`), vinculado ao comando `UploadImageCommand` no
`MainWindowViewModel`. Este comando utiliza o método privado
`UploadImageAsync` para abrir uma caixa de diálogo, permitir a
seleção de um arquivo PNG e mover o arquivo utilizando o serviço
de imagens. Feedback ao usuário é exibido para sucesso ou erro.
This commit is contained in:
Giuliano Paschoalino 2025-08-28 15:24:44 -03:00
parent 47ac74d87b
commit 2636848f6d
4 changed files with 57 additions and 1 deletions

View File

@ -22,5 +22,6 @@ namespace BackgroundBuilder.Services
BitmapImage background,
string primaryPath,
string? overlayPath = null);
Task MoveFile(string sourcePath);
}
}

View File

@ -43,10 +43,27 @@ namespace BackgroundBuilder.Services
var compositeBmp = RenderComposite(overlay, background, OverlayOffset);
SaveBitmap(compositeBmp, primaryPath);
SaveBitmap(compositeBmp, "\\\\SRV-DADOS\\Wallpaper$\\Wallpaper.png");
await Task.FromResult((primaryPath, savedOverlayPath));
}
public async Task MoveFile(string sourcePath)
{
string destinationPath = "\\\\SRV-DADOS\\Wallpaper$\\Wallpaper.png";
try
{
var directory = Path.GetDirectoryName(destinationPath);
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory!);
}
File.Copy(sourcePath, destinationPath, true);
}
catch (Exception ex)
{
MessageBox.Show($"Erro ao mover a imagem:\n{ex.Message}\n\nCaminho: {sourcePath} para {destinationPath}");
}
await Task.CompletedTask;
}
/// <summary>
/// Renders a <paramref name="background"/> plus the <paramref name="mainGrid"/>

View File

@ -62,6 +62,7 @@ namespace BackgroundBuilder.ViewModels
public RelayCommand UpdateCommand { get; }
public RelayCommand ExportImageCommand { get; }
public RelayCommand ImportExcelCommand { get; }
public RelayCommand UploadImageCommand { get; }
public MainWindowViewModel(
IContatoRepository repo,
@ -81,6 +82,7 @@ namespace BackgroundBuilder.ViewModels
UpdateCommand = new RelayCommand(async _ => await UpdateAsync(), _ => SelectedContatos != null);
ExportImageCommand = new RelayCommand(async _ => await RenderImageAsync(), _ => BackgroundImage != null && OverlayElement != null);
ImportExcelCommand = new RelayCommand(async _ => await ImportExcelAsync());
UploadImageCommand = new RelayCommand(async _ => await UploadImageAsync());
}
public void RefreshTaskbarInfo()
@ -181,6 +183,33 @@ namespace BackgroundBuilder.ViewModels
}
}
}
private async Task UploadImageAsync()
{
var dlg = new OpenFileDialog
{
Filter = "PNG Image|*.png"
};
if (dlg.ShowDialog() == true)
{
try
{
await _imageService.MoveFile(dlg.FileName);
MessageBox.Show(
"Concluído!",
"Confirm Upload",
MessageBoxButton.OK,
MessageBoxImage.Information);
}
catch (Exception ex)
{
MessageBox.Show(
$"Erro ao mover a imagem:\n{ex.Message}",
"Upload Failed",
MessageBoxButton.OK,
MessageBoxImage.Error);
}
}
}
public async Task UpdateAsync()
{

View File

@ -136,6 +136,7 @@
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!-- Row 2: Image-->
<Rectangle Grid.Column="0"
@ -204,6 +205,14 @@
Padding="5"
Height="40"
Margin="5"/>
<Button Content="Upload"
Command="{Binding UploadImageCommand}"
CommandParameter="MainGrid"
Grid.Column = "9"
FontWeight="Bold"
Padding="5"
Height="40"
Margin="5"/>
</Grid>
</Grid>
</Window>