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() }; }