Module:YouTubeSubscribers: Difference between revisions

Content deleted Content added
factor out logic into newestMatching
refactor
Line 106:
 
return false
end
 
 
function serializeTable(val, name, skipnewlines, depth)
skipnewlines = skipnewlines or false
depth = depth or 0
 
local tmp = string.rep(" ", depth)
 
if name then tmp = tmp .. name .. " = " end
 
if type(val) == "table" then
tmp = tmp .. "{" .. (not skipnewlines and "\n" or "")
 
for k, v in pairs(val) do
tmp = tmp .. serializeTable(v, k, skipnewlines, depth + 1) .. "," .. (not skipnewlines and "\n" or "")
end
 
tmp = tmp .. string.rep(" ", depth) .. "}"
elseif type(val) == "number" then
tmp = tmp .. tostring(val)
elseif type(val) == "string" then
tmp = tmp .. string.format("%q", val)
elseif type(val) == "boolean" then
tmp = tmp .. (val and "true" or "false")
else
tmp = tmp .. "\"[inserializeable datatype:" .. type(val) .. "]\""
end
 
return tmp
end
 
Line 154 ⟶ 124:
end
 
-- for a given propertylist andof qualifierstatements pair returnsfind the newest statementone with a thatmatching matchesqual
function newestMatchingnewestMatchingStatement(e, propstatements, qual, targetQualValue)
local statements = e:getBestStatements(prop)
local newestStatement = nil
local newestStatementYr = nil
Line 162 ⟶ 131:
local newestStatementDay = nil
for k, v in pairs(statements) do
if v['rank'] ~= "deprecated" and v['qualifiers'] and v['qualifiers'][qual] then
local quals = v['qualifiers'][qual]
-- should only have one instance of the qualifier on a statement
Line 173 ⟶ 142:
if targetYr then
local older = datePrecedesDate(targetYr, targetMo, targetDay, newestStatementYr, newestStatementMo, newestStatementDay)
mw.logObject(qual)
 
if older == nil or not older then
mw.logObject(v)
 
newestStatementYr, newestStatementMo, newestStatementDay = targetYr, targetMo, targetDay
newestStatement = v
Line 187 ⟶ 152:
end
end
return newestStatement
end
 
-- for a given property and qualifier pair returns the newest statement that matches
function newestMatching(e, prop, qual, targetQualValue)
-- first check the best statements
local statements = e:getBestStatements(prop)
local newestStatement = newestMatchingStatement(statements, qual, targetQualValue)
if newestStatement then
return newestStatement
end
-- try again with all statements if nothing so far
statements = e:getAllStatements(prop)
newestStatement = newestMatchingStatement(statements, qual, targetQualValue)
if newestStatement then
return newestStatement
Line 226 ⟶ 205:
local e = getEntity(frame)
local chanId = getBestYtChanId(e)
local s = newestMatching(e, SUB_COUNT_PID, YT_CHAN_ID_PID, chanId)
if s then
local subCounts = e:getBestStatements(SUB_COUNT_PID)
local yt_year, yt_month, yt_day = getClaimDate(vs)
local subCount = nil
if not yt_year then
for k, v in pairs(subCounts) do
return tmpnil
if v['qualifiers'] and v['qualifiers'][YT_CHAN_ID_PID] then
end
local yt_qualifier = v['qualifiers'][YT_CHAN_ID_PID]
local dateString = yt_year =.. nil"|"
-- construct YYYY|mm|dd date string
localif yt_month = nilthen
local yt_day = nil
dateString = dateString .. yt_month .. "|"
yt_year, yt_month, yt_day = getClaimDate(v)
if not yt_yearyt_day then
dateString = dateString .. yt_day
return nil
end
end
local dateString = yt_year .. "|"
return "{{Format date|" ..dateString .. "}}"
-- construct YYYY|mm|dd date string
if yt_month then
dateString = dateString .. yt_month .. "|"
if yt_day then
dateString = dateString .. yt_day
end
end
return "{{Format date|" ..dateString .. "}}"
end
end
end
Line 257 ⟶ 228:
local chanId = getBestYtChanId(e)
if chanId then
local bestStatements = newestMatching(e, SUB_COUNT_PID, YT_CHAN_ID_PID, chanId)
if s and s["mainsnak"] and s['mainsnak']["datavalue"] and s['mainsnak']["datavalue"]["value"] and s['mainsnak']["datavalue"]['value']['amount'] then
mw.logObject(bestStatement)
subCount = vs["'mainsnak"']["datavalue"]["'value"']["'amount"']
local subCounts = e:getBestStatements(SUB_COUNT_PID)
end
for k, v in pairs(subCounts) do
if v['qualifiers'] and v['qualifiers'][YT_CHAN_ID_PID] then
local yt_qualifier = v['qualifiers'][YT_CHAN_ID_PID]
if yt_qualifier[1]['datavalue']['value'] == chanId then
subCount = v["mainsnak"]["datavalue"]["value"]["amount"]
end
end
end
end
if subCount then