bigbluebutton_rails 2.3.0 → 3.0.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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -2
  3. data/Gemfile +0 -1
  4. data/Gemfile.lock +27 -27
  5. data/Rakefile +15 -14
  6. data/app/controllers/bigbluebutton/api/rooms_controller.rb +2 -2
  7. data/app/controllers/bigbluebutton/meetings_controller.rb +69 -0
  8. data/app/controllers/bigbluebutton/recordings_controller.rb +2 -8
  9. data/app/controllers/bigbluebutton/rooms_controller.rb +5 -4
  10. data/app/controllers/bigbluebutton/servers_controller.rb +2 -2
  11. data/app/models/bigbluebutton_meeting.rb +1 -1
  12. data/app/models/bigbluebutton_recording.rb +15 -3
  13. data/app/models/bigbluebutton_room.rb +28 -18
  14. data/app/models/bigbluebutton_server.rb +9 -9
  15. data/app/views/bigbluebutton/meetings/_form.html.erb +30 -0
  16. data/app/views/bigbluebutton/meetings/edit.html.erb +5 -0
  17. data/app/views/bigbluebutton/recordings/_form.html.erb +0 -4
  18. data/app/views/bigbluebutton/recordings/_recordings.html.erb +0 -1
  19. data/app/views/bigbluebutton/recordings/show.html.erb +0 -5
  20. data/app/views/bigbluebutton/rooms/_form.html.erb +2 -2
  21. data/app/views/bigbluebutton/rooms/_rooms.html.erb +1 -1
  22. data/app/views/bigbluebutton/rooms/show.html.erb +2 -2
  23. data/app/views/bigbluebutton/servers/_form.html.erb +2 -2
  24. data/app/views/bigbluebutton/servers/index.html.erb +1 -1
  25. data/app/views/bigbluebutton/servers/show.html.erb +2 -2
  26. data/app/workers/bigbluebutton_recordings_for_room_worker.rb +1 -1
  27. data/config/locales/en.yml +37 -24
  28. data/config/locales/pt-br.yml +37 -24
  29. data/lib/bigbluebutton_rails/configuration.rb +3 -0
  30. data/lib/bigbluebutton_rails/rails/routes.rb +6 -1
  31. data/lib/bigbluebutton_rails/version.rb +1 -1
  32. data/lib/generators/bigbluebutton_rails/templates/migration.rb +3 -3
  33. data/lib/generators/bigbluebutton_rails/templates/migration_2_4_0.rb +18 -0
  34. data/lib/generators/bigbluebutton_rails/templates/migration_2_5_0.rb +9 -0
  35. data/spec/controllers/bigbluebutton/api/rooms_controller_spec.rb +3 -3
  36. data/spec/controllers/bigbluebutton/meetings_controller_spec.rb +199 -0
  37. data/spec/controllers/bigbluebutton/recordings_controller_spec.rb +3 -3
  38. data/spec/controllers/bigbluebutton/rooms_controller_exception_handling_spec.rb +4 -2
  39. data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +12 -6
  40. data/spec/controllers/bigbluebutton/servers_controller_spec.rb +8 -8
  41. data/spec/factories/bigbluebutton_meeting.rb +1 -0
  42. data/spec/factories/bigbluebutton_recording.rb +0 -1
  43. data/spec/factories/bigbluebutton_room.rb +1 -1
  44. data/spec/factories/bigbluebutton_server.rb +1 -1
  45. data/spec/models/bigbluebutton_meeting_db_spec.rb +2 -0
  46. data/spec/models/bigbluebutton_meeting_spec.rb +1 -1
  47. data/spec/models/bigbluebutton_recording_db_spec.rb +0 -1
  48. data/spec/models/bigbluebutton_recording_spec.rb +0 -4
  49. data/spec/models/bigbluebutton_room_db_spec.rb +1 -1
  50. data/spec/models/bigbluebutton_room_spec.rb +58 -69
  51. data/spec/models/bigbluebutton_server_db_spec.rb +1 -1
  52. data/spec/models/bigbluebutton_server_spec.rb +26 -26
  53. data/spec/rails_app/features/step_definitions/create_rooms_steps.rb +2 -2
  54. data/spec/rails_app/features/step_definitions/create_servers_steps.rb +2 -2
  55. data/spec/rails_app/features/step_definitions/destroy_rooms_steps.rb +1 -1
  56. data/spec/rails_app/features/step_definitions/destroy_servers_steps.rb +1 -1
  57. data/spec/rails_app/features/support/templates.rb +10 -10
  58. data/spec/rails_app/lib/tasks/db/populate.rake +0 -1
  59. data/spec/routing/bigbluebutton/meetings_routing_spec.rb +14 -0
  60. data/spec/support/controllers/bigbluebutton/rooms_controller.rb +6 -2
  61. data/spec/support/mocked_server.rb +2 -2
  62. metadata +8 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 88081dab1ee2f637c46993cd9b6f655cc4516afb
4
- data.tar.gz: 791d30eb4d1873e75834754aed5c43b4b4a1c3f2
3
+ metadata.gz: 11d54d5048d19522934b6204fd71ff45a618bd6a
4
+ data.tar.gz: 257cda68bff0f0fb1217761fe913892558cbebb9
5
5
  SHA512:
6
- metadata.gz: 69a370e8996753af92fdf67be6d6c6172fd02938f1a9b9a2c23960a0f2cb2d656ba70a67f3a87bd830c7a9b7246cf53d8c7f75b7c4cbcf2a735c79cf18a40899
7
- data.tar.gz: 2adec10068e736881b444dbf584b5427ef83d7661a0fafed7e0b5037b0762e5faf4b5323a360c4b8d5e64357e5b6c8592b410b1a2e019af93c8e3c3658d4eefa
6
+ metadata.gz: bec8ac81fede7c116cce3c7946ef1141ec4761eb5408252a6013bf2d90e0535f0862782e42b8f9e5d81020809172178f96bfe01d1a6e29e3adb1867323b8b48f
7
+ data.tar.gz: 904805e273db9719f0996eabe2b0acd6f1d9c7209a2331b35bec60b5622f2253e075b5158d72a0404912bb57489edecc90326a279fa9468edd322c285eb47a7c
@@ -1,5 +1,22 @@
1
1
  # Change Log
2
2
 
3
+ ## [3.0.0] - 2019-11-18
4
+
5
+ * Rename Room's and Server's #param to #slug.
6
+ * New route and logic to remove meeting objects.
7
+ * Remove `description` from meetings, move contents to `title`.
8
+ * Add option for users to edit the title of meetings.
9
+ * Send participant count in the ajax response when the meeting is running.
10
+ * Use incremental numbers when generating dial numbers, not random ones.
11
+ * Remove recordings when a meeting is removed.
12
+ * Add state to recordings, following new developments in BigBlueButton's API.
13
+ * Run the worker to fetch recordings after a meeting ends a little faster
14
+ than before. Now that we track the state of recordings they will appear
15
+ faster in a `getRecordings` call.
16
+ * Set the default title of new meetings to the name of the room.
17
+ * Add option to turn on debug on API calls.
18
+
19
+
3
20
  ## [2.3.0] - 2019-11-14
4
21
 
5
22
  * [#136] Improve matching between recordings and meetings and migrate old recordings to
@@ -319,8 +336,9 @@ https://github.com/mconf/bigbluebutton_rails/wiki/Migrate-to-1.3.0
319
336
  * Controller to access servers and rooms
320
337
  * rooms_controller interacts with a BBB server using bigbluebutton-api-ruby
321
338
 
322
- [2.2.0]: https://github.com/mconf/bigbluebutton_rails/compare/v2.2.0...v2.3.0
323
- [2.3.0]: https://github.com/mconf/bigbluebutton_rails/compare/v2.1.0...v2.2.0
339
+ [3.0.0]: https://github.com/mconf/bigbluebutton_rails/compare/v2.3.0...v3.0.0
340
+ [2.3.0]: https://github.com/mconf/bigbluebutton_rails/compare/v2.2.0...v2.3.0
341
+ [2.2.0]: https://github.com/mconf/bigbluebutton_rails/compare/v2.1.0...v2.2.0
324
342
  [2.1.0]: https://github.com/mconf/bigbluebutton_rails/compare/v2.0.0...v2.1.0
325
343
  [2.0.0]: https://github.com/mconf/bigbluebutton_rails/compare/v1.4.0...v2.0.0
326
344
  [1.4.0]: https://github.com/mconf/bigbluebutton_rails/compare/v1.3.0...v1.4.0
data/Gemfile CHANGED
@@ -12,7 +12,6 @@ group :development do
12
12
  gem "rdoc"
13
13
  gem "rails_best_practices"
14
14
  end
15
- gem "rspec-rails", '~> 2.99.0'
16
15
 
17
16
  group :test do
18
17
  if RUBY_VERSION >= "1.9"
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bigbluebutton_rails (2.3.0)
4
+ bigbluebutton_rails (3.0.0)
5
5
  activerecord-import (~> 1.0)
6
6
  bigbluebutton-api-ruby (~> 1.6)
7
7
  browser (~> 0.8.0)
@@ -12,29 +12,29 @@ PATH
12
12
  GEM
13
13
  remote: http://rubygems.org/
14
14
  specs:
15
- actionmailer (4.1.4)
16
- actionpack (= 4.1.4)
17
- actionview (= 4.1.4)
18
- mail (~> 2.5.4)
19
- actionpack (4.1.4)
20
- actionview (= 4.1.4)
21
- activesupport (= 4.1.4)
15
+ actionmailer (4.1.14.2)
16
+ actionpack (= 4.1.14.2)
17
+ actionview (= 4.1.14.2)
18
+ mail (~> 2.5, >= 2.5.4)
19
+ actionpack (4.1.14.2)
20
+ actionview (= 4.1.14.2)
21
+ activesupport (= 4.1.14.2)
22
22
  rack (~> 1.5.2)
23
23
  rack-test (~> 0.6.2)
24
- actionview (4.1.4)
25
- activesupport (= 4.1.4)
24
+ actionview (4.1.14.2)
25
+ activesupport (= 4.1.14.2)
26
26
  builder (~> 3.1)
27
27
  erubis (~> 2.7.0)
28
- activemodel (4.1.4)
29
- activesupport (= 4.1.4)
28
+ activemodel (4.1.14.2)
29
+ activesupport (= 4.1.14.2)
30
30
  builder (~> 3.1)
31
- activerecord (4.1.4)
32
- activemodel (= 4.1.4)
33
- activesupport (= 4.1.4)
31
+ activerecord (4.1.14.2)
32
+ activemodel (= 4.1.14.2)
33
+ activesupport (= 4.1.14.2)
34
34
  arel (~> 5.0.0)
35
35
  activerecord-import (1.0.2)
36
36
  activerecord (>= 3.2)
37
- activesupport (4.1.4)
37
+ activesupport (4.1.14.2)
38
38
  i18n (~> 0.6, >= 0.6.9)
39
39
  json (~> 1.7, >= 1.7.7)
40
40
  minitest (~> 5.1)
@@ -151,15 +151,15 @@ GEM
151
151
  rack
152
152
  rack-test (0.6.2)
153
153
  rack (>= 1.0)
154
- rails (4.1.4)
155
- actionmailer (= 4.1.4)
156
- actionpack (= 4.1.4)
157
- actionview (= 4.1.4)
158
- activemodel (= 4.1.4)
159
- activerecord (= 4.1.4)
160
- activesupport (= 4.1.4)
154
+ rails (4.1.14.2)
155
+ actionmailer (= 4.1.14.2)
156
+ actionpack (= 4.1.14.2)
157
+ actionview (= 4.1.14.2)
158
+ activemodel (= 4.1.14.2)
159
+ activerecord (= 4.1.14.2)
160
+ activesupport (= 4.1.14.2)
161
161
  bundler (>= 1.3.0, < 2.0)
162
- railties (= 4.1.4)
162
+ railties (= 4.1.14.2)
163
163
  sprockets-rails (~> 2.0)
164
164
  rails_best_practices (1.15.4)
165
165
  activesupport
@@ -171,9 +171,9 @@ GEM
171
171
  json
172
172
  require_all
173
173
  ruby-progressbar
174
- railties (4.1.4)
175
- actionpack (= 4.1.4)
176
- activesupport (= 4.1.4)
174
+ railties (4.1.14.2)
175
+ actionpack (= 4.1.14.2)
176
+ activesupport (= 4.1.14.2)
177
177
  rake (>= 0.8.7)
178
178
  thor (>= 0.18.1, < 2.0)
179
179
  rake (10.3.2)
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,6 @@ 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
28
27
  end
29
28
 
30
29
  namespace :rails_app do
@@ -60,19 +59,19 @@ namespace :rails_app do
60
59
  end
61
60
  end
62
61
 
63
- # task :cucumber do
64
- # # Disable all features that need the bot. It isn't working since BigBlueButton 0.81.
65
- # tags = "~@need-bot"
62
+ task :cucumber do
63
+ # Disable all features that need the bot. It isn't working since BigBlueButton 0.81.
64
+ tags = "~@need-bot"
66
65
 
67
- # puts "* Dummy app features"
68
- # cd File.join(File.dirname(__FILE__), "spec", "rails_app")
69
- # sh "bundle exec cucumber features/ --tags #{tags}"
70
- # cd File.dirname(__FILE__)
71
- # end
66
+ puts "* Dummy app features"
67
+ cd File.join(File.dirname(__FILE__), "spec", "rails_app")
68
+ sh "bundle exec cucumber features/ --tags #{tags}"
69
+ cd File.dirname(__FILE__)
70
+ end
72
71
 
73
- # task :notes do
74
- # puts `grep -r 'OPTIMIZE\\|FIXME\\|TODO' app/ public/ spec/`
75
- # end
72
+ task :notes do
73
+ puts `grep -r 'OPTIMIZE\\|FIXME\\|TODO' app/ public/ spec/`
74
+ end
76
75
 
77
76
  desc 'Setup the rails_app using the migration files created when upgrading the gem
78
77
  version, run all tests and destroys the generated files.'
@@ -87,6 +86,7 @@ namespace :spec do
87
86
  sh "bundle exec rails generate bigbluebutton_rails:install 2.0.0 --migration-only --force"
88
87
  sh "bundle exec rails generate bigbluebutton_rails:install 2.1.0 --migration-only --force"
89
88
  sh "bundle exec rails generate bigbluebutton_rails:install 2.2.0 --migration-only --force"
89
+ sh "bundle exec rails generate bigbluebutton_rails:install 2.3.0 --migration-only --force"
90
90
 
91
91
  sh "bundle exec rake db:drop RAILS_ENV=test"
92
92
  sh "bundle exec rake db:create RAILS_ENV=test"
@@ -98,6 +98,7 @@ namespace :spec do
98
98
  # Rake::Task["cucumber"].invoke
99
99
 
100
100
  cd "spec/rails_app/"
101
+ sh "bundle exec rails destroy bigbluebutton_rails:install 2.3.0 --migration-only"
101
102
  sh "bundle exec rails destroy bigbluebutton_rails:install 2.2.0 --migration-only"
102
103
  sh "bundle exec rails destroy bigbluebutton_rails:install 2.1.0 --migration-only"
103
104
  sh "bundle exec rails destroy bigbluebutton_rails:install 2.0.0 --migration-only"
@@ -49,7 +49,7 @@ class Bigbluebutton::Api::RoomsController < ApplicationController
49
49
  end
50
50
 
51
51
  def join
52
- error_room_not_running unless check_is_running
52
+ return error_room_not_running unless check_is_running
53
53
 
54
54
  # map "meta[_-]" to "userdata-"
55
55
  options = params.select{ |k,v| k.match(/^meta[-_]/) }
@@ -63,7 +63,7 @@ class Bigbluebutton::Api::RoomsController < ApplicationController
63
63
  protected
64
64
 
65
65
  def find_room
66
- @room ||= BigbluebuttonRoom.find_by(param: params[:id])
66
+ @room ||= BigbluebuttonRoom.find_by(slug: params[:id])
67
67
  error_room_not_found if @room.nil?
68
68
  end
69
69
 
@@ -0,0 +1,69 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'bigbluebutton_api'
3
+
4
+ class Bigbluebutton::MeetingsController < ApplicationController
5
+ include BigbluebuttonRails::InternalControllerMethods
6
+
7
+ before_filter :find_meeting
8
+
9
+ respond_to :html
10
+
11
+ layout :determine_layout
12
+
13
+ def determine_layout
14
+ 'application'
15
+ end
16
+
17
+ def destroy
18
+ if @meeting.ended?
19
+ if @meeting.destroy
20
+ respond_with do |format|
21
+ format.html {
22
+ flash[:success] = t('bigbluebutton_rails.meetings.delete.success')
23
+ redirect_to_using_params_or_back(request.referer)
24
+ }
25
+ end
26
+ else
27
+ flash[:error] = t('bigbluebutton_rails.meetings.notice.destroy.error_destroy')
28
+ redirect_to_using_params_or_back(request.referer)
29
+ end
30
+ else
31
+ flash[:error] = t('bigbluebutton_rails.meetings.notice.destroy.running.not_ended')
32
+ redirect_to_using_params_or_back(request.referer)
33
+ end
34
+ end
35
+
36
+ def find_meeting
37
+ @meeting ||= BigbluebuttonMeeting.find_by(id: params[:id])
38
+ end
39
+
40
+ def edit
41
+ respond_with(@meeting)
42
+ end
43
+
44
+ def meeting_params
45
+ unless params[:bigbluebutton_meeting].nil?
46
+ params[:bigbluebutton_meeting].permit(*meeting_allowed_params)
47
+ else
48
+ {}
49
+ end
50
+ end
51
+
52
+ def update
53
+ respond_with @meeting do |format|
54
+ if @meeting.update_attributes(meeting_params)
55
+ format.html {
56
+ message = t('bigbluebutton_rails.meetings.notice.update.success')
57
+ redirect_to_using_params @meeting, :notice => message
58
+ }
59
+ else
60
+ format.html { redirect_to_params_or_render :edit }
61
+ end
62
+ end
63
+ end
64
+
65
+ def meeting_allowed_params
66
+ [ :title ]
67
+ end
68
+
69
+ end
@@ -46,19 +46,13 @@ class Bigbluebutton::RecordingsController < ApplicationController
46
46
  def destroy
47
47
  error = false
48
48
  begin
49
- if @recording.server
50
- server = @recording.server
51
- server.send_delete_recordings(@recording.recordid)
52
- end
49
+ @recording.destroy
53
50
  message = t('bigbluebutton_rails.recordings.notice.destroy.success')
54
51
  rescue BigBlueButton::BigBlueButtonException => e
55
52
  error = true
56
53
  message = t('bigbluebutton_rails.recordings.notice.destroy.success_with_bbb_error', :error => e.to_s[0..200])
57
54
  end
58
55
 
59
- # TODO: what if it fails?
60
- @recording.destroy
61
-
62
56
  respond_with do |format|
63
57
  format.html {
64
58
  if error
@@ -156,7 +150,7 @@ class Bigbluebutton::RecordingsController < ApplicationController
156
150
  end
157
151
 
158
152
  def recording_allowed_params
159
- [ :description ]
153
+ []
160
154
  end
161
155
 
162
156
  protected
@@ -124,7 +124,8 @@ class Bigbluebutton::RoomsController < ApplicationController
124
124
  flash[:error] = e.to_s[0..200]
125
125
  render :json => { :running => "false", :error => "#{e.to_s[0..200]}" }
126
126
  else
127
- render :json => { :running => "#{@room.is_running?}" }
127
+ info = @room.fetch_meeting_info
128
+ render :json => { :running => "#{@room.is_running?}", :participants_qty => info}
128
129
  end
129
130
  end
130
131
 
@@ -224,7 +225,7 @@ class Bigbluebutton::RoomsController < ApplicationController
224
225
  protected
225
226
 
226
227
  def find_room
227
- @room ||= BigbluebuttonRoom.find_by(param: params[:id])
228
+ @room ||= BigbluebuttonRoom.find_by(slug: params[:id])
228
229
  end
229
230
 
230
231
  def set_request_headers
@@ -234,7 +235,7 @@ class Bigbluebutton::RoomsController < ApplicationController
234
235
  end
235
236
 
236
237
  def join_check_room
237
- @room ||= BigbluebuttonRoom.find_by_param(params[:id]) unless params[:id].blank?
238
+ @room ||= BigbluebuttonRoom.find_by(slug: params[:id]) unless params[:id].blank?
238
239
  if @room.nil?
239
240
  message = t('bigbluebutton_rails.rooms.errors.join.wrong_params')
240
241
  redirect_to :back, :notice => message
@@ -363,7 +364,7 @@ class Bigbluebutton::RoomsController < ApplicationController
363
364
  def room_allowed_params
364
365
  [ :name, :meetingid, :attendee_key, :moderator_key, :welcome_msg,
365
366
  :private, :logout_url, :dial_number, :voice_bridge, :max_participants, :owner_id,
366
- :owner_type, :external, :param, :record_meeting, :duration, :default_layout, :presenter_share_only,
367
+ :owner_type, :external, :slug, :record_meeting, :duration, :default_layout, :presenter_share_only,
367
368
  :auto_start_video, :auto_start_audio, :background,
368
369
  :moderator_only_message, :auto_start_recording, :allow_start_stop_recording,
369
370
  :metadata_attributes => [ :id, :name, :content, :_destroy, :owner_id ] ]
@@ -147,7 +147,7 @@ class Bigbluebutton::ServersController < ApplicationController
147
147
  protected
148
148
 
149
149
  def find_server
150
- @server ||= BigbluebuttonServer.find_by_param(params[:id])
150
+ @server ||= BigbluebuttonServer.find_by(slug: params[:id])
151
151
  end
152
152
 
153
153
  def publish_unpublish(ids, publish)
@@ -182,7 +182,7 @@ class Bigbluebutton::ServersController < ApplicationController
182
182
  end
183
183
 
184
184
  def server_allowed_params
185
- [ :name, :url, :secret, :param ]
185
+ [ :name, :url, :secret, :slug ]
186
186
  end
187
187
 
188
188
  end
@@ -7,7 +7,7 @@ class BigbluebuttonMeeting < ActiveRecord::Base
7
7
  has_one :recording,
8
8
  :class_name => 'BigbluebuttonRecording',
9
9
  :foreign_key => 'meeting_id',
10
- :dependent => :nullify
10
+ :dependent => :destroy
11
11
 
12
12
  has_many :attendees,
13
13
  :class_name => 'BigbluebuttonAttendee',
@@ -7,6 +7,8 @@ class BigbluebuttonRecording < ActiveRecord::Base
7
7
  belongs_to :room, class_name: 'BigbluebuttonRoom'
8
8
  belongs_to :meeting, class_name: 'BigbluebuttonMeeting'
9
9
 
10
+ before_destroy :delete_from_server!
11
+
10
12
  validates :server, :presence => true
11
13
 
12
14
  validates :recordid,
@@ -27,10 +29,21 @@ class BigbluebuttonRecording < ActiveRecord::Base
27
29
 
28
30
  serialize :recording_users, Array
29
31
 
32
+ STATES = {
33
+ processing: 'processing',
34
+ processed: 'processed',
35
+ published: 'published',
36
+ unpublished: 'unpublished'
37
+ }
38
+
30
39
  def to_param
31
40
  self.recordid
32
41
  end
33
42
 
43
+ def is_published?
44
+ self.state.eql?(BigbluebuttonRecording::STATES[:published]) || self.state.eql?(BigbluebuttonRecording::STATES[:unpublished])
45
+ end
46
+
34
47
  def get_token(user, ip)
35
48
  server = BigbluebuttonServer.default
36
49
  user.present? ? authName = user.username : authName = "anonymous"
@@ -218,7 +231,7 @@ class BigbluebuttonRecording < ActiveRecord::Base
218
231
  def self.update_recording(server, recording, data)
219
232
  recording.server = server
220
233
  recording.room = BigbluebuttonRails.configuration.match_room_recording.call(data)
221
- recording.attributes = data.slice(:meetingid, :name, :published, :start_time, :end_time, :size)
234
+ recording.attributes = data.slice(:meetingid, :name, :published, :start_time, :end_time, :size, :state)
222
235
  recording.available = true
223
236
  recording.recording_users = adapt_recording_users(data[:recordingUsers])
224
237
  recording.save!
@@ -230,12 +243,11 @@ class BigbluebuttonRecording < ActiveRecord::Base
230
243
  # The format expected for 'data' follows the format returned by
231
244
  # BigBlueButtonApi#get_recordings but with the keys already converted to our format.
232
245
  def self.create_recording(server, data)
233
- filtered = data.slice(:recordid, :meetingid, :name, :published, :start_time, :end_time, :size)
246
+ filtered = data.slice(:recordid, :meetingid, :name, :published, :start_time, :end_time, :size, :state)
234
247
  recording = BigbluebuttonRecording.create(filtered)
235
248
  recording.available = true
236
249
  recording.room = BigbluebuttonRails.configuration.match_room_recording.call(data)
237
250
  recording.server = server
238
- recording.description = I18n.t('bigbluebutton_rails.recordings.default.description', :time => Time.at(recording.start_time).utc.to_formatted_s(:long))
239
251
  recording.meeting = BigbluebuttonRecording.find_matching_meeting(recording)
240
252
  recording.recording_users = adapt_recording_users(data[:recordingUsers])
241
253
  recording.save!
@@ -47,12 +47,12 @@ class BigbluebuttonRoom < ActiveRecord::Base
47
47
  :presence => true,
48
48
  :numericality => { :only_integer => true, :greater_than_or_equal_to => 0 }
49
49
 
50
- validates :param,
50
+ validates :slug,
51
51
  :presence => true,
52
52
  :uniqueness => true,
53
53
  :length => { :minimum => 1 },
54
54
  :format => { :with => /\A([a-zA-Z\d_]|[a-zA-Z\d_]+[a-zA-Z\d_-]*[a-zA-Z\d_]+)\z/,
55
- :message => I18n.t('bigbluebutton_rails.rooms.errors.param_format') }
55
+ :message => I18n.t('bigbluebutton_rails.rooms.errors.slug_format') }
56
56
 
57
57
  # Passwords are 16 character strings
58
58
  # See http://groups.google.com/group/bigbluebutton-dev/browse_thread/thread/9be5aae1648bcab?pli=1
@@ -68,7 +68,7 @@ class BigbluebuttonRoom < ActiveRecord::Base
68
68
 
69
69
  after_initialize :init
70
70
  after_create :create_room_options
71
- before_validation :set_param
71
+ before_validation :set_slug
72
72
  before_validation :set_keys
73
73
 
74
74
  # the full logout_url used when logout_url is a relative path
@@ -94,12 +94,12 @@ class BigbluebuttonRoom < ActiveRecord::Base
94
94
  query_orders = []
95
95
 
96
96
  words.reject(&:blank?).each do |word|
97
- str = "name LIKE ? OR param LIKE ?"
97
+ str = "name LIKE ? OR slug LIKE ?"
98
98
  query_strs << str
99
99
  query_params += ["%#{word}%", "%#{word}%"]
100
100
  query_orders += [
101
101
  "CASE WHEN name LIKE '%#{word}%' THEN 1 ELSE 0 END + \
102
- CASE WHEN param LIKE '%#{word}%' THEN 1 ELSE 0 END"
102
+ CASE WHEN slug LIKE '%#{word}%' THEN 1 ELSE 0 END"
103
103
  ]
104
104
  end
105
105
  where(query_strs.join(' OR '), *query_params.flatten).order(query_orders.join(' + ') + " DESC")
@@ -278,7 +278,7 @@ class BigbluebuttonRoom < ActiveRecord::Base
278
278
  opts.merge!({ userID: id }) unless id.blank? || options[:userID].present?
279
279
 
280
280
  # Get options passed by the application, if any
281
- user_opts = BigbluebuttonRails.configuration.get_join_options.call(self, user)
281
+ user_opts = BigbluebuttonRails.configuration.get_join_options.call(self, user, { username: username, role: role })
282
282
  user_opts = {} if user_opts.blank?
283
283
  opts.merge!(user_opts)
284
284
 
@@ -324,7 +324,7 @@ class BigbluebuttonRoom < ActiveRecord::Base
324
324
  end
325
325
 
326
326
  def to_param
327
- self.param
327
+ self.slug
328
328
  end
329
329
 
330
330
  # The create logic.
@@ -416,6 +416,7 @@ class BigbluebuttonRoom < ActiveRecord::Base
416
416
  server_secret: server.secret,
417
417
  meetingid: self.meetingid,
418
418
  name: self.name,
419
+ title: self.name,
419
420
  recorded: self.record_meeting,
420
421
  create_time: self.create_time,
421
422
  running: self.running,
@@ -476,7 +477,7 @@ class BigbluebuttonRoom < ActiveRecord::Base
476
477
  # have to keep polling the server for them
477
478
  # 3 times so it tries at: 4, 9, 14 and 19
478
479
  # no point trying more since there is a global synchronization process
479
- Resque.enqueue_in(4.minutes, ::BigbluebuttonRecordingsForRoomWorker, self.id, 3)
480
+ Resque.enqueue_in(1.minutes, ::BigbluebuttonRecordingsForRoomWorker, self.id, 10)
480
481
  end
481
482
  end
482
483
 
@@ -540,14 +541,23 @@ class BigbluebuttonRoom < ActiveRecord::Base
540
541
  # Will always generate a unique number. Tries several times if the number already
541
542
  # exists and returns `nil` in case it wasn't possible to generate a unique value.
542
543
  def generate_dial_number!(pattern=nil)
543
- pattern ||= 'xxxx-xxxx'
544
- 20.times do
545
- dn = BigbluebuttonRails::DialNumber.randomize(pattern)
546
- if BigbluebuttonRoom.where(dial_number: dn).empty?
547
- return self.update_attributes(dial_number: dn)
544
+ unless pattern.nil?
545
+ dn = self.class.generate_dial_number(pattern)
546
+ return self.update_attributes(dial_number: dn)
547
+ else
548
+ nil
549
+ end
550
+ end
551
+
552
+ def self.generate_dial_number(pattern=nil)
553
+ unless pattern.nil?
554
+ unless BigbluebuttonRoom.maximum(:dial_number).nil?
555
+ return BigbluebuttonRoom.maximum(:dial_number).next
556
+ else
557
+ return pattern.gsub('x', '0')
548
558
  end
559
+ nil
549
560
  end
550
- nil
551
561
  end
552
562
 
553
563
  def fetch_recordings(filter={})
@@ -654,10 +664,10 @@ class BigbluebuttonRoom < ActiveRecord::Base
654
664
  end
655
665
  end
656
666
 
657
- # if :param wasn't set, sets it as :name downcase and parameterized
658
- def set_param
659
- if self.param.blank?
660
- self.param = self.name.parameterize.downcase unless self.name.nil?
667
+ # if :slug wasn't set, sets it as :name downcase and parameterized
668
+ def set_slug
669
+ if self.slug.blank?
670
+ self.slug = self.name.parameterize.downcase unless self.name.nil?
661
671
  end
662
672
  end
663
673