Windows-Tray-Anwendung (CLMgr-Anbindung an SwyxIt!) samt WebSocket-Zugang, Firefox-Erweiterung und Browser-Beispielclient.
88 lines
3.5 KiB
C#
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()
|
|
};
|
|
}
|