mirror of
https://github.com/processone/ejabberd.git
synced 2024-10-19 15:32:08 +02:00
1676 lines
50 KiB
Erlang
1676 lines
50 KiB
Erlang
|
%% Created automatically by xdata generator (xdata_codec.erl)
|
||
|
%% Source: muc_roomconfig.xdata
|
||
|
%% Form type: http://jabber.org/protocol/muc#roomconfig
|
||
|
%% Document: XEP-0045
|
||
|
|
||
|
-module(muc_roomconfig).
|
||
|
|
||
|
-export([decode/1, decode/2, encode/1, encode/2,
|
||
|
format_error/1]).
|
||
|
|
||
|
-include("xmpp_codec.hrl").
|
||
|
|
||
|
-include("muc_roomconfig.hrl").
|
||
|
|
||
|
-export_type([{property, 0}, {result, 0}, {form, 0}]).
|
||
|
|
||
|
dec_int(Val, Min, Max) ->
|
||
|
case list_to_integer(binary_to_list(Val)) of
|
||
|
Int when Int =< Max, Min == infinity -> Int;
|
||
|
Int when Int =< Max, Int >= Min -> Int
|
||
|
end.
|
||
|
|
||
|
enc_int(Int) -> integer_to_binary(Int).
|
||
|
|
||
|
dec_enum(Val, Enums) ->
|
||
|
AtomVal = erlang:binary_to_existing_atom(Val, utf8),
|
||
|
case lists:member(AtomVal, Enums) of
|
||
|
true -> AtomVal
|
||
|
end.
|
||
|
|
||
|
enc_enum(Atom) -> erlang:atom_to_binary(Atom, utf8).
|
||
|
|
||
|
dec_enum_int(Val, Enums, Min, Max) ->
|
||
|
try dec_int(Val, Min, Max) catch
|
||
|
_:_ -> dec_enum(Val, Enums)
|
||
|
end.
|
||
|
|
||
|
enc_enum_int(Int) when is_integer(Int) -> enc_int(Int);
|
||
|
enc_enum_int(Atom) -> enc_enum(Atom).
|
||
|
|
||
|
dec_bool(<<"1">>) -> true;
|
||
|
dec_bool(<<"0">>) -> false;
|
||
|
dec_bool(<<"true">>) -> true;
|
||
|
dec_bool(<<"false">>) -> false.
|
||
|
|
||
|
enc_bool(true) -> <<"1">>;
|
||
|
enc_bool(false) -> <<"0">>.
|
||
|
|
||
|
enc_jid(J) -> jid:to_string(J).
|
||
|
|
||
|
dec_jid(Val) ->
|
||
|
case jid:from_string(Val) of
|
||
|
error -> erlang:error(badarg);
|
||
|
J -> J
|
||
|
end.
|
||
|
|
||
|
format_error({form_type_mismatch, Type}) ->
|
||
|
<<"FORM_TYPE doesn't match '", Type/binary, "'">>;
|
||
|
format_error({bad_var_value, Var, Type}) ->
|
||
|
<<"Bad value of field '", Var/binary, "' of type '",
|
||
|
Type/binary, "'">>;
|
||
|
format_error({missing_value, Var, Type}) ->
|
||
|
<<"Missing value of field '", Var/binary, "' of type '",
|
||
|
Type/binary, "'">>;
|
||
|
format_error({too_many_values, Var, Type}) ->
|
||
|
<<"Too many values for field '", Var/binary,
|
||
|
"' of type '", Type/binary, "'">>;
|
||
|
format_error({unknown_var, Var, Type}) ->
|
||
|
<<"Unknown field '", Var/binary, "' of type '",
|
||
|
Type/binary, "'">>;
|
||
|
format_error({missing_required_var, Var, Type}) ->
|
||
|
<<"Missing required field '", Var/binary, "' of type '",
|
||
|
Type/binary, "'">>.
|
||
|
|
||
|
decode(Fs) -> decode(Fs, []).
|
||
|
|
||
|
decode(Fs, Acc) ->
|
||
|
case lists:keyfind(<<"FORM_TYPE">>, #xdata_field.var,
|
||
|
Fs)
|
||
|
of
|
||
|
false -> decode(Fs, Acc, []);
|
||
|
#xdata_field{values =
|
||
|
[<<"http://jabber.org/protocol/muc#roomconfig">>]} ->
|
||
|
decode(Fs, Acc, []);
|
||
|
_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{form_type_mismatch,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end.
|
||
|
|
||
|
encode(Cfg) -> encode(Cfg, fun (Text) -> Text end).
|
||
|
|
||
|
encode(List, Translate) when is_list(List) ->
|
||
|
Fs = [case Opt of
|
||
|
{maxhistoryfetch, Val} ->
|
||
|
[encode_maxhistoryfetch(Val, Translate)];
|
||
|
{maxhistoryfetch, _, _} -> erlang:error({badarg, Opt});
|
||
|
{allowpm, Val} ->
|
||
|
[encode_allowpm(Val, default, Translate)];
|
||
|
{allowpm, Val, Opts} ->
|
||
|
[encode_allowpm(Val, Opts, Translate)];
|
||
|
{allow_private_messages, Val} ->
|
||
|
[encode_allow_private_messages(Val, Translate)];
|
||
|
{allow_private_messages, _, _} ->
|
||
|
erlang:error({badarg, Opt});
|
||
|
{allow_private_messages_from_visitors, Val} ->
|
||
|
[encode_allow_private_messages_from_visitors(Val,
|
||
|
default,
|
||
|
Translate)];
|
||
|
{allow_private_messages_from_visitors, Val, Opts} ->
|
||
|
[encode_allow_private_messages_from_visitors(Val, Opts,
|
||
|
Translate)];
|
||
|
{allow_visitor_status, Val} ->
|
||
|
[encode_allow_visitor_status(Val, Translate)];
|
||
|
{allow_visitor_status, _, _} ->
|
||
|
erlang:error({badarg, Opt});
|
||
|
{allow_visitor_nickchange, Val} ->
|
||
|
[encode_allow_visitor_nickchange(Val, Translate)];
|
||
|
{allow_visitor_nickchange, _, _} ->
|
||
|
erlang:error({badarg, Opt});
|
||
|
{allow_voice_requests, Val} ->
|
||
|
[encode_allow_voice_requests(Val, Translate)];
|
||
|
{allow_voice_requests, _, _} ->
|
||
|
erlang:error({badarg, Opt});
|
||
|
{allow_subscription, Val} ->
|
||
|
[encode_allow_subscription(Val, Translate)];
|
||
|
{allow_subscription, _, _} ->
|
||
|
erlang:error({badarg, Opt});
|
||
|
{voice_request_min_interval, Val} ->
|
||
|
[encode_voice_request_min_interval(Val, Translate)];
|
||
|
{voice_request_min_interval, _, _} ->
|
||
|
erlang:error({badarg, Opt});
|
||
|
{captcha_protected, Val} ->
|
||
|
[encode_captcha_protected(Val, Translate)];
|
||
|
{captcha_protected, _, _} ->
|
||
|
erlang:error({badarg, Opt});
|
||
|
{captcha_whitelist, Val} ->
|
||
|
[encode_captcha_whitelist(Val, Translate)];
|
||
|
{captcha_whitelist, _, _} ->
|
||
|
erlang:error({badarg, Opt});
|
||
|
{allow_query_users, Val} ->
|
||
|
[encode_allow_query_users(Val, Translate)];
|
||
|
{allow_query_users, _, _} ->
|
||
|
erlang:error({badarg, Opt});
|
||
|
{allowinvites, Val} ->
|
||
|
[encode_allowinvites(Val, Translate)];
|
||
|
{allowinvites, _, _} -> erlang:error({badarg, Opt});
|
||
|
{changesubject, Val} ->
|
||
|
[encode_changesubject(Val, Translate)];
|
||
|
{changesubject, _, _} -> erlang:error({badarg, Opt});
|
||
|
{enablelogging, Val} ->
|
||
|
[encode_enablelogging(Val, Translate)];
|
||
|
{enablelogging, _, _} -> erlang:error({badarg, Opt});
|
||
|
{getmemberlist, Val} ->
|
||
|
[encode_getmemberlist(Val, default, Translate)];
|
||
|
{getmemberlist, Val, Opts} ->
|
||
|
[encode_getmemberlist(Val, Opts, Translate)];
|
||
|
{lang, Val} -> [encode_lang(Val, Translate)];
|
||
|
{lang, _, _} -> erlang:error({badarg, Opt});
|
||
|
{pubsub, Val} -> [encode_pubsub(Val, Translate)];
|
||
|
{pubsub, _, _} -> erlang:error({badarg, Opt});
|
||
|
{maxusers, Val} ->
|
||
|
[encode_maxusers(Val, default, Translate)];
|
||
|
{maxusers, Val, Opts} ->
|
||
|
[encode_maxusers(Val, Opts, Translate)];
|
||
|
{membersonly, Val} ->
|
||
|
[encode_membersonly(Val, Translate)];
|
||
|
{membersonly, _, _} -> erlang:error({badarg, Opt});
|
||
|
{moderatedroom, Val} ->
|
||
|
[encode_moderatedroom(Val, Translate)];
|
||
|
{moderatedroom, _, _} -> erlang:error({badarg, Opt});
|
||
|
{members_by_default, Val} ->
|
||
|
[encode_members_by_default(Val, Translate)];
|
||
|
{members_by_default, _, _} ->
|
||
|
erlang:error({badarg, Opt});
|
||
|
{passwordprotectedroom, Val} ->
|
||
|
[encode_passwordprotectedroom(Val, Translate)];
|
||
|
{passwordprotectedroom, _, _} ->
|
||
|
erlang:error({badarg, Opt});
|
||
|
{persistentroom, Val} ->
|
||
|
[encode_persistentroom(Val, Translate)];
|
||
|
{persistentroom, _, _} -> erlang:error({badarg, Opt});
|
||
|
{presencebroadcast, Val} ->
|
||
|
[encode_presencebroadcast(Val, default, Translate)];
|
||
|
{presencebroadcast, Val, Opts} ->
|
||
|
[encode_presencebroadcast(Val, Opts, Translate)];
|
||
|
{publicroom, Val} ->
|
||
|
[encode_publicroom(Val, Translate)];
|
||
|
{publicroom, _, _} -> erlang:error({badarg, Opt});
|
||
|
{public_list, Val} ->
|
||
|
[encode_public_list(Val, Translate)];
|
||
|
{public_list, _, _} -> erlang:error({badarg, Opt});
|
||
|
{roomadmins, Val} ->
|
||
|
[encode_roomadmins(Val, Translate)];
|
||
|
{roomadmins, _, _} -> erlang:error({badarg, Opt});
|
||
|
{roomdesc, Val} -> [encode_roomdesc(Val, Translate)];
|
||
|
{roomdesc, _, _} -> erlang:error({badarg, Opt});
|
||
|
{roomname, Val} -> [encode_roomname(Val, Translate)];
|
||
|
{roomname, _, _} -> erlang:error({badarg, Opt});
|
||
|
{roomowners, Val} ->
|
||
|
[encode_roomowners(Val, Translate)];
|
||
|
{roomowners, _, _} -> erlang:error({badarg, Opt});
|
||
|
{roomsecret, Val} ->
|
||
|
[encode_roomsecret(Val, Translate)];
|
||
|
{roomsecret, _, _} -> erlang:error({badarg, Opt});
|
||
|
{whois, Val} -> [encode_whois(Val, default, Translate)];
|
||
|
{whois, Val, Opts} ->
|
||
|
[encode_whois(Val, Opts, Translate)];
|
||
|
{mam, Val} -> [encode_mam(Val, Translate)];
|
||
|
{mam, _, _} -> erlang:error({badarg, Opt});
|
||
|
#xdata_field{} -> [Opt];
|
||
|
_ -> []
|
||
|
end
|
||
|
|| Opt <- List],
|
||
|
FormType = #xdata_field{var = <<"FORM_TYPE">>,
|
||
|
type = hidden,
|
||
|
values =
|
||
|
[<<"http://jabber.org/protocol/muc#roomconfig">>]},
|
||
|
[FormType | lists:flatten(Fs)].
|
||
|
|
||
|
decode([#xdata_field{var = <<"muc#maxhistoryfetch">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try Value of
|
||
|
Result ->
|
||
|
decode(Fs, [{maxhistoryfetch, Result} | Acc],
|
||
|
lists:delete(<<"muc#maxhistoryfetch">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#maxhistoryfetch">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"muc#maxhistoryfetch">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var = <<"muc#maxhistoryfetch">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var = <<"muc#maxhistoryfetch">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#maxhistoryfetch">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var = <<"muc#roomconfig_allowpm">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try Value of
|
||
|
Result ->
|
||
|
decode(Fs, [{allowpm, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_allowpm">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_allowpm">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"muc#roomconfig_allowpm">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"muc#roomconfig_allowpm">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var = <<"muc#roomconfig_allowpm">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#roomconfig_allowpm">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var = <<"allow_private_messages">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{allow_private_messages, Result} | Acc],
|
||
|
lists:delete(<<"allow_private_messages">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"allow_private_messages">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"allow_private_messages">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"allow_private_messages">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var = <<"allow_private_messages">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"allow_private_messages">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"allow_private_messages_from_visitors">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_enum(Value, [nobody, moderators, anyone]) of
|
||
|
Result ->
|
||
|
decode(Fs,
|
||
|
[{allow_private_messages_from_visitors, Result} | Acc],
|
||
|
lists:delete(<<"allow_private_messages_from_visitors">>,
|
||
|
Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value,
|
||
|
<<"allow_private_messages_from_visitors">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"allow_private_messages_from_visitors">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"allow_private_messages_from_visitors">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var =
|
||
|
<<"allow_private_messages_from_visitors">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values,
|
||
|
<<"allow_private_messages_from_visitors">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var = <<"allow_visitor_status">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{allow_visitor_status, Result} | Acc],
|
||
|
lists:delete(<<"allow_visitor_status">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"allow_visitor_status">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"allow_visitor_status">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var = <<"allow_visitor_status">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var = <<"allow_visitor_status">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"allow_visitor_status">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"allow_visitor_nickchange">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{allow_visitor_nickchange, Result} | Acc],
|
||
|
lists:delete(<<"allow_visitor_nickchange">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"allow_visitor_nickchange">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"allow_visitor_nickchange">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"allow_visitor_nickchange">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var =
|
||
|
<<"allow_visitor_nickchange">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"allow_visitor_nickchange">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var = <<"allow_voice_requests">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{allow_voice_requests, Result} | Acc],
|
||
|
lists:delete(<<"allow_voice_requests">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"allow_voice_requests">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"allow_voice_requests">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var = <<"allow_voice_requests">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var = <<"allow_voice_requests">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"allow_voice_requests">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var = <<"allow_subscription">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{allow_subscription, Result} | Acc],
|
||
|
lists:delete(<<"allow_subscription">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"allow_subscription">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"allow_subscription">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var = <<"allow_subscription">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var = <<"allow_subscription">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"allow_subscription">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"voice_request_min_interval">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_int(Value, 0, infinity) of
|
||
|
Result ->
|
||
|
decode(Fs, [{voice_request_min_interval, Result} | Acc],
|
||
|
lists:delete(<<"voice_request_min_interval">>,
|
||
|
Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"voice_request_min_interval">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"voice_request_min_interval">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"voice_request_min_interval">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var =
|
||
|
<<"voice_request_min_interval">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"voice_request_min_interval">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var = <<"captcha_protected">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{captcha_protected, Result} | Acc],
|
||
|
lists:delete(<<"captcha_protected">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"captcha_protected">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"captcha_protected">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var = <<"captcha_protected">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var = <<"captcha_protected">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"captcha_protected">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var = <<"captcha_whitelist">>,
|
||
|
values = Values}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try [dec_jid(Value) || Value <- Values] of
|
||
|
Result ->
|
||
|
decode(Fs, [{captcha_whitelist, Result} | Acc],
|
||
|
lists:delete(<<"captcha_whitelist">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"captcha_whitelist">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"allow_query_users">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{allow_query_users, Result} | Acc],
|
||
|
lists:delete(<<"allow_query_users">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"allow_query_users">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"allow_query_users">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var = <<"allow_query_users">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var = <<"allow_query_users">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"allow_query_users">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_allowinvites">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{allowinvites, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_allowinvites">>,
|
||
|
Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_allowinvites">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_allowinvites">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"muc#roomconfig_allowinvites">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_allowinvites">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#roomconfig_allowinvites">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_changesubject">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{changesubject, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_changesubject">>,
|
||
|
Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_changesubject">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_changesubject">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"muc#roomconfig_changesubject">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_changesubject">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#roomconfig_changesubject">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_enablelogging">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{enablelogging, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_enablelogging">>,
|
||
|
Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_enablelogging">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_enablelogging">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"muc#roomconfig_enablelogging">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_enablelogging">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#roomconfig_enablelogging">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_getmemberlist">>,
|
||
|
values = Values}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try [Value || Value <- Values] of
|
||
|
Result ->
|
||
|
decode(Fs, [{getmemberlist, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_getmemberlist">>,
|
||
|
Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_getmemberlist">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"muc#roomconfig_lang">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try Value of
|
||
|
Result ->
|
||
|
decode(Fs, [{lang, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_lang">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_lang">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"muc#roomconfig_lang">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var = <<"muc#roomconfig_lang">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var = <<"muc#roomconfig_lang">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#roomconfig_lang">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var = <<"muc#roomconfig_pubsub">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try Value of
|
||
|
Result ->
|
||
|
decode(Fs, [{pubsub, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_pubsub">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_pubsub">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"muc#roomconfig_pubsub">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var = <<"muc#roomconfig_pubsub">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var = <<"muc#roomconfig_pubsub">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#roomconfig_pubsub">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_maxusers">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_enum_int(Value, [none], 0, infinity) of
|
||
|
Result ->
|
||
|
decode(Fs, [{maxusers, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_maxusers">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_maxusers">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_maxusers">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"muc#roomconfig_maxusers">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_maxusers">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#roomconfig_maxusers">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_membersonly">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{membersonly, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_membersonly">>,
|
||
|
Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_membersonly">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_membersonly">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"muc#roomconfig_membersonly">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_membersonly">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#roomconfig_membersonly">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_moderatedroom">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{moderatedroom, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_moderatedroom">>,
|
||
|
Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_moderatedroom">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_moderatedroom">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"muc#roomconfig_moderatedroom">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_moderatedroom">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#roomconfig_moderatedroom">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var = <<"members_by_default">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{members_by_default, Result} | Acc],
|
||
|
lists:delete(<<"members_by_default">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"members_by_default">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"members_by_default">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var = <<"members_by_default">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var = <<"members_by_default">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"members_by_default">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_passwordprotectedroom">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{passwordprotectedroom, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_passwordprotectedroom">>,
|
||
|
Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value,
|
||
|
<<"muc#roomconfig_passwordprotectedroom">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_passwordprotectedroom">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"muc#roomconfig_passwordprotectedroom">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_passwordprotectedroom">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values,
|
||
|
<<"muc#roomconfig_passwordprotectedroom">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_persistentroom">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{persistentroom, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_persistentroom">>,
|
||
|
Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_persistentroom">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_persistentroom">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"muc#roomconfig_persistentroom">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_persistentroom">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#roomconfig_persistentroom">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_presencebroadcast">>,
|
||
|
values = Values}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try [dec_enum(Value, [moderator, participant, visitor])
|
||
|
|| Value <- Values]
|
||
|
of
|
||
|
Result ->
|
||
|
decode(Fs, [{presencebroadcast, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_presencebroadcast">>,
|
||
|
Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_presencebroadcast">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_publicroom">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{publicroom, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_publicroom">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_publicroom">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_publicroom">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"muc#roomconfig_publicroom">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_publicroom">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#roomconfig_publicroom">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var = <<"public_list">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{public_list, Result} | Acc],
|
||
|
lists:delete(<<"public_list">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"public_list">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"public_list">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var = <<"public_list">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var = <<"public_list">>} | _], _,
|
||
|
_) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"public_list">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_roomadmins">>,
|
||
|
values = Values}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try [dec_jid(Value) || Value <- Values] of
|
||
|
Result ->
|
||
|
decode(Fs, [{roomadmins, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_roomadmins">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_roomadmins">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_roomdesc">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try Value of
|
||
|
Result ->
|
||
|
decode(Fs, [{roomdesc, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_roomdesc">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_roomdesc">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_roomdesc">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"muc#roomconfig_roomdesc">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_roomdesc">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#roomconfig_roomdesc">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_roomname">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try Value of
|
||
|
Result ->
|
||
|
decode(Fs, [{roomname, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_roomname">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_roomname">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_roomname">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"muc#roomconfig_roomname">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_roomname">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#roomconfig_roomname">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_roomowners">>,
|
||
|
values = Values}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try [dec_jid(Value) || Value <- Values] of
|
||
|
Result ->
|
||
|
decode(Fs, [{roomowners, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_roomowners">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_roomowners">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_roomsecret">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try Value of
|
||
|
Result ->
|
||
|
decode(Fs, [{roomsecret, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_roomsecret">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_roomsecret">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_roomsecret">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var =
|
||
|
<<"muc#roomconfig_roomsecret">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var =
|
||
|
<<"muc#roomconfig_roomsecret">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#roomconfig_roomsecret">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var = <<"muc#roomconfig_whois">>,
|
||
|
values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_enum(Value, [moderators, anyone]) of
|
||
|
Result ->
|
||
|
decode(Fs, [{whois, Result} | Acc],
|
||
|
lists:delete(<<"muc#roomconfig_whois">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"muc#roomconfig_whois">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"muc#roomconfig_whois">>,
|
||
|
values = []} =
|
||
|
F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var = <<"muc#roomconfig_whois">>,
|
||
|
values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var = <<"muc#roomconfig_whois">>}
|
||
|
| _],
|
||
|
_, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"muc#roomconfig_whois">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var = <<"mam">>, values = [Value]}
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
try dec_bool(Value) of
|
||
|
Result ->
|
||
|
decode(Fs, [{mam, Result} | Acc],
|
||
|
lists:delete(<<"mam">>, Required))
|
||
|
catch
|
||
|
_:_ ->
|
||
|
erlang:error({?MODULE,
|
||
|
{bad_var_value, <<"mam">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}})
|
||
|
end;
|
||
|
decode([#xdata_field{var = <<"mam">>, values = []} = F
|
||
|
| Fs],
|
||
|
Acc, Required) ->
|
||
|
decode([F#xdata_field{var = <<"mam">>, values = [<<>>]}
|
||
|
| Fs],
|
||
|
Acc, Required);
|
||
|
decode([#xdata_field{var = <<"mam">>} | _], _, _) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{too_many_values, <<"mam">>,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([#xdata_field{var = Var} | Fs], Acc, Required) ->
|
||
|
if Var /= <<"FORM_TYPE">> ->
|
||
|
erlang:error({?MODULE,
|
||
|
{unknown_var, Var,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
true -> decode(Fs, Acc, Required)
|
||
|
end;
|
||
|
decode([], _, [Var | _]) ->
|
||
|
erlang:error({?MODULE,
|
||
|
{missing_required_var, Var,
|
||
|
<<"http://jabber.org/protocol/muc#roomconfig">>}});
|
||
|
decode([], Acc, []) -> Acc.
|
||
|
|
||
|
encode_maxhistoryfetch(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
<<>> -> [];
|
||
|
Value -> [Value]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"muc#maxhistoryfetch">>,
|
||
|
values = Values, required = false, type = 'text-single',
|
||
|
options = Opts, desc = <<>>,
|
||
|
label =
|
||
|
Translate(<<"Maximum Number of History Messages Returned "
|
||
|
"by Room">>)}.
|
||
|
|
||
|
encode_allowpm(Value, Options, Translate) ->
|
||
|
Values = case Value of
|
||
|
<<>> -> [];
|
||
|
Value -> [Value]
|
||
|
end,
|
||
|
Opts = if Options == default -> [];
|
||
|
true ->
|
||
|
[#xdata_option{label = Translate(L), value = V}
|
||
|
|| {L, V} <- Options]
|
||
|
end,
|
||
|
#xdata_field{var = <<"muc#roomconfig_allowpm">>,
|
||
|
values = Values, required = false, type = 'list-single',
|
||
|
options = Opts, desc = <<>>,
|
||
|
label =
|
||
|
Translate(<<"Roles that May Send Private Messages">>)}.
|
||
|
|
||
|
encode_allow_private_messages(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"allow_private_messages">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label =
|
||
|
Translate(<<"Allow users to send private messages">>)}.
|
||
|
|
||
|
encode_allow_private_messages_from_visitors(Value,
|
||
|
Options, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_enum(Value)]
|
||
|
end,
|
||
|
Opts = if Options == default ->
|
||
|
[#xdata_option{label = Translate(<<"nobody">>),
|
||
|
value = <<"nobody">>},
|
||
|
#xdata_option{label = Translate(<<"moderators only">>),
|
||
|
value = <<"moderators">>},
|
||
|
#xdata_option{label = Translate(<<"anyone">>),
|
||
|
value = <<"anyone">>}];
|
||
|
true ->
|
||
|
[#xdata_option{label = Translate(L),
|
||
|
value = enc_enum(V)}
|
||
|
|| {L, V} <- Options]
|
||
|
end,
|
||
|
#xdata_field{var =
|
||
|
<<"allow_private_messages_from_visitors">>,
|
||
|
values = Values, required = false, type = 'list-single',
|
||
|
options = Opts, desc = <<>>,
|
||
|
label =
|
||
|
Translate(<<"Allow visitors to send private messages to">>)}.
|
||
|
|
||
|
encode_allow_visitor_status(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"allow_visitor_status">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label =
|
||
|
Translate(<<"Allow visitors to send status text in "
|
||
|
"presence updates">>)}.
|
||
|
|
||
|
encode_allow_visitor_nickchange(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"allow_visitor_nickchange">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label =
|
||
|
Translate(<<"Allow visitors to change nickname">>)}.
|
||
|
|
||
|
encode_allow_voice_requests(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"allow_voice_requests">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label =
|
||
|
Translate(<<"Allow visitors to send voice requests">>)}.
|
||
|
|
||
|
encode_allow_subscription(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"allow_subscription">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Allow subscription">>)}.
|
||
|
|
||
|
encode_voice_request_min_interval(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_int(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"voice_request_min_interval">>,
|
||
|
values = Values, required = false, type = 'text-single',
|
||
|
options = Opts, desc = <<>>,
|
||
|
label =
|
||
|
Translate(<<"Minimum interval between voice requests "
|
||
|
"(in seconds)">>)}.
|
||
|
|
||
|
encode_captcha_protected(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"captcha_protected">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Make room CAPTCHA protected">>)}.
|
||
|
|
||
|
encode_captcha_whitelist(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
[] -> [];
|
||
|
Value -> [enc_jid(V) || V <- Value]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"captcha_whitelist">>,
|
||
|
values = Values, required = false, type = 'jid-multi',
|
||
|
options = Opts, desc = <<>>,
|
||
|
label =
|
||
|
Translate(<<"Exclude Jabber IDs from CAPTCHA challenge">>)}.
|
||
|
|
||
|
encode_allow_query_users(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"allow_query_users">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label =
|
||
|
Translate(<<"Allow users to query other users">>)}.
|
||
|
|
||
|
encode_allowinvites(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"muc#roomconfig_allowinvites">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Allow users to send invites">>)}.
|
||
|
|
||
|
encode_changesubject(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"muc#roomconfig_changesubject">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label =
|
||
|
Translate(<<"Allow users to change the subject">>)}.
|
||
|
|
||
|
encode_enablelogging(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"muc#roomconfig_enablelogging">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Enable logging">>)}.
|
||
|
|
||
|
encode_getmemberlist(Value, Options, Translate) ->
|
||
|
Values = case Value of
|
||
|
[] -> [];
|
||
|
Value -> [Value]
|
||
|
end,
|
||
|
Opts = if Options == default -> [];
|
||
|
true ->
|
||
|
[#xdata_option{label = Translate(L), value = V}
|
||
|
|| {L, V} <- Options]
|
||
|
end,
|
||
|
#xdata_field{var = <<"muc#roomconfig_getmemberlist">>,
|
||
|
values = Values, required = false, type = 'list-multi',
|
||
|
options = Opts, desc = <<>>,
|
||
|
label =
|
||
|
Translate(<<"Roles and Affiliations that May Retrieve "
|
||
|
"Member List">>)}.
|
||
|
|
||
|
encode_lang(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
<<>> -> [];
|
||
|
Value -> [Value]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"muc#roomconfig_lang">>,
|
||
|
values = Values, required = false, type = 'text-single',
|
||
|
options = Opts, desc = <<>>,
|
||
|
label =
|
||
|
Translate(<<"Natural Language for Room Discussions">>)}.
|
||
|
|
||
|
encode_pubsub(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
<<>> -> [];
|
||
|
Value -> [Value]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"muc#roomconfig_pubsub">>,
|
||
|
values = Values, required = false, type = 'text-single',
|
||
|
options = Opts, desc = <<>>,
|
||
|
label =
|
||
|
Translate(<<"XMPP URI of Associated Publish-Subscribe "
|
||
|
"Node">>)}.
|
||
|
|
||
|
encode_maxusers(Value, Options, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_enum_int(Value)]
|
||
|
end,
|
||
|
Opts = if Options == default ->
|
||
|
[#xdata_option{label = Translate(<<"No limit">>),
|
||
|
value = <<"none">>},
|
||
|
#xdata_option{value = <<"5">>},
|
||
|
#xdata_option{value = <<"10">>},
|
||
|
#xdata_option{value = <<"20">>},
|
||
|
#xdata_option{value = <<"30">>},
|
||
|
#xdata_option{value = <<"50">>},
|
||
|
#xdata_option{value = <<"100">>},
|
||
|
#xdata_option{value = <<"200">>},
|
||
|
#xdata_option{value = <<"500">>},
|
||
|
#xdata_option{value = <<"1000">>},
|
||
|
#xdata_option{value = <<"2000">>},
|
||
|
#xdata_option{value = <<"5000">>}];
|
||
|
true ->
|
||
|
[#xdata_option{label = Translate(L),
|
||
|
value = enc_enum_int(V)}
|
||
|
|| {L, V} <- Options]
|
||
|
end,
|
||
|
#xdata_field{var = <<"muc#roomconfig_maxusers">>,
|
||
|
values = Values, required = false, type = 'list-single',
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Maximum Number of Occupants">>)}.
|
||
|
|
||
|
encode_membersonly(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"muc#roomconfig_membersonly">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Make room members-only">>)}.
|
||
|
|
||
|
encode_moderatedroom(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"muc#roomconfig_moderatedroom">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Make room moderated">>)}.
|
||
|
|
||
|
encode_members_by_default(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"members_by_default">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Default users as participants">>)}.
|
||
|
|
||
|
encode_passwordprotectedroom(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var =
|
||
|
<<"muc#roomconfig_passwordprotectedroom">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Make room password protected">>)}.
|
||
|
|
||
|
encode_persistentroom(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"muc#roomconfig_persistentroom">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Make room persistent">>)}.
|
||
|
|
||
|
encode_presencebroadcast(Value, Options, Translate) ->
|
||
|
Values = case Value of
|
||
|
[] -> [];
|
||
|
Value -> [enc_enum(V) || V <- Value]
|
||
|
end,
|
||
|
Opts = if Options == default ->
|
||
|
[#xdata_option{label = Translate(<<"Moderator">>),
|
||
|
value = <<"moderator">>},
|
||
|
#xdata_option{label = Translate(<<"Participant">>),
|
||
|
value = <<"participant">>},
|
||
|
#xdata_option{label = Translate(<<"Visitor">>),
|
||
|
value = <<"visitor">>}];
|
||
|
true ->
|
||
|
[#xdata_option{label = Translate(L),
|
||
|
value = enc_enum(V)}
|
||
|
|| {L, V} <- Options]
|
||
|
end,
|
||
|
#xdata_field{var =
|
||
|
<<"muc#roomconfig_presencebroadcast">>,
|
||
|
values = Values, required = false, type = 'list-multi',
|
||
|
options = Opts, desc = <<>>,
|
||
|
label =
|
||
|
Translate(<<"Roles for which Presence is Broadcasted">>)}.
|
||
|
|
||
|
encode_publicroom(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"muc#roomconfig_publicroom">>,
|
||
|
values = Values, required = false, type = boolean,
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Make room public searchable">>)}.
|
||
|
|
||
|
encode_public_list(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"public_list">>, values = Values,
|
||
|
required = false, type = boolean, options = Opts,
|
||
|
desc = <<>>,
|
||
|
label = Translate(<<"Make participants list public">>)}.
|
||
|
|
||
|
encode_roomadmins(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
[] -> [];
|
||
|
Value -> [enc_jid(V) || V <- Value]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"muc#roomconfig_roomadmins">>,
|
||
|
values = Values, required = false, type = 'jid-multi',
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Full List of Room Admins">>)}.
|
||
|
|
||
|
encode_roomdesc(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
<<>> -> [];
|
||
|
Value -> [Value]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"muc#roomconfig_roomdesc">>,
|
||
|
values = Values, required = false, type = 'text-single',
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Room description">>)}.
|
||
|
|
||
|
encode_roomname(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
<<>> -> [];
|
||
|
Value -> [Value]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"muc#roomconfig_roomname">>,
|
||
|
values = Values, required = false, type = 'text-single',
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Room title">>)}.
|
||
|
|
||
|
encode_roomowners(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
[] -> [];
|
||
|
Value -> [enc_jid(V) || V <- Value]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"muc#roomconfig_roomowners">>,
|
||
|
values = Values, required = false, type = 'jid-multi',
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Full List of Room Owners">>)}.
|
||
|
|
||
|
encode_roomsecret(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
<<>> -> [];
|
||
|
Value -> [Value]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"muc#roomconfig_roomsecret">>,
|
||
|
values = Values, required = false,
|
||
|
type = 'text-private', options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Password">>)}.
|
||
|
|
||
|
encode_whois(Value, Options, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_enum(Value)]
|
||
|
end,
|
||
|
Opts = if Options == default ->
|
||
|
[#xdata_option{label = Translate(<<"moderators only">>),
|
||
|
value = <<"moderators">>},
|
||
|
#xdata_option{label = Translate(<<"anyone">>),
|
||
|
value = <<"anyone">>}];
|
||
|
true ->
|
||
|
[#xdata_option{label = Translate(L),
|
||
|
value = enc_enum(V)}
|
||
|
|| {L, V} <- Options]
|
||
|
end,
|
||
|
#xdata_field{var = <<"muc#roomconfig_whois">>,
|
||
|
values = Values, required = false, type = 'list-single',
|
||
|
options = Opts, desc = <<>>,
|
||
|
label = Translate(<<"Present real Jabber IDs to">>)}.
|
||
|
|
||
|
encode_mam(Value, Translate) ->
|
||
|
Values = case Value of
|
||
|
undefined -> [];
|
||
|
Value -> [enc_bool(Value)]
|
||
|
end,
|
||
|
Opts = [],
|
||
|
#xdata_field{var = <<"mam">>, values = Values,
|
||
|
required = false, type = boolean, options = Opts,
|
||
|
desc = <<>>,
|
||
|
label = Translate(<<"Enable message archiving">>)}.
|