From bdbb3fba6d1ad34bde457565e67a5c554403cb28 Mon Sep 17 00:00:00 2001 From: Kirill Solomko Date: Mon, 18 Oct 2021 14:02:32 +0200 Subject: [PATCH] TT#139550 improve vmnotify behaviour * vmnotify() now accepts cli and uuid arguments * API handling of voicemails is now improved to: - send a notify if the item's INBOX/Old has been changed - correctly process DELETE to send vmnotify after the item's removal Change-Id: Ic00ae825cf091bce273e55aa37cd0a7ac80d8b0f --- lib/NGCP/Panel/Controller/API/FaxesItem.pm | 1 - lib/NGCP/Panel/Controller/API/VoicemailsItem.pm | 6 +++++- lib/NGCP/Panel/Controller/Subscriber.pm | 11 ++++++++--- lib/NGCP/Panel/Role/API/Voicemails.pm | 7 +++++-- lib/NGCP/Panel/Utils/Subscriber.pm | 17 ++++++++++------- 5 files changed, 28 insertions(+), 14 deletions(-) diff --git a/lib/NGCP/Panel/Controller/API/FaxesItem.pm b/lib/NGCP/Panel/Controller/API/FaxesItem.pm index 4605d2cd0f..c8a21f36bf 100644 --- a/lib/NGCP/Panel/Controller/API/FaxesItem.pm +++ b/lib/NGCP/Panel/Controller/API/FaxesItem.pm @@ -17,7 +17,6 @@ sub allowed_methods{ #sub delete_item { # my ($self, $c, $item) = @_; # $item->delete; -# NGCP::Panel::Utils::Subscriber::vmnotify( 'c' => $c, 'fax' => $item ); #} 1; diff --git a/lib/NGCP/Panel/Controller/API/VoicemailsItem.pm b/lib/NGCP/Panel/Controller/API/VoicemailsItem.pm index b2740515ad..7825d5c3c2 100644 --- a/lib/NGCP/Panel/Controller/API/VoicemailsItem.pm +++ b/lib/NGCP/Panel/Controller/API/VoicemailsItem.pm @@ -124,7 +124,11 @@ sub DELETE :Allow { last unless $self->resource_exists($c, voicemail => $item); $item->delete; - NGCP::Panel::Utils::Subscriber::vmnotify( 'c' => $c, 'voicemail' => $item ); + + my $cli = $item->mailboxuser->provisioning_voip_subscriber->username; + my $uuid = $item->mailboxuser->provisioning_voip_subscriber->username; + NGCP::Panel::Utils::Subscriber::vmnotify(c => $c, cli => $cli, uuid => $uuid); + $guard->commit; $c->response->status(HTTP_NO_CONTENT); diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index cf4fbda67f..46c9b6d708 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -4187,6 +4187,10 @@ sub play_voicemail :Chained('voicemail') :PathPart('play') :Args(0) { my ($self, $c) = @_; my $file = $c->stash->{voicemail}; + my $cli = $file->mailboxuser->provisioning_voip_subscriber->username; + my $uuid = $file->mailboxuser->provisioning_voip_subscriber->uuid; + my $dir = $file->dir; + my $data_ref; try { @@ -4202,9 +4206,10 @@ sub play_voicemail :Chained('voicemail') :PathPart('play') :Args(0) { $c->uri_for_action('/subscriber/details', [$c->req->captures->[0]])); } - NGCP::Panel::Utils::Subscriber::mark_voicemail_read( 'c' => $c, 'voicemail' => $c->stash->{voicemail} ); - NGCP::Panel::Utils::Subscriber::vmnotify( 'c' => $c, 'voicemail' => $c->stash->{voicemail} ); - my $filename = NGCP::Panel::Utils::Subscriber::get_voicemail_filename($c,$file); + NGCP::Panel::Utils::Subscriber::mark_voicemail_read(c => $c, dir => $dir); + NGCP::Panel::Utils::Subscriber::vmnotify(c => $c, cli => $cli, uuid => $uuid); + + my $filename = NGCP::Panel::Utils::Subscriber::get_voicemail_filename($c, $file); $c->response->header('Content-Disposition' => 'attachment; filename="'.$filename.'"'); $c->response->content_type('audio/x-wav'); $c->response->body($$data_ref); diff --git a/lib/NGCP/Panel/Role/API/Voicemails.pm b/lib/NGCP/Panel/Role/API/Voicemails.pm index 747e5863a9..682cfabd09 100644 --- a/lib/NGCP/Panel/Role/API/Voicemails.pm +++ b/lib/NGCP/Panel/Role/API/Voicemails.pm @@ -120,8 +120,11 @@ sub update_item { $item->update($upresource); - if($dir_old =~/INBOX/ && $upresource->{dir} !~/INBOX/){ - NGCP::Panel::Utils::Subscriber::vmnotify( 'c' => $c, 'voicemail' => $item ); + my $cli = $item->mailboxuser->provisioning_voip_subscriber->username; + my $uuid = $item->mailboxuser->provisioning_voip_subscriber->uuid; + + if ($dir_old ne $upresource->{dir}) { + NGCP::Panel::Utils::Subscriber::vmnotify(c => $c, cli => $cli, uuid => $uuid); } return $item; diff --git a/lib/NGCP/Panel/Utils/Subscriber.pm b/lib/NGCP/Panel/Utils/Subscriber.pm index 374b1bf1f6..47da79ee03 100644 --- a/lib/NGCP/Panel/Utils/Subscriber.pm +++ b/lib/NGCP/Panel/Utils/Subscriber.pm @@ -2270,16 +2270,17 @@ sub update_voicemail_number { return; } -sub vmnotify{ +sub vmnotify { my (%params) = @_; - my ($c, $voicemail) = @params{qw(c voicemail)}; + my ($c, $cli, $uuid) = @params{qw(c cli uuid)}; #1.although method is called after delete - DBIC still can access data in deleted row #2.amount of the new messages should be selected after played update or delete, of course - my $data = { $voicemail->get_inflated_columns }; - $data->{cli} = $voicemail->mailboxuser->provisioning_voip_subscriber->username; - $data->{uuid} = $voicemail->mailboxuser->provisioning_voip_subscriber->uuid; + my $data = { + cli => $cli, + uuid => $uuid + }; $data->{context} = 'default'; $data->{old_messages} = 0; $data->{new_messages} = 0; @@ -2306,17 +2307,19 @@ sub vmnotify{ my @cmd = ('ngcp-vmnotify', @$data{qw/context cli uuid new_messages old_messages/}); my $output = capturex([0..3],@cmd); + $c->log->debug("cmd=".join(" ", @cmd)."; output=$output;"); + return; } -sub mark_voicemail_read{ +sub mark_voicemail_read { my (%params) = @_; my $c = $params{c}; my $voicemail = $params{voicemail}; my $dir = $voicemail->dir; - $dir =~s/INBOX$/Old/; + $dir = ~s/INBOX$/Old/; $voicemail->update({ dir => $dir }); return; }