contrib/lua/md5check.lua
-- Check MD5 sums of download files automagically (it expects them in
-- downloadedfile.txt).

----------------------------------------------------------------------
-- Installation
----------------------------------------------------------------------
--
-- 1. Put this into your hooks.lua.  Alternatively you can put
-- this in a separate file and `dofile' it.
--
-- 2. Edit your `console_hook_functions' table in hooks.lua. e.g.
--
--	console_hook_functions = {
--	    ...
--	    md5 = md5,
--	    ...
--	}
--
-- 3. Edit the second last line of this file to point to your
-- download directory.  Sorry, but ELinks can't get this
-- information automatically (yet?).

function md5sum_check(download_dir)
    local results = {}
    string.gsub(current_document(), "([a-z%d]+)  ([^\n]+)\n",
	function (sum, filename)
	    -- lua regexps don't seem to be able to do this
	    if string.len(sum) ~= 32 then return end

	    local fn = download_dir.."/"..filename
	    if file_exists(fn) then
		local localsum = string.gsub(pipe_read("md5sum "..fn),
					     "^([a-z%d]+).*$", "%1")
		table.insert(results, filename.. " -- "..
			     ((sum == localsum) and "ok\n" or "MISMATCH!\n"))
	    end
	end)

    local tmp = tmpname()..'.txt'
    writeto(tmp)
    results.n = nil
    for i,v in results do write(v) end
    writeto()
    table.insert(tmp_files, tmp)
    return 'goto_url', tmp
end

function md5()
    -- Edit this to match your download directory.
    return md5sum_check(home_dir .. "/download")
end
