Skip to content

Commit

Permalink
Improved on_post() to also accept a url
Browse files Browse the repository at this point in the history
  • Loading branch information
britzl committed Aug 31, 2023
1 parent b7053d2 commit 169236a
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 12 deletions.
8 changes: 5 additions & 3 deletions README_API.md
Original file line number Diff line number Diff line change
Expand Up @@ -212,12 +212,14 @@ IMPORTANT! You must call `monarch.on_message(message_id, message, sender)` from
* `fn` (function) - The function to call screen focus changes


## monarch.on_post(screen_id, fn)
Set a function to be called when `msg.post()` is called on a specific screen. IMPORTANT! You must call `monarch.on_message(message_id, message, sender)` from the same script as this function was called.
## monarch.on_post(screen_id, fn_or_url)
Set either a function to be called when `msg.post()` is called on a specific screen or a URL where the message is sent.

IMPORTANT! If you provide a function you must also make sure to call `monarch.on_message(message_id, message, sender)` from the same script as this function was called.

**PARAMETERS**
* `screen_id` (string|hash) - Id of the screen
* `fn` (function) - The function to call when the screen receives a message using `msg.post`
* `fn_or_url` (function) - The function to call or URL to send message to


## monarch.debug()
Expand Down
31 changes: 22 additions & 9 deletions monarch/monarch.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1330,21 +1330,34 @@ function M.on_focus_changed(id, fn)
screen.focus_fn = fn
end

local function set_on_post(id, fn, url)
end

---
-- Set a function to call when a screen is sent a message using monarch.post()
-- The function will receive (message_id, message, sender)
-- IMPORTANT! You must call monarch.on_message() from the same script as
-- this function was called
-- Set either a function to be called when msg.post() is called on a specific
-- screen or a URL where the message is sent.
-- IMPORTANT! If you provide a function you must also make sure to call
-- monarch.on_message(message_id, message, sender) from the same script as
-- this function was called.
-- @param id Screen id to associate the message listener function with
-- @param fn Message listener function
function M.on_post(id, fn)
-- @param fn_or_url The function to call or URL to send message to
function M.on_post(id, fn_or_url)
assert(id, "You must provide a screen id")
assert(fn, "You must provide a post receiver function")
id = tohash(id)
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
local screen = screens[id]
screen.receiver_url = msg.url()
screen.receiver_fn = fn

local t = type(fn_or_url)
if t == "function" then
screen.receiver_fn = fn_or_url
screen.receiver_url = msg.url()
elseif t == "userdata" then
screen.receiver_fn = nil
screen.receiver_url = fn_or_url
else
screen.receiver_fn = nil
screen.receiver_url = msg.url()
end
end

local function url_to_key(url)
Expand Down

0 comments on commit 169236a

Please sign in to comment.