Improved priority format checking and error handling

master
Durel 7 years ago
parent 505bc7a0a6
commit e25c31b3c4

@ -10562,13 +10562,14 @@ The first column lists the names of each available priority field. Subsequent c
if (priorityString == nil) then
dbot.info("Cancelled request to edit priority \"@C" .. priorityName .. "@W\"")
retval = DRL_RET_SUCCESS
break
else
priorityEntry, retval = inv.priority.stringToTable(priorityString)
if (retval ~= DRL_RET_SUCCESS) then
dbot.warn("inv.priority.edit: Failed to convert priority string into priority: " ..
dbot.retval.getString(retval))
dbot.debug("inv.priority.edit: Failed to convert priority string into priority: " ..
dbot.retval.getString(retval))
else
inv.priority.table[priorityName] = priorityEntry
if (not isQuiet) then
@ -10911,47 +10912,46 @@ function inv.priority.stringToTable(priorityString)
numColumns = #words
elseif (numColumns ~= #words) then
dbot.warn("inv.priority.stringToTable: Malformed line has wrong number of columns: ")
dbot.warn(" \"" .. line .. "\"")
dbot.warn("Malformed line has wrong number of columns:\n\"" .. line .. "\"")
return priEntry, DRL_RET_INVALID_PARAM
end -- if
end -- for
if (numColumns == nil) then
dbot.warn("inv.priority.stringToTable: No valid lines were detected")
dbot.warn("No valid lines were detected in the priority")
return priEntry, DRL_RET_INVALID_PARAM
elseif (numColumns < 2) then
dbot.warn("inv.priority.stringToTable: Missing priority block column(s)")
dbot.warn("Missing one or more columns in the priority")
return priEntry, DRL_RET_INVALID_PARAM
end -- if
-- Parse the header lines
if (#lines < 2) then
dbot.warn("inv.priority.stringToTable: Missing header lines")
dbot.warn("Missing header lines in priority")
return priEntry, DRL_RET_INVALID_PARAM
end -- if
local header1, retval = dbot.wordsToArray(lines[1])
if (retval ~= DRL_RET_SUCCESS) then
dbot.warn("inv.priority.stringToTable: Failed to convert header1 into array: " ..
dbot.warn("The priority's first line (part of the header) is malformed: " ..
dbot.retval.getString(retval))
return priEntry, retval
end -- if
if (header1[1] ~= "MinLevel") then
dbot.warn("inv.priority.stringToTable: Missing Field header")
dbot.warn("Missing or malformed minLevel header line in priority")
return priEntry, DRL_RET_INVALID_PARAM
end -- if
local header2, retval = dbot.wordsToArray(lines[2])
if (retval ~= DRL_RET_SUCCESS) then
dbot.warn("inv.priority.stringToTable: Failed to convert header2 into array: " ..
dbot.warn("The priority's second line (part of the header) is malformed: " ..
dbot.retval.getString(retval))
return priEntry, retval
end -- if
if (header2[1] ~= "MaxLevel") then
dbot.warn("inv.priority.stringToTable: Missing field name header")
dbot.warn("Missing or malformed maxLevel header line in priority")
return priEntry, DRL_RET_INVALID_PARAM
end -- if
@ -10962,14 +10962,30 @@ function inv.priority.stringToTable(priorityString)
minLevel = tonumber(minLevel or "") or 0
maxLevel = tonumber(maxLevel or "") or 0
-- Ensure that there aren't any gaps in the level ranges. The minLevel for this block
-- should be exactly one more than the maxLevel from the previous block.
if (#priEntry > 0) and (priEntry[#priEntry].maxLevel + 1 ~= minLevel) then
dbot.warn("Detected level gap between consecutive priority blocks\n" ..
" Previous level block [" .. priEntry[#priEntry].minLevel .. "-" ..
priEntry[#priEntry].maxLevel .. "], current level block [" .. minLevel .. "-" ..
maxLevel .. "]")
return priEntry, DRL_RET_INVALID_PARAM
end -- if
table.insert(priEntry, { minLevel = minLevel, maxLevel = maxLevel, priorities = {} })
end -- for
-- The priority must start at level 1 and end at 291
if (priEntry[1].minLevel ~= 1) or (priEntry[#priEntry].maxLevel ~= 291) then
dbot.warn("Priority must start at level 1 and continue to level 291")
return priEntry, DRL_RET_INVALID_PARAM
end -- if
-- For each priority field, add the field's value to each block entry
for i = 3, #lines do
local fieldLine, retval = dbot.wordsToArray(lines[i])
if (retval ~= DRL_RET_SUCCESS) then
dbot.warn("inv.priority.stringToTable: Failed to parse line \"" .. lines[i] .. "\"")
dbot.warn("Failed to parse priority line \"" .. lines[i] .. "\"")
return priEntry, DRL_RET_INVALID_PARAM
end -- if
@ -10984,16 +11000,22 @@ function inv.priority.stringToTable(priorityString)
end -- if
end -- if
if (not fieldIsValid) then
dbot.warn("Unsupported priority field \"" .. (fieldName or "nil") .. "\" in line\n \"" ..
dbot.warn("Unsupported priority field \"" .. (fieldName or "nil") .. "\" in line\n \"" ..
(lines[i] or "nil") .. "\"")
return priEntry, DRL_RET_INVALID_PARAM
end -- if
for blockIdx, priorityBlock in ipairs(priEntry) do
local fieldValue = tonumber(fieldLine[blockIdx + 1] or "") -- add one to skip over the field name
local fieldValueRaw = fieldLine[blockIdx + 1] -- add one to skip over the field name
if (fieldValueRaw == nil) then
dbot.warn("Missing one or more columns for priority field \"" .. fieldName .. "\"")
return priEntry, DRL_RET_INVALID_PARAM
end -- if
local fieldValue = tonumber(fieldValueRaw or "")
if (fieldValue == nil) then
dbot.warn("inv.priority.stringToTable: Invalid field value at column " .. blockIdx + 1 ..
" in line \"" .. lines[i] .. "\"")
dbot.warn("Non-numeric field value in priority at column " .. blockIdx + 1 ..
" in line\n \"" .. lines[i] .. "\"")
return priEntry, DRL_RET_INVALID_PARAM
end -- if

Loading…
Cancel
Save