Skip to content

Commit b8132b2

Browse files
committed
Added option to reset timers after idling
1 parent 8520e1e commit b8132b2

5 files changed

Lines changed: 40 additions & 2 deletions

File tree

VisualStudioDiscordRPC.Shared/DiscordRpcController.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using VisualStudioDiscordRPC.Shared.Nests;
88
using VisualStudioDiscordRPC.Shared.Nests.Base;
99
using VisualStudioDiscordRPC.Shared.Observers;
10+
using VisualStudioDiscordRPC.Shared.Plugs.TimerPlugs;
1011

1112
namespace VisualStudioDiscordRPC.Shared
1213
{
@@ -25,6 +26,7 @@ public class DiscordRpcController
2526
private readonly LocalizationService _localizationService;
2627
private readonly SettingsService _settingsService;
2728
private readonly VsObserver _vsObserver;
29+
private readonly PlugService _plugService;
2830

2931
private readonly RichPresence _sharedRichPresence;
3032
private readonly object _richPresenceSync = new object();
@@ -103,6 +105,7 @@ public DiscordRpcController(int updateMillisecondsTimeout)
103105
{
104106
_settingsService = ServiceRepository.Default.GetService<SettingsService>();
105107
_vsObserver = ServiceRepository.Default.GetService<VsObserver>();
108+
_plugService = ServiceRepository.Default.GetService<PlugService>();
106109

107110
var applicationId = _settingsService.Read<string>(SettingsKeys.ApplicationID);
108111

@@ -223,6 +226,8 @@ private void OnTextEditorLineChanged(EnvDTE.TextPoint startPoint, EnvDTE.TextPoi
223226
{
224227
if (_enabled && _isIdling)
225228
SetDirty();
229+
else
230+
_lastDirtyTime = DateTime.Now;
226231
}
227232

228233
public void RefreshAll()
@@ -237,12 +242,17 @@ public void RefreshAll()
237242

238243
private void SetDirty()
239244
{
245+
bool wasIdling = _isIdling;
246+
240247
lock (_dirtyFlagSync)
241248
{
242249
_isDirty = true;
243250
_isIdling = false;
244251
_lastDirtyTime = DateTime.Now;
245252
}
253+
254+
if (wasIdling)
255+
OnEndIdling();
246256
}
247257

248258
private void SendRichPresenceData()
@@ -304,6 +314,19 @@ private void OnRpcUpdate()
304314
private void OnIdle()
305315
{
306316
_discordRpcClient.SetPresence(IdlingRichPresence);
317+
318+
}
319+
320+
private void OnEndIdling()
321+
{
322+
bool resetTimersAfterIdling = _settingsService.Read<bool>(SettingsKeys.ResetTimersAfterIdling);
323+
if (!resetTimersAfterIdling)
324+
return;
325+
326+
var timerPlugs = _plugService.GetPlugsOfType<BaseTimerPlug>();
327+
328+
foreach (var timerPlug in timerPlugs)
329+
timerPlug.SyncTimestamp();
307330
}
308331
}
309332
}

VisualStudioDiscordRPC.Shared/Plugs/TimerPlugs/BaseTimerPlug.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ protected BaseTimerPlug()
1111
SyncTimestamp();
1212
}
1313

14-
protected void SyncTimestamp()
14+
public void SyncTimestamp()
1515
{
1616
_changeTimestamp = Timestamps.Now;
1717
Update();

VisualStudioDiscordRPC.Shared/SettingsKeys.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@ public static class SettingsKeys
2121
public const string SecretSolutions = "SecretSolutions";
2222
public const string DetectIdling = "DetectIdling";
2323
public const string IdleTime = "IdleTime";
24+
public const string ResetTimersAfterIdling = "ResetTimersAfterIdling";
2425
}
2526
}

VisualStudioDiscordRPC.Shared/ViewModels/SettingsViewModel.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@ public bool DetectIdlingEnabled
4242
}
4343
}
4444

45+
public bool ResetTimersAfterIdling
46+
{
47+
get => _settingsService.Read<bool>(SettingsKeys.ResetTimersAfterIdling);
48+
set
49+
{
50+
_settingsService.Set(SettingsKeys.ResetTimersAfterIdling, value);
51+
OnPropertyChanged(nameof(ResetTimersAfterIdling));
52+
}
53+
}
54+
4555
public string IdleTime
4656
{
4757
get => _settingsService.Read(SettingsKeys.IdleTime, SettingsDefaults.DefaultIdleTime).ToString();

VisualStudioDiscordRPC.Shared/Views/SettingsWindow.xaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,11 @@
116116
IsChecked="{Binding DetectIdlingEnabled}">
117117
<TextBlock Text="Detect idling"/>
118118
</CheckBox>
119-
119+
<CheckBox Margin="5"
120+
IsEnabled="{Binding DetectIdlingEnabled}"
121+
IsChecked="{Binding ResetTimersAfterIdling}">
122+
<TextBlock Text="Reset timers after idling"/>
123+
</CheckBox>
120124
<TextBlock Text="Idle time (minutes):"/>
121125
<TextBox Name="IdleTimeTextBox"
122126
IsEnabled="{Binding DetectIdlingEnabled}"

0 commit comments

Comments
 (0)