diff options
author | Daniel Calviño Sánchez <danxuliu@gmail.com> | 2017-08-29 17:54:57 +0200 |
---|---|---|
committer | Daniel Calviño Sánchez <danxuliu@gmail.com> | 2017-11-03 04:20:25 +0100 |
commit | b624a66e923407e98a25eda6b050370757ed52aa (patch) | |
tree | f727fa5739af5d87b6bf517047f5880d98995330 /js/models/chatmessage.js | |
parent | 7d8b5f0c89d668d6d40a24cd3e95c7e25ec9c41d (diff) |
Add basic Backbone models for chat messages
As chat messages can only be sent and received, but not updated or
deleted, a limited set of features are available only in the models:
sending a message is done by saving a ChatMessage, while receiving the
chat messages from a room is done by fetching a ChatMessageCollection.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Diffstat (limited to 'js/models/chatmessage.js')
-rw-r--r-- | js/models/chatmessage.js | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/js/models/chatmessage.js b/js/models/chatmessage.js new file mode 100644 index 000000000..2449be730 --- /dev/null +++ b/js/models/chatmessage.js @@ -0,0 +1,81 @@ +/* global Backbone, OC, OCA */ + +/** + * + * @copyright Copyright (c) 2017, Daniel Calviño Sánchez (danxuliu@gmail.com) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +(function(OCA, OC, Backbone) { + 'use strict'; + + OCA.SpreedMe = OCA.SpreedMe || {}; + OCA.SpreedMe.Models = OCA.SpreedMe.Models || {}; + + /** + * Model for chat messages. + * + * ChatMessage can be used as the model of a ChatMessageCollection or as a + * standalone model. When used as a standalone model the room token must be + * provided in the constructor options (as "token"). + * + * In any case, "create" is the only synchronization method allowed; chat + * messages can not be edited nor deleted, and they can not be got + * individually either, but as a list through ChatMessageCollection. + * + * To send a new message create a standalone ChatMessage object and call + * "save". + */ + var ChatMessage = Backbone.Model.extend({ + + defaults: { + actorType: '', + actorId: '', + actorDisplayName: '', + timestamp: 0, + message: '' + }, + + url: function() { + if (this.token === undefined) { + throw 'Missing parameter token'; + } + + return OC.linkToOCS('apps/spreed/api/v1/chat', 2) + this.token; + }, + + initialize: function(options) { + // Only needed in standalone mode; when used as the model of a + // ChatMessageCollection the synchronization is performed by the + // collection instead. + this.token = options.token; + }, + + sync: function(method, model, options) { + if (method !== 'create') { + throw 'Synchronization method not supported by ChatMessage: ' + method; + } + + return Backbone.Model.prototype.sync.call(this, method, model, options); + } + + }); + + OCA.SpreedMe.Models.ChatMessage = ChatMessage; + +})(OCA, OC, Backbone); |