feat: add support for last time connected in the status command
This commit is contained in:
parent
aecd3e2bdd
commit
1a361c6bba
@ -114,7 +114,21 @@ public class BotController : IController
|
|||||||
[BotCommand("/status", "Get the status of the alarm")]
|
[BotCommand("/status", "Get the status of the alarm")]
|
||||||
public async Task Status(TextMessage msg, BotCommand ctx)
|
public async Task Status(TextMessage msg, BotCommand ctx)
|
||||||
{
|
{
|
||||||
await ctx.Responder(msg, _controlServer.IsConnected() ? "Alarm is connected 🟢" : "Alarm is not connected 🔴");
|
|
||||||
|
await ctx.Responder(msg, _controlServer.IsConnected() ?
|
||||||
|
$"Alarm is connected 🟢\nLast Contact: {FormatTimeSpan(_controlServer.GetLastContactTime())} ago" :
|
||||||
|
$"Alarm is not connected 🔴\nLast Contact: {FormatTimeSpan(_controlServer.GetLastContactTime())} ago");
|
||||||
|
}
|
||||||
|
|
||||||
|
private string FormatTimeSpan(TimeSpan? timeSpan)
|
||||||
|
{
|
||||||
|
//return a string with the format HH:mm:ss for HH > 0 and mm:ss for HH = 0
|
||||||
|
if(timeSpan == null || timeSpan == TimeSpan.Zero)
|
||||||
|
return "Never";
|
||||||
|
var ts = timeSpan.Value;
|
||||||
|
return ts.Hours > 0 ?
|
||||||
|
$"{ts.Hours:D2}:{ts.Minutes:D2}:{ts.Seconds:D2}" :
|
||||||
|
$"{ts.Minutes:D2}:{ts.Seconds:D2}";
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleReply()
|
private void HandleReply()
|
||||||
|
@ -14,7 +14,7 @@ public class ControlServer : IControlServer
|
|||||||
private Func<SensorEvent, Task>? _onEventRecived;
|
private Func<SensorEvent, Task>? _onEventRecived;
|
||||||
private bool _disarmRequestPending;
|
private bool _disarmRequestPending;
|
||||||
private DateTime _disarmRequestTime;
|
private DateTime _disarmRequestTime;
|
||||||
private DateTime _lastContactTime;
|
private DateTime? _lastContactTime;
|
||||||
|
|
||||||
public ControlServer(ILogger<ControlServer> logger, IOptions<ControlServerOptions> options)
|
public ControlServer(ILogger<ControlServer> logger, IOptions<ControlServerOptions> options)
|
||||||
{
|
{
|
||||||
@ -201,7 +201,17 @@ public class ControlServer : IControlServer
|
|||||||
public bool IsConnected()
|
public bool IsConnected()
|
||||||
{
|
{
|
||||||
//Check if the last contact time was less than 5 minutes ago
|
//Check if the last contact time was less than 5 minutes ago
|
||||||
return (DateTime.Now - _lastContactTime).TotalMinutes < 1;
|
if(_lastContactTime is null)
|
||||||
|
return false;
|
||||||
|
return (DateTime.Now - _lastContactTime.Value).TotalMinutes < 1;
|
||||||
}
|
}
|
||||||
|
//function to return how long ago was the last contact as timespan
|
||||||
|
public TimeSpan? GetLastContactTime()
|
||||||
|
{
|
||||||
|
if(_lastContactTime is null)
|
||||||
|
return null;
|
||||||
|
return DateTime.Now - _lastContactTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -8,4 +8,5 @@ public interface IControlServer : IHostedService
|
|||||||
public void AuthorizeEvent(long eventId);
|
public void AuthorizeEvent(long eventId);
|
||||||
public void RequestDisarm();
|
public void RequestDisarm();
|
||||||
public bool IsConnected();
|
public bool IsConnected();
|
||||||
|
public TimeSpan? GetLastContactTime();
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user