diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2012-04-06 12:31:29 +1000 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2012-04-06 12:31:29 +1000 |
commit | cea23b055b26ff851944c93c54c58057df9f0fed (patch) | |
tree | 2c93bbd185630d4dcba3535a2a973092d281aeb3 /src/mod_irc | |
parent | ODBC support for mod_shared_roster (diff) |
Get rid of duplicated code
Diffstat (limited to 'src/mod_irc')
-rw-r--r-- | src/mod_irc/mod_irc_odbc.erl | 70 |
1 files changed, 20 insertions, 50 deletions
diff --git a/src/mod_irc/mod_irc_odbc.erl b/src/mod_irc/mod_irc_odbc.erl index ade98caff..ab0fafe14 100644 --- a/src/mod_irc/mod_irc_odbc.erl +++ b/src/mod_irc/mod_irc_odbc.erl @@ -34,7 +34,6 @@ -export([start_link/2, start/2, stop/1, - encode_data/1, closed_connection/3, get_connection_params/3]). @@ -549,7 +548,7 @@ get_form(ServerHost, Host, From, [], Lang) -> ["select data from irc_custom where " "jid='", SJID, "' and host='", SHost, "';"]) of {selected, ["data"], [{SData}]} -> - Data = decode_data(SData), + Data = ejabberd_odbc:decode_term(SData), {xml:get_attr_s(username, Data), xml:get_attr_s(connections_params, Data)}; {'EXIT', _} -> @@ -647,7 +646,7 @@ set_form(ServerHost, Host, From, [], _Lang, XData) -> {ok, Tokens, _} -> case erl_parse:parse_term(Tokens) of {ok, ConnectionsParams} -> - SData = encode_data( + SData = ejabberd_odbc:encode_term( [{username, Username}, {connections_params, @@ -655,12 +654,13 @@ set_form(ServerHost, Host, From, [], _Lang, XData) -> case ejabberd_odbc:sql_transaction( LServer, fun() -> - update_t("irc_custom", - ["jid", "host", "data"], - [SJID, SHost, SData], - ["jid='", SJID, - "' and host='", - SHost, "'"]), + odbc_queries:update_t( + "irc_custom", + ["jid", "host", "data"], + [SJID, SHost, SData], + ["jid='", SJID, + "' and host='", + SHost, "'"]), ok end) of {atomic, _} -> @@ -715,7 +715,7 @@ get_connection_params(Host, ServerHost, From, IRCServer) -> {selected, ["data"], []} -> {User, DefaultEncoding, ?DEFAULT_IRC_PORT, ""}; {selected, ["data"], [{SData}]} -> - Data = decode_data(SData), + Data = ejabberd_odbc:decode_term(SData), Username = xml:get_attr_s(username, Data), {NewUsername, NewEncoding, NewPort, NewPassword} = case lists:keysearch( @@ -844,7 +844,7 @@ adhoc_register(ServerHost, From, To, #adhoc_request{lang = Lang, Username = User, ConnectionsParams = []; {selected, ["data"], [{Data1}]} -> - Data = decode_data(Data1), + Data = ejabberd_odbc:decode_term(Data1), Username = xml:get_attr_s(username, Data), ConnectionsParams = xml:get_attr_s(connections_params, Data) end, @@ -870,16 +870,18 @@ adhoc_register(ServerHost, From, To, #adhoc_request{lang = Lang, if Error /= false -> Error; Action == "complete" -> - SData = encode_data([{username, Username}, - {connections_params, ConnectionsParams}]), + SData = ejabberd_odbc:encode_term( + [{username, Username}, + {connections_params, ConnectionsParams}]), case catch ejabberd_odbc:sql_transaction( LServer, fun() -> - update_t("irc_custom", - ["jid", "host", "data"], - [SJID, SHost, SData], - ["jid='", SJID, - "' and host='", SHost, "'"]), + odbc_queries:update_t( + "irc_custom", + ["jid", "host", "data"], + [SJID, SHost, SData], + ["jid='", SJID, + "' and host='", SHost, "'"]), ok end) of {atomic, ok} -> @@ -1029,35 +1031,3 @@ parse_connections_params([{ServerN, Server} | Servers], Encodings, Ports, Passwo {NewPort, NewPorts} = retrieve_connections_params(Ports, ServerN), {NewPassword, NewPasswords} = retrieve_connections_params(Passwords, ServerN), [{Server, NewEncoding, NewPort, NewPassword} | parse_connections_params(Servers, NewEncodings, NewPorts, NewPasswords)]. - -encode_data(Data) -> - ejabberd_odbc:escape(erl_prettypr:format(erl_syntax:abstract(Data))). - -decode_data(Str) -> - {ok, Tokens, _} = erl_scan:string(Str ++ "."), - {ok, Data} = erl_parse:parse_term(Tokens), - Data. - -%% Almost a copy of string:join/2. -%% We use this version because string:join/2 is relatively -%% new function (introduced in R12B-0). -join([], _Sep) -> - []; -join([H|T], Sep) -> - [H, [[Sep, X] || X <- T]]. - -%% Safe atomic update. -update_t(Table, Fields, Vals, Where) -> - UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" end, - Fields, Vals), - case ejabberd_odbc:sql_query_t( - ["update ", Table, " set ", - join(UPairs, ", "), - " where ", Where, ";"]) of - {updated, 1} -> - ok; - _ -> - ejabberd_odbc:sql_query_t( - ["insert into ", Table, "(", join(Fields, ", "), - ") values ('", join(Vals, "', '"), "');"]) - end. |