#!/usr/bin/lua require("luci.fs") local uci = require "luci.model.uci" local x = uci.cursor() local update_url = "http://map.berlin.freifunk.net/freifunkmap.php?update=%.15f,%.15f¬e=%s&olsrip=%s" local update_all = ( arg[1] and arg[1] == "all" ) and true or false local file x:foreach("olsrd", "LoadPlugin", function(s) if s.library == "olsrd_nameservice.so.0.3" then luci.fs.copy (s.latlon_file, "/tmp/ff_mapupdate.latlon") file = io.open("/tmp/ff_mapupdate.latlon") end end) if file then local ln local count = 0 while true do ln = file:read("*l") if not ln then break end if update_all and ln:match("^Node%(") then local ip, lat, lon, note = ln:match("Node%('(%S+)',([%d%.]+),([%d%.]+),%d+,'%S+','(%S+)'%)") lat = tonumber(lat) lon = tonumber(lon) if ip and lat ~= 0.0 and lon ~= 0.0 and note then note = note:gsub("[^%w%-%.]+", "_") os.execute("wget -qO/dev/null %q" % string.format(update_url, lat, lon, note, ip)) count = count + 1 end elseif ln:match("^Self%(") then local ip, lat, lon, note = ln:match("Self%('(%S+)',([%d%.]+),([%d%.]+),%d+,'%S+','(%S+)'%)") lat = tonumber(lat) lot = tonumber(lon) if ip and lat ~= 0.0 and lon ~= 0.0 and note then note = note:gsub("[^%w%-%.]+", "_") os.execute("wget -qO/dev/null %q" % string.format(update_url, lat, lon, note, ip)) count = count + 1 end end end os.execute("logger -t 'mapupdate' 'Updated %d entries in freifunk map'" % count) file:close() end