diff options
| author | 2017-07-30 21:33:23 -0500 | |
|---|---|---|
| committer | 2017-07-30 21:33:23 -0500 | |
| commit | 83adc109e7b70dad4bd12e2fa1b6877f41e7c94c (patch) | |
| tree | 5b4ee835531c7af9631acfdc421bd96fcb8e0cb8 /plugins/data/data_marp.lua | |
| parent | 25e6589df601d58fc25ba0be56fe7bd49f2f7e0e (diff) | |
plugins/data: add marp scores [Carl]
Diffstat (limited to 'plugins/data/data_marp.lua')
| -rw-r--r-- | plugins/data/data_marp.lua | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/plugins/data/data_marp.lua b/plugins/data/data_marp.lua new file mode 100644 index 00000000000..959bdcbbfe9 --- /dev/null +++ b/plugins/data/data_marp.lua @@ -0,0 +1,138 @@ +-- get marp high score file from http://replay.marpirc.net/txt/scores3.htm +local dat = {} +local db, sql = require("data/database")() +local ver, info + +local function init() + local filepath + local dbver + local fh + local file = "scores3.htm" + + for path in mame_manager:ui():options().entries.historypath:value():gmatch("([^;]+)") do + filepath = lfs.env_replace(path) .. "/" .. file + fh = io.open(filepath, "r") + if fh then + break + end + end + + local stmt = db:prepare("SELECT version FROM version WHERE datfile = ?") + stmt:bind_values(file) + if stmt:step() == sql.ROW then + dbver = stmt:get_value(0) + end + stmt:finalize() + + if not fh and dbver then + -- data in database but missing file, just use what we have + ver = dbver + return + elseif not fh then + return + elseif not dbver then + db:exec("CREATE TABLE \"" .. file .. [[" ( + romset VARCHAR NOT NULL, + data CLOB NOT NULL)]]) + db:exec("CREATE INDEX \"romset_" .. file .. "\" ON \"" .. file .. "_idx\"(romset)") + end + + for line in fh:lines() do + local match = line:match("Top Scores from the MAME Action Replay Page %(([%w :]+)%)") + if match then + ver = match + break + end + end + + if not ver then + fh:close() + return + end + + if ver == dbver then + fh:close() + return + end + + if dbver then + db:exec("DELETE FROM \"" .. file .. "\"") + db:exec("DELETE FROM \"" .. file .. "_idx\"") + stmt = db:prepare("UPDATE version SET version = ? WHERE datfile = ?") + else + stmt = db:prepare("INSERT INTO version VALUES (?, ?)") + end + stmt:bind_values(ver, file) + stmt:step() + stmt:finalize() + + fh:seek("set") + local buffer = fh:read("a") + db:exec("BEGIN TRANSACTION") + + local function gmatchpos() + local pos = 1 + local set, data = "" + local function iter() + local lastset = set + while true do + local spos, scr, plyr, stype, ltype + local url = "" + spos, pos, set, stype, scr, plyr, ltype = buffer:find("\n%s*([%w_]*)%-?(%w-) :%s*(%d+) [;:] ([^:]+): [^%[\n]*%[?([%w ]*)[^\n]*", pos) + if not spos then + return nil + end + if set ~= "" then + if ltype ~= "" then + url = ltype .. "\t\n" + else + url = "" + end + url = url .. "http://replay.marpirc.net/r/" .. set .. ((stype ~= "") and ("-" .. stype) or "") .. "\t\n" + end + if set ~= "" and lastset and lastset ~= set then + local lastdata = data + data = url .. plyr .. "\t" .. scr .. "\n" + return lastset, lastdata + end + data = data .. ((url ~= "") and ("\n" .. url) or "") .. plyr .. "\t" .. scr .. "\n" + end + end + return iter + end + + for set, data in gmatchpos() do + stmt = db:prepare("INSERT INTO \"" .. file .. "\" VALUES (?, ?)") + stmt:bind_values(set, data) + stmt:step() + stmt:finalize() + end + fh:close() + db:exec("END TRANSACTION") +end + +init() + +function dat.check(set, softlist) + if softlist or not ver then + return nil + end + info = nil + local stmt = db:prepare("SELECT data FROM \"scores3.htm\" AS f WHERE romset = ?") + stmt:bind_values(set) + if stmt:step() == sql.ROW then + info = "#j2\n" .. stmt:get_value(0) + end + stmt:finalize() + return info and "MARPScore" or nil +end + +function dat.get() + return info +end + +function dat.ver() + return ver +end + +return dat |
