2016-04-13 10:41:04 +02:00
|
|
|
%%%-------------------------------------------------------------------
|
|
|
|
%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net>
|
|
|
|
%%% @copyright (C) 2016, Evgeny Khramtsov
|
|
|
|
%%% @doc
|
|
|
|
%%%
|
|
|
|
%%% @end
|
|
|
|
%%% Created : 13 Apr 2016 by Evgeny Khramtsov <ekhramtsov@process-one.net>
|
|
|
|
%%%-------------------------------------------------------------------
|
|
|
|
-module(mod_caps_sql).
|
|
|
|
-behaviour(mod_caps).
|
|
|
|
|
2016-05-04 20:01:05 +02:00
|
|
|
-compile([{parse_transform, ejabberd_sql_pt}]).
|
|
|
|
|
2016-04-13 10:41:04 +02:00
|
|
|
%% API
|
|
|
|
-export([init/2, caps_read/2, caps_write/3, export/1]).
|
|
|
|
|
|
|
|
-include("mod_caps.hrl").
|
2016-05-04 20:01:05 +02:00
|
|
|
-include("ejabberd_sql_pt.hrl").
|
2016-04-13 10:41:04 +02:00
|
|
|
|
|
|
|
%%%===================================================================
|
|
|
|
%%% API
|
|
|
|
%%%===================================================================
|
|
|
|
init(_Host, _Opts) ->
|
|
|
|
ok.
|
|
|
|
|
|
|
|
caps_read(LServer, {Node, SubNode}) ->
|
2016-04-20 11:27:32 +02:00
|
|
|
case ejabberd_sql:sql_query(
|
2016-05-04 20:01:05 +02:00
|
|
|
LServer,
|
|
|
|
?SQL("select @(feature)s from caps_features where"
|
|
|
|
" node=%(Node)s and subnode=%(SubNode)s")) of
|
|
|
|
{selected, [{H}|_] = Fs} ->
|
|
|
|
case catch jlib:binary_to_integer(H) of
|
|
|
|
Int when is_integer(Int), Int>=0 ->
|
|
|
|
{ok, Int};
|
|
|
|
_ ->
|
|
|
|
{ok, [F || {F} <- Fs]}
|
|
|
|
end;
|
|
|
|
_ ->
|
|
|
|
error
|
2016-04-13 10:41:04 +02:00
|
|
|
end.
|
|
|
|
|
|
|
|
caps_write(LServer, NodePair, Features) ->
|
2016-04-20 11:27:32 +02:00
|
|
|
ejabberd_sql:sql_transaction(
|
2016-04-13 10:41:04 +02:00
|
|
|
LServer,
|
|
|
|
sql_write_features_t(NodePair, Features)).
|
|
|
|
|
|
|
|
export(_Server) ->
|
|
|
|
[{caps_features,
|
|
|
|
fun(_Host, #caps_features{node_pair = NodePair,
|
|
|
|
features = Features}) ->
|
|
|
|
sql_write_features_t(NodePair, Features);
|
|
|
|
(_Host, _R) ->
|
|
|
|
[]
|
|
|
|
end}].
|
|
|
|
|
|
|
|
%%%===================================================================
|
|
|
|
%%% Internal functions
|
|
|
|
%%%===================================================================
|
|
|
|
sql_write_features_t({Node, SubNode}, Features) ->
|
|
|
|
NewFeatures = if is_integer(Features) ->
|
|
|
|
[jlib:integer_to_binary(Features)];
|
|
|
|
true ->
|
|
|
|
Features
|
|
|
|
end,
|
2016-05-04 20:01:05 +02:00
|
|
|
[?SQL("delete from caps_features where node=%(Node)s"
|
|
|
|
" and subnode=%(SubNode)s;") |
|
|
|
|
[?SQL("insert into caps_features(node, subnode, feature)"
|
|
|
|
" values (%(Node)s, %(SubNode)s, %(F)s);") || F <- NewFeatures]].
|
2016-04-13 10:41:04 +02:00
|
|
|
|