Files
AX-Copilot-Codex/src/AxCopilot/Services/SessionTrackingService.cs

50 lines
1.3 KiB
C#

using Microsoft.Win32;
namespace AxCopilot.Services;
/// <summary>
/// Windows 세션 잠금/해제 이벤트를 추적하여 PC 활성 시간을 기록합니다.
/// </summary>
public sealed class SessionTrackingService : IDisposable
{
private DateTime? _unlockTime;
private bool _disposed;
public SessionTrackingService()
{
// 앱 시작 = 잠금 해제 상태로 간주
_unlockTime = DateTime.Now;
SystemEvents.SessionSwitch += OnSessionSwitch;
}
private void OnSessionSwitch(object sender, SessionSwitchEventArgs e)
{
if (e.Reason == SessionSwitchReason.SessionLock)
{
FlushActiveTime();
}
else if (e.Reason == SessionSwitchReason.SessionUnlock ||
e.Reason == SessionSwitchReason.SessionLogon)
{
_unlockTime = DateTime.Now;
}
}
private void FlushActiveTime()
{
if (!_unlockTime.HasValue) return;
var seconds = (int)(DateTime.Now - _unlockTime.Value).TotalSeconds;
if (seconds > 0)
UsageStatisticsService.AddActiveSeconds(seconds);
_unlockTime = null;
}
public void Dispose()
{
if (_disposed) return;
_disposed = true;
FlushActiveTime();
SystemEvents.SessionSwitch -= OnSessionSwitch;
}
}