144 lines
5.6 KiB
CoffeeScript
Executable File
144 lines
5.6 KiB
CoffeeScript
Executable File
Handlebars.registerHelper 'equals', (a, b) -> # equals operator was dropped in Meteor's migration from Handlebars to Spacebars
|
|
a is b
|
|
|
|
# Allow access through all templates
|
|
Handlebars.registerHelper "setInSession", (k, v) -> SessionAmplify.set k, v
|
|
Handlebars.registerHelper "getInSession", (k) -> SessionAmplify.get k
|
|
# Allow access throughout all coffeescript/js files
|
|
@setInSession = (k, v) -> SessionAmplify.set k, v
|
|
@getInSession = (k) -> SessionAmplify.get k
|
|
|
|
# retrieve account for selected user
|
|
@getCurrentUserFromSession = ->
|
|
Meteor.Users.findOne("userId": getInSession("userId"))
|
|
|
|
# retrieve account for selected user
|
|
Handlebars.registerHelper "getCurrentUser", =>
|
|
@window.getCurrentUserFromSession()
|
|
|
|
# toggle state of field in the database
|
|
@toggleCam = (event) ->
|
|
# Meteor.Users.update {_id: context._id} , {$set:{"user.sharingVideo": !context.sharingVideo}}
|
|
# Meteor.call('userToggleCam', context._id, !context.sharingVideo)
|
|
|
|
@toggleVoiceCall = (event) ->
|
|
if getInSession "isSharingAudio"
|
|
callback = ->
|
|
setInSession "isSharingAudio", false # update to no longer sharing
|
|
console.log "left voice conference"
|
|
# sometimes we can hangup before the message that the user stopped talking is received so lets set it manually, otherwise they might leave the audio call but still be registered as talking
|
|
Meteor.call("userStopAudio", getInSession("meetingId"),getInSession("userId"))
|
|
webrtc_hangup callback # sign out of call
|
|
else
|
|
# create voice call params
|
|
username = "#{getInSession("userId")}-bbbID-#{getUsersName()}"
|
|
voiceBridge = "70827"
|
|
server = null
|
|
callback = (message) ->
|
|
console.log JSON.stringify message
|
|
setInSession "isSharingAudio", true
|
|
Meteor.call("userShareAudio", getInSession("meetingId"),getInSession("userId"))
|
|
webrtc_call(username, voiceBridge, server, callback) # make the call
|
|
|
|
@toggleMic = (event) ->
|
|
if getInSession "isSharingAudio" # only allow muting/unmuting if they are in the call
|
|
console.log "toggling mute"
|
|
u = Meteor.Users.findOne({userId:getInSession("userId")})
|
|
if u?
|
|
# format: meetingId, userId, requesterId, mutedBoolean
|
|
# TODO: insert the requesterId - the user who requested the muting of userId (might be a moderator)
|
|
Meteor.call('publishMuteRequest', u.meetingId, u.userId, u.userId, not u.user.voiceUser.muted)
|
|
|
|
# toggle state of session variable
|
|
@toggleUsersList = ->
|
|
setInSession "display_usersList", !getInSession "display_usersList"
|
|
|
|
@toggleNavbar = ->
|
|
setInSession "display_navbar", !getInSession "display_navbar"
|
|
|
|
@toggleChatbar = ->
|
|
setInSession "display_chatbar", !getInSession "display_chatbar"
|
|
|
|
@toggleWhiteBoard = ->
|
|
setInSession "display_whiteboard", !getInSession "display_whiteboard"
|
|
|
|
Meteor.methods
|
|
sendMeetingInfoToClient: (meetingId, userId) ->
|
|
setInSession("userId", userId)
|
|
setInSession("meetingId", meetingId)
|
|
setInSession("currentChatId", meetingId)
|
|
setInSession("meetingName", null)
|
|
setInSession("bbbServerVersion", "0.90")
|
|
setInSession("userName", null)
|
|
setInSession("validUser", true) # got info from server, user is a valid user
|
|
|
|
@getUsersName = ->
|
|
name = getInSession("userName") # check if we actually have one in the session
|
|
if name? then name # great return it, no database query
|
|
else # we need it from the database
|
|
user = Meteor.Users.findOne({'userId': getInSession("userId")})
|
|
if user?.user?.name
|
|
setInSession "userName", user.user.name # store in session for fast access next time
|
|
user.user.name
|
|
else null
|
|
|
|
@getMeetingName = ->
|
|
meetName = getInSession("meetingName") # check if we actually have one in the session
|
|
if meetName? then meetName # great return it, no database query
|
|
else # we need it from the database
|
|
meet = Meteor.Meetings.findOne({})
|
|
if meet?.meetingName
|
|
setInSession "meetingName", meet?.meetingName # store in session for fast access next time
|
|
meet?.meetingName
|
|
else null
|
|
|
|
Handlebars.registerHelper "getMeetingName", ->
|
|
window.getMeetingName()
|
|
|
|
Handlebars.registerHelper "isUserSharingVideo", (u) ->
|
|
u.webcam_stream.length isnt 0
|
|
|
|
Handlebars.registerHelper "isCurrentUser", (id) ->
|
|
id is getInSession("userId")
|
|
|
|
# retrieves all users in the meeting
|
|
Handlebars.registerHelper "getUsersInMeeting", ->
|
|
Meteor.Users.find({})
|
|
|
|
Handlebars.registerHelper "isUserTalking", (u) ->
|
|
if u? then u.voiceUser?.talking
|
|
else return false
|
|
|
|
Handlebars.registerHelper "isUserSharingAudio", (u) ->
|
|
if u? then u.voiceUser?.joined
|
|
else return false
|
|
|
|
Handlebars.registerHelper "getCurrentSlide", ->
|
|
currentPresentation = Meteor.Presentations.findOne({"presentation.current": true})
|
|
presentationId = currentPresentation?.presentation?.id
|
|
Meteor.Slides.find({"presentationId": presentationId, "slide.current": true})
|
|
|
|
|
|
# Starts the entire logout procedure.
|
|
# meeting: the meeting the user is in
|
|
# the user's userId
|
|
@userLogout = (meeting, user) ->
|
|
Meteor.call("userLogout", meeting, user)
|
|
|
|
# Clear the local user session and redirect them away
|
|
setInSession("userId", null)
|
|
setInSession("meetingId", null)
|
|
setInSession("currentChatId", null)
|
|
setInSession("meetingName", null)
|
|
setInSession("bbbServerVersion", null)
|
|
setInSession("userName", null)
|
|
setInSession "display_navbar", false # needed to hide navbar when the layout template renders
|
|
|
|
Router.go('logout') # navigate to logout
|
|
|
|
@userKick = (meeting, user) ->
|
|
Meteor.call("userKick", meeting, user)
|
|
|
|
@getTime = -> # returns epoch in ms
|
|
(new Date).valueOf()
|