mod_mam: Allow backend modules to add fulltext namespace in Service Discovery
This commit is contained in:
+12
-6
@@ -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.
|
||||
|
||||
|
||||
@@ -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(_) ->
|
||||
[].
|
||||
|
||||
|
||||
@@ -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 ->
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user