Compare commits

..

3 Commits

5 changed files with 70 additions and 5 deletions

View File

@@ -129,8 +129,8 @@ public partial class ContentPageViewModel : PageViewModel, ICommandBarContext
UpdateDetails();
model.ItemsChanged += Model_ItemsChanged;
FetchContent();
model.ItemsChanged += Model_ItemsChanged;
DoOnUiThread(
() =>

View File

@@ -44,9 +44,9 @@ public partial class ContentTreeViewModel(ITreeContent _tree, WeakReference<IPag
UpdateProperty(nameof(Root));
}
FetchContent();
model.PropChanged += Model_PropChanged;
model.ItemsChanged += Model_ItemsChanged;
FetchContent();
}
// Theoretically, we should unify this with the one in CommandPalettePageViewModelFactory

View File

@@ -209,8 +209,8 @@ public sealed partial class DockBandViewModel : ExtensionObjectViewModel
var list = command.Model.Unsafe as IListPage;
if (list is not null)
{
list.ItemsChanged += HandleItemsChanged;
InitializeFromList(list);
list.ItemsChanged += HandleItemsChanged;
}
else
{

View File

@@ -957,8 +957,8 @@ public partial class ListViewModel : PageViewModel, IDisposable
Filters?.InitializeProperties();
UpdateProperty(nameof(Filters));
model.ItemsChanged += Model_ItemsChanged;
FetchItems(true);
model.ItemsChanged += Model_ItemsChanged;
}
private static IGridPropertiesViewModel? LoadGridPropertiesViewModel(IGridProperties? gridProperties)

View File

@@ -10,6 +10,7 @@ using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Timers;
using global::PowerToys.GPOWrapper;
using ManagedCommon;
using Microsoft.PowerToys.Settings.UI.Library;
@@ -18,7 +19,7 @@ using Microsoft.PowerToys.Settings.UI.Library.Interfaces;
namespace Microsoft.PowerToys.Settings.UI.ViewModels;
public partial class ImageResizerViewModel : Observable
public partial class ImageResizerViewModel : Observable, IDisposable
{
private static readonly string DefaultPresetNamePrefix =
Helpers.ResourceLoaderInstance.ResourceLoader.GetString("ImageResizer_DefaultSize_NewSizePrefix");
@@ -43,6 +44,13 @@ public partial class ImageResizerViewModel : Observable
/// </summary>
private readonly ImageSize _customSize;
// Delay saving of settings in order to avoid calling save multiple times and hitting file in use exception. If there is no other request to save settings in given interval, we proceed to save it; otherwise, we schedule saving it after this interval
private const int SaveSettingsDelayInMs = 500;
private readonly System.Threading.Lock _delayedActionLock = new System.Threading.Lock();
private Timer _delayedTimer;
private bool _disposed;
private GeneralSettings GeneralSettingsConfig { get; set; }
private readonly SettingsUtils _settingsUtils;
@@ -98,6 +106,11 @@ public partial class ImageResizerViewModel : Observable
_customSize = Settings.Properties.ImageresizerCustomSize.Value;
_isInitializing = false;
_delayedTimer = new Timer();
_delayedTimer.Interval = SaveSettingsDelayInMs;
_delayedTimer.Elapsed += DelayedTimer_Tick;
_delayedTimer.AutoReset = false;
}
private void InitializeEnabledValue()
@@ -337,9 +350,61 @@ public partial class ImageResizerViewModel : Observable
public void SizePropertyChanged(object sender, PropertyChangedEventArgs e)
{
ScheduleSaveImageSizes();
}
private void ScheduleSaveImageSizes()
{
lock (_delayedActionLock)
{
if (_disposed)
{
return;
}
if (_delayedTimer.Enabled)
{
_delayedTimer.Stop();
}
_delayedTimer.Start();
}
}
private void DelayedTimer_Tick(object sender, ElapsedEventArgs e)
{
lock (_delayedActionLock)
{
_delayedTimer.Stop();
}
SaveImageSizes();
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
lock (_delayedActionLock)
{
if (!_disposed)
{
if (disposing)
{
_delayedTimer?.Stop();
_delayedTimer?.Dispose();
_delayedTimer = null;
}
_disposed = true;
}
}
}
private string GenerateNameForNewSize(string namePrefix)
{
int newSizeCounter = 0;