Class: BigbluebuttonRailsTo220B

Inherits:
ActiveRecord::Migration
  • Object
show all
Defined in:
lib/generators/bigbluebutton_rails/templates/migration_2_2_0_b.rb

Instance Method Summary collapse

Instance Method Details

#downObject

Raises:

  • (ActiveRecord::IrreversibleMigration)


103
104
105
# File 'lib/generators/bigbluebutton_rails/templates/migration_2_2_0_b.rb', line 103

def down
 raise ActiveRecord::IrreversibleMigration, "Can't undo due to loss of values during migration"
end

#find_creator_data(recording) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
# File 'lib/generators/bigbluebutton_rails/templates/migration_2_2_0_b.rb', line 91

def find_creator_data(recording)
  creator_data = []
  if recording.room.owner.is_a?(User)
    creator_id = recording.room.try(:owner).try(:id)
    creator_name = recording.room.try(:owner).try(:name)
  elsif recording.room.owner.is_a?(Space)
    creator_id = recording.room.try(:owner).try(:admins).try(:first).try(:id)
    creator_name = recording.room.try(:owner).try(:admins).try(:first).try(:name)
  end
  creator_data = [creator_id, creator_name]
end

#find_matching_meeting_closer_create_time(recording) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/generators/bigbluebutton_rails/templates/migration_2_2_0_b.rb', line 71

def find_matching_meeting_closer_create_time(recording)
  meeting_id = recording.meeting_id
  if meeting_id.nil?
    meeting = BigbluebuttonMeeting.where("meetingid = ? AND created_at > ? AND created_at < ?",
              recording.meetingid, Time.at(recording.start_time)-2.minutes, Time.at(recording.start_time)+2.minutes).first

    unless meeting.nil?
      unless BigbluebuttonRecording.find_by(meeting_id: meeting.id).present?
        meeting_id = meeting.id
      end
    end

    unless meeting_id.nil?
      puts "Meeting found for recording id-#{recording.id}: Meeting id-#{meeting.id}"
    end
  end

  meeting_id
end

#upObject



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/generators/bigbluebutton_rails/templates/migration_2_2_0_b.rb', line 2

def up
  BigbluebuttonMeeting.where(create_time: nil).find_each do |meeting|
    meeting.update_attribute(create_time, meeting.start_time.to_i)
  end

  remove_column :bigbluebutton_meetings, :start_time

  add_column :bigbluebutton_recordings, :temp_start_time, :decimal, precision: 14, scale: 0
  add_column :bigbluebutton_recordings, :temp_end_time, :decimal, precision: 14, scale: 0

  BigbluebuttonRecording.find_each do |rec|
    rec.update_attributes(
      temp_start_time: rec.start_time.to_i,
      temp_end_time: rec.end_time.to_i
    )
  end

  remove_column :bigbluebutton_recordings, :start_time
  remove_column :bigbluebutton_recordings, :end_time

  rename_column :bigbluebutton_recordings, :temp_start_time, :start_time
  rename_column :bigbluebutton_recordings, :temp_end_time, :end_time

  BigbluebuttonRecording.find_each do |rec|
    rec.update_attributes(
      meeting_id: BigbluebuttonRecording.find_matching_meeting(rec).try(:id)
    )
  end

  BigbluebuttonRecording.where(meeting_id: nil).find_each do |rec|
    rec.update_attributes(
      meeting_id: find_matching_meeting_closer_create_time(rec)
    )
  end

  BigbluebuttonRecording.where(meeting_id: nil).where.not(room_id: nil).find_each do |rec|
    meeting = BigbluebuttonMeeting.create do |m|
      creator_data = find_creator_data(rec)
      m.server_id = rec.server_id
      m.room_id = rec.room_id
      m.meetingid = rec.meetingid
      m.name = rec.name
      m.running = false
      m.recorded = true
      m.creator_id = creator_data[0]
      m.creator_name = creator_data[1]
      m.server_url = nil
      m.server_secret = nil
      m.create_time = rec.start_time
      m.ended = true
    end
    rec.update_attributes(meeting_id: meeting.id)
    puts "Created a meeting for the recording id-#{rec.id}: Meeting id-#{meeting.id}"
  end

  create_table :bigbluebutton_attendees do |t|
    t.string :user_id
    t.string :external_user_id
    t.string :user_name
    t.decimal :join_time, precision: 14, scale: 0
    t.decimal :left_time, precision: 14, scale: 0
    t.integer :bigbluebutton_meeting_id
    t.timestamps
  end

  add_column :bigbluebutton_meetings, :finish_time, :decimal, precision: 14, scale: 0
  add_column :bigbluebutton_meetings, :got_stats, :string
end