diff options
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); |