diff --git a/vroom.pl b/vroom.pl index 2be0c27..3b4cada 100755 --- a/vroom.pl +++ b/vroom.pl @@ -302,18 +302,29 @@ helper modify_room => sub { # Add a participant in the database. Used by the signaling server to check # if user is allowed -helper add_participant => sub { +helper add_participant_to_room => sub { my $self = shift; my ($name,$participant) = @_; - my $room = $self->get_room_by_name($name)->{data} || return undef; + my $res = $self->get_room_by_name($name); + if (!$res->{ok}){ + return $res; + } + my $room = $res->{data}; my $sth = eval { - $self->db->prepare('INSERT IGNORE INTO `room_participants` + $self->db->prepare('INSERT INTO `room_participants` (`room_id`,`participant`,`last_activity`) - VALUES (?,?,CONVERT_TZ(NOW(), @@session.time_zone, \'+00:00\'))'); - } || return undef; - $sth->execute($room->{id},$participant) || return undef; + VALUES (?,?,CONVERT_TZ(NOW(), @@session.time_zone, \'+00:00\')) + ON DUPLICATE KEY UPDATE `last_activity`=CONVERT_TZ(NOW(), @@session.time_zone, \'+00:00\')'); + }; + if ($@){ + return {msg => $@}; + } + $sth->execute($room->{id},$participant); + if ($sth->err){ + return {msg => "DB Error: " . $sth->errstr . " (code " . $sth->err . ")"}; + } $self->app->log->info($self->session('name') . " joined the room $name"); - return 1; + return {ok => 1}; }; # Remove participant from the DB @@ -1194,15 +1205,16 @@ get '/(*room)' => sub { # Short life cookie to negociate a session with the signaling server $self->cookie(vroomsession => encode_base64($self->session('name') . ':' . $data->{name} . ':' . $data->{token}, ''), {expires => time + 60, path => '/'}); # Add this user to the participants table - unless($self->add_participant($room,$self->session('name'))){ + $res = $self->add_participant_to_room($room,$self->session('name')); + if (!$res->{ok}){ return $self->render('error', - msg => $self->l('ERROR_OCCURRED'), - err => 'ERROR_OCCURRED', + msg => $self->l($res->{msg}), + err => $res->{msg}, room => $room ); } # Now display the room page - $self->render('join', + return $self->render('join', moh => $self->choose_moh(), turnPassword => $data->{token}, video => $video,