Skip to content

Commit 13354a6

Browse files
add logging to all Task.Run sections of code
1 parent 2116379 commit 13354a6

4 files changed

Lines changed: 270 additions & 117 deletions

File tree

ImagePerfect/Helpers/DeepCopy.cs

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Avalonia.Media.Imaging;
22
using ImagePerfect.Models;
33
using ImagePerfect.ViewModels;
4+
using Serilog;
45
using System;
56
using System.Collections.Generic;
67
using System.Collections.ObjectModel;
@@ -9,8 +10,6 @@
910
using System.Runtime.InteropServices;
1011
using System.Text;
1112
using System.Threading.Tasks;
12-
using Avalonia.Platform;
13-
using System.Diagnostics;
1413

1514
namespace ImagePerfect.Helpers
1615
{
@@ -71,13 +70,24 @@ public static async Task<ImageViewModel> CopyImageVm(ImageViewModel imageVm)
7170
// async copy bitmap
7271
if (imageVm.ImageBitmap != null)
7372
{
74-
await Task.Run(() =>
73+
try
7574
{
76-
using var ms = new MemoryStream();
77-
imageVm.ImageBitmap.Save(ms);
78-
ms.Position = 0;
79-
copy.ImageBitmap = new Bitmap(ms);
80-
});
75+
await Task.Run(() =>
76+
{
77+
using var ms = new MemoryStream();
78+
imageVm.ImageBitmap.Save(ms);
79+
ms.Position = 0;
80+
copy.ImageBitmap = new Bitmap(ms);
81+
});
82+
}
83+
catch (Exception ex)
84+
{
85+
Log.Error(ex,
86+
"Failed to deep-copy ImageBitmap for ImageId {ImageId}, Path {Path}",
87+
imageVm.ImageId,
88+
imageVm.ImagePath);
89+
throw;
90+
}
8191
}
8292
copy.Tags = imageVm.Tags.Select(t => new ImageTag
8393
{
@@ -114,13 +124,24 @@ public static async Task<FolderViewModel> CopyFolderVm(FolderViewModel folderVm)
114124
//async copy bitmap
115125
if (folderVm.CoverImageBitmap != null)
116126
{
117-
await Task.Run(() =>
127+
try
118128
{
119-
using var ms = new MemoryStream();
120-
folderVm.CoverImageBitmap.Save(ms);
121-
ms.Position = 0;
122-
copy.CoverImageBitmap = new Bitmap(ms);
123-
});
129+
await Task.Run(() =>
130+
{
131+
using var ms = new MemoryStream();
132+
folderVm.CoverImageBitmap.Save(ms);
133+
ms.Position = 0;
134+
copy.CoverImageBitmap = new Bitmap(ms);
135+
});
136+
}
137+
catch (Exception ex)
138+
{
139+
Log.Error(ex,
140+
"Failed to deep-copy CoverImageBitmap for FolderId {FolderId}, Path {Path}",
141+
folderVm.FolderId,
142+
folderVm.FolderPath);
143+
throw;
144+
}
124145
}
125146
copy.Tags = folderVm.Tags.Select(t => new FolderTag
126147
{

ImagePerfect/ViewModels/ExplorerViewModel.cs

Lines changed: 86 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Microsoft.Extensions.Configuration;
88
using MySqlConnector;
99
using ReactiveUI;
10+
using Serilog;
1011
using System;
1112
using System.Collections.Generic;
1213
using System.Collections.ObjectModel;
@@ -255,42 +256,67 @@ private async Task SetDisplayImagesForRefreshImages((List<Image> images, List<Im
255256
{
256257
List<ImageViewModel> oldImages = _mainWindowViewModel.Images.ToList();
257258
_mainWindowViewModel.Images = new ObservableCollection<ImageViewModel>();
258-
await Task.Run(() =>
259+
try
259260
{
260-
//only dispose of image bitmaps that are not in SessionHistory
261-
foreach (ImageViewModel img in oldImages)
261+
await Task.Run(() =>
262262
{
263-
if (!IsInSessionHistory(img))
263+
//only dispose of image bitmaps that are not in SessionHistory
264+
foreach (ImageViewModel img in oldImages)
264265
{
265-
img.ImageBitmap?.Dispose();
266+
if (!IsInSessionHistory(img))
267+
{
268+
img.ImageBitmap?.Dispose();
269+
}
266270
}
267-
}
268-
});
271+
});
272+
}
273+
catch (Exception ex)
274+
{
275+
Log.Error(ex,
276+
"RefreshImages Failed disposing image bitmaps during refresh. " +
277+
"Filter={Filter}, ImageCount={ImageCount}",
278+
currentFilter,
279+
oldImages.Count);
280+
throw;
281+
}
269282
}
270283
else
271284
{
272285
List<FolderViewModel> oldFolders = _mainWindowViewModel.LibraryFolders.ToList();
273286
List<ImageViewModel> oldImages = _mainWindowViewModel.Images.ToList();
274287
_mainWindowViewModel.Images = new ObservableCollection<ImageViewModel>();
275288
_mainWindowViewModel.LibraryFolders = new ObservableCollection<FolderViewModel>();
276-
await Task.Run(() =>
289+
try
277290
{
278-
foreach (ImageViewModel img in oldImages)
291+
await Task.Run(() =>
279292
{
280-
if (!IsInSessionHistory(img))
293+
foreach (ImageViewModel img in oldImages)
281294
{
282-
img.ImageBitmap?.Dispose();
295+
if (!IsInSessionHistory(img))
296+
{
297+
img.ImageBitmap?.Dispose();
298+
}
283299
}
284-
}
285300

286-
foreach (FolderViewModel folder in oldFolders)
287-
{
288-
if (!IsInSessionHistory(folder))
301+
foreach (FolderViewModel folder in oldFolders)
289302
{
290-
folder.CoverImageBitmap?.Dispose();
303+
if (!IsInSessionHistory(folder))
304+
{
305+
folder.CoverImageBitmap?.Dispose();
306+
}
291307
}
292-
}
293-
});
308+
});
309+
}
310+
catch (Exception ex)
311+
{
312+
Log.Error(ex,
313+
"RefreshImages Failed disposing image/folder bitmaps during refresh. " +
314+
"Filter={Filter}, ImageCount={ImageCount}, FolderCount={FolderCount}",
315+
currentFilter,
316+
oldImages.Count,
317+
oldFolders.Count);
318+
throw;
319+
}
294320
}
295321
displayImages = ImagePagination();
296322
await MapTagsToImagesAddToObservable();
@@ -426,41 +452,66 @@ private async Task SetDisplayFoldersForRefreshFolders((List<Folder> folders, Lis
426452
{
427453
List<FolderViewModel> oldFolders = _mainWindowViewModel.LibraryFolders.ToList();
428454
_mainWindowViewModel.LibraryFolders = new ObservableCollection<FolderViewModel>();
429-
await Task.Run(() =>
455+
try
430456
{
431-
foreach (FolderViewModel folder in oldFolders)
457+
await Task.Run(() =>
432458
{
433-
if (!IsInSessionHistory(folder))
459+
foreach (FolderViewModel folder in oldFolders)
434460
{
435-
folder.CoverImageBitmap?.Dispose();
461+
if (!IsInSessionHistory(folder))
462+
{
463+
folder.CoverImageBitmap?.Dispose();
464+
}
436465
}
437-
}
438-
});
466+
});
467+
}
468+
catch (Exception ex)
469+
{
470+
Log.Error(ex,
471+
"RefreshFolders Failed disposing folder cover image bitmaps during refresh. " +
472+
"Filter={Filter}, FolderCount={FolderCount}",
473+
currentFilter,
474+
oldFolders.Count);
475+
throw;
476+
}
439477
}
440478
else
441479
{
442480
List<FolderViewModel> oldFolders = _mainWindowViewModel.LibraryFolders.ToList();
443481
List<ImageViewModel> oldImages = _mainWindowViewModel.Images.ToList();
444482
_mainWindowViewModel.Images = new ObservableCollection<ImageViewModel>();
445483
_mainWindowViewModel.LibraryFolders = new ObservableCollection<FolderViewModel>();
446-
await Task.Run(() =>
484+
try
447485
{
448-
foreach (ImageViewModel img in oldImages)
486+
await Task.Run(() =>
449487
{
450-
if (!IsInSessionHistory(img))
488+
foreach (ImageViewModel img in oldImages)
451489
{
452-
img.ImageBitmap?.Dispose();
490+
if (!IsInSessionHistory(img))
491+
{
492+
img.ImageBitmap?.Dispose();
493+
}
453494
}
454-
}
455495

456-
foreach (FolderViewModel folder in oldFolders)
457-
{
458-
if (!IsInSessionHistory(folder))
496+
foreach (FolderViewModel folder in oldFolders)
459497
{
460-
folder.CoverImageBitmap?.Dispose();
498+
if (!IsInSessionHistory(folder))
499+
{
500+
folder.CoverImageBitmap?.Dispose();
501+
}
461502
}
462-
}
463-
});
503+
});
504+
}
505+
catch (Exception ex)
506+
{
507+
Log.Error(ex,
508+
"RefreshFolders Failed disposing image/folder bitmaps during refresh. " +
509+
"Filter={Filter}, ImageCount={ImageCount}, FolderCount={FolderCount}",
510+
currentFilter,
511+
oldImages.Count,
512+
oldFolders.Count);
513+
throw;
514+
}
464515
}
465516
displayFolders = FolderPagination();
466517
await MapTagsToFoldersAddToObservable();

0 commit comments

Comments
 (0)