From bc672b44ea381e0660eb52d06ef2195c4f269674 Mon Sep 17 00:00:00 2001 From: Alexey Shchepin Date: Mon, 8 Mar 2004 20:20:15 +0000 Subject: [PATCH] * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) * src/mod_muc/mod_muc_room.erl: Now private conferences are visible to admins and owners of this conference (thanks to Sergei Golovan) * src/mod_muc/mod_muc.erl: More xml:lang support (thanks to Sergei Golovan) * src/mod_vcard.erl: Better processing of EMAIL tag (thanks to Sergei Golovan) * src/ejabberd_s2s_out.erl: Added "catch" to "open_socket" (thanks to Sergei Golovan) SVN Revision: 211 --- ChangeLog | 17 +++++++++++++++++ src/ejabberd_s2s_out.erl | 9 +++++++-- src/mod_muc/mod_muc.erl | 8 ++++---- src/mod_muc/mod_muc_room.erl | 15 ++++++++++++--- src/mod_vcard.erl | 9 ++++++++- src/msgs/ru.msg | 1 + 6 files changed, 49 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7f89328bd..d5d10c312 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2004-03-08 Alexey Shchepin + + * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) + + * src/mod_muc/mod_muc_room.erl: Now private conferences are + visible to admins and owners of this conference (thanks to Sergei + Golovan) + + * src/mod_muc/mod_muc.erl: More xml:lang support (thanks to Sergei + Golovan) + + * src/mod_vcard.erl: Better processing of EMAIL tag (thanks to + Sergei Golovan) + + * src/ejabberd_s2s_out.erl: Added "catch" to "open_socket" (thanks + to Sergei Golovan) + 2004-03-07 Alexey Shchepin * src/web/ejabberd_http_poll.erl: Completed diff --git a/src/ejabberd_s2s_out.erl b/src/ejabberd_s2s_out.erl index 7899b3d5b..660a56779 100644 --- a/src/ejabberd_s2s_out.erl +++ b/src/ejabberd_s2s_out.erl @@ -114,8 +114,8 @@ open_socket(init, StateData) -> {ok, _Socket} = R -> R; {error, Reason1} -> ?DEBUG("s2s_out: connect return ~p~n", [Reason1]), - gen_tcp:connect(Addr, Port, - [binary, {packet, 0}, inet6]) + catch gen_tcp:connect(Addr, Port, + [binary, {packet, 0}, inet6]) end, case Res of {ok, Socket} -> @@ -130,6 +130,11 @@ open_socket(init, StateData) -> ?DEBUG("s2s_out: inet6 connect return ~p~n", [Reason]), Error = ?ERR_REMOTE_SERVER_NOT_FOUND, bounce_messages(Error), + {stop, normal, StateData}; + {'EXIT', Reason} -> + ?DEBUG("s2s_out: inet6 connect crashed ~p~n", [Reason]), + Error = ?ERR_REMOTE_SERVER_NOT_FOUND, + bounce_messages(Error), {stop, normal, StateData} end. diff --git a/src/mod_muc/mod_muc.erl b/src/mod_muc/mod_muc.erl index 551182b3d..0098ae5d9 100644 --- a/src/mod_muc/mod_muc.erl +++ b/src/mod_muc/mod_muc.erl @@ -280,19 +280,19 @@ iq_disco_info() -> {xmlelement, "feature", [{"var", ?NS_VCARD}], []}]. -process_iq_disco_items(Host, From, To, IQ) -> +process_iq_disco_items(Host, From, To, #iq{lang = Lang} = IQ) -> Res = IQ#iq{type = result, sub_el = [{xmlelement, "query", [{"xmlns", ?NS_DISCO_ITEMS}], - iq_disco_items(Host, From)}]}, + iq_disco_items(Host, From, Lang)}]}, ejabberd_router:route(To, From, jlib:iq_to_xml(Res)). -iq_disco_items(Host, From) -> +iq_disco_items(Host, From, Lang) -> lists:zf(fun(#muc_online_room{name = Name, pid = Pid}) -> case catch gen_fsm:sync_send_all_state_event( - Pid, {get_disco_item, From}, 100) of + Pid, {get_disco_item, From, Lang}, 100) of {item, Desc} -> {true, {xmlelement, "item", diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl index 2aca20b1b..47e25cf72 100644 --- a/src/mod_muc/mod_muc_room.erl +++ b/src/mod_muc/mod_muc_room.erl @@ -583,7 +583,7 @@ handle_event(Event, StateName, StateData) -> %% {stop, Reason, NewStateData} | %% {stop, Reason, Reply, NewStateData} %%---------------------------------------------------------------------- -handle_sync_event({get_disco_item, JID}, From, StateName, StateData) -> +handle_sync_event({get_disco_item, JID, Lang}, From, StateName, StateData) -> FAffiliation = get_affiliation(JID, StateData), FRole = get_role(JID, StateData), Tail = @@ -592,12 +592,21 @@ handle_sync_event({get_disco_item, JID}, From, StateName, StateData) -> (FAffiliation == admin) orelse (FAffiliation == owner) of true -> + Desc = case (StateData#state.config)#config.public of + true -> + ""; + _ -> + translate:translate(Lang, "private, ") + end, Len = length(?DICT:to_list(StateData#state.users)), - " (" ++ integer_to_list(Len) ++ ")"; + " (" ++ Desc ++ integer_to_list(Len) ++ ")"; _ -> "" end, - Reply = case (StateData#state.config)#config.public of + Reply = case ((StateData#state.config)#config.public == true) orelse + (FRole /= none) orelse + (FAffiliation == admin) orelse + (FAffiliation == owner) of true -> {item, get_title(StateData) ++ Tail}; _ -> diff --git a/src/mod_vcard.erl b/src/mod_vcard.erl index e56a4454d..5f6bf4f5e 100644 --- a/src/mod_vcard.erl +++ b/src/mod_vcard.erl @@ -147,9 +147,16 @@ set_vcard(User, VCARD) -> BDay = xml:get_path_s(VCARD, [{elem, "BDAY"}, cdata]), CTRY = xml:get_path_s(VCARD, [{elem, "ADR"}, {elem, "CTRY"}, cdata]), Locality = xml:get_path_s(VCARD, [{elem, "ADR"}, {elem, "LOCALITY"},cdata]), - EMail = xml:get_path_s(VCARD, [{elem, "EMAIL"}, cdata]), + EMail1 = xml:get_path_s(VCARD, [{elem, "EMAIL"}, {elem, "USERID"},cdata]), + EMail2 = xml:get_path_s(VCARD, [{elem, "EMAIL"}, cdata]), OrgName = xml:get_path_s(VCARD, [{elem, "ORG"}, {elem, "ORGNAME"}, cdata]), OrgUnit = xml:get_path_s(VCARD, [{elem, "ORG"}, {elem, "ORGUNIT"}, cdata]), + EMail = case EMail1 of + "" -> + EMail2; + _ -> + EMail1 + end, LUser = jlib:nodeprep(User), LFN = stringprep:tolower(FN), diff --git a/src/msgs/ru.msg b/src/msgs/ru.msg index 09c2c06ca..3a24f78ed 100644 --- a/src/msgs/ru.msg +++ b/src/msgs/ru.msg @@ -167,6 +167,7 @@ {"Invalid affiliation: ~s", "Недопустимый ранг: ~s"}. {"Invalid role: ~s", "Недопустимая роль: ~s"}. {"Owner privileges required", "Требуются права владельца"}. +{"private, ", "приватная, "}. % mod_irc/mod_irc.erl {"ejabberd IRC module\nCopyright (c) 2003-2004 Alexey Shchepin",