mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-08-05 17:52:29 +00:00
43 lines
1.3 KiB
Lua
43 lines
1.3 KiB
Lua
-- the "rtorrent" table is passed in by the C++ code, modify and
|
|
-- return it for loading.
|
|
local args = {...}
|
|
local rtorrent = args[1]
|
|
|
|
-- Autocall
|
|
-- Allows syntax like `rtorrent.autocall.system.hostname()`
|
|
local mt = {}
|
|
function mt.__call (t, ...)
|
|
name = table.concat(rawget(t, "__namestack"), ".")
|
|
success, ret = pcall(rtorrent.call, name, ...)
|
|
if not success then error(name..": "..ret, 2) end
|
|
return ret
|
|
end
|
|
function mt.__index (t, key)
|
|
ns = rawget(t, "__namestack") or {}
|
|
table.insert(ns, key)
|
|
return setmetatable({__namestack=ns}, mt)
|
|
end
|
|
rtorrent["autocall"] = setmetatable({}, mt)
|
|
|
|
-- Autocall-config Same as autocall, but passes an empty first target
|
|
-- implicitly, for syntax like `rtorrent.autocall_config.session.directory.set("/tmp/")`
|
|
local mt = {}
|
|
function mt.__call (t, ...)
|
|
name = table.concat(rawget(t, "__namestack"), ".")
|
|
success, ret = pcall(rtorrent.call, name, "", ...)
|
|
if not success then error(name..": "..ret, 2) end
|
|
return ret
|
|
end
|
|
function mt.__index (t, key)
|
|
ns = rawget(t, "__namestack")
|
|
if ns == nil then
|
|
if _G[key] ~= nil then return _G[key] end
|
|
ns = {}
|
|
end
|
|
table.insert(ns, key)
|
|
return setmetatable({__namestack=ns}, mt)
|
|
end
|
|
rtorrent["autocall_config"] = setmetatable({}, mt)
|
|
|
|
return rtorrent
|