Made improvements on loading photos

This commit is contained in:
Ano-sys
2026-03-21 14:40:30 +01:00
parent 7f632531fd
commit 54268fc0b4
8 changed files with 189 additions and 53 deletions
+23 -27
View File
@@ -17,20 +17,28 @@ namespace Photos.ViewModels;
public partial class MainWindowViewModel : ViewModelBase
{
public ObservableCollection<Photo> Photos { get; private set; } = [];
private IFolderPickerService _folderPickerService;
[ObservableProperty] private ObservableCollection<Photo> _photos = [];
[ObservableProperty] private Photo? _selectedPhoto;
public string LibraryPath { get; private set; } = string.Empty;
public MainWindowViewModel()
public MainWindowViewModel(IFolderPickerService folderPickerService)
{
_folderPickerService = folderPickerService;
}
void OpenDirectory()
public async Task OpenDirectory()
{
var folder = await _folderPickerService.PickFolderAsync();
if (folder is null) return;
foreach(var p in Photos) p.Dispose();
LibraryPath = folder;
await AddPhotosAsync(folder);
}
private void SanitizeFiles(List<string> files, IEnumerable<string> extensions)
@@ -40,27 +48,11 @@ public partial class MainWindowViewModel : ViewModelBase
{
try
{
var files = await Task.Run(() =>
{
var files = Directory.GetFiles(path, "*", SearchOption.AllDirectories).ToList();
SanitizeFiles(files, [".png", ".jpg", ".jpeg"]);
return files;
});
var photoPaths = PhotoExtension.GetPhotoPathsFromDirectory(path);
if (photoPaths is null) return;
var photosToAdd = await Task.Run(() =>
{
var photos = new List<Photo>();
foreach (var file in files)
{
photos.Add(new Photo(file, LibraryPath));
}
return photos;
});
await Dispatcher.UIThread.InvokeAsync(() =>
{
foreach (var photo in photosToAdd) Photos.Add(photo);
});
await Task.Run(() => PhotoExtension.CreateAndAddPhotosToList(photoPaths, path, Photos));
foreach (var p in Photos) _ = p.LoadPreviewImage();
}
catch (Exception ex)
{
@@ -74,7 +66,7 @@ public partial class MainWindowViewModel : ViewModelBase
if (files is null || files.Length == 0) return;
var localPath = Path.GetDirectoryName(files[0].TryGetLocalPath());
if (String.IsNullOrWhiteSpace(localPath)) return;
if (string.IsNullOrWhiteSpace(localPath)) return;
LibraryPath = localPath;
Photos.Clear();
@@ -82,14 +74,18 @@ public partial class MainWindowViewModel : ViewModelBase
await AddPhotosAsync(localPath);
}
public void PhotoClicked(PointerReleasedEventArgs e)
public async Task PhotoClicked(PointerReleasedEventArgs e)
{
if(e.Source is not Image img) return;
SelectedPhoto = Photos.FirstOrDefault(x => x.Source == img.Source);
SelectedPhoto = Photos.FirstOrDefault(x => x.PreviewImage == img.Source);
if (SelectedPhoto is null) return;
await SelectedPhoto.LoadFullImage();
}
public void SelectedPhotoClicked()
{
if (SelectedPhoto is null) return;
SelectedPhoto.FullImage = null;
SelectedPhoto = null;
}
}