meses-messaging
Version:
Meses messaging SDK in JavaScript
105 lines (96 loc) • 3.33 kB
JavaScript
import PreviousMessageListQuery from './PreviousMessageListQuery'
import NewMessageUpdateHandler from './NewMessageUpdateHandler'
import Message from './Message'
class Conversation {
constructor(service, conversationName, username, properties) {
this._service = service
this._username = username
this.conversationName = conversationName
Object.assign(this, properties)
}
/**
* Mark conversation as read
*
* @return {Promise} fulfilled if succeeded.
*/
markAsRead() {
const service = this._service
const conversationName = this.conversationName
const username = this._username
return new Promise(function(resolve, reject) {
service.markConversationRead(conversationName, username)
.then(() => resolve())
.catch(err => reject(err))
})
}
/**
* Refresh conversation attributes (including properties and subscribers)
*
* @return {Promise} fulfilled if succeeded.
*/
refresh() {
const service = this._service
return new Promise(function(resolve, reject) {
service.getConversation(this.conversationName)
.then(properties => { Object.assign(this, properties); resolve(properties) })
.catch(err => reject(err))
}.bind(this))
}
/**
* Create a previous message list query.
*
* @param {Number} start - query param for first message time
* @return {PreviousMessageListQuery}
*/
createPreviousMessageListQuery(start) {
start = start ? start : null
const service = this._service
const conversationName = this.conversationName
return new PreviousMessageListQuery(service, conversationName, start)
}
/**
* Create a conversation update handler.
*
* @param {String} identifier - unique identifier of update handler
* @param {Function(err, result)} callback function for new message updates
* @param {Number} timeout - refresh rate (in milliseconds)
* @return {NewMessageUpdateHandler}
*/
createNewMessageUpdateHandler(identifier, callback, timeout) {
const service = this._service
const conversationName = this.conversationName
return new NewMessageUpdateHandler(service, conversationName, identifier, callback, timeout)
}
/**
* Post a new message to conversation.
*
* @param {String} message
* @param {Object} properties
* @return {Promise} the newly created message if creation succeeded (fulfilled).
*/
sendMessage(message, properties) {
const service = this._service
const username = this._username
return new Promise(function(resolve, reject) {
service.createMessage(this.conversationName, this._username, message, properties)
.then(result => resolve(new Message(result.messageId, message, username, properties)))
.catch(err => reject(err))
}.bind(this))
}
/**
* Subscribing specified user to conversation.
*
* @param {String} username
* @return {Promise} fulfilled if subscription creation succeeded.
*/
inviteUser(username) {
const service = this._service
const conversationName = this.conversationName
return new Promise(function(resolve, reject) {
service.createSubscription(conversationName, username)
.then(() => resolve())
.catch(err => reject(err))
})
}
}
export default Conversation