function Initialize()
end

function Parse()
    local raw = SKIN:GetMeasure('MeasureQuicklookRaw'):GetStringValue()
    if raw == nil or raw == '' then
        SKIN:Bang('!SetOption', 'MeasureParser', 'CpuLoad', '"–"')
        return
    end

    local cpuLoad = raw:match('"cpuLoad":(%d+%.?%d*)') or raw:match('"cpuLoad":null') and '–' or '–'
    if cpuLoad == 'null' then cpuLoad = '–' end
    local gpuLoad = raw:match('"gpuLoad":(%d+%.?%d*)') or '–'
    if gpuLoad == 'null' then gpuLoad = '–' end
    local memLoad = raw:match('"memoryLoad":(%d+%.?%d*)') or '–'
    if memLoad == 'null' then memLoad = '–' end
    local cpuTemp = raw:match('"cpuTemp":(%d+%.?%d*)') or '–'
    if cpuTemp == 'null' then cpuTemp = '–' end
    local gpuTemp = raw:match('"gpuTemp":(%d+%.?%d*)') or '–'
    if gpuTemp == 'null' then gpuTemp = '–' end
    local alerts = raw:match('"activeAlerts":(%d+)') or '0'

    SKIN:Bang('!SetOption', 'MeasureParser', 'CpuLoad', '"' .. cpuLoad .. '"')
    SKIN:Bang('!SetOption', 'MeasureParser', 'GpuLoad', '"' .. gpuLoad .. '"')
    SKIN:Bang('!SetOption', 'MeasureParser', 'MemoryLoad', '"' .. memLoad .. '"')
    SKIN:Bang('!SetOption', 'MeasureParser', 'CpuTemp', '"' .. cpuTemp .. '"')
    SKIN:Bang('!SetOption', 'MeasureParser', 'GpuTemp', '"' .. gpuTemp .. '"')
    if alerts == '0' then
        SKIN:Bang('!SetOption', 'MeasureParser', 'AlertsText', '""')
    else
        SKIN:Bang('!SetOption', 'MeasureParser', 'AlertsText', '"Alerts: ' .. alerts .. '"')
    end
    SKIN:Bang('!UpdateMeter', 'MeterAlerts')
    SKIN:Bang('!Redraw')
end
