diff --git a/callqueue.qplug b/callqueue.qplug new file mode 100644 index 0000000..0dde87d --- /dev/null +++ b/callqueue.qplug @@ -0,0 +1,129 @@ +PluginInfo = { + Name = "CallQueue", + Version = "0.1.0-master", + Id = "callqueue.plugin.0.1.0-master", + Description = "Plugin for taking incoming call objects and maintaining a queue", + Author = "Joel Wetzell" +} +require("json") +function GetPrettyName() + return "Call Queue" +end + +function GetProperties() + local props = { + { + Name = "Call Count", + Type = "integer", + Min = 0, + Max = 20, + Value = 1 + }, + } + return props +end + +function RectifyProperties(props) + return props +end + +function GetControls(props) + local controls = { + { + Name = "PopCall", + ControlType = "Button", + ButtonType = "Trigger", + PinStyle = "Input", + UserPin = true + }, + { + Name = "TopCallName", + ControlType = "Text", + PinStyle = "Output", + UserPin = true + }, + } + for i=1,props["Call Count"].Value do + print(i) + local name = "Call" .. i + table.insert(controls, { + Name = name, + ControlType = "Text", + PinStyle = "Input", + UserPin = true + }) + end + return controls +end + +function ClearCalls() + CallList = {} +end + +function UpdateOutputs() + local topCall = CallList[1] + if topCall == nil then + Controls["TopCallName"].String = "" + else + Controls["TopCallName"].String = topCall.Name + end +end + +function PushCall(call) + for i, value in pairs(CallList) do + if value.Position == call.Position then + print("call already in queue for position " .. call.Position) + return + end + end + table.insert(CallList, call) + print("call for " .. call.Name .. " at position " .. call.Position .. " pushed") + UpdateOutputs() +end + +function PopCall() + call = table.remove(CallList,1) + if call then + print("call for " .. call.Name .. " at position " .. call.Position .. " popped") + end + UpdateOutputs() +end + +function RemoveCall(call) + for i, value in pairs(CallList) do + if value.Position == call.Position then + print("removing call for position " .. call.Position) + table.remove(CallList, i) + return + end + end +end + +function Initialize() + ClearCalls() +end + +function SetupControlHandlers() + Controls["PopCall"].EventHandler = function (ctrl) + PopCall() + end + + for i=1, Properties["Call Count"].Value do + Controls["Call"..i].EventHandler = function (ctrl) + if ctrl.String ~= "" then + local call = json.decode(ctrl.String) + call.Position = i + if call.Queue then + PushCall(call) + else + RemoveCall(call) + end + end + end + end +end + +if(Controls) then + Initialize() + SetupControlHandlers() +end \ No newline at end of file