using IpPbx.CLMgrLib;
namespace SwyxTray.Swyx;
///
/// Einordnung der aus der CLMgr-TypeLib.
/// Die Werte stammen direkt aus dem Wrapper (Interop.CLMgr), sind also nicht
/// geraten. Die vielen LSWaitingFor*-Werte sind Uebergangszustaende der
/// CLMgr-Zustandsmaschine und werden hier bewusst als "belegt" behandelt.
///
internal static class LineStateExtensions
{
/// Eingehender Ruf, der noch nicht angenommen wurde.
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
};
/// Bestehende Sprechverbindung.
public static bool IsActive(this CLMgrLineStates state) => state switch
{
CLMgrLineStates.LSActive => true,
CLMgrLineStates.LSConferenceActive => true,
CLMgrLineStates.LSDirectCall => true,
CLMgrLineStates.LSTransferring => true,
_ => false
};
/// Ausgehender Ruf im Aufbau.
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
};
/// Leitung frei — wird in der Uebersicht ausgeblendet.
public static bool IsIdle(this CLMgrLineStates state) => state switch
{
CLMgrLineStates.LSInactive => true,
CLMgrLineStates.LSTerminated => true,
CLMgrLineStates.LSDisabled => true,
CLMgrLineStates.LSNone => true,
_ => false
};
/// Deutscher Klartext fuer Kontextmenue und Sprechblasen.
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()
};
}