diff --git a/applications/cdr/src/cdr_util.erl b/applications/cdr/src/cdr_util.erl index 97c9306bd09..f1d35d7863b 100644 --- a/applications/cdr/src/cdr_util.erl +++ b/applications/cdr/src/cdr_util.erl @@ -12,6 +12,7 @@ ,register_views/0 ]). -export([save_cdr/2]). +-export([check_media_names/1]). -include("cdr.hrl"). @@ -43,7 +44,13 @@ save_cdr(AccountMOD, Doc) -> -spec do_save_cdr(kz_term:api_binary(), kz_json:object()) -> 'ok' | {'error', 'max_save_retries'}. do_save_cdr(AccountMODb, Doc) -> - case kazoo_modb:save_doc(AccountMODb, Doc, [{'max_retries', 3}]) of + MediaNames = check_media_names(kz_json:get_value([<<"custom_channel_vars">>, <<"media_names">>], Doc)), + MediaRecordings = check_media_names(kz_json:get_value([<<"custom_channel_vars">>, <<"media_recordings">>], Doc)), + + NewDoc = kz_json:set_values([{[<<"custom_channel_vars">>, <<"media_names">>], MediaNames} + ,{[<<"custom_channel_vars">>, <<"media_recordings">>], MediaRecordings}], Doc), + + case kazoo_modb:save_doc(AccountMODb, NewDoc, [{'max_retres', 3}]) of {'ok', _}-> 'ok'; {'error', 'conflict'} -> 'ok'; {'error', _E} -> @@ -54,3 +61,18 @@ do_save_cdr(AccountMODb, Doc) -> -spec register_views() -> 'ok'. register_views() -> kz_datamgr:register_views_from_folder('cdr'). + +-spec check_media_names(list()|kz_term:api_binary()| 'undefined') -> list() | 'undefined'. +check_media_names([HeadMN | TailMN]) -> + re:split(HeadMN, ",") ++ check_last_media_name(TailMN); +check_media_names('undefined') -> + 'undefined'; +check_media_names(MediaNames) -> + re:split(MediaNames, ","). + + +-spec check_last_media_name(list())->list(). +check_last_media_name([FirstMediaName])-> + re:split(FirstMediaName, ","); +check_last_media_name([FirstMediaName | LasttMediaName])-> + re:split(FirstMediaName, ",") ++ check_media_names(re:split(LasttMediaName, ",")). diff --git a/applications/cdr/test/cdr_util_tests.erl b/applications/cdr/test/cdr_util_tests.erl new file mode 100644 index 00000000000..e05dd7e7da0 --- /dev/null +++ b/applications/cdr/test/cdr_util_tests.erl @@ -0,0 +1,33 @@ +-module(cdr_util_tests). +-include_lib("eunit/include/eunit.hrl"). + +-spec check_media_names_test() -> 'ok'. +check_media_names_test()-> + + A = <<"a9b8c9cf7546827d9ec5ad505770fc86.mp3">>, + + B = <<"202109-d85184f8cfc5592f944bc323617c16ac">>, + + C = [<<"8e9f742001e09ff12abf5ce8bfcb1ff9.mp3">>,<<"3c37d4a18634030662e68523bf74da96.mp3,092b94f757eaceadafbc1ae0dd858057.mp3,51a945565136ed62dce5caf9b90d3630.mp3,e038de9919babfbe28f49fe1d1673405.mp3,9530f5fbdb1efe1f0796506785c6ec7c.mp3">>], + + D = [<<"8e9f742001e09ff12abf5ce8bfcb1ff9.mp3">>, + <<"3c37d4a18634030662e68523bf74da96.mp3">>, + <<"092b94f757eaceadafbc1ae0dd858057.mp3">>, + <<"51a945565136ed62dce5caf9b90d3630.mp3">>, + <<"e038de9919babfbe28f49fe1d1673405.mp3">>, + <<"9530f5fbdb1efe1f0796506785c6ec7c.mp3">>], + + E = [<<"202109-f13d49151c46627fb19c3f69b8580c5c">>,<<"202109-2643e9204a52bf529a03a6909d740416,202109-105f6012c16cf1b5af018423ab1dbee8,202109-4cf5e781b82838e750b7ea5fd064e67f,202109-f42c80fd47f98f424520cca147641ecf,202109-103b202b96a2f963f59bc99521af98ff">>], + + F = [<<"202109-f13d49151c46627fb19c3f69b8580c5c">>, + <<"202109-2643e9204a52bf529a03a6909d740416">>, + <<"202109-105f6012c16cf1b5af018423ab1dbee8">>, + <<"202109-4cf5e781b82838e750b7ea5fd064e67f">>, + <<"202109-f42c80fd47f98f424520cca147641ecf">>, + <<"202109-103b202b96a2f963f59bc99521af98ff">>], + + ?assertEqual('undefined',cdr_util:check_media_names('undefined')), + ?assertMatch([A], cdr_util:check_media_names(A)), + ?assertMatch([B], cdr_util:check_media_names(B)), + ?assertMatch(D,cdr_util:check_media_names(C)), + ?assertMatch(F,cdr_util:check_media_names(E)). diff --git a/applications/ecallmgr/src/ecallmgr_util.erl b/applications/ecallmgr/src/ecallmgr_util.erl index 01fd26af6b2..72a36f3d3cd 100644 --- a/applications/ecallmgr/src/ecallmgr_util.erl +++ b/applications/ecallmgr/src/ecallmgr_util.erl @@ -664,6 +664,10 @@ get_fs_kv(<<"Hold-Media">>, Media, UUID) -> list_to_binary(["hold_music=", MediaPath]); get_fs_kv(?CCV(Key), Val, UUID) -> get_fs_kv(Key, Val, UUID); +get_fs_kv(<<"Media-Names">>, [FileName1 | []], _) -> + list_to_binary([get_fs_key(<<"Media-Names">>), "=", maybe_sanitize_fs_value(<<"Media-Names">>, FileName1)]); +get_fs_kv(<<"Media-Recordings">>, [FileName1 | []], _) -> + list_to_binary([get_fs_key(<<"Media-Recordings">>), "=", maybe_sanitize_fs_value(<<"Media-Recordings">>, FileName1)]); get_fs_kv(Key, Val, _) -> list_to_binary([get_fs_key(Key), "=", maybe_sanitize_fs_value(Key, Val)]). @@ -731,10 +735,23 @@ maybe_sanitize_fs_value(<<"Export-Variables">>, Val) -> kz_binary:join(Val, <<",">>); maybe_sanitize_fs_value(Key, Val) when not is_binary(Key) -> maybe_sanitize_fs_value(kz_term:to_binary(Key), Val); +maybe_sanitize_fs_value(<<"Media-Names">>, Val) when not is_binary(Val) -> + maybe_sanitize_fs_value(<<"Media-Names">>, checking_list_media_name(Val)); +maybe_sanitize_fs_value(<<"Media-Recordings">>, Val) when not is_binary(Val) -> + maybe_sanitize_fs_value(<<"Media-Recordings">>, checking_list_media_name(Val)); maybe_sanitize_fs_value(Key, Val) when not is_binary(Val) -> maybe_sanitize_fs_value(Key, kz_term:to_binary(Val)); maybe_sanitize_fs_value(_, Val) -> Val. +-spec checking_list_media_name(list()) -> binary(). +checking_list_media_name([])-> + <<>>; +checking_list_media_name([MediaName1 | []]) -> + <>; +checking_list_media_name([MediaName1 | MediaName2])-> + Next = checking_list_media_name(MediaName2), + <>. + %%------------------------------------------------------------------------------ %% @doc takes endpoints (/sofia/foo/bar), and optionally a caller id name/num %% and create the dial string ([origination_caller_id_name=Name