mod_mam: Allow backend modules to add fulltext namespace in Service Discovery

This commit is contained in:
Badlop
2026-02-19 21:48:01 +01:00
parent 6ce687262e
commit 07580e6787
4 changed files with 30 additions and 8 deletions
+12 -6
View File
@@ -30,8 +30,8 @@
-protocol({xep, 359, '0.7.0', '15.09', "complete", ""}).
-protocol({xep, 424, '0.4.2', '24.02', "partial", "Tombstones not implemented"}).
-protocol({xep, 425, '0.3.0', '24.06', "complete", ""}).
-protocol({xep, 441, '0.2.0', '15.06', "complete", ""}).
-protocol({xep, 431, '0.2.0', '24.12', "complete", ""}).
-protocol({xep, 441, '0.2.0', '15.06', "complete", ""}).
-behaviour(gen_mod).
@@ -79,6 +79,7 @@
-callback delete_old_messages(binary() | global,
erlang:timestamp(),
all | chat | groupchat) -> any().
-callback additional_namespaces(binary()) -> [binary()].
-callback extended_fields(binary()) -> [mam_query:property() | #xdata_field{}].
-callback store(xmlel(), binary(), {binary(), binary()}, chat | groupchat,
jid(), binary(), recv | send, integer(), binary(),
@@ -627,12 +628,15 @@ parse_query(#mam_query{}, _Lang) ->
disco_local_features({error, _Error} = Acc, _From, _To, _Node, _Lang) ->
Acc;
disco_local_features(Acc, _From, _To, <<"">>, _Lang) ->
disco_local_features(Acc, _From, #jid{lserver = LServer} = _To, <<"">>, _Lang) ->
Features = case Acc of
{result, Fs} -> Fs;
empty -> []
end,
{result, [?NS_MESSAGE_RETRACT | Features]};
Mod = gen_mod:db_mod(LServer, ?MODULE),
AdditionalNamespaces = Mod:additional_namespaces(LServer),
Namespaces = [?NS_MESSAGE_RETRACT],
{result, lists:append([Namespaces, AdditionalNamespaces, Features])};
disco_local_features(empty, _From, _To, _Node, Lang) ->
Txt = ?T("No features available"),
{error, xmpp:err_item_not_found(Txt, Lang)};
@@ -644,9 +648,11 @@ disco_sm_features(empty, From, To, Node, Lang) ->
disco_sm_features({result, OtherFeatures},
#jid{luser = U, lserver = S},
#jid{luser = U, lserver = S}, <<"">>, _Lang) ->
{result, [?NS_MAM_TMP, ?NS_MAM_0, ?NS_MAM_1, ?NS_MAM_2, ?NS_SID_0,
?NS_MESSAGE_RETRACT |
OtherFeatures]};
Mod = gen_mod:db_mod(S, ?MODULE),
AdditionalNamespaces = Mod:additional_namespaces(S),
Namespaces = [?NS_MAM_TMP, ?NS_MAM_0, ?NS_MAM_1, ?NS_MAM_2, ?NS_SID_0,
?NS_MESSAGE_RETRACT],
{result, lists:append([Namespaces, AdditionalNamespaces, OtherFeatures])};
disco_sm_features(Acc, _From, _To, _Node, _Lang) ->
Acc.
+4
View File
@@ -29,6 +29,7 @@
%% API
-export([init/2, remove_user/2, remove_room/3, delete_old_messages/3,
additional_namespaces/1,
extended_fields/1, store/10, write_prefs/4, get_prefs/2, select/6,
remove_from_archive/3,
is_empty_for_user/2, is_empty_for_room/3, delete_old_messages_batch/5,
@@ -189,6 +190,9 @@ delete_old_messages_batch(LServer, TimeStamp, Type, Batch, LastUS) ->
{error, Err}
end.
additional_namespaces(_) ->
[].
extended_fields(_) ->
[].
+9
View File
@@ -30,6 +30,7 @@
%% API
-export([init/2, remove_user/2, remove_room/3, delete_old_messages/3,
additional_namespaces/1,
extended_fields/1, store/10, write_prefs/4, get_prefs/2, select/7, export/1, remove_from_archive/3,
is_empty_for_user/2, is_empty_for_room/3, select_with_mucsub/6,
delete_old_messages_batch/4, count_messages_to_delete/3]).
@@ -283,6 +284,14 @@ delete_old_messages(ServerHost, TimeStamp, Type) ->
end,
ok.
additional_namespaces(LServer) ->
case ejabberd_option:sql_type(LServer) of
mysql ->
[?NS_MAM_FULLTEXT_0];
_ ->
[]
end.
extended_fields(LServer) ->
case ejabberd_option:sql_type(LServer) of
mysql ->
+5 -2
View File
@@ -4496,10 +4496,13 @@ make_disco_info(From, StateData) ->
true -> [?NS_HATS];
false -> []
end
++ case {gen_mod:is_loaded(StateData#state.server_host, mod_mam),
++ case {gen_mod:is_loaded(ServerHost, mod_mam),
Config#config.mam} of
{true, true} ->
[?NS_MAM_TMP, ?NS_MAM_0, ?NS_MAM_1, ?NS_MAM_2, ?NS_SID_0];
Mod = gen_mod:db_mod(ServerHost, mod_mam),
AdditionalNamespaces = Mod:additional_namespaces(ServerHost),
[?NS_MAM_TMP, ?NS_MAM_0, ?NS_MAM_1, ?NS_MAM_2, ?NS_SID_0
| AdditionalNamespaces];
_ ->
[]
end,