diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-05-22 16:14:28 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-05-22 16:14:28 +0300 |
commit | d7878ef1316d68910c7e2a1b67476bc210f1bc45 (patch) | |
tree | 3a7dca70644916f9bac627a00c1e2789a2682436 /src/mod_announce_sql.erl | |
parent | Describe command arguments and results in mod_muc_admin (diff) |
Implement cache for mod_announce
Diffstat (limited to 'src/mod_announce_sql.erl')
-rw-r--r-- | src/mod_announce_sql.erl | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/src/mod_announce_sql.erl b/src/mod_announce_sql.erl index 42d990ef..1dea0ba7 100644 --- a/src/mod_announce_sql.erl +++ b/src/mod_announce_sql.erl @@ -36,6 +36,7 @@ -include("xmpp.hrl"). -include("mod_announce.hrl"). -include("ejabberd_sql_pt.hrl"). +-include("logger.hrl"). %%%=================================================================== %%% API @@ -53,7 +54,7 @@ set_motd_users(LServer, USRs) -> "xml=''"]) end, USRs) end, - ejabberd_sql:sql_transaction(LServer, F). + transaction(LServer, F). set_motd(LServer, Packet) -> XML = fxml:element_to_binary(Packet), @@ -63,27 +64,24 @@ set_motd(LServer, Packet) -> ["!username=''", "xml=%(XML)s"]) end, - ejabberd_sql:sql_transaction(LServer, F). + transaction(LServer, F). delete_motd(LServer) -> F = fun() -> ejabberd_sql:sql_query_t(?SQL("delete from motd")) end, - ejabberd_sql:sql_transaction(LServer, F). + transaction(LServer, F). get_motd(LServer) -> case catch ejabberd_sql:sql_query( LServer, ?SQL("select @(xml)s from motd where username=''")) of {selected, [{XML}]} -> - case fxml_stream:parse_element(XML) of - {error, _} -> - error; - Packet -> - {ok, Packet} - end; + parse_element(XML); + {selected, []} -> + error; _ -> - error + {error, db_failure} end. is_motd_user(LUser, LServer) -> @@ -92,9 +90,11 @@ is_motd_user(LUser, LServer) -> ?SQL("select @(username)s from motd" " where username=%(LUser)s")) of {selected, [_|_]} -> - true; + {ok, true}; + {selected, []} -> + {ok, false}; _ -> - false + {error, db_failure} end. set_motd_user(LUser, LServer) -> @@ -104,7 +104,7 @@ set_motd_user(LUser, LServer) -> ["!username=%(LUser)s", "xml=''"]) end, - ejabberd_sql:sql_transaction(LServer, F). + transaction(LServer, F). export(_Server) -> [{motd, @@ -131,3 +131,18 @@ import(_, _, _) -> %%%=================================================================== %%% Internal functions %%%=================================================================== +transaction(LServer, F) -> + case ejabberd_sql:sql_transaction(LServer, F) of + {atomic, _} -> ok; + _ -> {error, db_failure} + end. + +parse_element(XML) -> + case fxml_stream:parse_element(XML) of + El when is_record(El, xmlel) -> + {ok, El}; + _ -> + ?ERROR_MSG("malformed XML element in SQL table " + "'motd' for username='': ~s", [XML]), + {error, db_failure} + end. |