diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-04-13 11:06:59 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-04-13 11:06:59 +0300 |
commit | 2d7e03f5e1ee09f006b206a18365ae07b855c875 (patch) | |
tree | d83af66325534f4d7f75aeebfad9416342c25d8b /src/mod_vcard_xupdate_mnesia.erl | |
parent | Clean mod_last.erl from DB specific code (diff) |
Clean mod_vcard_xupdate.erl from DB specific code
Diffstat (limited to 'src/mod_vcard_xupdate_mnesia.erl')
-rw-r--r-- | src/mod_vcard_xupdate_mnesia.erl | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/mod_vcard_xupdate_mnesia.erl b/src/mod_vcard_xupdate_mnesia.erl new file mode 100644 index 00000000..f1b1693e --- /dev/null +++ b/src/mod_vcard_xupdate_mnesia.erl @@ -0,0 +1,69 @@ +%%%------------------------------------------------------------------- +%%% @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_vcard_xupdate_mnesia). +-behaviour(mod_vcard_xupdate). + +%% API +-export([init/2, import/2, add_xupdate/3, get_xupdate/2, remove_xupdate/2]). + +-include("mod_vcard_xupdate.hrl"). +-include("logger.hrl"). + +%%%=================================================================== +%%% API +%%%=================================================================== +init(_Host, _Opts) -> + mnesia:create_table(vcard_xupdate, + [{disc_copies, [node()]}, + {attributes, + record_info(fields, vcard_xupdate)}]), + update_table(). + +add_xupdate(LUser, LServer, Hash) -> + F = fun () -> + mnesia:write(#vcard_xupdate{us = {LUser, LServer}, + hash = Hash}) + end, + mnesia:transaction(F). + +get_xupdate(LUser, LServer) -> + case mnesia:dirty_read(vcard_xupdate, {LUser, LServer}) + of + [#vcard_xupdate{hash = Hash}] -> Hash; + _ -> undefined + end. + +remove_xupdate(LUser, LServer) -> + F = fun () -> + mnesia:delete({vcard_xupdate, {LUser, LServer}}) + end, + mnesia:transaction(F). + +import(_LServer, #vcard_xupdate{} = R) -> + mnesia:dirty_write(R). + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== +update_table() -> + Fields = record_info(fields, vcard_xupdate), + case mnesia:table_info(vcard_xupdate, attributes) of + Fields -> + ejabberd_config:convert_table_to_binary( + vcard_xupdate, Fields, set, + fun(#vcard_xupdate{us = {U, _}}) -> U end, + fun(#vcard_xupdate{us = {U, S}, hash = Hash} = R) -> + R#vcard_xupdate{us = {iolist_to_binary(U), + iolist_to_binary(S)}, + hash = iolist_to_binary(Hash)} + end); + _ -> + ?INFO_MSG("Recreating vcard_xupdate table", []), + mnesia:transform_table(vcard_xupdate, ignore, Fields) + end. |