Add callqueue.qplug
This commit is contained in:
+129
@@ -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
|
||||
Reference in New Issue
Block a user