bigbluebutton_rails 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/CHANGELOG.md +21 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +4 -11
- data/Rakefile +15 -15
- data/app/controllers/bigbluebutton/recordings_controller.rb +1 -1
- data/app/controllers/bigbluebutton/rooms_controller.rb +10 -12
- data/app/controllers/bigbluebutton/servers_controller.rb +4 -5
- data/app/models/bigbluebutton_meeting.rb +1 -2
- data/app/models/bigbluebutton_metadata.rb +2 -2
- data/app/models/bigbluebutton_recording.rb +20 -5
- data/app/models/bigbluebutton_room.rb +80 -102
- data/app/models/bigbluebutton_server.rb +31 -17
- data/app/views/bigbluebutton/recordings/_form.html.erb +13 -13
- data/app/views/bigbluebutton/rooms/_form.html.erb +0 -4
- data/app/views/bigbluebutton/rooms/_rooms.html.erb +0 -4
- data/app/views/bigbluebutton/rooms/show.html.erb +0 -4
- data/app/workers/bigbluebutton_update_recordings.rb +2 -2
- data/config/locales/en.yml +1 -2
- data/config/locales/pt-br.yml +1 -2
- data/lib/bigbluebutton_rails.rb +22 -108
- data/lib/bigbluebutton_rails/background_tasks.rb +7 -3
- data/lib/bigbluebutton_rails/configuration.rb +80 -0
- data/lib/bigbluebutton_rails/rails/routes.rb +7 -6
- data/lib/bigbluebutton_rails/version.rb +1 -1
- data/lib/generators/bigbluebutton_rails/install_generator.rb +10 -1
- data/lib/generators/bigbluebutton_rails/templates/migration.rb +0 -3
- data/lib/generators/bigbluebutton_rails/templates/migration_2_2_0.rb +13 -0
- data/spec/controllers/bigbluebutton/recordings_controller_json_responses_spec.rb +4 -5
- data/spec/controllers/bigbluebutton/recordings_controller_spec.rb +3 -2
- data/spec/controllers/bigbluebutton/rooms_controller_exception_handling_spec.rb +1 -1
- data/spec/controllers/bigbluebutton/rooms_controller_json_responses_spec.rb +4 -4
- data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +53 -38
- data/spec/controllers/bigbluebutton/servers_controller_json_responses_spec.rb +7 -19
- data/spec/controllers/bigbluebutton/servers_controller_spec.rb +32 -51
- data/spec/factories/bigbluebutton_meeting.rb +0 -1
- data/spec/factories/bigbluebutton_recording.rb +1 -0
- data/spec/factories/bigbluebutton_room.rb +0 -1
- data/spec/models/bigbluebutton_meeting_db_spec.rb +0 -1
- data/spec/models/bigbluebutton_meeting_spec.rb +0 -3
- data/spec/models/bigbluebutton_metadata_spec.rb +4 -4
- data/spec/models/bigbluebutton_recording_spec.rb +32 -0
- data/spec/models/bigbluebutton_room_db_spec.rb +0 -2
- data/spec/models/bigbluebutton_room_spec.rb +138 -244
- data/spec/models/bigbluebutton_server_spec.rb +40 -21
- data/spec/rails_app/db/seeds.rb +1 -1
- data/spec/rails_app/features/config.yml.example +4 -4
- data/spec/rails_app/features/step_definitions/create_rooms_steps.rb +0 -1
- data/spec/rails_app/features/support/templates.rb +0 -4
- data/spec/rails_app/lib/tasks/db/populate.rake +2 -2
- data/spec/routing/bigbluebutton/servers_only_routing_spec.rb +4 -1
- data/spec/routing/bigbluebutton/servers_routing_spec.rb +4 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support/mocked_server.rb +1 -1
- data/spec/workers/bigbluebutton_meeting_updater_spec.rb +3 -3
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44ffb5fae34d7b736ebf6c372c512b2b37d8f41f
|
4
|
+
data.tar.gz: 3446e484579e743d3f58b40bcfc06168f8062ac7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 81ccfdd0a387e03d5d54ae67175eb77a1904e524e3f33b13b53a248f5bd7baebb6c0e4fa40317b50d776082fcf3f2ed0b23d33a7cb263f4630995a48bc8a40e6
|
7
|
+
data.tar.gz: c608a39eef0b90ce899f344f05b0d07433010375924de85ba19260d39ca11cacc0f7c365f8c6fb078706a985c0710a90921d1684bef7d444ecec18481c165894
|
data/.travis.yml
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
sudo: false
|
2
2
|
language: ruby
|
3
|
+
services:
|
4
|
+
- redis-server
|
3
5
|
bundler_args: "--without production development"
|
4
6
|
before_script:
|
5
7
|
- "cp spec/rails_app/config/database.yml.travis spec/rails_app/config/database.yml"
|
8
|
+
- "cp spec/rails_app/features/config.yml.example spec/rails_app/features/config.yml"
|
6
9
|
- "mysql -e 'create database bigbluebutton_rails_test;'"
|
7
10
|
- "mysql -e 'create database bigbluebutton_rails_dev;'"
|
8
11
|
cache: bundler
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## [2.2.0] - 2017-10-04
|
4
|
+
|
5
|
+
* Make only description editable in recordings, since all other attributes are taken from
|
6
|
+
the server and editing them won't change them in the server.
|
7
|
+
* Fix possible error when joining as guest but with permissions to create the room.
|
8
|
+
* Add action "check" to servers, redirects to the server's `/check`, an optional module in
|
9
|
+
BigBlueButton.
|
10
|
+
* Remove db association between servers and rooms/meetings. Now servers are selected on the
|
11
|
+
fly for a room that needs one. There's no association between them in the database anymore.
|
12
|
+
* Destroy recordings when their server is removed.
|
13
|
+
* Don't require `Server#url` and `Server#name` to be unique.
|
14
|
+
* Add `guest_support`, originally in Mconf-Web only. This feature is optional and disabled
|
15
|
+
by default. Only works in Mconf-Live at this point (future feature on BigBlueButton).
|
16
|
+
* Fetch recordings of a server right after it is created.
|
17
|
+
* Improve how the gem is configured, add BigbluebuttonRails::Configuration. Makes it clearer
|
18
|
+
how customizable variables and methods can be customized.
|
19
|
+
* Create a config for servers not in the db yet, so that we can fetch configs for servers
|
20
|
+
not in the database.
|
21
|
+
* Update how the welcome message is set when there's a dial number set.
|
22
|
+
* Add helper methods to BigbluebuttonRecording. Used to calculate size and length of recordings.
|
23
|
+
|
3
24
|
|
4
25
|
## [2.1.0] - 2016-07-22
|
5
26
|
|
data/Gemfile
CHANGED
@@ -10,6 +10,7 @@ group :development do
|
|
10
10
|
gem "rdoc"
|
11
11
|
gem "rails_best_practices"
|
12
12
|
end
|
13
|
+
gem "rspec-rails", '~> 2.99.0'
|
13
14
|
|
14
15
|
group :test do
|
15
16
|
if RUBY_VERSION >= "1.9"
|
@@ -24,7 +25,7 @@ group :test do
|
|
24
25
|
gem "generator_spec"
|
25
26
|
gem "rspec-rails", '~> 2.99.0'
|
26
27
|
gem 'rspec-activemodel-mocks'
|
27
|
-
gem "bbbot-ruby", :git => "git://github.com/mconf/bbbot-ruby.git"
|
28
|
+
# gem "bbbot-ruby", :git => "git://github.com/mconf/bbbot-ruby.git"
|
28
29
|
gem "capybara", "~> 2.2.0"
|
29
30
|
gem "capybara-mechanize" # for remote requests
|
30
31
|
gem "capybara-webkit" # best option found for js
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,7 @@
|
|
1
|
-
GIT
|
2
|
-
remote: git://github.com/mconf/bbbot-ruby.git
|
3
|
-
revision: fcfd8c4c71371653335a46d7462ee14a9301f546
|
4
|
-
specs:
|
5
|
-
bbbot-ruby (0.0.1)
|
6
|
-
|
7
1
|
PATH
|
8
2
|
remote: .
|
9
3
|
specs:
|
10
|
-
bigbluebutton_rails (2.
|
4
|
+
bigbluebutton_rails (2.2.0)
|
11
5
|
bigbluebutton-api-ruby (~> 1.6)
|
12
6
|
browser (~> 0.8.0)
|
13
7
|
rails (>= 4.0.0)
|
@@ -181,7 +175,7 @@ GEM
|
|
181
175
|
rdoc (4.1.1)
|
182
176
|
json (~> 1.4)
|
183
177
|
redis (3.1.0)
|
184
|
-
redis-namespace (1.5.
|
178
|
+
redis-namespace (1.5.3)
|
185
179
|
redis (~> 3.0, >= 3.0.4)
|
186
180
|
ref (1.0.5)
|
187
181
|
require_all (1.3.2)
|
@@ -233,8 +227,8 @@ GEM
|
|
233
227
|
multi_json
|
234
228
|
simplecov-html (~> 0.8.0)
|
235
229
|
simplecov-html (0.8.0)
|
236
|
-
sinatra (1.4.
|
237
|
-
rack (~> 1.
|
230
|
+
sinatra (1.4.8)
|
231
|
+
rack (~> 1.5)
|
238
232
|
rack-protection (~> 1.4)
|
239
233
|
tilt (>= 1.3, < 3)
|
240
234
|
spoon (0.0.4)
|
@@ -282,7 +276,6 @@ PLATFORMS
|
|
282
276
|
ruby
|
283
277
|
|
284
278
|
DEPENDENCIES
|
285
|
-
bbbot-ruby!
|
286
279
|
bigbluebutton_rails!
|
287
280
|
capybara (~> 2.2.0)
|
288
281
|
capybara-mechanize
|
data/Rakefile
CHANGED
@@ -3,8 +3,8 @@ require 'bundler/setup'
|
|
3
3
|
require 'rdoc/task'
|
4
4
|
require 'rspec/core/rake_task'
|
5
5
|
require 'rubygems/package_task'
|
6
|
-
require 'cucumber'
|
7
|
-
require 'cucumber/rake/task'
|
6
|
+
# require 'cucumber'
|
7
|
+
# require 'cucumber/rake/task'
|
8
8
|
|
9
9
|
desc 'Default: run specs and features.'
|
10
10
|
task :default => [:spec]
|
@@ -24,7 +24,7 @@ end
|
|
24
24
|
eval("$specification = begin; #{ IO.read('bigbluebutton_rails.gemspec')}; end")
|
25
25
|
Gem::PackageTask.new $specification do |pkg|
|
26
26
|
pkg.need_tar = true
|
27
|
-
pkg.need_zip = true
|
27
|
+
# pkg.need_zip = true
|
28
28
|
end
|
29
29
|
|
30
30
|
namespace :rails_app do
|
@@ -40,7 +40,7 @@ namespace :rails_app do
|
|
40
40
|
task :db do
|
41
41
|
cd File.join(File.dirname(__FILE__), "spec", "rails_app")
|
42
42
|
sh "bundle exec rake db:drop db:create db:migrate db:seed RAILS_ENV=development"
|
43
|
-
sh "bundle exec rake db:drop db:create db:migrate db:
|
43
|
+
sh "bundle exec rake db:drop db:create db:migrate db:seed RAILS_ENV=test"
|
44
44
|
cd File.dirname(__FILE__)
|
45
45
|
end
|
46
46
|
|
@@ -61,19 +61,19 @@ namespace :rails_app do
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
task :cucumber do
|
65
|
-
|
66
|
-
|
64
|
+
# task :cucumber do
|
65
|
+
# # Disable all features that need the bot. It isn't working since BigBlueButton 0.81.
|
66
|
+
# tags = "~@need-bot"
|
67
67
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end
|
68
|
+
# puts "* Dummy app features"
|
69
|
+
# cd File.join(File.dirname(__FILE__), "spec", "rails_app")
|
70
|
+
# sh "bundle exec cucumber features/ --tags #{tags}"
|
71
|
+
# cd File.dirname(__FILE__)
|
72
|
+
# end
|
73
73
|
|
74
|
-
task :notes do
|
75
|
-
|
76
|
-
end
|
74
|
+
# task :notes do
|
75
|
+
# puts `grep -r 'OPTIMIZE\\|FIXME\\|TODO' app/ public/ spec/`
|
76
|
+
# end
|
77
77
|
|
78
78
|
desc 'Setup the rails_app using the migration files created when upgrading the gem
|
79
79
|
version, run all tests and destroys the generated files.'
|
@@ -148,7 +148,7 @@ class Bigbluebutton::RecordingsController < ApplicationController
|
|
148
148
|
end
|
149
149
|
|
150
150
|
def recording_allowed_params
|
151
|
-
[ :
|
151
|
+
[ :description ]
|
152
152
|
end
|
153
153
|
|
154
154
|
protected
|
@@ -185,19 +185,17 @@ class Bigbluebutton::RoomsController < ApplicationController
|
|
185
185
|
def fetch_recordings
|
186
186
|
error = false
|
187
187
|
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
else
|
192
|
-
begin
|
193
|
-
# filter only recordings created by this room
|
194
|
-
filter = { :meetingID => @room.meetingid }
|
195
|
-
@room.server.fetch_recordings(filter)
|
188
|
+
begin
|
189
|
+
result = @room.fetch_recordings
|
190
|
+
if result
|
196
191
|
message = t('bigbluebutton_rails.rooms.notice.fetch_recordings.success')
|
197
|
-
|
192
|
+
else
|
198
193
|
error = true
|
199
|
-
message =
|
194
|
+
message = t('bigbluebutton_rails.rooms.errors.fetch_recordings.no_server')
|
200
195
|
end
|
196
|
+
rescue BigBlueButton::BigBlueButtonException => e
|
197
|
+
error = true
|
198
|
+
message = e.to_s[0..200]
|
201
199
|
end
|
202
200
|
|
203
201
|
respond_with do |format|
|
@@ -340,7 +338,7 @@ class Bigbluebutton::RoomsController < ApplicationController
|
|
340
338
|
if bigbluebutton_can_create?(@room, role)
|
341
339
|
user_opts = bigbluebutton_create_options(@room)
|
342
340
|
if @room.create_meeting(bigbluebutton_user, request, user_opts)
|
343
|
-
logger.info "Meeting created: id: #{@room.meetingid}, name: #{@room.name}, created_by: #{
|
341
|
+
logger.info "Meeting created: id: #{@room.meetingid}, name: #{@room.name}, created_by: #{username}, time: #{Time.now.iso8601}"
|
344
342
|
end
|
345
343
|
else
|
346
344
|
flash[:error] = t('bigbluebutton_rails.rooms.errors.join.cannot_create')
|
@@ -388,7 +386,7 @@ class Bigbluebutton::RoomsController < ApplicationController
|
|
388
386
|
end
|
389
387
|
|
390
388
|
def room_allowed_params
|
391
|
-
[ :name, :
|
389
|
+
[ :name, :meetingid, :attendee_key, :moderator_key, :welcome_msg,
|
392
390
|
:private, :logout_url, :dial_number, :voice_bridge, :max_participants, :owner_id,
|
393
391
|
:owner_type, :external, :param, :record_meeting, :duration, :default_layout, :presenter_share_only,
|
394
392
|
:auto_start_video, :auto_start_audio, :background,
|
@@ -106,11 +106,6 @@ class Bigbluebutton::ServersController < ApplicationController
|
|
106
106
|
respond_with(@recordings)
|
107
107
|
end
|
108
108
|
|
109
|
-
def rooms
|
110
|
-
@rooms ||= @server.rooms
|
111
|
-
respond_with(@rooms)
|
112
|
-
end
|
113
|
-
|
114
109
|
def publish_recordings
|
115
110
|
self.publish_unpublish(params[:recordings], true)
|
116
111
|
end
|
@@ -157,6 +152,10 @@ class Bigbluebutton::ServersController < ApplicationController
|
|
157
152
|
end
|
158
153
|
end
|
159
154
|
|
155
|
+
def check
|
156
|
+
redirect_to @server.check_url
|
157
|
+
end
|
158
|
+
|
160
159
|
protected
|
161
160
|
|
162
161
|
def find_server
|
@@ -1,7 +1,6 @@
|
|
1
1
|
class BigbluebuttonMeeting < ActiveRecord::Base
|
2
2
|
include ActiveModel::ForbiddenAttributesProtection
|
3
3
|
|
4
|
-
belongs_to :server, :class_name => 'BigbluebuttonServer'
|
5
4
|
belongs_to :room, :class_name => 'BigbluebuttonRoom'
|
6
5
|
|
7
6
|
has_one :recording,
|
@@ -19,7 +18,7 @@ class BigbluebuttonMeeting < ActiveRecord::Base
|
|
19
18
|
# Whether the meeting was created by the `user` or not.
|
20
19
|
def created_by?(user)
|
21
20
|
unless user.nil?
|
22
|
-
userid = user.send(BigbluebuttonRails.user_attr_id)
|
21
|
+
userid = user.send(BigbluebuttonRails.configuration.user_attr_id)
|
23
22
|
self.creator_id == userid
|
24
23
|
else
|
25
24
|
false
|
@@ -21,7 +21,7 @@ class BigbluebuttonMetadata < ActiveRecord::Base
|
|
21
21
|
# validates :name, :exclusion => {
|
22
22
|
# :in => lambda do |m|
|
23
23
|
# if m.owner_type == "BigbluebuttonRoom"
|
24
|
-
# BigbluebuttonRails.metadata_invalid_keys.map(&:to_s)
|
24
|
+
# BigbluebuttonRails.configuration.metadata_invalid_keys.map(&:to_s)
|
25
25
|
# else
|
26
26
|
# []
|
27
27
|
# end
|
@@ -29,7 +29,7 @@ class BigbluebuttonMetadata < ActiveRecord::Base
|
|
29
29
|
# }
|
30
30
|
def exclusion_of_name_in_reserved_metadata_keys
|
31
31
|
keys = if owner_type == "BigbluebuttonRoom"
|
32
|
-
BigbluebuttonRails.metadata_invalid_keys.map(&:to_s)
|
32
|
+
BigbluebuttonRails.configuration.metadata_invalid_keys.map(&:to_s)
|
33
33
|
else
|
34
34
|
[]
|
35
35
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
class BigbluebuttonRecording < ActiveRecord::Base
|
2
2
|
include ActiveModel::ForbiddenAttributesProtection
|
3
3
|
|
4
|
-
belongs_to :server, :
|
5
|
-
belongs_to :room, :
|
6
|
-
belongs_to :meeting, :
|
4
|
+
belongs_to :server, class_name: 'BigbluebuttonServer'
|
5
|
+
belongs_to :room, class_name: 'BigbluebuttonRoom'
|
6
|
+
belongs_to :meeting, class_name: 'BigbluebuttonMeeting'
|
7
7
|
|
8
8
|
validates :server, :presence => true
|
9
9
|
|
@@ -32,6 +32,21 @@ class BigbluebuttonRecording < ActiveRecord::Base
|
|
32
32
|
.where("bigbluebutton_playback_types.default = ?", true).first
|
33
33
|
end
|
34
34
|
|
35
|
+
# Returns the overall (i.e. for all recordings) average length of recordings in seconds
|
36
|
+
# Uses the length of the default playback format
|
37
|
+
def self.overall_average_length
|
38
|
+
avg = BigbluebuttonPlaybackFormat.joins(:playback_type)
|
39
|
+
.where("bigbluebutton_playback_types.default = ?", true).average(:length)
|
40
|
+
avg.nil? ? 0 : (avg.truncate(2) * 60)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Returns the overall (i.e. for all recordings) average size of recordings in bytes
|
44
|
+
# Uses the length of the default playback format
|
45
|
+
def self.overall_average_size
|
46
|
+
avg = BigbluebuttonRecording.average(:size)
|
47
|
+
avg.nil? ? 0 : avg
|
48
|
+
end
|
49
|
+
|
35
50
|
# Syncs the recordings in the db with the array of recordings in 'recordings',
|
36
51
|
# as received from BigBlueButtonApi#get_recordings.
|
37
52
|
# Will add new recordings that are not in the db yet and update the ones that
|
@@ -97,7 +112,7 @@ class BigbluebuttonRecording < ActiveRecord::Base
|
|
97
112
|
# BigBlueButtonApi#get_recordings but with the keys already converted to our format.
|
98
113
|
def self.update_recording(server, recording, data)
|
99
114
|
recording.server = server
|
100
|
-
recording.room = BigbluebuttonRails.match_room_recording(data)
|
115
|
+
recording.room = BigbluebuttonRails.configuration.match_room_recording.call(data)
|
101
116
|
recording.attributes = data.slice(:meetingid, :name, :published, :start_time, :end_time, :size)
|
102
117
|
recording.available = true
|
103
118
|
recording.save!
|
@@ -112,7 +127,7 @@ class BigbluebuttonRecording < ActiveRecord::Base
|
|
112
127
|
filtered = data.slice(:recordid, :meetingid, :name, :published, :start_time, :end_time, :size)
|
113
128
|
recording = BigbluebuttonRecording.create(filtered)
|
114
129
|
recording.available = true
|
115
|
-
recording.room = BigbluebuttonRails.match_room_recording(data)
|
130
|
+
recording.room = BigbluebuttonRails.configuration.match_room_recording.call(data)
|
116
131
|
recording.server = server
|
117
132
|
recording.description = I18n.t('bigbluebutton_rails.recordings.default.description', :time => recording.start_time.utc.to_formatted_s(:long))
|
118
133
|
recording.meeting = BigbluebuttonRecording.find_matching_meeting(recording)
|
@@ -3,24 +3,22 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
3
3
|
|
4
4
|
belongs_to :owner, polymorphic: true
|
5
5
|
|
6
|
-
belongs_to :server, class_name: 'BigbluebuttonServer'
|
7
|
-
|
8
6
|
has_many :recordings,
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
7
|
+
class_name: 'BigbluebuttonRecording',
|
8
|
+
foreign_key: 'room_id',
|
9
|
+
dependent: :nullify
|
12
10
|
|
13
11
|
has_many :metadata,
|
14
|
-
:
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
12
|
+
class_name: 'BigbluebuttonMetadata',
|
13
|
+
as: :owner,
|
14
|
+
dependent: :destroy,
|
15
|
+
inverse_of: :owner
|
18
16
|
|
19
17
|
has_one :room_options,
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
18
|
+
class_name: 'BigbluebuttonRoomOptions',
|
19
|
+
foreign_key: 'room_id',
|
20
|
+
autosave: true,
|
21
|
+
dependent: :destroy
|
24
22
|
|
25
23
|
delegate :default_layout, :default_layout=, :to => :room_options
|
26
24
|
delegate :presenter_share_only, :presenter_share_only=, :to => :room_options
|
@@ -105,10 +103,9 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
105
103
|
#
|
106
104
|
# Triggers API call: <tt>getMeetingInfo</tt>.
|
107
105
|
def fetch_meeting_info
|
108
|
-
require_server :get_meeting_info
|
109
|
-
|
110
106
|
begin
|
111
|
-
|
107
|
+
server = BigbluebuttonRails.configuration.select_server.call(self, :get_meeting_info)
|
108
|
+
response = server.api.get_meeting_info(self.meetingid, self.moderator_api_password)
|
112
109
|
|
113
110
|
@participant_count = response[:participantCount]
|
114
111
|
@moderator_count = response[:moderatorCount]
|
@@ -147,16 +144,16 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
147
144
|
#
|
148
145
|
# Triggers API call: <tt>isMeetingRunning</tt>.
|
149
146
|
def fetch_is_running?
|
150
|
-
|
151
|
-
@running =
|
147
|
+
server = BigbluebuttonRails.configuration.select_server.call(self, :is_meeting_running)
|
148
|
+
@running = server.api.is_meeting_running?(self.meetingid)
|
152
149
|
end
|
153
150
|
|
154
151
|
# Sends a call to the BBB server to end the meeting.
|
155
152
|
#
|
156
153
|
# Triggers API call: <tt>end</tt>.
|
157
154
|
def send_end
|
158
|
-
|
159
|
-
response =
|
155
|
+
server = BigbluebuttonRails.configuration.select_server.call(self, :end)
|
156
|
+
response = server.api.end_meeting(self.meetingid, self.moderator_api_password)
|
160
157
|
|
161
158
|
# enqueue an update in the meeting to end it faster
|
162
159
|
Resque.enqueue(::BigbluebuttonMeetingUpdater, self.id)
|
@@ -170,18 +167,12 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
170
167
|
# request. Can be passed by the application to enforce some values over the values
|
171
168
|
# that are taken from the database.
|
172
169
|
#
|
173
|
-
# Will trigger 'select_server' to select a server where the meeting
|
174
|
-
# will be created. If a server is selected, the model is saved.
|
175
|
-
#
|
176
170
|
# With the response, updates the following attributes:
|
177
171
|
# * <tt>attendee_api_password</tt>
|
178
172
|
# * <tt>moderator_api_password</tt>
|
179
173
|
#
|
180
174
|
# Triggers API call: <tt>create</tt>.
|
181
175
|
def send_create(user=nil, user_opts={})
|
182
|
-
# updates the server whenever a meeting will be created and guarantees it has a meetingid
|
183
|
-
require_server :create
|
184
|
-
|
185
176
|
self.meetingid = unique_meetingid() if self.meetingid.blank?
|
186
177
|
self.moderator_api_password = internal_password() if self.moderator_api_password.blank?
|
187
178
|
self.attendee_api_password = internal_password() if self.attendee_api_password.blank?
|
@@ -217,17 +208,23 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
217
208
|
#
|
218
209
|
# Uses the API but does not require a request to the server.
|
219
210
|
def join_url(username, role, key=nil, options={})
|
220
|
-
|
221
|
-
|
222
|
-
case role
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
211
|
+
server = BigbluebuttonRails.configuration.select_server.call(self, :join_meeting_url)
|
212
|
+
|
213
|
+
pass = case role
|
214
|
+
when :moderator
|
215
|
+
self.moderator_api_password
|
216
|
+
when :attendee
|
217
|
+
self.attendee_api_password
|
218
|
+
when :guest
|
219
|
+
if BigbluebuttonRails.configuration.guest_support
|
220
|
+
options = { guest: true }.merge(options)
|
221
|
+
end
|
222
|
+
self.attendee_api_password
|
223
|
+
else
|
224
|
+
map_key_to_internal_password(key)
|
225
|
+
end
|
226
|
+
|
227
|
+
r = server.api.join_meeting_url(self.meetingid, username, pass, options)
|
231
228
|
r.strip! unless r.nil?
|
232
229
|
r
|
233
230
|
end
|
@@ -335,8 +332,8 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
335
332
|
|
336
333
|
unless metadata.nil?
|
337
334
|
begin
|
338
|
-
attrs[:creator_id] = metadata[BigbluebuttonRails.metadata_user_id].to_i
|
339
|
-
attrs[:creator_name] = metadata[BigbluebuttonRails.metadata_user_name]
|
335
|
+
attrs[:creator_id] = metadata[BigbluebuttonRails.configuration.metadata_user_id].to_i
|
336
|
+
attrs[:creator_name] = metadata[BigbluebuttonRails.configuration.metadata_user_name]
|
340
337
|
rescue
|
341
338
|
attrs[:creator_id] = nil
|
342
339
|
attrs[:creator_name] = nil
|
@@ -356,11 +353,11 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
356
353
|
# has not yet been set as ended
|
357
354
|
self.finish_meetings
|
358
355
|
|
356
|
+
server = BigbluebuttonRails.configuration.select_server.call(self)
|
359
357
|
attrs = {
|
360
358
|
room: self,
|
361
|
-
|
362
|
-
|
363
|
-
server_secret: self.server.secret,
|
359
|
+
server_url: server.url,
|
360
|
+
server_secret: server.secret,
|
364
361
|
meetingid: self.meetingid,
|
365
362
|
name: self.name,
|
366
363
|
recorded: self.record_meeting,
|
@@ -371,8 +368,8 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
371
368
|
}
|
372
369
|
unless metadata.nil?
|
373
370
|
begin
|
374
|
-
attrs[:creator_id] = metadata[BigbluebuttonRails.metadata_user_id].to_i
|
375
|
-
attrs[:creator_name] = metadata[BigbluebuttonRails.metadata_user_name]
|
371
|
+
attrs[:creator_id] = metadata[BigbluebuttonRails.configuration.metadata_user_id].to_i
|
372
|
+
attrs[:creator_name] = metadata[BigbluebuttonRails.configuration.metadata_user_name]
|
376
373
|
rescue
|
377
374
|
attrs[:creator_id] = nil
|
378
375
|
attrs[:creator_name] = nil
|
@@ -415,17 +412,18 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
415
412
|
# Triggers API call: <tt>setConfigXML</tt>.
|
416
413
|
def fetch_new_token
|
417
414
|
if self.room_options.is_modified?
|
415
|
+
server = BigbluebuttonRails.configuration.select_server.call(self, :set_config_xml)
|
418
416
|
|
419
417
|
# get the default XML we will use to create a new one
|
420
|
-
config_xml =
|
418
|
+
config_xml = server.api.get_default_config_xml
|
421
419
|
|
422
420
|
# set the options on the XML
|
423
421
|
# returns true if something was changed
|
424
422
|
config_xml = self.room_options.set_on_config_xml(config_xml)
|
425
423
|
if config_xml
|
426
|
-
|
424
|
+
server.update_config(config_xml)
|
427
425
|
# get the new token for the room, and return it
|
428
|
-
|
426
|
+
server.api.set_config_xml(self.meetingid, config_xml)
|
429
427
|
else
|
430
428
|
nil
|
431
429
|
end
|
@@ -435,14 +433,17 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
435
433
|
end
|
436
434
|
|
437
435
|
def available_layouts
|
436
|
+
server = BigbluebuttonRails.configuration.select_server.call(self)
|
438
437
|
server.present? ? server.available_layouts : []
|
439
438
|
end
|
440
439
|
|
441
440
|
def available_layouts_names
|
441
|
+
server = BigbluebuttonRails.configuration.select_server.call(self)
|
442
442
|
server.present? ? server.available_layouts_names : []
|
443
443
|
end
|
444
444
|
|
445
445
|
def available_layouts_for_select
|
446
|
+
server = BigbluebuttonRails.configuration.select_server.call(self)
|
446
447
|
server.present? ? server.available_layouts_for_select : []
|
447
448
|
end
|
448
449
|
|
@@ -461,52 +462,29 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
461
462
|
nil
|
462
463
|
end
|
463
464
|
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
465
|
+
def fetch_recordings(filter={})
|
466
|
+
server = BigbluebuttonRails.configuration.select_server.call(self, :get_recordings)
|
467
|
+
if server.present?
|
468
|
+
server.fetch_recordings(filter.merge({ meetingID: self.meetingid }))
|
469
|
+
true
|
470
|
+
else
|
471
|
+
false
|
472
|
+
end
|
468
473
|
end
|
469
474
|
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
# but not yet ended.
|
474
|
-
# Any action that requires a server should call 'require_server' before
|
475
|
-
# anything else.
|
476
|
-
# This method will automatically select a server if the room has no server
|
477
|
-
# set on it yet.
|
478
|
-
def require_server(api_method=nil)
|
479
|
-
selected_server = select_server(api_method)
|
480
|
-
unless selected_server.nil?
|
481
|
-
self.server = selected_server
|
482
|
-
self.save if selected_server && !self.new_record?
|
483
|
-
end
|
484
|
-
if self.server.nil?
|
475
|
+
def select_server(api_method=nil)
|
476
|
+
server = BigbluebuttonServer.first
|
477
|
+
if server.nil?
|
485
478
|
msg = I18n.t('bigbluebutton_rails.rooms.errors.server.nil')
|
486
479
|
raise BigbluebuttonRails::ServerRequired.new(msg)
|
487
480
|
end
|
481
|
+
server
|
488
482
|
end
|
489
483
|
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
# This method can be overridden to change the way the server is selected
|
495
|
-
# before a room is used. `api_method` contains the API method that is being
|
496
|
-
# called. Any server returned here will be used. If no server is returned, the
|
497
|
-
# room will continue with its current server (if any).
|
498
|
-
# One good example is to always select a new server when a meeting is being
|
499
|
-
# created (in case `api_method` is `:create`), making this a simple load
|
500
|
-
# balancing tool that can work well in simple cases.
|
501
|
-
def select_server(api_method=nil)
|
502
|
-
if self.server.nil?
|
503
|
-
BigbluebuttonServer.
|
504
|
-
select("bigbluebutton_servers.*, count(bigbluebutton_rooms.id) as room_count").
|
505
|
-
joins("LEFT JOIN bigbluebutton_rooms ON bigbluebutton_servers.id = bigbluebutton_rooms.server_id").
|
506
|
-
group(:server_id).order("room_count ASC").first
|
507
|
-
else
|
508
|
-
nil
|
509
|
-
end
|
484
|
+
protected
|
485
|
+
|
486
|
+
def create_room_options
|
487
|
+
BigbluebuttonRoomOptions.create(:room => self)
|
510
488
|
end
|
511
489
|
|
512
490
|
def init
|
@@ -541,7 +519,7 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
541
519
|
|
542
520
|
# Set the voice bridge only if the gem is configured to do so and the voice bridge
|
543
521
|
# is not blank.
|
544
|
-
if BigbluebuttonRails.use_local_voice_bridges && !self.voice_bridge.blank?
|
522
|
+
if BigbluebuttonRails.configuration.use_local_voice_bridges && !self.voice_bridge.blank?
|
545
523
|
opts.merge!({ :voiceBridge => self.voice_bridge })
|
546
524
|
end
|
547
525
|
|
@@ -549,20 +527,21 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
549
527
|
|
550
528
|
# Add information about the user that is creating the meeting (if any)
|
551
529
|
unless user.nil?
|
552
|
-
userid = user.send(BigbluebuttonRails.user_attr_id)
|
553
|
-
username = user.send(BigbluebuttonRails.user_attr_name)
|
554
|
-
opts.merge!({ "meta_#{BigbluebuttonRails.metadata_user_id}" => userid })
|
555
|
-
opts.merge!({ "meta_#{BigbluebuttonRails.metadata_user_name}" => username })
|
530
|
+
userid = user.send(BigbluebuttonRails.configuration.user_attr_id)
|
531
|
+
username = user.send(BigbluebuttonRails.configuration.user_attr_name)
|
532
|
+
opts.merge!({ "meta_#{BigbluebuttonRails.configuration.metadata_user_id}" => userid })
|
533
|
+
opts.merge!({ "meta_#{BigbluebuttonRails.configuration.metadata_user_name}" => username })
|
556
534
|
end
|
557
535
|
|
558
536
|
# Add the invitation URL, if any
|
559
|
-
|
560
|
-
unless
|
561
|
-
opts.merge!({ "meta_#{BigbluebuttonRails.metadata_invitation_url}" =>
|
537
|
+
url = BigbluebuttonRails.configuration.get_invitation_url.call(self)
|
538
|
+
unless url.nil?
|
539
|
+
opts.merge!({ "meta_#{BigbluebuttonRails.configuration.metadata_invitation_url}" => url })
|
562
540
|
end
|
563
541
|
|
564
|
-
|
565
|
-
|
542
|
+
server = BigbluebuttonRails.configuration.select_server.call(self, :create)
|
543
|
+
server.api.request_headers = @request_headers # we need the client's IP
|
544
|
+
response = server.api.create_meeting(self.name, self.meetingid, opts)
|
566
545
|
|
567
546
|
response
|
568
547
|
end
|
@@ -571,10 +550,9 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
571
550
|
# there's no message set in this room.
|
572
551
|
# Can be used to easily set a default message format for all rooms.
|
573
552
|
def default_welcome_message
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
I18n.t('bigbluebutton_rails.rooms.default_welcome_msg')
|
553
|
+
msg = I18n.t('bigbluebutton_rails.rooms.default_welcome_msg_dial_number').html_safe
|
554
|
+
if !self.dial_number.blank?
|
555
|
+
msg += I18n.t('bigbluebutton_rails.rooms.default_welcome_msg_dial_number').html_safe
|
578
556
|
end
|
579
557
|
end
|
580
558
|
|
@@ -602,9 +580,9 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
602
580
|
result["meta_#{meta.name}"] = meta.content; result
|
603
581
|
}
|
604
582
|
|
605
|
-
dynamic_metadata =
|
583
|
+
dynamic_metadata = BigbluebuttonRails.configuration.get_dynamic_metadata.call(self)
|
606
584
|
unless dynamic_metadata.blank?
|
607
|
-
metadata =
|
585
|
+
metadata = dynamic_metadata.inject(metadata) { |result, meta|
|
608
586
|
result["meta_#{meta[0]}"] = meta[1]; result
|
609
587
|
}
|
610
588
|
end
|