114 lines
3.0 KiB
Lua
114 lines
3.0 KiB
Lua
--[[
|
|
A list of helper functions.
|
|
A helper function is
|
|
- not directly tied to a use case
|
|
- used in multiple places
|
|
]]--
|
|
|
|
function todo.get_player_list(current_player)
|
|
local result = { { todo.translate(current_player, "unassigned") } }
|
|
|
|
local count = 0
|
|
for _, player in pairs(game.players) do
|
|
table.insert(result, player.name)
|
|
count = count + 1
|
|
end
|
|
|
|
local lookup = {}
|
|
for i, player in ipairs(result) do
|
|
lookup[player] = i
|
|
end
|
|
|
|
todo.log("Created Assignee list: " .. serpent.block(result))
|
|
todo.log("Players in the game : " .. count)
|
|
|
|
return result, lookup, count
|
|
end
|
|
|
|
--[[
|
|
Retains everything after the pattern.
|
|
If the remaining string contains a _ it will be split at this point.
|
|
|
|
@return the task id as a number
|
|
@return the subtask id as a number, if present
|
|
]]--
|
|
function todo.get_task_id_from_element_name(name, pattern)
|
|
local _, start = string.find(name, pattern)
|
|
local id_text = string.sub(name, start + 1)
|
|
|
|
local subtask_delimiter_position = string.find(id_text, "_")
|
|
|
|
if (subtask_delimiter_position) then
|
|
local task_id = tonumber(string.sub(id_text, 1, subtask_delimiter_position - 1))
|
|
local subtask_id = tonumber(string.sub(id_text, subtask_delimiter_position + 1))
|
|
|
|
return task_id, subtask_id
|
|
else
|
|
return tonumber(id_text)
|
|
end
|
|
end
|
|
|
|
|
|
function todo.get_task_by_id(id)
|
|
for _, task in pairs(global.todo.open) do
|
|
if (task.id == id) then
|
|
return task
|
|
end
|
|
end
|
|
|
|
for _, task in pairs(global.todo.done) do
|
|
if (task.id == id) then
|
|
return task
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[
|
|
Find a subtask in a task by its id.
|
|
@return the subtask if found, nil otherwise
|
|
@return false if subtask is open, true if completed
|
|
]]--
|
|
function todo.get_subtask_by_id(task, id)
|
|
for _, subtask in pairs(task.subtasks.open) do
|
|
if (subtask.id == id) then
|
|
return subtask, false
|
|
end
|
|
end
|
|
|
|
for _, subtask in pairs(task.subtasks.done) do
|
|
if (subtask.id == id) then
|
|
return subtask, true
|
|
end
|
|
end
|
|
end
|
|
|
|
function todo.should_show_maximize_button(player)
|
|
return settings.get_player_settings(player)["todolist-show-button"].value
|
|
end
|
|
|
|
function todo.is_auto_assign(player)
|
|
return settings.get_player_settings(player)["todolist-auto-assign"].value
|
|
end
|
|
|
|
function todo.get_window_height(player)
|
|
return settings.get_player_settings(player)["todolist-window-height"].value
|
|
end
|
|
|
|
function todo.show_completed_tasks(player)
|
|
return global.todo.settings[player.name] and global.todo.settings[player.name].show_completed
|
|
end
|
|
|
|
function todo.get_player_translation_mode(player)
|
|
return settings.get_player_settings(player)["todolist-translation-mode"].value
|
|
end
|
|
|
|
function todo.translate(player, input)
|
|
local mode = todo.get_player_translation_mode(player)
|
|
|
|
local prefix = "todo."
|
|
if (mode == "quest") then
|
|
prefix = prefix.."quest_"
|
|
end
|
|
|
|
return prefix..input
|
|
end |