mirror of
https://github.com/mamedev/mame.git
synced 2024-11-16 07:48:32 +01:00
151 lines
3.5 KiB
Lua
151 lines
3.5 KiB
Lua
-- get marp high score file from http://replay.marpirc.net/txt/scores3.htm
|
|
local dat = {}
|
|
local db = 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 = ?")
|
|
db.check("reading marp version")
|
|
stmt:bind_values(file)
|
|
if stmt:step() == db.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.check("creating marp table")
|
|
db.exec("CREATE INDEX \"romset_" .. file .. "\" ON \"" .. file .. "_idx\"(romset)")
|
|
db.check("creating marp index")
|
|
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.check("deleting marp")
|
|
db.exec("DELETE FROM \"" .. file .. "_idx\"")
|
|
db.check("deleting marp index")
|
|
stmt = db.prepare("UPDATE version SET version = ? WHERE datfile = ?")
|
|
db.check("updating marp version")
|
|
else
|
|
stmt = db.prepare("INSERT INTO version VALUES (?, ?)")
|
|
db.check("inserting marp version")
|
|
end
|
|
stmt:bind_values(ver, file)
|
|
stmt:step()
|
|
stmt:finalize()
|
|
|
|
fh:seek("set")
|
|
local buffer = fh:read("a")
|
|
db.exec("BEGIN TRANSACTION")
|
|
db.check("beginning marp transation")
|
|
|
|
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 (?, ?)")
|
|
db.check("inserting marp values")
|
|
stmt:bind_values(set, data)
|
|
stmt:step()
|
|
stmt:finalize()
|
|
end
|
|
fh:close()
|
|
db.exec("END TRANSACTION")
|
|
db.check("ending marp transation")
|
|
end
|
|
|
|
if db then
|
|
init()
|
|
end
|
|
|
|
function dat.check(set, softlist)
|
|
if softlist or not ver or not db then
|
|
return nil
|
|
end
|
|
info = nil
|
|
local stmt = db.prepare("SELECT data FROM \"scores3.htm\" AS f WHERE romset = ?")
|
|
db.check("reading marp data")
|
|
stmt:bind_values(set)
|
|
if stmt:step() == db.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
|