|
@@ -7,15 +7,14 @@ using PixiEditor.Extensions.Common.UserPreferences;
|
|
using PixiEditor.Helpers;
|
|
using PixiEditor.Helpers;
|
|
using PixiEditor.Models.IO;
|
|
using PixiEditor.Models.IO;
|
|
using PixiEditor.ViewModels.SubViewModels.Document;
|
|
using PixiEditor.ViewModels.SubViewModels.Document;
|
|
-using Timer = System.Timers.Timer;
|
|
|
|
|
|
|
|
namespace PixiEditor.Models.DocumentModels.Public;
|
|
namespace PixiEditor.Models.DocumentModels.Public;
|
|
|
|
|
|
internal class AutosaveDocumentViewModel : NotifyableObject
|
|
internal class AutosaveDocumentViewModel : NotifyableObject
|
|
{
|
|
{
|
|
- private readonly Timer savingTimer;
|
|
|
|
- private readonly Timer updateTextTimer;
|
|
|
|
- private readonly Timer busyTimer;
|
|
|
|
|
|
+ private readonly DispatcherTimer savingTimer;
|
|
|
|
+ private readonly DispatcherTimer updateTextTimer;
|
|
|
|
+ private readonly DispatcherTimer busyTimer;
|
|
private bool saveAfterNextFinish;
|
|
private bool saveAfterNextFinish;
|
|
private int savingFailed;
|
|
private int savingFailed;
|
|
private DateTime nextSave;
|
|
private DateTime nextSave;
|
|
@@ -95,24 +94,25 @@ internal class AutosaveDocumentViewModel : NotifyableObject
|
|
{
|
|
{
|
|
Document = document;
|
|
Document = document;
|
|
tempGuid = Guid.NewGuid();
|
|
tempGuid = Guid.NewGuid();
|
|
- savingTimer = new Timer();
|
|
|
|
- updateTextTimer = new Timer(TimeSpan.FromSeconds(3.8));
|
|
|
|
|
|
|
|
- savingTimer.Elapsed += (_, _) => TryAutosave();
|
|
|
|
- savingTimer.AutoReset = false;
|
|
|
|
|
|
+ var dispatcher = Application.Current.Dispatcher;
|
|
|
|
+
|
|
|
|
+ updateTextTimer = new DispatcherTimer(DispatcherPriority.Normal, dispatcher) { Interval = TimeSpan.FromSeconds(3.8) };
|
|
|
|
+ updateTextTimer.Tick += (_, _) => SetAutosaveText();
|
|
|
|
+
|
|
|
|
+ savingTimer = new DispatcherTimer(DispatcherPriority.Normal);
|
|
|
|
+ savingTimer.Tick += (_, _) => { savingTimer.Stop(); TryAutosave(); };
|
|
|
|
|
|
- busyTimer = new Timer(TimeSpan.FromMilliseconds(80));
|
|
|
|
- busyTimer.AutoReset = false;
|
|
|
|
- busyTimer.Elapsed += (_, _) =>
|
|
|
|
|
|
+ busyTimer = new DispatcherTimer(DispatcherPriority.Normal, dispatcher) { Interval = TimeSpan.FromMilliseconds(80) };
|
|
|
|
+ busyTimer.Tick += (_, _) =>
|
|
{
|
|
{
|
|
|
|
+ busyTimer!.Stop();
|
|
Document.Busy = true;
|
|
Document.Busy = true;
|
|
};
|
|
};
|
|
|
|
|
|
- updateTextTimer.Elapsed += (_, _) => SetAutosaveText();
|
|
|
|
-
|
|
|
|
var preferences = IPreferences.Current;
|
|
var preferences = IPreferences.Current;
|
|
|
|
|
|
- preferences.AddCallback<double>(PreferencesConstants.AutosavePeriodMinutes, (v) => AutosavePeriodChanged(v, documentEnabled));
|
|
|
|
|
|
+ preferences!.AddCallback<double>(PreferencesConstants.AutosavePeriodMinutes, (v) => AutosavePeriodChanged(v, documentEnabled));
|
|
AutosavePeriodChanged(preferences.GetPreference(PreferencesConstants.AutosavePeriodMinutes, PreferencesConstants.AutosavePeriodDefault), documentEnabled);
|
|
AutosavePeriodChanged(preferences.GetPreference(PreferencesConstants.AutosavePeriodMinutes, PreferencesConstants.AutosavePeriodDefault), documentEnabled);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -302,7 +302,7 @@ internal class AutosaveDocumentViewModel : NotifyableObject
|
|
private void RestartTimers()
|
|
private void RestartTimers()
|
|
{
|
|
{
|
|
savingTimer.Start();
|
|
savingTimer.Start();
|
|
- nextSave = DateTime.Now + TimeSpan.FromMilliseconds(savingTimer.Interval);
|
|
|
|
|
|
+ nextSave = DateTime.Now + savingTimer.Interval;
|
|
updateTextTimer.Start();
|
|
updateTextTimer.Start();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -310,8 +310,8 @@ internal class AutosaveDocumentViewModel : NotifyableObject
|
|
{
|
|
{
|
|
if ((int)minutes == -1 || !documentEnabled)
|
|
if ((int)minutes == -1 || !documentEnabled)
|
|
{
|
|
{
|
|
- savingTimer.Enabled = false;
|
|
|
|
- updateTextTimer.Enabled = false;
|
|
|
|
|
|
+ savingTimer.IsEnabled = false;
|
|
|
|
+ updateTextTimer.IsEnabled = false;
|
|
saveAfterNextFinish = false;
|
|
saveAfterNextFinish = false;
|
|
|
|
|
|
LocalizedString menuText = documentEnabled ? string.Empty : "AUTOSAVE_DISABLED";
|
|
LocalizedString menuText = documentEnabled ? string.Empty : "AUTOSAVE_DISABLED";
|
|
@@ -323,7 +323,7 @@ internal class AutosaveDocumentViewModel : NotifyableObject
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- var timerEnabled = savingTimer.Enabled;
|
|
|
|
|
|
+ var timerEnabled = savingTimer.IsEnabled;
|
|
|
|
|
|
if ((int)AutosavePeriodMinutes == -1 || !Enabled)
|
|
if ((int)AutosavePeriodMinutes == -1 || !Enabled)
|
|
{
|
|
{
|
|
@@ -331,16 +331,16 @@ internal class AutosaveDocumentViewModel : NotifyableObject
|
|
updateTextTimer.Start();
|
|
updateTextTimer.Start();
|
|
}
|
|
}
|
|
|
|
|
|
- savingTimer.Enabled = false;
|
|
|
|
|
|
+ savingTimer.IsEnabled = false;
|
|
|
|
|
|
var timeSpan = TimeSpan.FromMinutes(minutes);
|
|
var timeSpan = TimeSpan.FromMinutes(minutes);
|
|
- savingTimer.Interval = timeSpan.TotalMilliseconds;
|
|
|
|
|
|
+ savingTimer.Interval = timeSpan;
|
|
AutosavePeriodMinutes = minutes;
|
|
AutosavePeriodMinutes = minutes;
|
|
|
|
|
|
- savingTimer.Enabled = timerEnabled;
|
|
|
|
|
|
+ savingTimer.IsEnabled = timerEnabled;
|
|
|
|
|
|
nextSave = DateTime.Now + timeSpan;
|
|
nextSave = DateTime.Now + timeSpan;
|
|
- if (updateTextTimer.Enabled)
|
|
|
|
|
|
+ if (updateTextTimer.IsEnabled)
|
|
{
|
|
{
|
|
SetAutosaveText();
|
|
SetAutosaveText();
|
|
}
|
|
}
|
|
@@ -354,12 +354,9 @@ internal class AutosaveDocumentViewModel : NotifyableObject
|
|
|
|
|
|
private void UpdateMainMenuTextSave(LocalizedString text, string iconText, Brush brush, bool pulse)
|
|
private void UpdateMainMenuTextSave(LocalizedString text, string iconText, Brush brush, bool pulse)
|
|
{
|
|
{
|
|
- Application.Current.Dispatcher.Invoke(() =>
|
|
|
|
- {
|
|
|
|
- MainMenuText = text;
|
|
|
|
- MainMenuIconText = iconText;
|
|
|
|
- MainMenuBrush = brush;
|
|
|
|
- MainMenuPulse = pulse;
|
|
|
|
- });
|
|
|
|
|
|
+ MainMenuText = text;
|
|
|
|
+ MainMenuIconText = iconText;
|
|
|
|
+ MainMenuBrush = brush;
|
|
|
|
+ MainMenuPulse = pulse;
|
|
}
|
|
}
|
|
}
|
|
}
|