diff --git a/BackgroundBuilder.csproj b/BackgroundBuilder.csproj
index a438ff2..04bfbc3 100644
--- a/BackgroundBuilder.csproj
+++ b/BackgroundBuilder.csproj
@@ -15,6 +15,7 @@
+
diff --git a/Services/ImageService.cs b/Services/ImageService.cs
index 0274814..50bee1e 100644
--- a/Services/ImageService.cs
+++ b/Services/ImageService.cs
@@ -11,7 +11,7 @@ namespace BackgroundBuilder.Services
{
// no longer injected — use a private constant
- private static readonly Thickness OverlayOffset = new(10, 58, 10, 58);
+ private static readonly Thickness OverlayOffset = new(10, 53, 10, 53);
public async Task LoadAsync(string path)
{
@@ -88,8 +88,8 @@ namespace BackgroundBuilder.Services
x = width - scaledWidth - offset.Right;
y = height - scaledHeight - offset.Bottom;
- gridWidth = scaledWidth + offset.Right;
- gridHeight = scaledHeight + offset.Bottom;
+ gridWidth = scaledWidth;
+ gridHeight = scaledHeight;
}
else
{
@@ -162,16 +162,23 @@ namespace BackgroundBuilder.Services
///
private static void SaveBitmap(RenderTargetBitmap bitmap, string path)
{
- var directory = Path.GetDirectoryName(path);
- if (!Directory.Exists(directory))
+ try
{
- Directory.CreateDirectory(directory!);
- }
+ var directory = Path.GetDirectoryName(path);
+ if (!Directory.Exists(directory))
+ {
+ Directory.CreateDirectory(directory!);
+ }
- using var fs = new FileStream(path, FileMode.Create, FileAccess.Write);
- var encoder = new PngBitmapEncoder();
- encoder.Frames.Add(BitmapFrame.Create(bitmap));
- encoder.Save(fs);
+ using var fs = new FileStream(path, FileMode.Create, FileAccess.Write);
+ var encoder = new PngBitmapEncoder();
+ encoder.Frames.Add(BitmapFrame.Create(bitmap));
+ encoder.Save(fs);
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show($"Erro ao salvar a imagem:\n{ex.Message}\n\nCaminho: {path}");
+ }
}
}
}
diff --git a/ViewModels/MainWindowViewModel.cs b/ViewModels/MainWindowViewModel.cs
index 9893804..a58aac5 100644
--- a/ViewModels/MainWindowViewModel.cs
+++ b/ViewModels/MainWindowViewModel.cs
@@ -15,6 +15,7 @@ using BackgroundBuilder.Models;
using BackgroundBuilder.Repositories;
using BackgroundBuilder.Services;
using BackgroundBuilder.Utils;
+using ClosedXML.Excel;
using Microsoft.Win32;
namespace BackgroundBuilder.ViewModels
@@ -29,8 +30,8 @@ namespace BackgroundBuilder.ViewModels
public ObservableCollection Comando { get; } = [];
public ObservableCollection Aniversarios { get; } = [];
- public ObservableCollection ContatosSemCMDFirstHalf { get; } = new();
- public ObservableCollection ContatosSemCMDSecondHalf { get; } = new();
+ public ObservableCollection ContatosSemCMDFirstHalf { get; } = [];
+ public ObservableCollection ContatosSemCMDSecondHalf { get; } = [];
private Contato? _selectedContato;
@@ -60,6 +61,7 @@ namespace BackgroundBuilder.ViewModels
public ICommand RefreshCommand { get; }
public RelayCommand UpdateCommand { get; }
public RelayCommand ExportImageCommand { get; }
+ public RelayCommand ImportExcelCommand { get; }
public MainWindowViewModel(
IContatoRepository repo,
@@ -78,6 +80,7 @@ namespace BackgroundBuilder.ViewModels
RefreshCommand = new RelayCommand(async _ => await LoadRawAsync());
UpdateCommand = new RelayCommand(async _ => await UpdateAsync(), _ => SelectedContatos != null);
ExportImageCommand = new RelayCommand(async _ => await RenderImageAsync(), _ => BackgroundImage != null && OverlayElement != null);
+ ImportExcelCommand = new RelayCommand(async _ => await ImportExcelAsync());
}
public void RefreshTaskbarInfo()
@@ -161,7 +164,7 @@ namespace BackgroundBuilder.ViewModels
&& OverlayElement is FrameworkElement overlay
&& BackgroundImage is BitmapImage bg)
{
- await _imageService.SaveAsync(overlay, bg, dlg.FileName, dlg.FileName.Replace(".", "_1."));
+ await _imageService.SaveAsync(overlay, bg, dlg.FileName, dlg.FileName.Replace(".png", "_1.png"));
}
}
@@ -239,5 +242,52 @@ namespace BackgroundBuilder.ViewModels
ContatosSemCMDSecondHalf.Add(list[i]);
}
}
+
+ private async Task ImportExcelAsync()
+ {
+ var openFileDialog = new OpenFileDialog
+ {
+ Filter = "Excel Files|*.xlsx;*.xls"
+ };
+ if (openFileDialog.ShowDialog() != true)
+ return;
+
+ var filePath = openFileDialog.FileName;
+ var ramais = new List();
+
+ using (var workbook = new XLWorkbook(filePath))
+ {
+ var ws = workbook.Worksheets.First();
+ var table = ws.Cell("B2").CurrentRegion;
+
+ foreach (var row in table.Rows().Skip(1)) // Skip header
+ {
+ var contato = new Contato
+ {
+ Ramal = row.Cell(3).GetString(),
+ Nome = row.Cell(1).GetString(),
+ Email = row.Cell(2).GetString(),
+ Area = row.Cell(4).GetString(),
+ IsComando = false
+ };
+ ramais.Add(contato);
+ }
+
+ table = ws.Cell("G2").CurrentRegion;
+
+ foreach (var row in table.Rows().Skip(1)) // Skip header
+ {
+ ramais.Find(x => x.Nome == row.Cell(1).GetString()).Aniversario = row.Cell(2).GetDateTime();
+ }
+
+ }
+
+ foreach (var contato in ramais)
+ {
+ await _repo.InsertUpdateAsync(contato);
+ }
+
+ await LoadRawAsync(); // Refresh UI
+ }
}
}
\ No newline at end of file
diff --git a/Views/MainWindow.xaml b/Views/MainWindow.xaml
index 419ed06..07d295b 100644
--- a/Views/MainWindow.xaml
+++ b/Views/MainWindow.xaml
@@ -135,6 +135,7 @@
+
+