Files
swyx/src/SwyxTray/Swyx/LineStateExtensions.cs
T
Sven 78b17a1350 SwyxTray und Firefox-Plugin in das Repository aufnehmen
Windows-Tray-Anwendung (CLMgr-Anbindung an SwyxIt!) samt WebSocket-Zugang,
Firefox-Erweiterung und Browser-Beispielclient.
2026-08-21 11:33:52 +02:00

88 lines
3.5 KiB
C#

using IpPbx.CLMgrLib;
namespace SwyxTray.Swyx;
/// <summary>
/// Einordnung der <see cref="CLMgrLineStates"/> aus der CLMgr-TypeLib.
/// Die Werte stammen direkt aus dem Wrapper (Interop.CLMgr), sind also nicht
/// geraten. Die vielen <c>LSWaitingFor*</c>-Werte sind Uebergangszustaende der
/// CLMgr-Zustandsmaschine und werden hier bewusst als "belegt" behandelt.
/// </summary>
internal static class LineStateExtensions
{
/// <summary>Eingehender Ruf, der noch nicht angenommen wurde.</summary>
public static bool IsRinging(this CLMgrLineStates state) => state switch
{
CLMgrLineStates.LSRinging => true,
CLMgrLineStates.LSKnocking => true, // zweiter Ruf waehrend eines Gespraechs
CLMgrLineStates.LSActiveAlerting => true,
CLMgrLineStates.LSActiveAlertingDC => true,
_ => false
};
/// <summary>Bestehende Sprechverbindung.</summary>
public static bool IsActive(this CLMgrLineStates state) => state switch
{
CLMgrLineStates.LSActive => true,
CLMgrLineStates.LSConferenceActive => true,
CLMgrLineStates.LSDirectCall => true,
CLMgrLineStates.LSTransferring => true,
_ => false
};
/// <summary>Ausgehender Ruf im Aufbau.</summary>
public static bool IsDialing(this CLMgrLineStates state) => state switch
{
CLMgrLineStates.LSDialing => true,
CLMgrLineStates.LSAlerting => true,
CLMgrLineStates.LSHookOffInternal => true,
CLMgrLineStates.LSHookOffExternal => true,
CLMgrLineStates.LSBusy => true,
_ => false
};
public static bool IsOnHold(this CLMgrLineStates state) => state switch
{
CLMgrLineStates.LSOnHold => true,
CLMgrLineStates.LSConferenceOnHold => true,
_ => false
};
/// <summary>Leitung frei — wird in der Uebersicht ausgeblendet.</summary>
public static bool IsIdle(this CLMgrLineStates state) => state switch
{
CLMgrLineStates.LSInactive => true,
CLMgrLineStates.LSTerminated => true,
CLMgrLineStates.LSDisabled => true,
CLMgrLineStates.LSNone => true,
_ => false
};
/// <summary>Deutscher Klartext fuer Kontextmenue und Sprechblasen.</summary>
public static string ToDisplayText(this CLMgrLineStates state) => state switch
{
CLMgrLineStates.LSInactive => "frei",
CLMgrLineStates.LSHookOffInternal => "abgehoben (intern)",
CLMgrLineStates.LSHookOffExternal => "abgehoben (extern)",
CLMgrLineStates.LSRinging => "klingelt",
CLMgrLineStates.LSDialing => "waehlt",
CLMgrLineStates.LSAlerting => "ruft an",
CLMgrLineStates.LSKnocking => "klopft an",
CLMgrLineStates.LSBusy => "besetzt",
CLMgrLineStates.LSActive => "aktiv",
CLMgrLineStates.LSOnHold => "gehalten",
CLMgrLineStates.LSConferenceActive => "Konferenz aktiv",
CLMgrLineStates.LSConferenceOnHold => "Konferenz gehalten",
CLMgrLineStates.LSTerminated => "beendet",
CLMgrLineStates.LSTransferring => "wird verbunden",
CLMgrLineStates.LSDisabled => "deaktiviert",
CLMgrLineStates.LSDirectCall => "Direktansprache",
CLMgrLineStates.LSActiveAlerting => "zweiter Ruf",
CLMgrLineStates.LSActiveAlertingDC => "zweiter Ruf (Direktansprache)",
CLMgrLineStates.LSNone => "unbekannt",
_ => state.ToString().StartsWith("LSWaitingFor", StringComparison.Ordinal)
? "wird geschaltet"
: state.ToString()
};
}