module.exports = Conversation var debug = require('debug')('snapchat:conversation') var Snap = require('./snap') var Message = require('./message') var CashTransaction = require('./cash-transaction') var Transaction = require('./transaction') /** * Snapchat Conversation * * @class * @param {Object} params */ function Conversation (params) { var self = this if (!(self instanceof Conversation)) return new Conversation(params) var convoMessages = params['conversation_messages'] || { } var lastChatActions = params['last_chat_actions'] var lastTransaction = params['last_cash_transaction'] var pendingRecievedSnaps = params['pending_received_snaps'] || [] var messages = convoMessages['messages'] || [] var lastSnap = params['last_snap'] var lastInteraction = +params['last_interaction_ts'] self.messagingAuth = convoMessages['messaging_auth'] self.state = params['conversation_state'] self.identifier = params['id'] self.pagination = params['iter_token'] self.lastSnap = lastSnap ? new Snap(lastSnap) : null self.lastTransaction = lastTransaction ? new Transaction(lastTransaction) : null self.lastInteraction = lastInteraction > 0 ? new Date(lastInteraction) : null if (lastChatActions) { // self.lastChatType = SKChatTypeFromString(lastChatActions['last_write_type']) // self.lastChatRead = +NSDate dateWithTimeIntervalSince1970:[lastChatActions['last_read_timestamp']/1000] // self.lastChatWrite = +NSDate dateWithTimeIntervalSince1970:[lastChatActions['last_write_timestamp']/1000] self.lastChatReader = lastChatActions['last_reader'] self.lastChatWriter = lastChatActions['last_writer'] } self.participants = params['participants'] || self.identifier.split('~') self.usersWithPendingChats = params['pending_chats_for'] || [] // Messages self.messages = messages.map(function (message) { if (message['snap']) { return new Snap(message['snap']) } else if (message['chat_message']) { return new Message(message['chat_message']) } else if (message['cash_transaction']) { return new CashTransaction(message['chat_transaction']) } else { debug('Unhandled conversation message type:%s', message) return null } }) // Pending recieved snaps self.pendingRecievedSnaps = pendingRecievedSnaps.map(function (snap) { return new Snap(snap) }) } Conversation.prototype.addMessagesFromConversation = function (convo) { var self = this if (!convo.messages.count) return self.messages = self.messages.concat(convo.messages) }