xmpp.chapril.org-ejabberd/src/muc_roomconfig.erl

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">>)}.