ChatController.coffee 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. define [
  2. "base"
  3. ], (App) ->
  4. App.controller "ChatController", ["$scope", "$http", "ide", "$location", ($scope, $http, @ide, $location) ->
  5. MESSAGES_URL = "/project/#{$scope.project_id}/messages"
  6. CONNECTED_USER_URL = "/project/#{$scope.project_id}/connected_users"
  7. $scope.$on "project:joined", =>
  8. @ide.socket.on "new-chat-message", (message) =>
  9. $scope.chat.messages.push(message)
  10. $http.get(MESSAGES_URL).success (data, status, headers, config)->
  11. $scope.chat.messages = data
  12. $http.get(CONNECTED_USER_URL).success (data)->
  13. console.log data
  14. $scope.$watchCollection "chat.messages", (messages) ->
  15. if messages?
  16. console.log "grouping messages"
  17. $scope.chat.groupedMessages = groupMessages(messages)
  18. $scope.sendMessage = ->
  19. body =
  20. content:$scope.newMessageContent
  21. _csrf : window.csrfToken
  22. $http.post(MESSAGES_URL, body).success (data, status, headers, config)->
  23. $scope.newMessageContent = ""
  24. TIMESTAMP_GROUP_SIZE = 5 * 60 * 1000 # 5 minutes
  25. groupMessages = (messages) ->
  26. previousMessage = null
  27. groupedMessages = []
  28. for message in messages
  29. shouldGroup = previousMessage? and
  30. previousMessage.user == message.user and
  31. message.timestamp - previousMessage.timestamp < TIMESTAMP_GROUP_SIZE
  32. if shouldGroup
  33. previousMessage.timestamp = message.timestamp
  34. previousMessage.contents.push message.content
  35. else
  36. groupedMessages.push(previousMessage = {
  37. user: message.user
  38. timestamp: message.timestamp
  39. contents: [message.content]
  40. })
  41. return groupedMessages
  42. ]