Made improvements on loading photos
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user