-
Notifications
You must be signed in to change notification settings - Fork 5.9k
/
MeetingStatus2x.scala
executable file
·132 lines (106 loc) · 6.23 KB
/
MeetingStatus2x.scala
1
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package org.bigbluebutton.core2
import java.util.concurrent.TimeUnit
import org.bigbluebutton.core.util.TimeUtil
case class Permissions(
disableCam: Boolean = false,
disableMic: Boolean = false,
disablePrivChat: Boolean = false,
disablePubChat: Boolean = false,
disableNote: Boolean = false,
lockedLayout: Boolean = false,
lockOnJoin: Boolean = true,
lockOnJoinConfigurable: Boolean = false
)
case class MeetingExtensionProp(maxExtensions: Int = 2, numExtensions: Int = 0, extendByMinutes: Int = 20,
sendNotice: Boolean = true, sent15MinNotice: Boolean = false,
sent10MinNotice: Boolean = false, sent5MinNotice: Boolean = false)
object MeetingStatus2x {
def isVoiceRecording(status: MeetingStatus2x): Boolean = {
status.voiceRecordings.values.find(s => s.recording) match {
case Some(rec) => true
case None => false
}
}
def isExtensionAllowed(status: MeetingStatus2x): Boolean = status.extension.numExtensions < status.extension.maxExtensions
def incNumExtension(status: MeetingStatus2x): Int = {
if (status.extension.numExtensions < status.extension.maxExtensions) {
status.extension = status.extension.copy(numExtensions = status.extension.numExtensions + 1); status.extension.numExtensions
}
status.extension.numExtensions
}
def notice15MinutesSent(status: MeetingStatus2x) = status.extension = status.extension.copy(sent15MinNotice = true)
def notice10MinutesSent(status: MeetingStatus2x) = status.extension = status.extension.copy(sent10MinNotice = true)
def notice5MinutesSent(status: MeetingStatus2x) = status.extension = status.extension.copy(sent5MinNotice = true)
def getMeetingExtensionProp(status: MeetingStatus2x): MeetingExtensionProp = status.extension
def muteMeeting(status: MeetingStatus2x) = status.meetingMuted = true
def unmuteMeeting(status: MeetingStatus2x) = status.meetingMuted = false
def isMeetingMuted(status: MeetingStatus2x): Boolean = status.meetingMuted
def recordingStarted(status: MeetingStatus2x) = status.recording = true
def recordingStopped(status: MeetingStatus2x) = status.recording = false
def isRecording(status: MeetingStatus2x): Boolean = status.recording
def authUserHadJoined(status: MeetingStatus2x) = status.authedUserHasJoined = true
def hasAuthedUserJoined(status: MeetingStatus2x): Boolean = status.authedUserHasJoined
def setLastAuthedUserLeftOn(status: MeetingStatus2x) = status.lastAuthedUserLeftOn = TimeUtil.timeNowInMs()
def getLastAuthedUserLeftOn(status: MeetingStatus2x): Long = status.lastAuthedUserLeftOn
def resetLastAuthedUserLeftOn(status: MeetingStatus2x) = status.lastAuthedUserLeftOn = 0L
def voiceRecordingStart(status2x: MeetingStatus2x, stream: String): VoiceRecordingStream = {
val vrs = new VoiceRecordingStream(stream, recording = false, createdOn = System.currentTimeMillis, ackedOn = None, stoppedOn = None)
status2x.voiceRecordings += vrs.stream -> vrs
vrs
}
def voiceRecordingStarted(status2x: MeetingStatus2x, stream: String): Option[VoiceRecordingStream] = {
val vrs = for {
recStream <- status2x.voiceRecordings.values find (s => s.stream == stream)
} yield {
val rs = recStream.copy(recording = true, ackedOn = Some(System.currentTimeMillis))
status2x.voiceRecordings += rs.stream -> rs
rs
}
vrs
}
def voiceRecordingStopped(status2x: MeetingStatus2x, stream: String): Option[VoiceRecordingStream] = {
val vrs = for {
recStream <- status2x.voiceRecordings.values find (s => s.stream == stream)
} yield {
val rs = recStream.copy(recording = false, stoppedOn = Some(System.currentTimeMillis))
status2x.voiceRecordings += rs.stream -> rs
rs
}
vrs
}
def getVoiceRecordingStreams(status2x: MeetingStatus2x): Vector[VoiceRecordingStream] = {
status2x.voiceRecordings.values.filter(s => s.recording).toVector
}
def setWebcamsOnlyForModerator(status: MeetingStatus2x, value: Boolean) = status.webcamsOnlyForModerator = value
def webcamsOnlyForModeratorEnabled(status: MeetingStatus2x): Boolean = status.webcamsOnlyForModerator
def permisionsInitialized(status: MeetingStatus2x): Boolean = status.permissionsInited
def initializePermissions(status: MeetingStatus2x) = status.permissionsInited = true
def audioSettingsInitialized(status: MeetingStatus2x): Boolean = status.audioSettingsInited
def initializeAudioSettings(status: MeetingStatus2x) = status.audioSettingsInited = true
def permissionsEqual(status: MeetingStatus2x, other: Permissions): Boolean = status.permissions == other
def getPermissions(status: MeetingStatus2x): Permissions = status.permissions
def setPermissions(status: MeetingStatus2x, p: Permissions) = {
status.permissions = p
status.permissionsChangedOn = System.currentTimeMillis()
}
def getPermissionsChangedOn(status: MeetingStatus2x): Long = status.permissionsChangedOn
def meetingHasEnded(status: MeetingStatus2x) = status.meetingEnded = true
def hasMeetingEnded(status: MeetingStatus2x): Boolean = status.meetingEnded
def timeNowInMinutes(status: MeetingStatus2x): Long = TimeUnit.NANOSECONDS.toMinutes(System.nanoTime())
def timeNowInSeconds(status: MeetingStatus2x): Long = TimeUnit.NANOSECONDS.toSeconds(System.nanoTime())
}
class MeetingStatus2x {
private var voiceRecordings: collection.immutable.HashMap[String, VoiceRecordingStream] = new collection.immutable.HashMap[String, VoiceRecordingStream]
private var audioSettingsInited = false
private var permissionsInited = false
private var permissionsChangedOn: Long = System.currentTimeMillis()
private var permissions = new Permissions()
private var recording = false
private var meetingEnded = false
private var meetingMuted = false
private var extension = new MeetingExtensionProp
private var webcamsOnlyForModerator = false
private var authedUserHasJoined = false
private var lastAuthedUserLeftOn = 0L
}
case class VoiceRecordingStream(stream: String, recording: Boolean, createdOn: Long, ackedOn: Option[Long], stoppedOn: Option[Long])