Jump to content

Module:ListPeople

From Benvenuti Music Library

Documentation for this module may be created at Module:ListPeople/doc

local p = {}

function p.get()
    local cargo = mw.ext.cargo
    local peopleSet = {}

    local function safeQuery(field)
        local success, result = pcall(function()
            return cargo.query('Compositions', field, {
                groupBy = field,
                limit = 1000
            })
        end)
        if not success then
            return {}
        end
        return result
    end

    local function addNames(resultTable, field)
        for _, row in ipairs(resultTable) do
            local names = row[field] or ''
            for name in mw.text.gsplit(names, '[,;]') do
                name = mw.text.trim(name)
                if name ~= '' then
                    peopleSet[name] = true
                end
            end
        end
    end

    -- Query and process both Composer and Arranger
    local composers = safeQuery('Composer')
    addNames(composers, 'Composer')

    local arrangers = safeQuery('Arranger')
    addNames(arrangers, 'Arranger')

    -- Sort and format
    local list = {}
    for name in pairs(peopleSet) do
        table.insert(list, name)
    end
    table.sort(list)

    local output = {}
    for _, name in ipairs(list) do
        table.insert(output, '* [[' .. name .. ']]')
    end

    return table.concat(output, '\n')
end

return p