mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-01-28 11:54:57 +00:00
Compare commits
31 Commits
1.14.2-hot
...
hotfix/mpc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d982c42996 | ||
|
|
334a62c329 | ||
|
|
4deee11d15 | ||
|
|
2afa9df705 | ||
|
|
316d545bda | ||
|
|
13df52ab49 | ||
|
|
527457baf5 | ||
|
|
d74c5de651 | ||
|
|
b06d0c0deb | ||
|
|
759fb1d729 | ||
|
|
3defd6b41b | ||
|
|
794cd3be5f | ||
|
|
68cbbee6a3 | ||
|
|
a50d758f70 | ||
|
|
aedac14feb | ||
|
|
93134cae5c | ||
|
|
555915b151 | ||
|
|
fa0f006b9b | ||
|
|
4c0fb6311b | ||
|
|
6538cecc3b | ||
|
|
44296cbc54 | ||
|
|
0dcf45fc84 | ||
|
|
4d2ce83e75 | ||
|
|
da4070bad0 | ||
|
|
d95692ba96 | ||
|
|
daf3f321bd | ||
|
|
269d82227d | ||
|
|
e8f20a4ca3 | ||
|
|
9c9b2952aa | ||
|
|
8d0f0c0c37 | ||
|
|
c047507997 |
@@ -401,20 +401,21 @@ namespace PepperDash.Essentials
|
||||
}
|
||||
else if (this.ControllerPrompt.IndexOf("mpc3", StringComparison.OrdinalIgnoreCase) > -1)
|
||||
{
|
||||
Debug.Console(2, "MPC3 processor type detected. Adding Mpc3TouchpanelController.");
|
||||
Debug.Console(2, "MPC3 processor type detected. Adding Mpc3TouchpanelController.");
|
||||
|
||||
var butToken = devConf.Properties["buttons"];
|
||||
if (butToken != null)
|
||||
{
|
||||
var buttons = butToken.ToObject<Dictionary<string, Essentials.Core.Touchpanels.KeypadButton>>();
|
||||
var tpController = new Essentials.Core.Touchpanels.Mpc3TouchpanelController(devConf.Key, devConf.Name, Global.ControlSystem, buttons);
|
||||
DeviceManager.AddDevice(tpController);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(0, Debug.ErrorLogLevel.Error, "Error: Unable to deserialize buttons collection for device: {0}", devConf.Key);
|
||||
}
|
||||
|
||||
var butToken = devConf.Properties["buttons"];
|
||||
if (butToken == null)
|
||||
{
|
||||
Debug.Console(0, Debug.ErrorLogLevel.Error,
|
||||
"Error: Unable to deserialize buttons collection for device: {0}", devConf.Key);
|
||||
continue;
|
||||
}
|
||||
|
||||
var buttons = butToken.ToObject<Dictionary<string, Essentials.Core.Touchpanels.KeypadButton>>();
|
||||
var tpController = new Core.Touchpanels.Mpc3TouchpanelController(
|
||||
string.Format("{0}-keypadButtons", devConf.Key), devConf.Name, Global.ControlSystem, buttons);
|
||||
|
||||
DeviceManager.AddDevice(tpController);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace PepperDash.Essentials.Core.Bridges
|
||||
|
||||
[JoinName("Online")]
|
||||
public JoinDataComplete Online = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
||||
new JoinMetadata { Description = "PDU Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||
new JoinMetadata { Description = "Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("OutletCount")]
|
||||
public JoinDataComplete OutletCount = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
||||
|
||||
@@ -356,16 +356,18 @@ namespace PepperDash.Essentials.Core
|
||||
{
|
||||
foreach (var customJoinData in joinData)
|
||||
{
|
||||
var join = Joins[customJoinData.Key];
|
||||
JoinDataComplete join;
|
||||
|
||||
if (!Joins.TryGetValue(customJoinData.Key, out join))
|
||||
{
|
||||
Debug.Console(2, "No matching key found in join map for: '{0}'", customJoinData.Key);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (join != null)
|
||||
{
|
||||
join.SetCustomJoinData(customJoinData.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(2, "No matching key found in join map for: '{0}'", customJoinData.Key);
|
||||
}
|
||||
}
|
||||
|
||||
PrintJoinMapInfo();
|
||||
|
||||
@@ -1,144 +1,325 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using System.Globalization;
|
||||
using Crestron.SimplSharpPro;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Core.Touchpanels
|
||||
{
|
||||
/// <summary>
|
||||
/// A wrapper class for the touchpanel portion of an MPC3 class process to allow for configurable
|
||||
/// behavior of the keybad buttons
|
||||
/// </summary>
|
||||
public class Mpc3TouchpanelController : Device
|
||||
{
|
||||
MPC3Basic _Touchpanel;
|
||||
/// <summary>
|
||||
/// A wrapper class for the touchpanel portion of an MPC3 class process to allow for configurable
|
||||
/// behavior of the keybad buttons
|
||||
/// </summary>
|
||||
public class Mpc3TouchpanelController : Device
|
||||
{
|
||||
readonly MPC3Basic _touchpanel;
|
||||
|
||||
Dictionary<string, KeypadButton> _Buttons;
|
||||
readonly Dictionary<string, KeypadButton> _buttons;
|
||||
|
||||
public Mpc3TouchpanelController(string key, string name, CrestronControlSystem processor, Dictionary<string, KeypadButton> buttons)
|
||||
: base(key, name)
|
||||
{
|
||||
_Touchpanel = processor.ControllerTouchScreenSlotDevice as MPC3Basic;
|
||||
_Buttons = buttons;
|
||||
public Mpc3TouchpanelController(string key, string name, CrestronControlSystem processor, Dictionary<string, KeypadButton> buttons)
|
||||
: base(key, name)
|
||||
{
|
||||
_touchpanel = processor.ControllerTouchScreenSlotDevice as MPC3Basic;
|
||||
if (_touchpanel == null)
|
||||
{
|
||||
Debug.Console(1, this, "Failed to construct MPC3 Touchpanel Controller with key {0}, check configuration", key);
|
||||
return;
|
||||
}
|
||||
|
||||
_Touchpanel.ButtonStateChange += new Crestron.SimplSharpPro.DeviceSupport.ButtonEventHandler(_Touchpanel_ButtonStateChange);
|
||||
_touchpanel.ButtonStateChange += _touchpanel_ButtonStateChange;
|
||||
|
||||
AddPostActivationAction(() =>
|
||||
{
|
||||
// Link up the button feedbacks to the specified BoolFeedbacks
|
||||
foreach (var button in _Buttons)
|
||||
{
|
||||
var feedbackConfig = button.Value.Feedback;
|
||||
var device = DeviceManager.GetDeviceForKey(feedbackConfig.DeviceKey) as Device;
|
||||
if (device != null)
|
||||
{
|
||||
var bKey = button.Key.ToLower();
|
||||
_buttons = buttons;
|
||||
if (_buttons == null)
|
||||
{
|
||||
Debug.Console(1, this,
|
||||
"Button properties are null, failed to setup MPC3 Touch Controller, check configuration");
|
||||
return;
|
||||
}
|
||||
|
||||
var feedback = device.GetFeedbackProperty(feedbackConfig.FeedbackName);
|
||||
AddPostActivationAction(() =>
|
||||
{
|
||||
foreach (var button in _buttons)
|
||||
{
|
||||
var buttonKey = button.Key.ToLower();
|
||||
var buttonConfig = button.Value;
|
||||
|
||||
var bFeedback = feedback as BoolFeedback;
|
||||
var iFeedback = feedback as IntFeedback;
|
||||
if (bFeedback != null)
|
||||
{
|
||||
InitializeButton(buttonKey, buttonConfig);
|
||||
InitializeButtonFeedback(buttonKey, buttonConfig);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (bKey == "power")
|
||||
{
|
||||
bFeedback.LinkCrestronFeedback(_Touchpanel.FeedbackPower);
|
||||
continue;
|
||||
}
|
||||
else if (bKey == "mute")
|
||||
{
|
||||
bFeedback.LinkCrestronFeedback(_Touchpanel.FeedbackMute);
|
||||
continue;
|
||||
}
|
||||
/// <summary>
|
||||
/// Enables/disables buttons based on event type configuration
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="config"></param>
|
||||
public void InitializeButton(string key, KeypadButton config)
|
||||
{
|
||||
Debug.Console(1, this, "Initializing button '{0}'...", key);
|
||||
|
||||
// Link to the Crestron Feedback corresponding to the button number
|
||||
bFeedback.LinkCrestronFeedback(_Touchpanel.Feedbacks[UInt16.Parse(button.Key)]);
|
||||
}
|
||||
else if (iFeedback != null)
|
||||
{
|
||||
if (bKey == "volumefeedback")
|
||||
{
|
||||
var volFeedback = feedback as IntFeedback;
|
||||
// TODO: Figure out how to subsribe to a volume IntFeedback and link it to the voluem
|
||||
volFeedback.LinkInputSig(_Touchpanel.VolumeBargraph);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(1, this, "Unable to get BoolFeedback with name: {0} from device: {1}", feedbackConfig.FeedbackName, device.Key);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(1, this, "Unable to get device with key: {0}", feedbackConfig.DeviceKey);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
if (config == null)
|
||||
{
|
||||
Debug.Console(1, this, "Button '{0}' config is null, unable to initialize", key);
|
||||
return;
|
||||
}
|
||||
|
||||
void _Touchpanel_ButtonStateChange(GenericBase device, Crestron.SimplSharpPro.DeviceSupport.ButtonEventArgs args)
|
||||
{
|
||||
Debug.Console(1, this, "Button {0} ({1}), {2}", args.Button.Number, args.Button.Name, args.NewButtonState);
|
||||
var type = args.NewButtonState.ToString();
|
||||
int buttonNumber;
|
||||
TryParseInt(key, out buttonNumber);
|
||||
|
||||
if (_Buttons.ContainsKey(args.Button.Number.ToString()))
|
||||
{
|
||||
Press(args.Button.Number.ToString(), type);
|
||||
}
|
||||
else if(_Buttons.ContainsKey(args.Button.Name.ToString()))
|
||||
{
|
||||
Press(args.Button.Name.ToString(), type);
|
||||
}
|
||||
}
|
||||
var buttonEventTypes = config.EventTypes;
|
||||
|
||||
/// <summary>
|
||||
/// Runs the function associated with this button/type. One of the following strings:
|
||||
/// Pressed, Released, Tapped, DoubleTapped, Held, HeldReleased
|
||||
/// </summary>
|
||||
/// <param name="number"></param>
|
||||
/// <param name="type"></param>
|
||||
public void Press(string number, string type)
|
||||
{
|
||||
// TODO: In future, consider modifying this to generate actions at device activation time
|
||||
// to prevent the need to dynamically call the method via reflection on each button press
|
||||
if (!_Buttons.ContainsKey(number)) { return; }
|
||||
var but = _Buttons[number];
|
||||
if (but.EventTypes.ContainsKey(type))
|
||||
{
|
||||
foreach (var a in but.EventTypes[type]) { DeviceJsonApi.DoDeviceAction(a); }
|
||||
}
|
||||
}
|
||||
switch (key)
|
||||
{
|
||||
case ("power"):
|
||||
{
|
||||
if (buttonEventTypes == null)
|
||||
_touchpanel.DisablePowerButton();
|
||||
else
|
||||
_touchpanel.EnablePowerButton();
|
||||
|
||||
break;
|
||||
}
|
||||
case ("volumeup"):
|
||||
{
|
||||
if (buttonEventTypes == null)
|
||||
_touchpanel.DisableVolumeUpButton();
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ("volumedown"):
|
||||
{
|
||||
if (buttonEventTypes == null)
|
||||
_touchpanel.DisableVolumeDownButton();
|
||||
|
||||
/// <summary>
|
||||
/// Represents the configuration of a keybad buggon
|
||||
/// </summary>
|
||||
public class KeypadButton
|
||||
{
|
||||
public Dictionary<string, DeviceActionWrapper[]> EventTypes { get; set; }
|
||||
public KeypadButtonFeedback Feedback { get; set; }
|
||||
break;
|
||||
}
|
||||
case ("volumefeedback"):
|
||||
{
|
||||
|
||||
public KeypadButton()
|
||||
{
|
||||
EventTypes = new Dictionary<string, DeviceActionWrapper[]>();
|
||||
Feedback = new KeypadButtonFeedback();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ("mute"):
|
||||
{
|
||||
if (buttonEventTypes == null)
|
||||
_touchpanel.DisableMuteButton();
|
||||
else
|
||||
_touchpanel.EnableMuteButton();
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class KeypadButtonFeedback
|
||||
{
|
||||
public string DeviceKey { get; set; }
|
||||
public string FeedbackName { get; set; }
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
if (buttonNumber == 0)
|
||||
break;
|
||||
|
||||
if (buttonEventTypes == null)
|
||||
_touchpanel.DisableNumericalButton((uint)buttonNumber);
|
||||
else
|
||||
_touchpanel.EnableNumericalButton((uint)buttonNumber);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Debug.Console(1, this, "Button '{0}' {1}", key, buttonEventTypes == null
|
||||
? "is disabled, verify eventTypes are configured."
|
||||
: "is enabled");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Links button feedback if configured
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="config"></param>
|
||||
public void InitializeButtonFeedback(string key, KeypadButton config)
|
||||
{
|
||||
Debug.Console(1, this, "Initializing button '{0}' feedback...", key);
|
||||
|
||||
if (config == null)
|
||||
{
|
||||
Debug.Console(1, this, "Button '{0}' config is null, unable to initialize feedback", key);
|
||||
return;
|
||||
}
|
||||
|
||||
int buttonNumber;
|
||||
TryParseInt(key, out buttonNumber);
|
||||
|
||||
// Link up the button feedbacks to the specified device feedback
|
||||
var buttonFeedback = config.Feedback;
|
||||
if (buttonFeedback == null)
|
||||
{
|
||||
Debug.Console(1, this, "Button '{0}' feedback not configured and will not be implemented. If feedback is required, verify configuration.",
|
||||
key);
|
||||
return;
|
||||
}
|
||||
|
||||
Feedback deviceFeedback;
|
||||
|
||||
try
|
||||
{
|
||||
var device = DeviceManager.GetDeviceForKey(buttonFeedback.DeviceKey) as Device;
|
||||
if (device == null)
|
||||
{
|
||||
Debug.Console(1, this, "Button '{0}' feedback with deviceKey '{1}' not found, feedback will not be implemented. Verify feedback deviceKey is properly configured.",
|
||||
key, buttonFeedback.DeviceKey);
|
||||
return;
|
||||
}
|
||||
|
||||
deviceFeedback = device.GetFeedbackProperty(buttonFeedback.FeedbackName);
|
||||
if (deviceFeedback == null)
|
||||
{
|
||||
Debug.Console(1, this, "Button '{0}' feedback failed to get feedback property for '{1}', feedback will not be implemented. Verify feedback deviceKey is properly configured.",
|
||||
key, buttonFeedback.FeedbackName);
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO [ ] verify if this can replace the current method
|
||||
//Debug.Console(0, this, "deviceFeedback.GetType().Name: '{0}'", deviceFeedback.GetType().Name);
|
||||
//switch (feedback.GetType().Name.ToLower())
|
||||
//{
|
||||
// case("boolfeedback"):
|
||||
// {
|
||||
// break;
|
||||
// }
|
||||
// case("intfeedback"):
|
||||
// {
|
||||
// break;
|
||||
// }
|
||||
// case("stringfeedback"):
|
||||
// {
|
||||
// break;
|
||||
// }
|
||||
//}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.Console(0, this, "Failed to initialize button '{0}' feedback with deviceKey '{1}'. If feedback is required, verify configuration.",
|
||||
key, buttonFeedback.DeviceKey);
|
||||
|
||||
Debug.Console(1, this, "InitializeButtonFeedback Exception Message: {0}", ex.Message);
|
||||
Debug.Console(2, this, "InitializeButtonFeedback Exception StackTrace: {0}", ex.StackTrace);
|
||||
if (ex.InnerException != null) Debug.Console(2, this, "InitializeButtonFeedback Exception InnerExceptioni: {0}", ex.InnerException);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
var boolFeedback = deviceFeedback as BoolFeedback;
|
||||
var intFeedback = deviceFeedback as IntFeedback;
|
||||
|
||||
switch (key)
|
||||
{
|
||||
case ("power"):
|
||||
{
|
||||
if (boolFeedback != null) boolFeedback.LinkCrestronFeedback(_touchpanel.FeedbackPower);
|
||||
break;
|
||||
}
|
||||
case ("volumeup"):
|
||||
case ("volumedown"):
|
||||
case ("volumefeedback"):
|
||||
{
|
||||
if (intFeedback != null)
|
||||
{
|
||||
var volumeFeedback = intFeedback;
|
||||
volumeFeedback.LinkInputSig(_touchpanel.VolumeBargraph);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ("mute"):
|
||||
{
|
||||
if (boolFeedback != null) boolFeedback.LinkCrestronFeedback(_touchpanel.FeedbackMute);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
if (boolFeedback != null) boolFeedback.LinkCrestronFeedback(_touchpanel.Feedbacks[(uint)buttonNumber]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Try parse int helper method
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <param name="result"></param>
|
||||
/// <returns></returns>
|
||||
public bool TryParseInt(string str, out int result)
|
||||
{
|
||||
try
|
||||
{
|
||||
result = int.Parse(str);
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
result = 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private void _touchpanel_ButtonStateChange(GenericBase device, Crestron.SimplSharpPro.DeviceSupport.ButtonEventArgs args)
|
||||
{
|
||||
Debug.Console(1, this, "Button {0} ({1}), {2}", args.Button.Number, args.Button.Name, args.NewButtonState);
|
||||
var type = args.NewButtonState.ToString();
|
||||
|
||||
if (_buttons.ContainsKey(args.Button.Number.ToString(CultureInfo.InvariantCulture)))
|
||||
{
|
||||
Press(args.Button.Number.ToString(CultureInfo.InvariantCulture), type);
|
||||
}
|
||||
else if (_buttons.ContainsKey(args.Button.Name.ToString()))
|
||||
{
|
||||
Press(args.Button.Name.ToString(), type);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Runs the function associated with this button/type. One of the following strings:
|
||||
/// Pressed, Released, Tapped, DoubleTapped, Held, HeldReleased
|
||||
/// </summary>
|
||||
/// <param name="buttonKey"></param>
|
||||
/// <param name="type"></param>
|
||||
public void Press(string buttonKey, string type)
|
||||
{
|
||||
// TODO: In future, consider modifying this to generate actions at device activation time
|
||||
// to prevent the need to dynamically call the method via reflection on each button press
|
||||
if (!_buttons.ContainsKey(buttonKey)) return;
|
||||
|
||||
var button = _buttons[buttonKey];
|
||||
if (!button.EventTypes.ContainsKey(type)) return;
|
||||
|
||||
foreach (var eventType in button.EventTypes[type]) DeviceJsonApi.DoDeviceAction(eventType);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents the configuration of a keypad button
|
||||
/// </summary>
|
||||
public class KeypadButton
|
||||
{
|
||||
[JsonProperty("eventTypes")]
|
||||
public Dictionary<string, DeviceActionWrapper[]> EventTypes { get; set; }
|
||||
|
||||
[JsonProperty("feedback")]
|
||||
public KeypadButtonFeedback Feedback { get; set; }
|
||||
|
||||
public KeypadButton()
|
||||
{
|
||||
EventTypes = new Dictionary<string, DeviceActionWrapper[]>();
|
||||
Feedback = new KeypadButtonFeedback();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents the configuration of a keypad button feedback
|
||||
/// </summary>
|
||||
public class KeypadButtonFeedback
|
||||
{
|
||||
[JsonProperty("deviceKey")]
|
||||
public string DeviceKey { get; set; }
|
||||
|
||||
[JsonProperty("feedbackName")]
|
||||
public string FeedbackName { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -216,6 +216,10 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
||||
return joinable;
|
||||
}
|
||||
}
|
||||
|
||||
[JsonProperty("dialable")]
|
||||
public bool Dialable { get; set; }
|
||||
|
||||
//public string ConferenceNumberToDial { get; set; }
|
||||
[JsonProperty("conferencePassword")]
|
||||
public string ConferencePassword { get; set; }
|
||||
|
||||
@@ -348,6 +348,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
||||
if (b.DialInfo.ConnectMode.Value.ToLower() == "obtp" || b.DialInfo.ConnectMode.Value.ToLower() == "manual")
|
||||
meeting.IsOneButtonToPushMeeting = true;
|
||||
|
||||
meeting.Dialable = b.DialInfo.Calls.Call.Count > 0;
|
||||
|
||||
if (b.DialInfo.Calls.Call != null)
|
||||
{
|
||||
foreach (Call c in b.DialInfo.Calls.Call)
|
||||
|
||||
@@ -940,7 +940,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
||||
|
||||
//digitals
|
||||
tokenArray[digitalIndex] = new XSigDigitalToken(digitalIndex + 1, meeting.Joinable);
|
||||
tokenArray[digitalIndex + 1] = new XSigDigitalToken(digitalIndex + 2, meeting.Id != "0");
|
||||
tokenArray[digitalIndex + 1] = new XSigDigitalToken(digitalIndex + 2, meeting.Dialable);
|
||||
|
||||
//serials
|
||||
tokenArray[stringIndex] = new XSigSerialToken(stringIndex + 1, meeting.Organizer);
|
||||
|
||||
@@ -1510,6 +1510,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
|
||||
meeting.Privacy = b.IsPrivate ? eMeetingPrivacy.Private : eMeetingPrivacy.Public;
|
||||
|
||||
meeting.Dialable = meeting.Id != "0";
|
||||
|
||||
// No meeting.Calls data exists for Zoom Rooms. Leaving out for now.
|
||||
var now = DateTime.Now;
|
||||
if (meeting.StartTime < now && meeting.EndTime < now)
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<packages>
|
||||
<package id="PepperDashCore" version="1.3.0" targetFramework="net35" allowedVersions="[1.0,2.0)"/>
|
||||
<package id="PepperDashCore" version="1.3.1" targetFramework="net35" allowedVersions="[1.0,2.0)"/>
|
||||
</packages>
|
||||
|
||||
Reference in New Issue
Block a user