Add tray About menu, sync-on-start, sync lock
- "Ueber" menu item in tray context menu opens About dialog - New user setting "Beim Start automatisch synchronisieren" syncs all enabled profiles once at app startup - Sync lock prevents concurrent sync runs (timer, manual, on-start cannot overlap - second request is skipped) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
a19a39b7d2
commit
b7cc335184
|
|
@ -7,6 +7,7 @@ namespace StarfaceOutlookSync.Models
|
||||||
public class UserSettings
|
public class UserSettings
|
||||||
{
|
{
|
||||||
public bool StartMinimized { get; set; } = false;
|
public bool StartMinimized { get; set; } = false;
|
||||||
|
public bool SyncOnStart { get; set; } = false;
|
||||||
|
|
||||||
private static readonly string SettingsFile = Path.Combine(
|
private static readonly string SettingsFile = Path.Combine(
|
||||||
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
|
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ namespace StarfaceOutlookSync.UI
|
||||||
private StatusStrip _statusBar;
|
private StatusStrip _statusBar;
|
||||||
private ToolStripStatusLabel _statusLabel;
|
private ToolStripStatusLabel _statusLabel;
|
||||||
private Timer _autoSyncTimer;
|
private Timer _autoSyncTimer;
|
||||||
|
private volatile bool _syncRunning = false;
|
||||||
|
|
||||||
public MainForm()
|
public MainForm()
|
||||||
{
|
{
|
||||||
|
|
@ -38,6 +39,21 @@ namespace StarfaceOutlookSync.UI
|
||||||
ShowInTaskbar = false;
|
ShowInTaskbar = false;
|
||||||
Visible = false;
|
Visible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Beim Start automatisch synchronisieren
|
||||||
|
if (settings.SyncOnStart)
|
||||||
|
{
|
||||||
|
_ = SyncAllProfiles();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task SyncAllProfiles()
|
||||||
|
{
|
||||||
|
var profiles = _profileManager.GetProfiles().Where(p => p.Enabled).ToList();
|
||||||
|
foreach (var profile in profiles)
|
||||||
|
{
|
||||||
|
await RunSync(profile);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void SetVisibleCore(bool value)
|
protected override void SetVisibleCore(bool value)
|
||||||
|
|
@ -158,6 +174,7 @@ namespace StarfaceOutlookSync.UI
|
||||||
if (profiles.Any(p => p.Enabled))
|
if (profiles.Any(p => p.Enabled))
|
||||||
_trayMenu.Items.Add("-");
|
_trayMenu.Items.Add("-");
|
||||||
|
|
||||||
|
_trayMenu.Items.Add("Ueber", null, (s, e) => ShowAbout());
|
||||||
_trayMenu.Items.Add("Beenden", null, (s, e) => ExitApplication());
|
_trayMenu.Items.Add("Beenden", null, (s, e) => ExitApplication());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -318,6 +335,13 @@ namespace StarfaceOutlookSync.UI
|
||||||
|
|
||||||
private async Task RunSync(SyncProfile profile)
|
private async Task RunSync(SyncProfile profile)
|
||||||
{
|
{
|
||||||
|
if (_syncRunning)
|
||||||
|
{
|
||||||
|
SetStatus("Sync laeuft bereits, bitte warten...");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_syncRunning = true;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
SetStatus($"Synchronisiere '{profile.Name}'...");
|
SetStatus($"Synchronisiere '{profile.Name}'...");
|
||||||
|
|
@ -340,6 +364,10 @@ namespace StarfaceOutlookSync.UI
|
||||||
ex.Message, ToolTipIcon.Error);
|
ex.Message, ToolTipIcon.Error);
|
||||||
SetStatus($"Fehler: {ex.Message}");
|
SetStatus($"Fehler: {ex.Message}");
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_syncRunning = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetStatus(string text)
|
private void SetStatus(string text)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ namespace StarfaceOutlookSync.UI
|
||||||
{
|
{
|
||||||
public class SettingsForm : Form
|
public class SettingsForm : Form
|
||||||
{
|
{
|
||||||
private CheckBox _chkStartMinimized;
|
private CheckBox _chkStartMinimized, _chkSyncOnStart;
|
||||||
private Button _btnSave, _btnCancel;
|
private Button _btnSave, _btnCancel;
|
||||||
private readonly UserSettings _settings;
|
private readonly UserSettings _settings;
|
||||||
|
|
||||||
|
|
@ -19,7 +19,7 @@ namespace StarfaceOutlookSync.UI
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
Text = "Einstellungen";
|
Text = "Einstellungen";
|
||||||
Size = new Size(350, 180);
|
Size = new Size(350, 210);
|
||||||
FormBorderStyle = FormBorderStyle.FixedDialog;
|
FormBorderStyle = FormBorderStyle.FixedDialog;
|
||||||
MaximizeBox = false;
|
MaximizeBox = false;
|
||||||
MinimizeBox = false;
|
MinimizeBox = false;
|
||||||
|
|
@ -33,20 +33,27 @@ namespace StarfaceOutlookSync.UI
|
||||||
Checked = _settings.StartMinimized
|
Checked = _settings.StartMinimized
|
||||||
};
|
};
|
||||||
|
|
||||||
|
_chkSyncOnStart = new CheckBox
|
||||||
|
{
|
||||||
|
Text = "Beim Start automatisch synchronisieren",
|
||||||
|
Left = 20, Top = 52, AutoSize = true,
|
||||||
|
Checked = _settings.SyncOnStart
|
||||||
|
};
|
||||||
|
|
||||||
_btnSave = new Button
|
_btnSave = new Button
|
||||||
{
|
{
|
||||||
Text = "Speichern", Left = 80, Top = 100, Width = 85, Height = 28,
|
Text = "Speichern", Left = 80, Top = 130, Width = 85, Height = 28,
|
||||||
DialogResult = DialogResult.None
|
DialogResult = DialogResult.None
|
||||||
};
|
};
|
||||||
_btnSave.Click += (s, e) => Save();
|
_btnSave.Click += (s, e) => Save();
|
||||||
|
|
||||||
_btnCancel = new Button
|
_btnCancel = new Button
|
||||||
{
|
{
|
||||||
Text = "Abbrechen", Left = 174, Top = 100, Width = 85, Height = 28,
|
Text = "Abbrechen", Left = 174, Top = 130, Width = 85, Height = 28,
|
||||||
DialogResult = DialogResult.Cancel
|
DialogResult = DialogResult.Cancel
|
||||||
};
|
};
|
||||||
|
|
||||||
Controls.AddRange(new Control[] { _chkStartMinimized, _btnSave, _btnCancel });
|
Controls.AddRange(new Control[] { _chkStartMinimized, _chkSyncOnStart, _btnSave, _btnCancel });
|
||||||
AcceptButton = _btnSave;
|
AcceptButton = _btnSave;
|
||||||
CancelButton = _btnCancel;
|
CancelButton = _btnCancel;
|
||||||
}
|
}
|
||||||
|
|
@ -54,6 +61,7 @@ namespace StarfaceOutlookSync.UI
|
||||||
private void Save()
|
private void Save()
|
||||||
{
|
{
|
||||||
_settings.StartMinimized = _chkStartMinimized.Checked;
|
_settings.StartMinimized = _chkStartMinimized.Checked;
|
||||||
|
_settings.SyncOnStart = _chkSyncOnStart.Checked;
|
||||||
_settings.Save();
|
_settings.Save();
|
||||||
DialogResult = DialogResult.OK;
|
DialogResult = DialogResult.OK;
|
||||||
Close();
|
Close();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue