Send an email to the user when a recording is done processing

Had to add an email attribute to users to store their email to send the
notification. Will only send it for user rooms since they are the only
ones we know who to notify.
This commit is contained in:
Leonardo Crauss Daronco
2016-12-08 18:33:19 -02:00
parent 09c30bb5bd
commit e94f3d7a10
12 changed files with 161 additions and 7 deletions

View File

@ -170,9 +170,13 @@ class BbbController < ApplicationController
rec_info = rec_info[:recordings].first
RecordingCreatedJob.perform_later(token, parse_recording_for_view(rec_info))
# send an email to the owner of this recording, if defined
owner = User.find_by(encrypted_id: token)
RecordingReadyEmailJob.perform_later(owner) if owner.present?
# TODO: remove the webhook now that the meeting and recording are done
# remove only if the meeting is not running, otherwise the hook is needed
# if ENV['GREENLIGHT_USE_WEBHOOKS']
# if Rails.configuration.use_webhooks
# webhook_remove("#{base_url}/callback")
# end
else

View File

@ -0,0 +1,25 @@
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
#
# Copyright (c) 2016 BigBlueButton Inc. and by respective authors (see below).
#
# This program is free software; you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free Software
# Foundation; either version 3.0 of the License, or (at your option) any later
# version.
#
# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
class RecordingReadyEmailJob < ApplicationJob
queue_as :default
def perform(user)
if user.email.present?
NotificationMailer.recording_ready_email(user).deliver
end
end
end

View File

@ -77,13 +77,12 @@ module BbbApi
"meta_#{BbbApi::META_LISTED}": false,
"meta_#{BbbApi::META_TOKEN}": meeting_token
}
meeting_options.merge!(
{ "meta_#{BbbApi::META_HOOK_URL}": options[:hook_url] }
) if options[:hook_url]
if ENV['GREENLIGHT_USE_WEBHOOKS']
if Rails.configuration.use_webhooks
webhook_register(options[:hook_url], meeting_id)
else
meeting_options.merge!(
{ "meta_#{BbbApi::META_HOOK_URL}": options[:hook_url] }
) if options[:hook_url]
end
# Create the meeting

View File

@ -0,0 +1,25 @@
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
#
# Copyright (c) 2016 BigBlueButton Inc. and by respective authors (see below).
#
# This program is free software; you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free Software
# Foundation; either version 3.0 of the License, or (at your option) any later
# version.
#
# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
class NotificationMailer < ActionMailer::Base
default from: Rails.configuration.smtp_from
def recording_ready_email(user)
@user = user
@room_url = resource_url(resource: "rooms", id: user.encrypted_id)
mail(to: user.email, subject: t('.subject'))
end
end

View File

@ -21,6 +21,7 @@ class User < ApplicationRecord
def self.from_omniauth(auth_hash)
user = find_or_initialize_by(uid: auth_hash['uid'], provider: auth_hash['provider'])
user.username = self.send("#{auth_hash['provider']}_username", auth_hash) rescue nil
user.email = self.send("#{auth_hash['provider']}_email", auth_hash) rescue nil
user.name = auth_hash['info']['name']
user.save!
user
@ -30,10 +31,18 @@ class User < ApplicationRecord
auth_hash['info']['nickname']
end
def self.twitter_email(auth_hash)
auth_hash['info']['email']
end
def self.google_username(auth_hash)
auth_hash['info']['email'].split('@').first
end
def self.google_email(auth_hash)
auth_hash['info']['email']
end
def room_url
"/rooms/#{encrypted_id}"
end

View File

@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<p><%= t('.hi', name: @user.name) %></p>
<p><%= t('.phrase1') %></p>
<p><%= t('.phrase2', url: @room_url) %></p>
</body>
</html>