mirror of
https://github.com/processone/ejabberd.git
synced 2024-06-02 21:17:12 +02:00
Fix set_presence command to work in recent ejabberd
This commit is contained in:
parent
22e8f5fd51
commit
aaef1a14b4
|
@ -46,7 +46,7 @@
|
||||||
reject_unauthenticated_packet/2, process_closed/2,
|
reject_unauthenticated_packet/2, process_closed/2,
|
||||||
process_terminated/2, process_info/2]).
|
process_terminated/2, process_info/2]).
|
||||||
%% API
|
%% API
|
||||||
-export([get_presence/1, resend_presence/1, resend_presence/2,
|
-export([get_presence/1, set_presence/2, resend_presence/1, resend_presence/2,
|
||||||
open_session/1, call/3, send/2, close/1, close/2, stop/1,
|
open_session/1, call/3, send/2, close/1, close/2, stop/1,
|
||||||
reply/2, copy_state/2, set_timeout/2, route/2,
|
reply/2, copy_state/2, set_timeout/2, route/2,
|
||||||
host_up/1, host_down/1]).
|
host_up/1, host_down/1]).
|
||||||
|
@ -97,6 +97,10 @@ reply(Ref, Reply) ->
|
||||||
get_presence(Ref) ->
|
get_presence(Ref) ->
|
||||||
call(Ref, get_presence, 1000).
|
call(Ref, get_presence, 1000).
|
||||||
|
|
||||||
|
-spec set_presence(pid(), presence()) -> ok.
|
||||||
|
set_presence(Ref, Pres) ->
|
||||||
|
call(Ref, {set_presence, Pres}, 1000).
|
||||||
|
|
||||||
-spec resend_presence(pid()) -> ok.
|
-spec resend_presence(pid()) -> ok.
|
||||||
resend_presence(Pid) ->
|
resend_presence(Pid) ->
|
||||||
resend_presence(Pid, undefined).
|
resend_presence(Pid, undefined).
|
||||||
|
@ -525,6 +529,9 @@ handle_call(get_presence, From, #{jid := JID} = State) ->
|
||||||
end,
|
end,
|
||||||
reply(From, Pres),
|
reply(From, Pres),
|
||||||
State;
|
State;
|
||||||
|
handle_call({set_presence, Pres}, From, State) ->
|
||||||
|
reply(From, ok),
|
||||||
|
process_self_presence(State, Pres);
|
||||||
handle_call(Request, From, #{lserver := LServer} = State) ->
|
handle_call(Request, From, #{lserver := LServer} = State) ->
|
||||||
ejabberd_hooks:run_fold(
|
ejabberd_hooks:run_fold(
|
||||||
c2s_handle_call, LServer, State, [Request, From]).
|
c2s_handle_call, LServer, State, [Request, From]).
|
||||||
|
|
|
@ -1002,20 +1002,16 @@ set_presence(User, Host, Resource, Type, Show, Status, Priority0) ->
|
||||||
Priority = if is_integer(Priority0) -> Priority0;
|
Priority = if is_integer(Priority0) -> Priority0;
|
||||||
true -> binary_to_integer(Priority0)
|
true -> binary_to_integer(Priority0)
|
||||||
end,
|
end,
|
||||||
case ejabberd_sm:get_session_pid(User, Host, Resource) of
|
Pres = #presence{
|
||||||
none ->
|
from = jid:make(User, Host, Resource),
|
||||||
error;
|
to = jid:make(User, Host),
|
||||||
Pid ->
|
type = misc:binary_to_atom(Type),
|
||||||
From = jid:make(User, Host, Resource),
|
status = xmpp:mk_text(Status),
|
||||||
To = jid:make(User, Host),
|
show = misc:binary_to_atom(Show),
|
||||||
Presence = #presence{from = From, to = To,
|
priority = Priority,
|
||||||
type = misc:binary_to_atom(Type),
|
sub_els = []},
|
||||||
show = misc:binary_to_atom(Show),
|
Ref = ejabberd_sm:get_session_pid(User, Host, Resource),
|
||||||
status = xmpp:mk_text(Status),
|
ejabberd_c2s:set_presence(Ref, Pres).
|
||||||
priority = Priority},
|
|
||||||
Pid ! {route, Presence},
|
|
||||||
ok
|
|
||||||
end.
|
|
||||||
|
|
||||||
user_sessions_info(User, Host) ->
|
user_sessions_info(User, Host) ->
|
||||||
CurrentSec = calendar:datetime_to_gregorian_seconds({date(), time()}),
|
CurrentSec = calendar:datetime_to_gregorian_seconds({date(), time()}),
|
||||||
|
|
Loading…
Reference in New Issue
Block a user