From 624a377d0c100f94bd8ef7916f9df08ce1106632 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Sat, 24 Oct 2026 18:31:50 +0200 Subject: [PATCH 1/5] allow setting sub-elements for `list-multi` fields This is required to set open validation as defined in XEP-0122: Data Forms Validation. We're not allowed to send a list of all possible values (and that wouldn't make much sense anyway). Thus we defer validation to the client. --- src/xdata_codec.erl | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/src/xdata_codec.erl b/src/xdata_codec.erl index f2ceca78..5da107cb 100644 --- a/src/xdata_codec.erl +++ b/src/xdata_codec.erl @@ -50,10 +50,10 @@ defaults = [] :: [{binary(), any()}]}). -define(is_multi_type(T), - ((T == 'list-multi') or (T == 'jid-multi') or (T == 'text-multi'))). + ((T == 'list-multi') orelse (T == 'jid-multi') orelse (T == 'text-multi'))). -define(is_list_type(T), - ((T == 'list-single') or (T == 'list-multi'))). + ((T == 'list-single') orelse (T == 'list-multi'))). %%%=================================================================== %%% API @@ -509,7 +509,7 @@ mk_decoder([], State) -> mk_encoders(Fs, State) -> lists:foreach( fun(#xdata_field{var = Var, desc = Desc, - label = Label, type = Type} = F) -> + label = Label, type = Type, sub_els = SubEls} = F) -> Spec0 = mk_typespec(F, State), Spec1 = case default(F, State) of undefined -> Spec0 ++ " | undefined"; @@ -538,16 +538,31 @@ mk_encoders(Fs, State) -> "'encode_~s'(Value, Lang, IsRequired) ->", [FieldName, Spec1, FieldName]) end, - emit(" Values = ~s," - " Opts = ~s," - " #xdata_field{var = ~p," - " values = Values," - " required = IsRequired," - " type = ~p," - " options = Opts," - " desc = ~s," - " label = ~s}.~n", - [EncVals, EncOpts, Var, Type, DescStr, LabelStr]) + if + ?is_multi_type(Type) andalso SubEls =/= [] -> + emit(" Values = ~s," + " Opts = ~s," + " #xdata_field{var = ~p," + " values = Values," + " required = IsRequired," + " type = ~p," + " options = Opts," + " desc = ~s," + " label = ~s," + " sub_els = ~p}.~n", + [EncVals, EncOpts, Var, Type, DescStr, LabelStr, SubEls]); + true -> + emit(" Values = ~s," + " Opts = ~s," + " #xdata_field{var = ~p," + " values = Values," + " required = IsRequired," + " type = ~p," + " options = Opts," + " desc = ~s," + " label = ~s}.~n", + [EncVals, EncOpts, Var, Type, DescStr, LabelStr]) + end end, Fs). mk_encoded_values(#xdata_field{var = Var, type = Type, From 52a3cd0cba701305e2fd411b709b9c8cdd32e9bf Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Sat, 24 Oct 2026 18:35:04 +0200 Subject: [PATCH 2/5] add fields defined for urn:xmpp:mam:2#extended --- specs/mam_query.xdata | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/specs/mam_query.xdata b/specs/mam_query.xdata index 52f12bfc..96372c98 100644 --- a/specs/mam_query.xdata +++ b/specs/mam_query.xdata @@ -1,5 +1,5 @@ - urn:xmpp:mam:1 + urn:xmpp:mam:2 XEP-0313 Form to query message archives + + + + +