зеркало из https://github.com/nextcloud/spreed.git
99 строки
2.8 KiB
JavaScript
99 строки
2.8 KiB
JavaScript
/* global Backbone, OC, OCA */
|
|
|
|
/**
|
|
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
|
|
*
|
|
* @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 || {};
|
|
|
|
OCA.SpreedMe.Models.ParticipantCollection = Backbone.Collection.extend({
|
|
model: OCA.SpreedMe.Models.Participant,
|
|
room: undefined,
|
|
|
|
/**
|
|
* @param {OCA.SpreedMe.Models.Room} room
|
|
* @returns {Array}
|
|
*/
|
|
setRoom: function(room) {
|
|
this.stopListening(this.room, 'change:participants');
|
|
this.stopListening(this.room, 'change:guestList');
|
|
|
|
this.room = room;
|
|
this.url = OC.linkToOCS('apps/spreed/api/v1/room', 2) + this.room.get('token') + '/participants';
|
|
|
|
this.fetch();
|
|
|
|
this.listenTo(this.room, 'change:participants', function() {
|
|
this.fetch();
|
|
});
|
|
this.listenTo(this.room, 'change:guestList', function() {
|
|
this.fetch();
|
|
});
|
|
},
|
|
|
|
/**
|
|
* @param result
|
|
* @returns {Array}
|
|
*/
|
|
parse: function(result) {
|
|
return result.ocs.data;
|
|
},
|
|
|
|
/**
|
|
* Sort participants:
|
|
* - Moderators first
|
|
* - Online status
|
|
* - Alphabetic
|
|
*
|
|
* @param {OCA.SpreedMe.Models.Participant} modelA
|
|
* @param {OCA.SpreedMe.Models.Participant} modelB
|
|
* @returns {*}
|
|
*/
|
|
comparator: function(modelA, modelB) {
|
|
var onlineA = modelA.get('sessionId') !== '' && modelA.get('sessionId') !== '0',
|
|
onlineB = modelB.get('sessionId') !== '' && modelB.get('sessionId') !== '0',
|
|
moderateA = modelA.get('participantType') === OCA.SpreedMe.app.OWNER ||
|
|
modelA.get('participantType') === OCA.SpreedMe.app.MODERATOR,
|
|
moderateB = modelB.get('participantType') === OCA.SpreedMe.app.OWNER ||
|
|
modelB.get('participantType') === OCA.SpreedMe.app.MODERATOR,
|
|
guestA = modelA.get('participantType') === OCA.SpreedMe.app.GUEST,
|
|
guestB = modelB.get('participantType') === OCA.SpreedMe.app.GUEST;
|
|
|
|
if (moderateA !== moderateB) {
|
|
return moderateB - moderateA;
|
|
}
|
|
|
|
if (onlineA !== onlineB) {
|
|
return onlineB - onlineA;
|
|
}
|
|
|
|
if (guestA !== guestB) {
|
|
return guestA - guestB;
|
|
}
|
|
|
|
return modelA.get('displayName') > modelB.get('displayName');
|
|
}
|
|
});
|
|
|
|
})(OCA, OC, Backbone);
|