summaryrefslogtreecommitdiff
path: root/indra/newview/scripts/lua
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2024-08-05 11:24:01 -0400
committerNat Goodspeed <nat@lindenlab.com>2024-08-05 11:24:01 -0400
commitb12d135c38e327774c01594acfa96e37a9e67a64 (patch)
tree1719f8ce969f99aea819875c35cbde5e9ee0bd32 /indra/newview/scripts/lua
parentaf947de6928daa70098edb8346effb9dc8146f47 (diff)
Fix a couple problems with "LLPanelLogin" listener (thanks Maxim!).
Convert plain grid (e.g. "agni") to domain form (e.g. "util.agni.lindenlab.com"). Fix a typo in `savedLogins()`: "login_list", not "login.list". login.lua now returns a table with two functions: `login.login()` and `login.savedLogins()`. Defend Lua caller against trying to engage login features too late in startup sequence: in addition to waiting for "STATE_LOGIN_WAIT", produce an error if `startup.state()` is beyond that state. Since by then `LLPanelLogin` is destroyed, `leap.request("LLPanelLogin", ...)` would get no response, causing the calling Lua script to hang until viewer shutdown.
Diffstat (limited to 'indra/newview/scripts/lua')
-rw-r--r--indra/newview/scripts/lua/require/login.lua23
-rw-r--r--indra/newview/scripts/lua/test_login.lua9
2 files changed, 28 insertions, 4 deletions
diff --git a/indra/newview/scripts/lua/require/login.lua b/indra/newview/scripts/lua/require/login.lua
index f4e65b1606..50fc9e3793 100644
--- a/indra/newview/scripts/lua/require/login.lua
+++ b/indra/newview/scripts/lua/require/login.lua
@@ -2,11 +2,32 @@ local leap = require 'leap'
local startup = require 'startup'
local mapargs = require 'mapargs'
-local function login(...)
+local login = {}
+
+local function ensure_login_state(op)
+ -- no point trying to login until the viewer is ready
startup.wait('STATE_LOGIN_WAIT')
+ -- Once we've actually started login, LLPanelLogin is destroyed, and so is
+ -- its "LLPanelLogin" listener. At that point,
+ -- leap.request("LLPanelLogin", ...) will hang indefinitely because no one
+ -- is listening on that LLEventPump any more. Intercept that case and
+ -- produce a sensible error.
+ local state = startup.state()
+ if startup.before('STATE_LOGIN_WAIT', state) then
+ error(`Can't engage login operation {op} once we've reached state {state}`, 2)
+ end
+end
+
+function login.login(...)
+ ensure_login_state('login')
local args = mapargs('username,grid,slurl', ...)
args.op = 'login'
return leap.request('LLPanelLogin', args)
end
+function login.savedLogins(grid)
+ ensure_login_state('savedLogins')
+ return leap.request('LLPanelLogin', {op='savedLogins'})['logins']
+end
+
return login
diff --git a/indra/newview/scripts/lua/test_login.lua b/indra/newview/scripts/lua/test_login.lua
index f263940f79..54d3635a41 100644
--- a/indra/newview/scripts/lua/test_login.lua
+++ b/indra/newview/scripts/lua/test_login.lua
@@ -1,7 +1,10 @@
inspect = require 'inspect'
login = require 'login'
-print(inspect(login{
- username='Nat Linden',
--- grid='agni'
+local grid = 'agni'
+print(inspect(login.savedLogins(grid)))
+
+print(inspect(login.login{
+ username='Your Username',
+ grid=grid
}))