Started on call timeout

pull/3476/head
Aaron Ogle 10 years ago
parent 25fe06396f
commit 52ec203789
  1. 10
      packages/rocketchat-videobridge/client/tabBar.js
  2. 10
      packages/rocketchat-videobridge/client/views/videoFlexTab.js
  3. 6
      packages/rocketchat-videobridge/package.js
  4. 5
      packages/rocketchat-videobridge/server/methods/jitsiConnect.js
  5. 5
      packages/rocketchat-videobridge/server/methods/jitsiDisconnect.js
  6. 17
      packages/rocketchat-videobridge/server/methods/jitsiIsActive.js
  7. 23
      packages/rocketchat-videobridge/server/methods/jitsiSetTimeout.js
  8. 29
      packages/rocketchat-videobridge/server/models/Rooms.js
  9. 4
      server/startup/roomPublishes.coffee

@ -11,6 +11,16 @@ Meteor.startup(function() {
width: 790,
order: 12
});
if (Session.get('openedRoom')) {
Meteor.call('jitsi:isActive', Session.get('openedRoom'), (err, value) => {
if (value) {
RocketChat.TabBar.updateButton('video', { class: 'attention' }); // or attention for blinking
} else {
RocketChat.TabBar.updateButton('video', { class: '' });
}
});
}
}
});
});

@ -11,11 +11,11 @@ Template.videoFlexTab.onCreated(function() {
if (RocketChat.settings.get('Jitsi_Enabled')) {
if (RocketChat.TabBar.getTemplate() === 'videoFlexTab') {
if (RocketChat.TabBar.isFlexOpen()) {
Meteor.call('jitsi:connect', rid);
RocketChat.TabBar.updateButton('video', { class: 'red' }); // or attention for blinking
RocketChat.TabBar.updateButton('video', { class: 'red' });
} else {
Meteor.call('jitsi:disconnect', rid);
RocketChat.TabBar.updateButton('video', { class: '' });
if (this.timeout) this.timeout();
}
}
}
@ -41,6 +41,10 @@ Template.videoFlexTab.onCreated(function() {
api.executeCommand('displayName', [Meteor.user().name]);
}, 3000);
Meteor.call('jitsi:updateTimeout', rid);
this.timeout = setInterval(() => Meteor.call('jitsi:updateTimeout', rid), 10*1000)
})
.fail(function() {
// Show an error

@ -18,8 +18,6 @@ Package.onUse(function(api) {
api.use('templating', 'client');
api.addFiles('client/stylesheets/video.less', 'client');
api.addFiles('client/views/videoFlexTab.html', 'client');
api.addFiles('client/views/videoFlexTab.js', 'client');
@ -27,7 +25,7 @@ Package.onUse(function(api) {
api.addFiles('server/settings.js', 'server');
api.addFiles('server/models/Rooms.js', 'server');
api.addFiles('server/methods/jitsiConnect.js', 'server');
api.addFiles('server/methods/jitsiDisconnect.js', 'server');
api.addFiles('server/methods/jitsiSetTimeout.js', 'server');
api.addFiles('server/methods/jitsiIsActive.js', 'server');
});

@ -1,5 +0,0 @@
Meteor.methods({
'jitsi:connect': (rid) => {
RocketChat.models.Rooms.addJitsiConnected(rid, Meteor.userId());
}
});

@ -1,5 +0,0 @@
Meteor.methods({
'jitsi:disconnect': (rid) => {
RocketChat.models.Rooms.removeJitsiConnected(rid, Meteor.userId());
}
});

@ -0,0 +1,17 @@
Meteor.methods({
'jitsi:isActive': (rid) => {
console.log('Checking if active', rid);
let room = RocketChat.models.Rooms.findOne({_id: rid});
let currentTime = new Date().getTime();
if (room.jitsiTimeout !== undefined) {
if (currentTime > new Date(room.jitsiTimeout).getTime()) {
return true;
} else {
return false;
}
} else {
return false;
}
}
});

@ -0,0 +1,23 @@
Meteor.methods({
'jitsi:updateTimeout': (rid) => {
console.log('jitsi:updateTimeout called!')
let room = RocketChat.models.Rooms.findOne({_id: rid});
let currentTime = new Date().getTime();
let jitsiTimeout = new Date(room.jitsiTimeout || currentTime).getTime();
let diff = jitsiTimeout - currentTime;
console.log('Timeout: '+jitsiTimeout +' currentTime: ' + currentTime);
console.log('diff between currentTime and Timeout: '+diff);
if (jitsiTimeout <= currentTime) {
console.log('call has not been started yet...');
RocketChat.models.Rooms.setJitsiTimeout(rid, new Date(currentTime + 30*1000));
} else if ((jitsiTimeout - currentTime) < 10) {
console.log('updating timestamp');
RocketChat.models.Rooms.setJitsiTimeout(rid, new Date(currentTime + 20*1000));
}
}
});

@ -1,35 +1,16 @@
/**
* Adds userId to jitsiConnected list of connected users
* sets jitsiTimeout to indicate a call is in progress
* @param {string} _id - Room id
* @param {string} userId - User id
* @parm {number} time - time to set
*/
RocketChat.models.Rooms.addJitsiConnected = function(_id, userId) {
RocketChat.models.Rooms.setJitsiTimeout = function(_id, time) {
const query = {
_id: _id
};
const update = {
$addToSet: {
jitsiConnected: userId
}
};
return this.update(query, update);
};
/**
* Removes userId from jitsiConnected list of connected users
* @param {string} _id - Room id
* @param {string} userId - User id
*/
RocketChat.models.Rooms.removeJitsiConnected = function(_id, userId) {
const query = {
_id: _id
};
const update = {
$pull: {
jitsiConnected: userId
$set: {
jitsiTimeout: time
}
};

@ -10,6 +10,7 @@ Meteor.startup ->
topic: 1
muted: 1
archived: 1
jitsiTimeout: 1
if RocketChat.authz.hasPermission(this.userId, 'view-c-room')
return RocketChat.models.Rooms.findByTypeAndName 'c', identifier, options
@ -30,6 +31,7 @@ Meteor.startup ->
topic: 1
muted: 1
archived: 1
jitsiTimeout: 1
user = RocketChat.models.Users.findOneById this.userId, fields: username: 1
return RocketChat.models.Rooms.findByTypeAndNameContainingUsername 'p', identifier, user.username, options
@ -43,6 +45,8 @@ Meteor.startup ->
u: 1
usernames: 1
topic: 1
jitsiTimeout: 1
user = RocketChat.models.Users.findOneById this.userId, fields: username: 1
if RocketChat.authz.hasPermission(this.userId, 'view-d-room')
return RocketChat.models.Rooms.findByTypeContainigUsernames 'd', [user.username, identifier], options

Loading…
Cancel
Save