Commit aceb7499 authored by Dele Olajide's avatar Dele Olajide

ofmeet plugin - work in progress

parent 565460cb
...@@ -49,6 +49,14 @@ ...@@ -49,6 +49,14 @@
Openfire Meetings Plugin Changelog Openfire Meetings Plugin Changelog
</h1> </h1>
<p><b>0.0.3</b> -- Dec 2nd, 2014</p>
<ul>
<li>Changed version to 3.9.9 to overcome bug in openfire version control</li>
<li>Added recording parameters to admin web page</li>
<li>Latest version of Jitsi Meet</li>
</ul>
<p><b>0.0.2</b> -- Nov 30th, 2014</p> <p><b>0.0.2</b> -- Nov 30th, 2014</p>
<ul> <ul>
......
...@@ -5,9 +5,9 @@ ...@@ -5,9 +5,9 @@
<name>ofmeet</name> <name>ofmeet</name>
<description>Openfire Meetings</description> <description>Openfire Meetings</description>
<author></author> <author></author>
<version>0.0.2</version> <version>0.0.3</version>
<date>11/30/2014</date> <date>11/30/2014</date>
<minServerVersion>3.10.0</minServerVersion> <minServerVersion>3.9.9</minServerVersion>
<adminconsole> <adminconsole>
<tab id="tab-ofmeet" name="${plugin.title}" url="ofmeet-summary.jsp" description="${plugin.description}"> <tab id="tab-ofmeet" name="${plugin.title}" url="ofmeet-summary.jsp" description="${plugin.description}">
......
This diff is collapsed.
...@@ -122,7 +122,16 @@ var Avatar = (function(my) { ...@@ -122,7 +122,16 @@ var Avatar = (function(my) {
} }
function isUserMuted(jid) { function isUserMuted(jid) {
if(!mediaStreams[jid] || !mediaStreams[jid][MediaStream.VIDEO_TYPE]) { // XXX(gp) we may want to rename this method to something like
// isUserStreaming, for example.
if (jid && jid != connection.emuc.myroomjid) {
var resource = Strophe.getResourceFromJid(jid);
if (!VideoLayout.isInLastN(resource)) {
return true;
}
}
if (!mediaStreams[jid] || !mediaStreams[jid][MediaStream.VIDEO_TYPE]) {
return null; return null;
} }
return mediaStreams[jid][MediaStream.VIDEO_TYPE].muted; return mediaStreams[jid][MediaStream.VIDEO_TYPE].muted;
...@@ -132,6 +141,9 @@ var Avatar = (function(my) { ...@@ -132,6 +141,9 @@ var Avatar = (function(my) {
if(id === connection.emuc.myroomjid || !id) { if(id === connection.emuc.myroomjid || !id) {
id = SettingsMenu.getUID(); id = SettingsMenu.getUID();
} }
if (config.userAvatar && config.userAvatar != "null") return config.userAvatar; // BAO
return 'https://www.gravatar.com/avatar/' + return 'https://www.gravatar.com/avatar/' +
MD5.hexdigest(id.trim().toLowerCase()) + MD5.hexdigest(id.trim().toLowerCase()) +
"?d=retro&size=" + (size || "30"); "?d=retro&size=" + (size || "30");
......
var BottomToolbar = (function (my) { var BottomToolbar = (function (my) {
my.toggleChat = function() { my.toggleChat = function() {
if (ContactList.isVisible()) { PanelToggler.toggleChat();
buttonClick("#contactListButton", "active");
$('#contactlist').css('z-index', 4);
setTimeout(function() {
$('#contactlist').css('display', 'none');
$('#contactlist').css('z-index', 5);
}, 500);
}
Chat.toggleChat();
buttonClick("#chatBottomButton", "active");
}; };
my.toggleContactList = function() { my.toggleContactList = function() {
if (Chat.isVisible()) { PanelToggler.toggleContactList();
buttonClick("#chatBottomButton", "active");
setTimeout(function() {
$('#chatspace').css('display', 'none');
}, 500);
}
buttonClick("#contactListButton", "active");
ContactList.toggleContactList();
}; };
my.toggleFilmStrip = function() { my.toggleFilmStrip = function() {
......
...@@ -57,7 +57,7 @@ var Chat = (function (my) { ...@@ -57,7 +57,7 @@ var Chat = (function (my) {
var onTextAreaResize = function () { var onTextAreaResize = function () {
resizeChatConversation(); resizeChatConversation();
scrollChatToBottom(); Chat.scrollChatToBottom();
}; };
$('#usermsg').autosize({callback: onTextAreaResize}); $('#usermsg').autosize({callback: onTextAreaResize});
...@@ -144,112 +144,7 @@ var Chat = (function (my) { ...@@ -144,112 +144,7 @@ var Chat = (function (my) {
} }
}; };
/**
* Opens / closes the chat area.
*/
my.toggleChat = function () {
var chatspace = $('#chatspace');
var videospace = $('#videospace');
var chatSize = (Chat.isVisible()) ? [0, 0] : Chat.getChatSize();
var videospaceWidth = window.innerWidth - chatSize[0];
var videospaceHeight = window.innerHeight;
var videoSize
= getVideoSize(null, null, videospaceWidth, videospaceHeight);
var videoWidth = videoSize[0];
var videoHeight = videoSize[1];
var videoPosition = getVideoPosition(videoWidth,
videoHeight,
videospaceWidth,
videospaceHeight);
var horizontalIndent = videoPosition[0];
var verticalIndent = videoPosition[1];
var thumbnailSize = VideoLayout.calculateThumbnailSize(videospaceWidth);
var thumbnailsWidth = thumbnailSize[0];
var thumbnailsHeight = thumbnailSize[1];
var completeFunction = Chat.isVisible() ?
function() {} : function () {
scrollChatToBottom();
chatspace.trigger('shown');
};
videospace.animate({right: chatSize[0],
width: videospaceWidth,
height: videospaceHeight},
{queue: false,
duration: 500,
complete: completeFunction});
$('#remoteVideos').animate({height: thumbnailsHeight},
{queue: false,
duration: 500});
$('#remoteVideos>span').animate({height: thumbnailsHeight,
width: thumbnailsWidth},
{queue: false,
duration: 500,
complete: function() {
$(document).trigger(
"remotevideo.resized",
[thumbnailsWidth,
thumbnailsHeight]);
}});
$('#largeVideoContainer').animate({ width: videospaceWidth,
height: videospaceHeight},
{queue: false,
duration: 500
});
$('#largeVideo').animate({ width: videoWidth,
height: videoHeight,
top: verticalIndent,
bottom: verticalIndent,
left: horizontalIndent,
right: horizontalIndent},
{ queue: false,
duration: 500
}
);
if (Chat.isVisible()) {
$("#toast-container").animate({right: '5px'},
{queue: false,
duration: 500});
chatspace.hide("slide", { direction: "right",
queue: false,
duration: 500});
}
else {
// Undock the toolbar when the chat is shown and if we're in a
// video mode.
if (VideoLayout.isLargeVideoVisible()) {
ToolbarToggler.dockToolbar(false);
}
$("#toast-container").animate({right: (chatSize[0] + 5) + 'px'},
{queue: false,
duration: 500});
chatspace.show("slide", { direction: "right",
queue: false,
duration: 500,
complete: function () {
// Request the focus in the nickname field or the chat input field.
if ($('#nickname').css('visibility') === 'visible') {
$('#nickinput').focus();
} else {
$('#usermsg').focus();
}
}
});
Chat.resizeChat();
}
};
/** /**
* Sets the chat conversation mode. * Sets the chat conversation mode.
...@@ -268,7 +163,7 @@ var Chat = (function (my) { ...@@ -268,7 +163,7 @@ var Chat = (function (my) {
* Resizes the chat area. * Resizes the chat area.
*/ */
my.resizeChat = function () { my.resizeChat = function () {
var chatSize = Chat.getChatSize(); var chatSize = PanelToggler.getPanelSize();
$('#chatspace').width(chatSize[0]); $('#chatspace').width(chatSize[0]);
$('#chatspace').height(chatSize[1]); $('#chatspace').height(chatSize[1]);
...@@ -276,20 +171,6 @@ var Chat = (function (my) { ...@@ -276,20 +171,6 @@ var Chat = (function (my) {
resizeChatConversation(); resizeChatConversation();
}; };
/**
* Returns the size of the chat.
*/
my.getChatSize = function () {
var availableHeight = window.innerHeight;
var availableWidth = window.innerWidth;
var chatWidth = 200;
if (availableWidth * 0.2 < 200)
chatWidth = availableWidth * 0.2;
return [chatWidth, availableHeight];
};
/** /**
* Indicates if the chat is currently visible. * Indicates if the chat is currently visible.
*/ */
...@@ -309,6 +190,16 @@ var Chat = (function (my) { ...@@ -309,6 +190,16 @@ var Chat = (function (my) {
$('#usermsg').focus(); $('#usermsg').focus();
}; };
/**
* Scrolls chat to the bottom.
*/
my.scrollChatToBottom = function() {
setTimeout(function () {
$('#chatconversation').scrollTop(
$('#chatconversation')[0].scrollHeight);
}, 5);
};
/** /**
* Adds the smileys container to the chat * Adds the smileys container to the chat
*/ */
...@@ -426,15 +317,6 @@ var Chat = (function (my) { ...@@ -426,15 +317,6 @@ var Chat = (function (my) {
} }
} }
/**
* Scrolls chat to the bottom.
*/
function scrollChatToBottom() {
setTimeout(function () {
$('#chatconversation').scrollTop(
$('#chatconversation')[0].scrollHeight);
}, 5);
}
/** /**
* Returns the current time in the format it is shown to the user * Returns the current time in the format it is shown to the user
......
...@@ -44,5 +44,7 @@ var config = { ...@@ -44,5 +44,7 @@ var config = {
useBundle: true, useBundle: true,
enableRecording: false, enableRecording: false,
enableWelcomePage: true, enableWelcomePage: true,
enableSimulcast: false enableSimulcast: false,
enableFirefoxSupport: false //firefox support is still experimental, only one-to-one conferences with chrome focus
// will work when simulcast, bundle, mux, lastN and SCTP are disabled.
}; };
...@@ -20,22 +20,24 @@ var ContactList = (function (my) { ...@@ -20,22 +20,24 @@ var ContactList = (function (my) {
* Adds a contact for the given peerJid if such doesn't yet exist. * Adds a contact for the given peerJid if such doesn't yet exist.
* *
* @param peerJid the peerJid corresponding to the contact * @param peerJid the peerJid corresponding to the contact
* @param id the user's email or userId used to get the user's avatar
*/ */
my.ensureAddContact = function(peerJid) { my.ensureAddContact = function(peerJid, id) {
var resourceJid = Strophe.getResourceFromJid(peerJid); var resourceJid = Strophe.getResourceFromJid(peerJid);
var contact = $('#contactlist>ul>li[id="' + resourceJid + '"]'); var contact = $('#contactlist>ul>li[id="' + resourceJid + '"]');
if (!contact || contact.length <= 0) if (!contact || contact.length <= 0)
ContactList.addContact(peerJid); ContactList.addContact(peerJid,id);
}; };
/** /**
* Adds a contact for the given peer jid. * Adds a contact for the given peer jid.
* *
* @param peerJid the jid of the contact to add * @param peerJid the jid of the contact to add
* @param id the email or userId of the user
*/ */
my.addContact = function(peerJid) { my.addContact = function(peerJid, id) {
var resourceJid = Strophe.getResourceFromJid(peerJid); var resourceJid = Strophe.getResourceFromJid(peerJid);
var contactlist = $('#contactlist>ul'); var contactlist = $('#contactlist>ul');
...@@ -51,7 +53,7 @@ var ContactList = (function (my) { ...@@ -51,7 +53,7 @@ var ContactList = (function (my) {
} }
}; };
newContact.appendChild(createAvatar()); newContact.appendChild(createAvatar(id));
newContact.appendChild(createDisplayNameParagraph("Participant")); newContact.appendChild(createDisplayNameParagraph("Participant"));
var clElement = contactlist.get(0); var clElement = contactlist.get(0);
...@@ -87,95 +89,27 @@ var ContactList = (function (my) { ...@@ -87,95 +89,27 @@ var ContactList = (function (my) {
} }
}; };
/** my.setVisualNotification = function(show, stopGlowingIn) {
* Opens / closes the contact list area. var glower = $('#contactListButton');
*/ function stopGlowing() {
my.toggleContactList = function () { window.clearInterval(notificationInterval);
var contactlist = $('#contactlist'); notificationInterval = false;
var videospace = $('#videospace'); glower.removeClass('glowing');
if(!ContactList.isVisible()) {
var chatSize = (ContactList.isVisible()) ? [0, 0] : Chat.getChatSize(); glower.removeClass('active');
var videospaceWidth = window.innerWidth - chatSize[0]; }
var videospaceHeight = window.innerHeight; }
var videoSize
= getVideoSize(null, null, videospaceWidth, videospaceHeight);
var videoWidth = videoSize[0];
var videoHeight = videoSize[1];
var videoPosition = getVideoPosition(videoWidth,
videoHeight,
videospaceWidth,
videospaceHeight);
var horizontalIndent = videoPosition[0];
var verticalIndent = videoPosition[1];
var thumbnailSize = VideoLayout.calculateThumbnailSize(videospaceWidth);
var thumbnailsWidth = thumbnailSize[0];
var thumbnailsHeight = thumbnailSize[1];
var completeFunction = ContactList.isVisible() ?
function() {} : function () { contactlist.trigger('shown');};
videospace.animate({right: chatSize[0],
width: videospaceWidth,
height: videospaceHeight},
{queue: false,
duration: 500,
complete: completeFunction
});
$('#remoteVideos').animate({height: thumbnailsHeight},
{queue: false,
duration: 500});
$('#remoteVideos>span').animate({height: thumbnailsHeight,
width: thumbnailsWidth},
{queue: false,
duration: 500,
complete: function() {
$(document).trigger(
"remotevideo.resized",
[thumbnailsWidth,
thumbnailsHeight]);
}});
$('#largeVideoContainer').animate({ width: videospaceWidth,
height: videospaceHeight},
{queue: false,
duration: 500
});
$('#largeVideo').animate({ width: videoWidth,
height: videoHeight,
top: verticalIndent,
bottom: verticalIndent,
left: horizontalIndent,
right: horizontalIndent},
{ queue: false,
duration: 500
});
if (ContactList.isVisible()) {
$("#toast-container").animate({right: '12px'},
{queue: false,
duration: 500});
$('#contactlist').hide("slide", { direction: "right",
queue: false,
duration: 500});
} else {
// Undock the toolbar when the chat is shown and if we're in a
// video mode.
if (VideoLayout.isLargeVideoVisible())
ToolbarToggler.dockToolbar(false);
$("#toast-container").animate({right: '212px'},
{queue: false,
duration: 500});
$('#contactlist').show("slide", { direction: "right",
queue: false,
duration: 500});
//stop the glowing of the contact list icon if (show && !notificationInterval) {
setVisualNotification(false); notificationInterval = window.setInterval(function () {
glower.toggleClass('active glowing');
}, 800);
}
else if (!show && notificationInterval) {
stopGlowing();
}
if(stopGlowingIn) {
setTimeout(stopGlowing, stopGlowingIn);
} }
}; };
...@@ -191,20 +125,21 @@ var ContactList = (function (my) { ...@@ -191,20 +125,21 @@ var ContactList = (function (my) {
$("#numberOfParticipants").text(''); $("#numberOfParticipants").text('');
numberOfContacts += delta; numberOfContacts += delta;
} else if(numberOfContacts !== 0 && !ContactList.isVisible()) { } else if(numberOfContacts !== 0 && !ContactList.isVisible()) {
setVisualNotification(true); ContactList.setVisualNotification(true);
numberOfContacts += delta; numberOfContacts += delta;
$("#numberOfParticipants").text(numberOfContacts); $("#numberOfParticipants").text(numberOfContacts);
} }
}; }
/** /**
* Creates the avatar element. * Creates the avatar element.
* *
* @return the newly created avatar element * @return the newly created avatar element
*/ */
function createAvatar() { function createAvatar(id) {
var avatar = document.createElement('i'); var avatar = document.createElement('img');
avatar.className = "icon-avatar avatar"; avatar.className = "icon-avatar avatar";
avatar.src = "https://www.gravatar.com/avatar/" + id + "?d=retro&size=30";
return avatar; return avatar;
} }
...@@ -221,33 +156,6 @@ var ContactList = (function (my) { ...@@ -221,33 +156,6 @@ var ContactList = (function (my) {
return p; return p;
} }
/**
* Shows/hides a visual notification, indicating that a new user has joined
* the conference.
*/
function setVisualNotification(show, stopGlowingIn) {
var glower = $('#contactListButton');
function stopGlowing() {
window.clearInterval(notificationInterval);
notificationInterval = false;
glower.removeClass('glowing');
if(!ContactList.isVisible()) {
glower.removeClass('active');
}
}
if (show && !notificationInterval) {
notificationInterval = window.setInterval(function () {
glower.toggleClass('active glowing');
}, 800);
}
else if (!show && notificationInterval) {
stopGlowing();
}
if(stopGlowingIn) {
setTimeout(stopGlowing, stopGlowingIn);
}
}
/** /**
* Indicates that the display name has changed. * Indicates that the display name has changed.
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
margin-right: 10px; margin-right: 10px;
vertical-align: middle; vertical-align: middle;
font-size: 22pt; font-size: 22pt;
border-radius: 20px;
} }
#contactlist .clickable { #contactlist .clickable {
......
...@@ -112,4 +112,8 @@ ...@@ -112,4 +112,8 @@
.icon-connection:before { .icon-connection:before {
line-height: normal; line-height: normal;
content: "\e61a"; content: "\e61a";
}
.icon-settings:before {
content: "\e61b";
} }
\ No newline at end of file
...@@ -13,8 +13,7 @@ html, body{ ...@@ -13,8 +13,7 @@ html, body{
overflow-x: hidden; overflow-x: hidden;
} }
#chatspace, .right-panel {
#contactlist {
display:none; display:none;
position:absolute; position:absolute;
float: right; float: right;
...@@ -38,10 +37,6 @@ html, body{ ...@@ -38,10 +37,6 @@ html, body{
display:none; display:none;
} }
#settingsButton {
visibility: hidden;
}
.toolbar_span { .toolbar_span {
display: inline-block; display: inline-block;
position: relative; position: relative;
......
...@@ -35,7 +35,9 @@ ...@@ -35,7 +35,9 @@
#remoteVideos .videocontainer { #remoteVideos .videocontainer {
display: inline-block; display: inline-block;
background-image:url(../images/avatar1.png); background-color: black;
background-repeat: no-repeat;
background-position: 45;
background-size: contain; background-size: contain;
border-radius:8px; border-radius:8px;
border: 2px solid #212425; border: 2px solid #212425;
...@@ -102,6 +104,11 @@ ...@@ -102,6 +104,11 @@
text-align: center; text-align: center;
} }
#largeVideo
{
object-fit: cover;
}
#presentation, #presentation,
#etherpad, #etherpad,
#localVideoWrapper>video, #localVideoWrapper>video,
...@@ -115,10 +122,6 @@ ...@@ -115,10 +122,6 @@
height: 100%; height: 100%;
} }
.dominantspeaker {
background: #000 !important;
}
#etherpad, #etherpad,
#presentation { #presentation {
text-align: center; text-align: center;
...@@ -378,3 +381,19 @@ ...@@ -378,3 +381,19 @@
#mixedstream { #mixedstream {
display:none !important; display:none !important;
} }
#activeSpeakerAvatar {
visibility: hidden;
width: 100px;
height: 100px;
margin: auto;
position: relative;
border-radius: 50px;
}
.userAvatar {
height: 100%;
position: absolute;
left: 35px;
border-radius: 200px;
}
...@@ -26,8 +26,7 @@ function onDataChannel(event) ...@@ -26,8 +26,7 @@ function onDataChannel(event)
// when the data channel becomes available, tell the bridge about video // when the data channel becomes available, tell the bridge about video
// selections so that it can do adaptive simulcast, // selections so that it can do adaptive simulcast,
var largeVideoSrc = $('#largeVideo').attr('src'); var userJid = VideoLayout.getLargeVideoState().userJid;
var userJid = getJidFromVideoSrc(largeVideoSrc);
// we want the notification to trigger even if userJid is undefined, // we want the notification to trigger even if userJid is undefined,
// or null. // or null.
onSelectedEndpointChanged(userJid); onSelectedEndpointChanged(userJid);
......
...@@ -34,4 +34,5 @@ ...@@ -34,4 +34,5 @@
<glyph unicode="&#xe618;" d="M797.086 112.301c-0.059 0.163-0.119 0.328-0.16 0.485-71.399-45.638-151.782-69.931-234.023-69.931-0.013 0-0.021 0-0.028 0-122.52 0-237.501 52.772-315.469 144.741-99.778 117.698-134.252 329.954-73.022 427.789 4.004-1.662 7.875-3.233 11.68-4.773 13.585-5.511 26.413-10.716 42.305-19.096 6.063-3.202 12.338-4.812 18.673-4.812 11.714 0 22.6 5.648 29.848 15.486 7.815 10.617 10.313 24.778 6.538 36.951l-3.525 11.41c-10.687 34.59-21.723 70.354-34.211 105.078-9.983 27.765-22.399 62.327-59.226 62.327-12.057 0-26.037-3.656-46.73-12.204-44.294-18.319-71.058-29.961-114.534-49.81-15.102-6.887-25.234-22.698-25.203-39.343 0.028-15.842 8.992-29.337 23.975-36.115 18.208-8.257 30.536-13.716 43.468-19.447l10.687-4.753c-101.938-259.102 24.803-526.458 211.314-639.212 83.497-50.474 178.5-77.14 274.769-77.14h0.041c102.72 0 205.561 31.099 284.501 85.198-31.729 28.803-45.566 69.167-51.671 87.171zM1098.203 210.090c-18.113 8.577-30.356 14.258-43.221 20.244l-10.496 4.892c106.448 257.268-15.569 526.801-200.067 642.788-85.36 53.663-183.123 82.032-282.716 82.032-104.848 0-206.41-30.593-285.967-86.165l-5.385-3.764c31.597-27.564 45.86-66.788 52.917-86.41 72.926 47.94 155.675 73.409 239.895 73.409 125.407 0 242.142-54.785 320.294-150.316 97.683-119.447 128.439-332.255 65.498-429.015-3.989 1.736-7.815 3.385-11.624 4.998-13.471 5.759-26.204 11.18-41.954 19.821-6.203 3.424-12.645 5.155-19.212 5.155-11.585 0-22.399-5.558-29.69-15.267-7.813-10.434-10.478-24.432-6.966-36.515l3.279-11.301c10.096-34.845 20.531-70.857 32.412-105.842 9.588-28.238 21.514-63.382 59.179-63.382 11.843 0 25.577 3.424 45.881 11.399 44.351 17.439 71.319 28.601 115.409 47.777 15.19 6.623 25.601 22.252 25.859 38.894 0.281 15.822-8.445 29.499-23.325 36.569z" horiz-adv-x="1122" /> <glyph unicode="&#xe618;" d="M797.086 112.301c-0.059 0.163-0.119 0.328-0.16 0.485-71.399-45.638-151.782-69.931-234.023-69.931-0.013 0-0.021 0-0.028 0-122.52 0-237.501 52.772-315.469 144.741-99.778 117.698-134.252 329.954-73.022 427.789 4.004-1.662 7.875-3.233 11.68-4.773 13.585-5.511 26.413-10.716 42.305-19.096 6.063-3.202 12.338-4.812 18.673-4.812 11.714 0 22.6 5.648 29.848 15.486 7.815 10.617 10.313 24.778 6.538 36.951l-3.525 11.41c-10.687 34.59-21.723 70.354-34.211 105.078-9.983 27.765-22.399 62.327-59.226 62.327-12.057 0-26.037-3.656-46.73-12.204-44.294-18.319-71.058-29.961-114.534-49.81-15.102-6.887-25.234-22.698-25.203-39.343 0.028-15.842 8.992-29.337 23.975-36.115 18.208-8.257 30.536-13.716 43.468-19.447l10.687-4.753c-101.938-259.102 24.803-526.458 211.314-639.212 83.497-50.474 178.5-77.14 274.769-77.14h0.041c102.72 0 205.561 31.099 284.501 85.198-31.729 28.803-45.566 69.167-51.671 87.171zM1098.203 210.090c-18.113 8.577-30.356 14.258-43.221 20.244l-10.496 4.892c106.448 257.268-15.569 526.801-200.067 642.788-85.36 53.663-183.123 82.032-282.716 82.032-104.848 0-206.41-30.593-285.967-86.165l-5.385-3.764c31.597-27.564 45.86-66.788 52.917-86.41 72.926 47.94 155.675 73.409 239.895 73.409 125.407 0 242.142-54.785 320.294-150.316 97.683-119.447 128.439-332.255 65.498-429.015-3.989 1.736-7.815 3.385-11.624 4.998-13.471 5.759-26.204 11.18-41.954 19.821-6.203 3.424-12.645 5.155-19.212 5.155-11.585 0-22.399-5.558-29.69-15.267-7.813-10.434-10.478-24.432-6.966-36.515l3.279-11.301c10.096-34.845 20.531-70.857 32.412-105.842 9.588-28.238 21.514-63.382 59.179-63.382 11.843 0 25.577 3.424 45.881 11.399 44.351 17.439 71.319 28.601 115.409 47.777 15.19 6.623 25.601 22.252 25.859 38.894 0.281 15.822-8.445 29.499-23.325 36.569z" horiz-adv-x="1122" />
<glyph unicode="&#xe619;" d="M46.993 961.7c461.234 0 553.793 0 1015.024 0 35.919 0 53.356-25.959 53.356-57.959-0.581-303.259-0.325-606.488-0.449-909.809 0-43.984-13.203-57.058-57.703-57.058-443.072-0.126-556.453-0.126-999.553 0-44.534 0-57.799 13.009-57.799 57.058-0.098 303.257 0.485 608.072-0.093 911.329-0.034 26.21 11.301 53.761 47.217 56.439zM311.405 450.298c0-119.045-0.072-172.168 0.057-291.249 0.036-50.043 11.208-61.050 62.12-61.050 233.352 0 137.075 0 370.522 0 47.075 0 59.249 11.982 59.249 58.095 0.126 239.111 0.126 346.338 0 585.389 0 48.138-10.687 58.991-57.768 58.991-235.323 0.101-140.844 0.101-376.157 0-47.044 0-57.93-11.043-57.966-58.89-0.129-119.109-0.057-172.209-0.057-291.287zM153.944 838.566c-74.929-0.062-66.687 5.958-66.845-66.685-0.201-63.95-7.054-63.534 62.528-63.372 72.999 0.194 67.201-3.764 67.302 67.554 0 67.722 4.087 62.595-62.985 62.502zM963.644 838.566c-71.159-0.034-65.56 6.185-65.751-65.364-0.129-67.302-4.508-64.693 64.528-64.693 73.089 0 65.299-2.031 65.299 66.238-0.003 68.646 6.956 63.911-64.076 63.818zM216.828 122.408c0.359 73.094 4.639 66.914-67.358 67.17-68.104 0.191-62.569 2.763-62.407-63.31 0.129-73.476-6.954-66.52 67.074-66.649 66.042-0.065 63.142-6.056 62.691 62.789zM1027.718 124.4c0.134 68.334 6.443 65.304-63.297 65.178-70.132-0.132-66.656 5.793-66.527-65.304 0.129-70.645-4.384-64.721 63.756-64.657 71.995 0.132 66.202-6.698 66.068 64.783zM1027.718 342.077c0 70.55 7.219 66.842-67.485 66.522-0.898 0-1.873 0-2.838 0-59.375 0-59.375 0-59.375-58.023 0-77.922-6.443-69.936 69.293-70.196 66.076-0.387 60.539-3.091 60.405 61.697zM151.307 489.873c68.295-0.163 65.815-5.568 65.624 62.982-0.194 71.128 4.895 64.917-66.014 65.010-69.905 0.101-63.813 4.704-63.885-63.978-0.062-67.431-5.7-64.463 64.275-64.014zM961.263 489.873c72.511-0.258 66.589-4.603 66.455 64.494 0 68.558 6.185 63.537-64.267 63.498-70.196-0.028-65.686 6.053-65.498-65.493 0.132-62.5 0.067-62.5 63.31-62.5zM150.399 280.38c71.004 0 66.659-6.567 66.466 64.528-0.163 63.694-0.036 63.501-65.013 63.756-70.805 0.258-64.822 2.673-64.822-63.756 0.036-69.167-5.919-64.788 63.369-64.528z" horiz-adv-x="1115" /> <glyph unicode="&#xe619;" d="M46.993 961.7c461.234 0 553.793 0 1015.024 0 35.919 0 53.356-25.959 53.356-57.959-0.581-303.259-0.325-606.488-0.449-909.809 0-43.984-13.203-57.058-57.703-57.058-443.072-0.126-556.453-0.126-999.553 0-44.534 0-57.799 13.009-57.799 57.058-0.098 303.257 0.485 608.072-0.093 911.329-0.034 26.21 11.301 53.761 47.217 56.439zM311.405 450.298c0-119.045-0.072-172.168 0.057-291.249 0.036-50.043 11.208-61.050 62.12-61.050 233.352 0 137.075 0 370.522 0 47.075 0 59.249 11.982 59.249 58.095 0.126 239.111 0.126 346.338 0 585.389 0 48.138-10.687 58.991-57.768 58.991-235.323 0.101-140.844 0.101-376.157 0-47.044 0-57.93-11.043-57.966-58.89-0.129-119.109-0.057-172.209-0.057-291.287zM153.944 838.566c-74.929-0.062-66.687 5.958-66.845-66.685-0.201-63.95-7.054-63.534 62.528-63.372 72.999 0.194 67.201-3.764 67.302 67.554 0 67.722 4.087 62.595-62.985 62.502zM963.644 838.566c-71.159-0.034-65.56 6.185-65.751-65.364-0.129-67.302-4.508-64.693 64.528-64.693 73.089 0 65.299-2.031 65.299 66.238-0.003 68.646 6.956 63.911-64.076 63.818zM216.828 122.408c0.359 73.094 4.639 66.914-67.358 67.17-68.104 0.191-62.569 2.763-62.407-63.31 0.129-73.476-6.954-66.52 67.074-66.649 66.042-0.065 63.142-6.056 62.691 62.789zM1027.718 124.4c0.134 68.334 6.443 65.304-63.297 65.178-70.132-0.132-66.656 5.793-66.527-65.304 0.129-70.645-4.384-64.721 63.756-64.657 71.995 0.132 66.202-6.698 66.068 64.783zM1027.718 342.077c0 70.55 7.219 66.842-67.485 66.522-0.898 0-1.873 0-2.838 0-59.375 0-59.375 0-59.375-58.023 0-77.922-6.443-69.936 69.293-70.196 66.076-0.387 60.539-3.091 60.405 61.697zM151.307 489.873c68.295-0.163 65.815-5.568 65.624 62.982-0.194 71.128 4.895 64.917-66.014 65.010-69.905 0.101-63.813 4.704-63.885-63.978-0.062-67.431-5.7-64.463 64.275-64.014zM961.263 489.873c72.511-0.258 66.589-4.603 66.455 64.494 0 68.558 6.185 63.537-64.267 63.498-70.196-0.028-65.686 6.053-65.498-65.493 0.132-62.5 0.067-62.5 63.31-62.5zM150.399 280.38c71.004 0 66.659-6.567 66.466 64.528-0.163 63.694-0.036 63.501-65.013 63.756-70.805 0.258-64.822 2.673-64.822-63.756 0.036-69.167-5.919-64.788 63.369-64.528z" horiz-adv-x="1115" />
<glyph unicode="&#xe61a;" d="M3.881 146.835h220.26v-210.835h-220.26v210.835zM308.817 350.143h220.27v-414.143h-220.27v414.143zM613.764 553.412h220.268v-617.412h-220.268v617.412zM918.685 756.715h220.265v-820.715h-220.265v820.715zM1223.629 960h220.263v-1024h-220.263v1024z" horiz-adv-x="1444" /> <glyph unicode="&#xe61a;" d="M3.881 146.835h220.26v-210.835h-220.26v210.835zM308.817 350.143h220.27v-414.143h-220.27v414.143zM613.764 553.412h220.268v-617.412h-220.268v617.412zM918.685 756.715h220.265v-820.715h-220.265v820.715zM1223.629 960h220.263v-1024h-220.263v1024z" horiz-adv-x="1444" />
<glyph unicode="&#xe61b;" d="M526.071 234.749c-28.637-30.869-56.465-60.861-84.282-90.859-51.578-55.636-103.047-111.376-154.842-166.832-7.606-8.135-15.958-16.1-25.317-22.012-28.075-17.708-58.31-18.090-88.472-6.492-59.84 23.028-80.004 90.727-59.734 139.234 5.413 12.95 13.721 23.601 23.709 33.173 70.256 67.351 140.506 134.717 210.76 202.077 15.638 14.993 31.264 29.995 47.364 45.45-9.302 9.529-18.386 18.833-27.451 28.137-12.122 12.442-13.234 20.28-5.067 35.498 4.735 8.816 4.789 8.878-2.627 16.198-20.012 19.72-40.168 39.198-63.498 55.188-27.167 18.624-57.161 24.233-89.083 19.849-53.402-7.328-91.609-38.372-121.413-81.046-12.774-18.299-15.365-40.313-17.517-61.875-3.23-32.245-2.415-64.479 2.209-96.597 1.654-11.515-3.863-16.539-13.835-11.175-8.306 4.448-16.095 11.048-22.115 18.353-15.574 18.89-22.223 42.042-27.474 65.395-12.955 57.652-8.86 114.49 12.191 169.495 32.345 84.537 79.743 159.571 145.953 221.932 13.659 12.857 176.841 180.564 202.944 207.021 7.493 7.599 14.895 7.635 22.393 0.028 43.009-43.641 85.985-87.316 128.927-131.029 8.117-8.267 8.019-15.097-0.222-23.49-26.339-26.834-52.726-53.627-79.106-80.419-6.244-6.334-97.34-82.437-73.027-128.816 22.693-25.090 46.196-49.449 69.575-73.904 1.189-1.238 4.686-1.386 6.523-0.632 3.63 1.499 6.848 3.997 10.248 6.066 9.745 5.94 19.545 4.918 27.812-3.083 11.755-11.381 23.405-22.858 35.392-34.59 4.807 4.575 9.939 9.41 15.027 14.294 27.128 26.039 54.272 52.071 81.351 78.146 16.413 15.778 18.652 28.418 11.038 49.658-10.473 29.221-14.356 59.677-13.85 90.624 1.017 61.045 20.438 115.334 61.003 161.416 32.825 37.286 72.054 64.311 121.643 74.325 35.227 7.101 69.139 4.513 100.663-14.026 6.365-3.752 11.908-9.007 17.455-14.005 3.491-3.125 3.153-6.236-0.565-9.98-42.503-42.885-84.772-86.013-127.154-129.035-12.442-12.638-12.356-23.167 0.196-35.914 40.344-40.978 80.597-82.050 120.936-123.052 10.076-10.233 19.537-10.021 29.504 0.134 43.195 44.077 86.449 88.090 129.706 132.118 1.21 1.233 2.572 2.322 5.135 4.624 5.491-5.893 11.895-10.924 15.961-17.406 19.452-30.944 22.608-64.83 17.073-100.25-14.253-91.080-97.188-175.638-197.712-190.123-39.977-5.764-79.372-2.562-118.067 9.031-5.898 1.775-11.541 4.629-17.538 5.829-12.47 2.474-23.872-0.366-32.74-9.877-30.921-33.168-61.674-66.484-92.474-99.758-0.73-0.805-1.349-1.718-0.181-1.099 8.992-10.006 17.354-20.662 27.061-29.94 81.064-77.54 164.91-151.986 250.882-224.063 9.936-8.347 10.274-15.695 1.040-25.1-42.338-43.068-84.689-86.111-127.059-129.154-9.413-9.575-16.846-9.152-25.291 1.295-76.686 94.78-156.8 186.609-239.707 276.002-1.334 1.453-2.562 3.029-4.257 5.042z" horiz-adv-x="1105" />
</font></defs></svg> </font></defs></svg>
\ No newline at end of file
{ {
"IcoMoonType": "selection", "IcoMoonType": "selection",
"icons": [ "icons": [
{
"icon": {
"paths": [
"M526.071 725.251c-28.637 30.869-56.465 60.861-84.282 90.859-51.578 55.636-103.047 111.376-154.842 166.832-7.606 8.135-15.958 16.1-25.317 22.012-28.075 17.708-58.31 18.090-88.472 6.492-59.84-23.028-80.004-90.727-59.734-139.234 5.413-12.95 13.721-23.601 23.709-33.173 70.256-67.351 140.506-134.717 210.76-202.077 15.638-14.993 31.264-29.995 47.364-45.45-9.302-9.529-18.386-18.833-27.451-28.137-12.122-12.442-13.234-20.28-5.067-35.498 4.735-8.816 4.789-8.878-2.627-16.198-20.012-19.72-40.168-39.198-63.498-55.188-27.167-18.624-57.161-24.233-89.083-19.849-53.402 7.328-91.609 38.372-121.413 81.046-12.774 18.299-15.365 40.313-17.517 61.875-3.23 32.245-2.415 64.479 2.209 96.597 1.654 11.515-3.863 16.539-13.835 11.175-8.306-4.448-16.095-11.048-22.115-18.353-15.574-18.89-22.223-42.042-27.474-65.395-12.955-57.652-8.86-114.49 12.191-169.495 32.345-84.537 79.743-159.571 145.953-221.932 13.659-12.857 176.841-180.564 202.944-207.021 7.493-7.599 14.895-7.635 22.393-0.028 43.009 43.641 85.985 87.316 128.927 131.029 8.117 8.267 8.019 15.097-0.222 23.49-26.339 26.834-52.726 53.627-79.106 80.419-6.244 6.334-97.34 82.437-73.027 128.816 22.693 25.090 46.196 49.449 69.575 73.904 1.189 1.238 4.686 1.386 6.523 0.632 3.63-1.499 6.848-3.997 10.248-6.066 9.745-5.94 19.545-4.918 27.812 3.083 11.755 11.381 23.405 22.858 35.392 34.59 4.807-4.575 9.939-9.41 15.027-14.294 27.128-26.039 54.272-52.071 81.351-78.146 16.413-15.778 18.652-28.418 11.038-49.658-10.473-29.221-14.356-59.677-13.85-90.624 1.017-61.045 20.438-115.334 61.003-161.416 32.825-37.286 72.054-64.311 121.643-74.325 35.227-7.101 69.139-4.513 100.663 14.026 6.365 3.752 11.908 9.007 17.455 14.005 3.491 3.125 3.153 6.236-0.565 9.98-42.503 42.885-84.772 86.013-127.154 129.035-12.442 12.638-12.356 23.167 0.196 35.914 40.344 40.978 80.597 82.050 120.936 123.052 10.076 10.233 19.537 10.021 29.504-0.134 43.195-44.077 86.449-88.090 129.706-132.118 1.21-1.233 2.572-2.322 5.135-4.624 5.491 5.893 11.895 10.924 15.961 17.406 19.452 30.944 22.608 64.83 17.073 100.25-14.253 91.080-97.188 175.638-197.712 190.123-39.977 5.764-79.372 2.562-118.067-9.031-5.898-1.775-11.541-4.629-17.538-5.829-12.47-2.474-23.872 0.366-32.74 9.877-30.921 33.168-61.674 66.484-92.474 99.758-0.73 0.805-1.349 1.718-0.181 1.099 8.992 10.006 17.354 20.662 27.061 29.94 81.064 77.54 164.91 151.986 250.882 224.063 9.936 8.347 10.274 15.695 1.040 25.1-42.338 43.068-84.689 86.111-127.059 129.154-9.413 9.575-16.846 9.152-25.291-1.295-76.686-94.78-156.8-186.609-239.707-276.002-1.334-1.453-2.562-3.029-4.257-5.042z"
],
"attrs": [
{
"opacity": 1,
"visibility": false
}
],
"width": 1105,
"grid": 0,
"tags": [
"settings"
]
},
"attrs": [
{
"opacity": 1,
"visibility": false
}
],
"properties": {
"order": 1,
"id": 33,
"prevSize": 32,
"code": 58907,
"name": "settings"
},
"setIdx": 0,
"iconIdx": 0
},
{ {
"icon": { "icon": {
"paths": [ "paths": [
"M1223.129 242.783l-180.128 175.796v-217.716c0-74.673-59.512-135.496-132.599-135.496h-634.716c-73.084 0-132.596 60.823-132.596 135.496v609.237c0 74.673 59.512 135.496 132.596 135.496h634.716c73.084 0 132.599-60.82 132.599-135.496v-172.679l193.45 153.712c48.784 35.558 96.695-5.178 96.695-40.424v-483.533c-0.003-35.248-55.897-71.306-110.017-24.393zM601.169 760.065c-141.111 0-255.524-114.411-255.524-255.521s114.411-255.521 255.524-255.521c141.108 0 255.519 114.411 255.519 255.521-0 141.113-114.408 255.521-255.519 255.521z", "M1223.129 242.783l-180.128 175.796v-217.716c0-74.673-59.512-135.496-132.599-135.496h-634.716c-73.084 0-132.596 60.823-132.596 135.496v609.237c0 74.673 59.512 135.496 132.596 135.496h634.716c73.084 0 132.599-60.82 132.599-135.496v-172.679l193.45 153.712c48.784 35.558 96.695-5.178 96.695-40.424v-483.533c-0.003-35.248-55.897-71.306-110.017-24.393zM601.169 760.065c-141.111 0-255.524-114.411-255.524-255.521s114.411-255.521 255.524-255.521c141.108 0 255.519 114.411 255.519 255.521-0 141.113-114.408 255.521-255.519 255.521z",
"M599.045 359.751c-80.474 0-145.727 65.253-145.727 145.729 0 80.471 65.25 145.727 145.727 145.727s145.729-65.256 145.729-145.727c0-80.474-65.253-145.729-145.729-145.729z" "M599.045 359.751c-80.474 0-145.727 65.253-145.727 145.729 0 80.471 65.25 145.727 145.727 145.727s145.729-65.256 145.729-145.727c0-80.474-65.253-145.729-145.729-145.729z"
], ],
"width": 1334,
"attrs": [ "attrs": [
{ {
"opacity": 1, "opacity": 1,
...@@ -17,11 +51,10 @@ ...@@ -17,11 +51,10 @@
"visibility": false "visibility": false
} }
], ],
"width": 1334,
"grid": 0,
"tags": [ "tags": [
"webCam" "webCam"
] ],
"grid": 0
}, },
"attrs": [ "attrs": [
{ {
...@@ -714,7 +747,7 @@ ...@@ -714,7 +747,7 @@
"ligatures": "" "ligatures": ""
}, },
"setIdx": 0, "setIdx": 0,
"iconIdx": 26 "iconIdx": 25
}, },
{ {
"icon": { "icon": {
...@@ -740,7 +773,7 @@ ...@@ -740,7 +773,7 @@
"ligatures": "" "ligatures": ""
}, },
"setIdx": 0, "setIdx": 0,
"iconIdx": 27 "iconIdx": 26
}, },
{ {
"icon": { "icon": {
...@@ -765,7 +798,7 @@ ...@@ -765,7 +798,7 @@
"ligatures": "" "ligatures": ""
}, },
"setIdx": 0, "setIdx": 0,
"iconIdx": 28 "iconIdx": 27
} }
], ],
"height": 1024, "height": 1024,
...@@ -775,6 +808,7 @@ ...@@ -775,6 +808,7 @@
"preferences": { "preferences": {
"showGlyphs": true, "showGlyphs": true,
"showQuickUse": true, "showQuickUse": true,
"showQuickUse2": true,
"showSVGs": true, "showSVGs": true,
"fontPref": { "fontPref": {
"prefix": "icon-", "prefix": "icon-",
...@@ -791,7 +825,8 @@ ...@@ -791,7 +825,8 @@
}, },
"imagePref": { "imagePref": {
"prefix": "icon-", "prefix": "icon-",
"png": true "png": true,
"useClassSelector": true
}, },
"historySize": 100, "historySize": 100,
"showCodes": true, "showCodes": true,
......
...@@ -55,6 +55,8 @@ config.page.configuration.audiomixer.enabled=Enabled ...@@ -55,6 +55,8 @@ config.page.configuration.audiomixer.enabled=Enabled
config.page.configuration.audiomixer.disabled=Disbled config.page.configuration.audiomixer.disabled=Disbled
config.page.configuration.audiomixer.enabled_description=Audio Mixer enabled config.page.configuration.audiomixer.enabled_description=Audio Mixer enabled
config.page.configuration.audiomixer.disabled_description=Audio Mixer disabled config.page.configuration.audiomixer.disabled_description=Audio Mixer disabled
config.page.configuration.record.path=Recording Path
config.page.configuration.record.secret=Recording Password/Secret
ofmeet.conference.summary=Below is an overview of meetings. ofmeet.conference.summary=Below is an overview of meetings.
ofmeet.conference.expired=Conference has been expired. ofmeet.conference.expired=Conference has been expired.
ofmeet.summary.conferences=Total Conferences ofmeet.summary.conferences=Total Conferences
......
...@@ -12,9 +12,9 @@ ...@@ -12,9 +12,9 @@
<script src="libs/jquery-2.1.1.min.js"></script> <script src="libs/jquery-2.1.1.min.js"></script>
<script src="/ofmeet/config"></script><!-- BAO --> <script src="/ofmeet/config"></script><!-- BAO -->
<script src="simulcast.js?v=7"></script><!-- simulcast handling --> <script src="simulcast.js?v=7"></script><!-- simulcast handling -->
<script src="libs/strophe/strophe.jingle.adapter.js?v=3"></script><!-- strophe.jingle bundles -->
<script src="libs/strophe/strophe.js?v=1"></script><!-- BAO --> <script src="libs/strophe/strophe.js?v=1"></script><!-- BAO -->
<script src="libs/strophe/strophe.openfire.js?v=1"></script><!-- BAO --> <script src="libs/strophe/strophe.openfire.js?v=1"></script><!-- BAO -->
<script src="libs/strophe/strophe.jingle.adapter.js?v=3"></script><!-- strophe.jingle bundles -->
<script src="libs/strophe/strophe.connection.mgr.js?v=1"></script><!-- BAO --> <script src="libs/strophe/strophe.connection.mgr.js?v=1"></script><!-- BAO -->
<script src="libs/strophe/strophe.workgroup.js?v=1"></script><!-- BAO --> <script src="libs/strophe/strophe.workgroup.js?v=1"></script><!-- BAO -->
<script src="libs/strophe/strophe.disco.min.js?v=1"></script> <script src="libs/strophe/strophe.disco.min.js?v=1"></script>
...@@ -31,18 +31,19 @@ ...@@ -31,18 +31,19 @@
<script src="libs/rayo.js?v=1"></script> <script src="libs/rayo.js?v=1"></script>
<script src="libs/tooltip.js?v=1"></script><!-- bootstrap tooltip lib --> <script src="libs/tooltip.js?v=1"></script><!-- bootstrap tooltip lib -->
<script src="libs/popover.js?v=1"></script><!-- bootstrap tooltip lib --> <script src="libs/popover.js?v=1"></script><!-- bootstrap tooltip lib -->
<script src="interface_config.js?v=3"></script>
<script src="libs/toastr.js?v=1"></script><!-- notifications lib --> <script src="libs/toastr.js?v=1"></script><!-- notifications lib -->
<script src="muc.js?v=16"></script><!-- simple MUC library --> <script src="interface_config.js?v=4"></script>
<script src="muc.js?v=17"></script><!-- simple MUC library -->
<script src="ofmuc.js?v=1"></script><!-- BAO --> <script src="ofmuc.js?v=1"></script><!-- BAO -->
<script src="estos_log.js?v=2"></script><!-- simple stanza logger --> <script src="estos_log.js?v=2"></script><!-- simple stanza logger -->
<script src="ofmeet-screenshare.js?v=1"></script><!-- BAO --> <script src="ofmeet-screenshare.js?v=1"></script><!-- BAO -->
<script src="data_channels.js?v=3"></script><!-- data channels --> <script src="data_channels.js?v=3"></script><!-- data channels -->
<script src="app.js?v=20"></script><!-- application logic --> <script src="app.js?v=21"></script><!-- application logic -->
<script src="commands.js?v=1"></script><!-- application logic --> <script src="commands.js?v=1"></script><!-- application logic -->
<script src="chat.js?v=14"></script><!-- chat logic --> <script src="chat.js?v=15"></script><!-- chat logic -->
<script src="contact_list.js?v=6"></script><!-- contact list logic --> <script src="contact_list.js?v=7"></script><!-- contact list logic -->
<script src="util.js?v=6"></script><!-- utility functions --> <script src="side_panel_toggler.js?v=1"></script>
<script src="util.js?v=7"></script><!-- utility functions -->
<script src="etherpad.js?v=9"></script><!-- etherpad plugin --> <script src="etherpad.js?v=9"></script><!-- etherpad plugin -->
<script src="prezi.js?v=6"></script><!-- prezi plugin --> <script src="prezi.js?v=6"></script><!-- prezi plugin -->
<script src="smileys.js?v=3"></script><!-- smiley images --> <script src="smileys.js?v=3"></script><!-- smiley images -->
...@@ -51,33 +52,36 @@ ...@@ -51,33 +52,36 @@
<script src="analytics.js?v=1"></script><!-- google analytics plugin --> <script src="analytics.js?v=1"></script><!-- google analytics plugin -->
<script src="rtp_sts.js?v=5"></script><!-- RTP stats processing --> <script src="rtp_sts.js?v=5"></script><!-- RTP stats processing -->
<script src="local_sts.js?v=2"></script><!-- Local stats processing --> <script src="local_sts.js?v=2"></script><!-- Local stats processing -->
<script src="videolayout.js?v=28"></script><!-- video ui --> <script src="videolayout.js?v=29"></script><!-- video ui -->
<script src="connectionquality.js?v=1"></script> <script src="connectionquality.js?v=1"></script>
<script src="toolbar.js?v=6"></script><!-- toolbar ui --> <script src="toolbar.js?v=6"></script><!-- toolbar ui -->
<script src="toolbar_toggler.js?v=2"></script> <script src="toolbar_toggler.js?v=2"></script>
<script src="canvas_util.js?v=1"></script><!-- canvas drawing utils --> <script src="canvas_util.js?v=1"></script><!-- canvas drawing utils -->
<script src="audio_levels.js?v=2"></script><!-- audio levels plugin --> <script src="audio_levels.js?v=2"></script><!-- audio levels plugin -->
<script src="media_stream.js?v=1"></script><!-- media stream --> <script src="media_stream.js?v=2"></script><!-- media stream -->
<script src="bottom_toolbar.js?v=5"></script><!-- media stream --> <script src="bottom_toolbar.js?v=6"></script><!-- media stream -->
<script src="roomname_generator.js?v=1"></script><!-- generator for random room names --> <script src="roomname_generator.js?v=1"></script><!-- generator for random room names -->
<script src="keyboard_shortcut.js?v=3"></script> <script src="keyboard_shortcut.js?v=3"></script>
<script src="tracking.js?v=1"></script><!-- tracking --> <script src="tracking.js?v=1"></script><!-- tracking -->
<script src="jitsipopover.js?v=3"></script> <script src="jitsipopover.js?v=3"></script>
<script src="message_handler.js?v=2"></script> <script src="message_handler.js?v=2"></script>
<script src="api_connector.js?v=2"></script> <script src="api_connector.js?v=2"></script>
<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet"> <script src="settings_menu.js?v=1"></script>
<link rel="stylesheet" href="css/font.css?v=5"/> <script src="avatar.js?v=1"></script><!-- avatars -->
<link rel="stylesheet" href="css/font.css?v=6"/>
<link rel="stylesheet" href="css/toastr.css?v=1"> <link rel="stylesheet" href="css/toastr.css?v=1">
<link rel="stylesheet" type="text/css" media="screen" href="css/main.css?v=29"/> <link rel="stylesheet" type="text/css" media="screen" href="css/main.css?v=30"/>
<link rel="stylesheet" type="text/css" media="screen" href="css/videolayout_default.css?v=13" id="videolayout_default"/> <link rel="stylesheet" type="text/css" media="screen" href="css/videolayout_default.css?v=14" id="videolayout_default"/>
<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
<link rel="stylesheet" href="css/jquery-impromptu.css?v=4"> <link rel="stylesheet" href="css/jquery-impromptu.css?v=4">
<link rel="stylesheet" href="css/modaldialog.css?v=3"> <link rel="stylesheet" href="css/modaldialog.css?v=3">
<link rel="stylesheet" href="css/popup_menu.css?v=4"> <link rel="stylesheet" href="css/popup_menu.css?v=4">
<link rel="stylesheet" href="css/popover.css?v=2"> <link rel="stylesheet" href="css/popover.css?v=2">
<link rel="stylesheet" href="css/jitsi_popover.css?v=2"> <link rel="stylesheet" href="css/jitsi_popover.css?v=2">
<link rel="stylesheet" href="css/contact_list.css?v=3"> <link rel="stylesheet" href="css/contact_list.css?v=4">
<link rel="stylesheet" href="css/chat.css?v=5"> <link rel="stylesheet" href="css/chat.css?v=5">
<link rel="stylesheet" href="css/welcome_page.css?v=2"> <link rel="stylesheet" href="css/welcome_page.css?v=2">
<link rel="stylesheet" href="css/settingsmenu.css?v=1">
<!-- <!--
Link used for inline installation of chrome desktop streaming extension, Link used for inline installation of chrome desktop streaming extension,
is updated automatically from the code with the value defined in config.js --> is updated automatically from the code with the value defined in config.js -->
...@@ -237,6 +241,10 @@ ...@@ -237,6 +241,10 @@
<i class="icon-telephone"></i></a> <i class="icon-telephone"></i></a>
</span> </span>
<div class="header_button_separator"></div> <div class="header_button_separator"></div>
<a class="button" data-container="body" data-toggle="popover" data-placement="bottom" content="Settings" onclick='PanelToggler.toggleSettingsMenu();'>
<i id="settingsButton" class="icon-settings"></i>
</a>
<div class="header_button_separator"></div>
<span id="hangup"> <span id="hangup">
<a class="button" data-container="body" data-toggle="popover" data-placement="bottom" content="Hang Up" onclick='hangup();'> <a class="button" data-container="body" data-toggle="popover" data-placement="bottom" content="Hang Up" onclick='hangup();'>
<i class="icon-hangup" style="color:#ff0000;font-size: 1.4em;"></i> <i class="icon-hangup" style="color:#ff0000;font-size: 1.4em;"></i>
...@@ -263,6 +271,7 @@ ...@@ -263,6 +271,7 @@
<a target="_new"><div class="watermark leftwatermark"></div></a> <a target="_new"><div class="watermark leftwatermark"></div></a>
<a target="_new"><div class="watermark rightwatermark"></div></a> <a target="_new"><div class="watermark rightwatermark"></div></a>
<a class="poweredby" href="http://jitsi.org" target="_new" >powered by jitsi.org</a> <a class="poweredby" href="http://jitsi.org" target="_new" >powered by jitsi.org</a>
<img id="activeSpeakerAvatar" src=""/>
<video id="largeVideo" autoplay oncontextmenu="return false;"></video> <video id="largeVideo" autoplay oncontextmenu="return false;"></video>
</div> </div>
<div id="remoteVideos"> <div id="remoteVideos">
...@@ -306,7 +315,7 @@ ...@@ -306,7 +315,7 @@
</span> </span>
</span> </span>
</div> </div>
<div id="chatspace"> <div id="chatspace" class="right-panel">
<div id="nickname"> <div id="nickname">
Enter a nickname in the box below Enter a nickname in the box below
<form> <form>
...@@ -324,11 +333,19 @@ ...@@ -324,11 +333,19 @@
</div> </div>
</div> </div>
</div> </div>
<div id="contactlist"> <div id="contactlist" class="right-panel">
<ul> <ul>
<li class="title"><i class="icon-contact-list"></i> CONTACT LIST</li> <li class="title"><i class="icon-contact-list"></i> CONTACT LIST</li>
</ul> </ul>
</div> </div>
<div id="settingsmenu" class="right-panel">
<div class="icon-settings"> SETTINGS</div>
<img id="avatar" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAAgACADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6E+LPjLUNIuoPD2izLbaldQ+cbl4wwijyVG0EY3EgnJyBt5BzXkFl4k1u08YbLy6+1Xsrgx3vCyR/Lg5CDDD2469cZpnxy8ZWWs+O0l0XfjT4TZSTk7TK6yNu2jOCoPAPUlm7AZr/AApv7S5vr2+v42eUBMeYBuQfMDx2ydtfEZti5yru0tFt5Hv5c6Ps1H7TPVE8Ya3F5Miasblo2HmQSQJFvHocqCoPTNehaFr1vqllBdQnCzoHCsMEZHSvAvGWsW9rBPfwyiAIMI5HGTnHQ1u/BrxWNWsUUFUkt2Ecsa5wvGRjPPT9QR2r0OH8TWrSm5yvHpfv/kGa4JU6SqRjbuec+Ofhb4r0PWbtYbZryxHzQ3aFAsi5OAVLZDAAZGMdwTzXEWN7PpmpGVPkuomKvjg7u6ntkdK+5NasFvLZkPGVIrxXxl8INKu72a+imubaSQgsI9hUnjnDIcH6V9NleEweEqznUhzcys76o+XxVOpOzpys0eS/FLVtP1PxTJY6YJF0yNkjgkJMhb5Qd4Dcg5bp7YrqPgbZ3NhCLyVgTdRptUfwqC5HPvv6emKkf4WWqThpbm5mVT90xxKG9jhBXoHhDw99nMSLGkaJgAAYwOa7MS8K4xjh4W5fK33muGq4qMZxqTupWb9Uf//Z"/> <!-- BAO -->
<div class="arrow-up"></div>
<input type="text" id="setDisplayName" placeholder="Name">
<input type="text" id="setEmail" placeholder="E-Mail">
<button onclick="SettingsMenu.update()" id="updateSettings">Update</button>
</div>
<a id="downloadlog" onclick='dump(event.target);' data-container="body" data-toggle="popover" data-placement="right" data-content="Download logs" ><i class="fa fa-cloud-download"></i></a> <a id="downloadlog" onclick='dump(event.target);' data-container="body" data-toggle="popover" data-placement="right" data-content="Download logs" ><i class="fa fa-cloud-download"></i></a>
</div> </div>
</body> </body>
......
...@@ -6,11 +6,13 @@ var interfaceConfig = { ...@@ -6,11 +6,13 @@ var interfaceConfig = {
TOOLBAR_TIMEOUT: 4000, TOOLBAR_TIMEOUT: 4000,
DEFAULT_REMOTE_DISPLAY_NAME: "Change Me", DEFAULT_REMOTE_DISPLAY_NAME: "Change Me",
DEFAULT_DOMINANT_SPEAKER_DISPLAY_NAME: "Speaker", DEFAULT_DOMINANT_SPEAKER_DISPLAY_NAME: "Speaker",
DEFAULT_LOCAL_DISPLAY_NAME: "me",
SHOW_JITSI_WATERMARK: false, SHOW_JITSI_WATERMARK: false,
JITSI_WATERMARK_LINK: "", JITSI_WATERMARK_LINK: "",
SHOW_BRAND_WATERMARK: false, SHOW_BRAND_WATERMARK: false,
BRAND_WATERMARK_LINK: "", BRAND_WATERMARK_LINK: "",
SHOW_POWERED_BY: false, SHOW_POWERED_BY: false,
GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true, GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
APP_NAME: "Openfire Meetings" APP_NAME: "Openfire Meetings",
ACTIVE_SPEAKER_AVATAR_SIZE: 100
}; };
...@@ -9,6 +9,7 @@ package org.jitsi.videobridge.openfire; ...@@ -9,6 +9,7 @@ package org.jitsi.videobridge.openfire;
import org.jivesoftware.util.*; import org.jivesoftware.util.*;
import org.jivesoftware.openfire.*; import org.jivesoftware.openfire.*;
import org.jivesoftware.openfire.vcard.VCardManager;
import org.slf4j.*; import org.slf4j.*;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -25,6 +26,8 @@ import java.util.*; ...@@ -25,6 +26,8 @@ import java.util.*;
import java.text.*; import java.text.*;
import java.security.Principal; import java.security.Principal;
import org.dom4j.*;
public class Config extends HttpServlet public class Config extends HttpServlet
{ {
...@@ -38,12 +41,27 @@ public class Config extends HttpServlet ...@@ -38,12 +41,27 @@ public class Config extends HttpServlet
String hostname = XMPPServer.getInstance().getServerInfo().getHostname(); String hostname = XMPPServer.getInstance().getServerInfo().getHostname();
String domain = XMPPServer.getInstance().getServerInfo().getXMPPDomain(); String domain = XMPPServer.getInstance().getServerInfo().getXMPPDomain();
String userName = "null"; String userName = "null";
String userAvatar = "null";
String securityEnabled = JiveGlobals.getProperty("ofmeet.security.enabled", "true"); String securityEnabled = JiveGlobals.getProperty("ofmeet.security.enabled", "true");
if ("true".equals(securityEnabled)) if ("true".equals(securityEnabled))
{ {
userName = request.getUserPrincipal().getName(); userName = request.getUserPrincipal().getName();
VCardManager vcardManager = VCardManager.getInstance();
Element vcard = vcardManager.getVCard(userName);
if (vcard != null)
{
Element photo = vcard.element("PHOTO");
if (photo != null)
{
String type = photo.element("TYPE").getText();
String binval = photo.element("BINVAL").getText();
userAvatar = "data:" + type + ";base64," + binval;
}
}
} }
boolean nodejs = XMPPServer.getInstance().getPluginManager().getPlugin("nodejs") != null; boolean nodejs = XMPPServer.getInstance().getPluginManager().getPlugin("nodejs") != null;
...@@ -126,6 +144,7 @@ public class Config extends HttpServlet ...@@ -126,6 +144,7 @@ public class Config extends HttpServlet
out.println(" audioBandwidth: '" + audioBandwidth + "',"); out.println(" audioBandwidth: '" + audioBandwidth + "',");
out.println(" videoBandwidth: '" + videoBandwidth + "',"); out.println(" videoBandwidth: '" + videoBandwidth + "',");
out.println(" userName: '" + userName + "',"); out.println(" userName: '" + userName + "',");
out.println(" userAvatar: '" + userAvatar + "',");
out.println(" disablePrezi: true,"); out.println(" disablePrezi: true,");
out.println(" bosh: window.location.protocol + '//' + window.location.host + '/http-bind/'"); out.println(" bosh: window.location.protocol + '//' + window.location.host + '/http-bind/'");
out.println("}; "); out.println("}; ");
......
...@@ -56,7 +56,7 @@ public class OfMeetPlugin implements Plugin, ClusterEventListener { ...@@ -56,7 +56,7 @@ public class OfMeetPlugin implements Plugin, ClusterEventListener {
private PluginImpl jitsiPlugin; private PluginImpl jitsiPlugin;
private JigasiPlugin jigasiPlugin; private JigasiPlugin jigasiPlugin;
private PluginManager manager; private PluginManager manager;
private File pluginDirectory; public File pluginDirectory;
public String sipRegisterStatus = ""; public String sipRegisterStatus = "";
......
...@@ -462,7 +462,8 @@ ColibriFocus.prototype.createdConference = function (result) { ...@@ -462,7 +462,8 @@ ColibriFocus.prototype.createdConference = function (result) {
'a=rtpmap:100 VP8/90000\r\n' + 'a=rtpmap:100 VP8/90000\r\n' +
'a=rtcp-fb:100 ccm fir\r\n' + 'a=rtcp-fb:100 ccm fir\r\n' +
'a=rtcp-fb:100 nack\r\n' + 'a=rtcp-fb:100 nack\r\n' +
'a=rtcp-fb:100 goog-remb\r\n' + 'a=rtcp-fb:100 nack pli\r\n' +
(config.enableFirefoxSupport? "" : 'a=rtcp-fb:100 goog-remb\r\n') +
'a=rtpmap:116 red/90000\r\n' + 'a=rtpmap:116 red/90000\r\n' +
'a=rtpmap:117 ulpfec/90000\r\n' + 'a=rtpmap:117 ulpfec/90000\r\n' +
(config.useRtcpMux ? 'a=rtcp-mux\r\n' : '') + (config.useRtcpMux ? 'a=rtcp-mux\r\n' : '') +
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
try { try {
message = JSON.parse(event.data); message = JSON.parse(event.data);
} catch (e) {} } catch (e) {}
if (message && message.id && (player = PreziPlayer.players[message.id])){ if (message.id && (player = PreziPlayer.players[message.id])){
if (player.options.debug === true) { if (player.options.debug === true) {
if (console && console.log) console.log('received', message); if (console && console.log) console.log('received', message);
} }
......
...@@ -46,9 +46,9 @@ Strophe.addConnectionPlugin('rayo', ...@@ -46,9 +46,9 @@ Strophe.addConnectionPlugin('rayo',
console.info('Dial result ', result); console.info('Dial result ', result);
var resource = $(result).find('ref').attr('uri'); var resource = $(result).find('ref').attr('uri');
self.call_resource = resource.substr('xmpp:'.length); this.call_resource = resource.substr('xmpp:'.length);
console.info( console.info(
"Received call resource: " + self.call_resource); "Received call resource: " + this.call_resource);
}, },
function (error) function (error)
{ {
......
...@@ -141,12 +141,28 @@ if (TraceablePeerConnection.prototype.__defineGetter__ !== undefined) { ...@@ -141,12 +141,28 @@ if (TraceablePeerConnection.prototype.__defineGetter__ !== undefined) {
TraceablePeerConnection.prototype.addStream = function (stream) { TraceablePeerConnection.prototype.addStream = function (stream) {
this.trace('addStream', stream.id); this.trace('addStream', stream.id);
simulcast.resetSender(); simulcast.resetSender();
this.peerconnection.addStream(stream); try
{
this.peerconnection.addStream(stream);
}
catch (e)
{
console.error(e);
return;
}
}; };
TraceablePeerConnection.prototype.removeStream = function (stream) { TraceablePeerConnection.prototype.removeStream = function (stream, stopStreams) {
this.trace('removeStream', stream.id); this.trace('removeStream', stream.id);
simulcast.resetSender(); simulcast.resetSender();
if(stopStreams) {
stream.getAudioTracks().forEach(function (track) {
track.stop();
});
stream.getVideoTracks().forEach(function (track) {
track.stop();
});
}
this.peerconnection.removeStream(stream); this.peerconnection.removeStream(stream);
}; };
...@@ -477,6 +493,11 @@ TraceablePeerConnection.prototype.addIceCandidate = function (candidate, success ...@@ -477,6 +493,11 @@ TraceablePeerConnection.prototype.addIceCandidate = function (candidate, success
TraceablePeerConnection.prototype.getStats = function(callback, errback) { TraceablePeerConnection.prototype.getStats = function(callback, errback) {
if (navigator.mozGetUserMedia) { if (navigator.mozGetUserMedia) {
// ignore for now... // ignore for now...
if(!errback)
errback = function () {
}
this.peerconnection.getStats(null,callback,errback);
} else { } else {
this.peerconnection.getStats(callback); this.peerconnection.getStats(callback);
} }
...@@ -497,7 +518,40 @@ function setupRTC() { ...@@ -497,7 +518,40 @@ function setupRTC() {
element[0].mozSrcObject = stream; element[0].mozSrcObject = stream;
element[0].play(); element[0].play();
}, },
pc_constraints: {} pc_constraints: {},
getLocalSSRC: function (session, callback) {
session.peerconnection.getStats(function (s) {
var ssrcs = {};
s.forEach(function (item) {
if (item.type == "outboundrtp" && !item.isRemote)
{
ssrcs[item.id.split('_')[2]] = item.ssrc;
}
});
session.localStreamsSSRC = {
"audio": ssrcs.audio,//for stable 0
"video": ssrcs.video// for stable 1
};
callback(session.localStreamsSSRC);
},
function () {
callback(null);
});
},
getStreamID: function (stream) {
var tracks = stream.getVideoTracks();
if(!tracks || tracks.length == 0)
{
tracks = stream.getAudioTracks();
}
return tracks[0].id.replace(/[\{,\}]/g,"");
},
getVideoSrc: function (element) {
return element.mozSrcObject;
},
setVideoSrc: function (element, src) {
element.mozSrcObject = src;
}
}; };
if (!MediaStream.prototype.getVideoTracks) if (!MediaStream.prototype.getVideoTracks)
MediaStream.prototype.getVideoTracks = function () { return []; }; MediaStream.prototype.getVideoTracks = function () { return []; };
...@@ -516,7 +570,19 @@ function setupRTC() { ...@@ -516,7 +570,19 @@ function setupRTC() {
element.attr('src', webkitURL.createObjectURL(stream)); element.attr('src', webkitURL.createObjectURL(stream));
}, },
// DTLS should now be enabled by default but.. // DTLS should now be enabled by default but..
pc_constraints: {'optional': [{'DtlsSrtpKeyAgreement': 'true'}]} pc_constraints: {'optional': [{'DtlsSrtpKeyAgreement': 'true'}]},
getLocalSSRC: function (session, callback) {
callback(null);
},
getStreamID: function (stream) {
return stream.id;
},
getVideoSrc: function (element) {
return element.getAttribute("src");
},
setVideoSrc: function (element, src) {
element.setAttribute("src", src);
}
}; };
if (navigator.userAgent.indexOf('Android') != -1) { if (navigator.userAgent.indexOf('Android') != -1) {
RTC.pc_constraints = {}; // disable DTLS on Android RTC.pc_constraints = {}; // disable DTLS on Android
......
...@@ -84,7 +84,9 @@ Strophe.addConnectionPlugin('jingle', { ...@@ -84,7 +84,9 @@ Strophe.addConnectionPlugin('jingle', {
case 'session-initiate': case 'session-initiate':
sess = new JingleSession($(iq).attr('to'), $(iq).find('jingle').attr('sid'), this.connection); sess = new JingleSession($(iq).attr('to'), $(iq).find('jingle').attr('sid'), this.connection);
// configure session // configure session
if (this.localAudio) {
//in firefox we have only one stream object
if (this.localAudio != this.localVideo) {
sess.localStreams.push(this.localAudio); sess.localStreams.push(this.localAudio);
} }
if (this.localVideo) { if (this.localVideo) {
...@@ -169,7 +171,9 @@ Strophe.addConnectionPlugin('jingle', { ...@@ -169,7 +171,9 @@ Strophe.addConnectionPlugin('jingle', {
Math.random().toString(36).substr(2, 12), // random string Math.random().toString(36).substr(2, 12), // random string
this.connection); this.connection);
// configure session // configure session
if (this.localAudio) {
//in firefox we have only one stream
if (this.localAudio != this.localVideo) {
sess.localStreams.push(this.localAudio); sess.localStreams.push(this.localAudio);
} }
if (this.localVideo) { if (this.localVideo) {
......
...@@ -194,7 +194,8 @@ SDP.prototype.removeMediaLines = function(mediaindex, prefix) { ...@@ -194,7 +194,8 @@ SDP.prototype.removeMediaLines = function(mediaindex, prefix) {
} }
// add content's to a jingle element // add content's to a jingle element
SDP.prototype.toJingle = function (elem, thecreator) { SDP.prototype.toJingle = function (elem, thecreator, ssrcs) {
// console.log("SSRC" + ssrcs["audio"] + " - " + ssrcs["video"]);
var i, j, k, mline, ssrc, rtpmap, tmp, line, lines; var i, j, k, mline, ssrc, rtpmap, tmp, line, lines;
var self = this; var self = this;
// new bundle plan // new bundle plan
...@@ -221,7 +222,12 @@ SDP.prototype.toJingle = function (elem, thecreator) { ...@@ -221,7 +222,12 @@ SDP.prototype.toJingle = function (elem, thecreator) {
if (SDPUtil.find_line(this.media[i], 'a=ssrc:')) { if (SDPUtil.find_line(this.media[i], 'a=ssrc:')) {
ssrc = SDPUtil.find_line(this.media[i], 'a=ssrc:').substring(7).split(' ')[0]; // take the first ssrc = SDPUtil.find_line(this.media[i], 'a=ssrc:').substring(7).split(' ')[0]; // take the first
} else { } else {
ssrc = false; if(ssrcs && ssrcs[mline.media])
{
ssrc = ssrcs[mline.media];
}
else
ssrc = false;
} }
elem.c('content', {creator: thecreator, name: mline.media}); elem.c('content', {creator: thecreator, name: mline.media});
...@@ -267,25 +273,60 @@ SDP.prototype.toJingle = function (elem, thecreator) { ...@@ -267,25 +273,60 @@ SDP.prototype.toJingle = function (elem, thecreator) {
elem.c('source', { ssrc: ssrc, xmlns: 'urn:xmpp:jingle:apps:rtp:ssma:0' }); elem.c('source', { ssrc: ssrc, xmlns: 'urn:xmpp:jingle:apps:rtp:ssma:0' });
// FIXME: group by ssrc and support multiple different ssrcs // FIXME: group by ssrc and support multiple different ssrcs
var ssrclines = SDPUtil.find_lines(this.media[i], 'a=ssrc:'); var ssrclines = SDPUtil.find_lines(this.media[i], 'a=ssrc:');
ssrclines.forEach(function(line) { if(ssrclines.length > 0) {
idx = line.indexOf(' '); ssrclines.forEach(function (line) {
var linessrc = line.substr(0, idx).substr(7); idx = line.indexOf(' ');
if (linessrc != ssrc) { var linessrc = line.substr(0, idx).substr(7);
if (linessrc != ssrc) {
elem.up();
ssrc = linessrc;
elem.c('source', { ssrc: ssrc, xmlns: 'urn:xmpp:jingle:apps:rtp:ssma:0' });
}
var kv = line.substr(idx + 1);
elem.c('parameter');
if (kv.indexOf(':') == -1) {
elem.attrs({ name: kv });
} else {
elem.attrs({ name: kv.split(':', 2)[0] });
elem.attrs({ value: kv.split(':', 2)[1] });
}
elem.up(); elem.up();
ssrc = linessrc; });
elem.c('source', { ssrc: ssrc, xmlns: 'urn:xmpp:jingle:apps:rtp:ssma:0' }); elem.up();
} }
var kv = line.substr(idx + 1); else
{
elem.up();
elem.c('source', { ssrc: ssrc, xmlns: 'urn:xmpp:jingle:apps:rtp:ssma:0' });
elem.c('parameter'); elem.c('parameter');
if (kv.indexOf(':') == -1) { elem.attrs({name: "cname", value:Math.random().toString(36).substring(7)});
elem.attrs({ name: kv });
} else {
elem.attrs({ name: kv.split(':', 2)[0] });
elem.attrs({ value: kv.split(':', 2)[1] });
}
elem.up(); elem.up();
}); var msid = null;
elem.up(); if(mline.media == "audio")
{
msid = connection.jingle.localAudio.getAudioTracks()[0].id;
}
else
{
msid = connection.jingle.localVideo.getVideoTracks()[0].id;
}
if(msid != null)
{
msid = msid.replace(/[\{,\}]/g,"");
elem.c('parameter');
elem.attrs({name: "msid", value:msid});
elem.up();
elem.c('parameter');
elem.attrs({name: "mslabel", value:msid});
elem.up();
elem.c('parameter');
elem.attrs({name: "label", value:msid});
elem.up();
elem.up();
}
}
// XEP-0339 handle ssrc-group attributes // XEP-0339 handle ssrc-group attributes
var ssrc_group_lines = SDPUtil.find_lines(this.media[i], 'a=ssrc-group:'); var ssrc_group_lines = SDPUtil.find_lines(this.media[i], 'a=ssrc-group:');
......
...@@ -82,14 +82,17 @@ SessionBase.prototype.switchStreams = function (new_stream, oldStream, success_c ...@@ -82,14 +82,17 @@ SessionBase.prototype.switchStreams = function (new_stream, oldStream, success_c
if(self.peerconnection.localDescription) { if(self.peerconnection.localDescription) {
oldSdp = new SDP(self.peerconnection.localDescription.sdp); oldSdp = new SDP(self.peerconnection.localDescription.sdp);
} }
self.peerconnection.removeStream(oldStream); self.peerconnection.removeStream(oldStream, true);
self.peerconnection.addStream(new_stream); self.peerconnection.addStream(new_stream);
} }
self.connection.jingle.localVideo = new_stream; self.connection.jingle.localVideo = new_stream;
self.connection.jingle.localStreams = []; self.connection.jingle.localStreams = [];
self.connection.jingle.localStreams.push(self.connection.jingle.localAudio);
//in firefox we have only one stream object
if(self.connection.jingle.localAudio != self.connection.jingle.localVideo)
self.connection.jingle.localStreams.push(self.connection.jingle.localAudio);
self.connection.jingle.localStreams.push(self.connection.jingle.localVideo); self.connection.jingle.localStreams.push(self.connection.jingle.localVideo);
// Conference is not active // Conference is not active
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -16,15 +16,17 @@ var MediaStream = (function() { ...@@ -16,15 +16,17 @@ var MediaStream = (function() {
* @constructor * @constructor
*/ */
function MediaStreamProto(data, sid, ssrc) { function MediaStreamProto(data, sid, ssrc) {
this.VIDEO_TYPE = "Video";
this.AUDIO_TYPE = "Audio";
this.stream = data.stream; this.stream = data.stream;
this.peerjid = data.peerjid; this.peerjid = data.peerjid;
this.ssrc = ssrc; this.ssrc = ssrc;
this.session = connection.jingle.sessions[sid]; this.session = connection.jingle.sessions[sid];
this.type = (this.stream.getVideoTracks().length > 0) this.type = (this.stream.getVideoTracks().length > 0)
? this.VIDEO_TYPE : this.AUDIO_TYPE; ? MediaStream.VIDEO_TYPE : MediaStream.AUDIO_TYPE;
this.muted = false;
} }
return MediaStreamProto; return MediaStreamProto;
})(); })();
\ No newline at end of file
MediaStream.VIDEO_TYPE = 'Video';
MediaStream.AUDIO_TYPE = 'Audio';
\ No newline at end of file
...@@ -111,7 +111,7 @@ Strophe.addConnectionPlugin('emuc', { ...@@ -111,7 +111,7 @@ Strophe.addConnectionPlugin('emuc', {
var create = $iq({type: 'set', to: this.roomjid}) var create = $iq({type: 'set', to: this.roomjid})
.c('query', {xmlns: 'http://jabber.org/protocol/muc#owner'}) .c('query', {xmlns: 'http://jabber.org/protocol/muc#owner'})
.c('x', {xmlns: 'jabber:x:data', type: 'submit'}); .c('x', {xmlns: 'jabber:x:data', type: 'submit'});
this.connection.send(create); // fire away this.connection.sendIQ(create); // fire away
} }
// Parse roles. // Parse roles.
...@@ -335,6 +335,14 @@ Strophe.addConnectionPlugin('emuc', { ...@@ -335,6 +335,14 @@ Strophe.addConnectionPlugin('emuc', {
pres.c('bridgeIsDown').up(); pres.c('bridgeIsDown').up();
} }
if(this.presMap['email']) {
pres.c('email').t(this.presMap['email']).up();
}
if(this.presMap['userId']) {
pres.c('userId').t(this.presMap['userId']).up();
}
if (this.presMap['displayName']) { if (this.presMap['displayName']) {
// XEP-0172 // XEP-0172
pres.c('nick', {xmlns: 'http://jabber.org/protocol/nick'}) pres.c('nick', {xmlns: 'http://jabber.org/protocol/nick'})
...@@ -456,5 +464,11 @@ Strophe.addConnectionPlugin('emuc', { ...@@ -456,5 +464,11 @@ Strophe.addConnectionPlugin('emuc', {
}, },
addBridgeIsDownToPresence: function() { addBridgeIsDownToPresence: function() {
this.presMap['bridgeIsDown'] = true; this.presMap['bridgeIsDown'] = true;
},
addEmailToPresence: function(email) {
this.presMap['email'] = email;
},
addUserIdToPresence: function(userId) {
this.presMap['userId'] = userId;
} }
}); });
This diff is collapsed.
...@@ -51,12 +51,10 @@ var Util = (function (my) { ...@@ -51,12 +51,10 @@ var Util = (function (my) {
* Returns the available video width. * Returns the available video width.
*/ */
my.getAvailableVideoWidth = function () { my.getAvailableVideoWidth = function () {
var chatspaceWidth var rightPanelWidth
= (Chat.isVisible() || ContactList.isVisible()) = PanelToggler.isVisible() ? PanelToggler.getPanelSize()[0] : 0;
? $('#chatspace').width()
: 0;
return window.innerWidth - chatspaceWidth; return window.innerWidth - rightPanelWidth;
}; };
my.imageToGrayScale = function (canvas) { my.imageToGrayScale = function (canvas) {
......
This diff is collapsed.
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
<%@ page import="org.jitsi.videobridge.openfire.*" %> <%@ page import="org.jitsi.videobridge.openfire.*" %>
<%@ page import="org.jivesoftware.openfire.*" %> <%@ page import="org.jivesoftware.openfire.*" %>
<%@ page import="org.jivesoftware.util.*" %> <%@ page import="org.jivesoftware.util.*" %>
<%@ page import="java.io.File" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %> <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %> <%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>
...@@ -119,7 +120,13 @@ ...@@ -119,7 +120,13 @@
JiveGlobals.setProperty("org.jitsi.videobridge.ofmeet.sip.password", clientpassword); JiveGlobals.setProperty("org.jitsi.videobridge.ofmeet.sip.password", clientpassword);
String allowdirectsip = request.getParameter("allowdirectsip"); String allowdirectsip = request.getParameter("allowdirectsip");
JiveGlobals.setProperty("org.jitsi.videobridge.ofmeet.allow.direct.sip", allowdirectsip); JiveGlobals.setProperty("org.jitsi.videobridge.ofmeet.allow.direct.sip", allowdirectsip);
String recordsecret = request.getParameter("recordsecret");
JiveGlobals.setProperty("org.jitsi.videobridge.ofmeet.recording.secret", recordsecret);
String recordpath = request.getParameter("recordpath");
JiveGlobals.setProperty("org.jitsi.videobridge.ofmeet.recording.path", recordpath);
} }
%> %>
...@@ -315,7 +322,24 @@ ...@@ -315,7 +322,24 @@
<input type="radio" value="true" name="enabled" <%= ("true".equals(JiveGlobals.getProperty(PluginImpl.RECORD_PROPERTY_NAME, "false")) ? "checked" : "") %>> <input type="radio" value="true" name="enabled" <%= ("true".equals(JiveGlobals.getProperty(PluginImpl.RECORD_PROPERTY_NAME, "false")) ? "checked" : "") %>>
<b><fmt:message key="config.page.configuration.record.enabled" /></b> - <fmt:message key="config.page.configuration.record.enabled_description" /> <b><fmt:message key="config.page.configuration.record.enabled" /></b> - <fmt:message key="config.page.configuration.record.enabled_description" />
</td> </td>
</tr> </tr>
<tr>
<td align="left" width="150">
<fmt:message key="config.page.configuration.record.path"/>
</td>
<td><input type="text" size="60" maxlength="100" name="recordpath"
value="<%= JiveGlobals.getProperty("org.jitsi.videobridge.ofmeet.recording.path", container.pluginDirectory.getAbsolutePath() + File.separator + "recordings") %>">
</td>
</tr>
<tr>
<td align="left" width="150">
<fmt:message key="config.page.configuration.record.secret"/>
</td>
<td><input type="password" size="60" maxlength="100" name="recordsecret"
value="<%= JiveGlobals.getProperty("org.jitsi.videobridge.ofmeet.recording.secret", "secret") %>">
</td>
</tr>
</tbody> </tbody>
</table> </table>
</p> </p>
...@@ -350,7 +374,7 @@ ...@@ -350,7 +374,7 @@
<td align="left" width="150"> <td align="left" width="150">
<fmt:message key="config.page.configuration.server"/> <fmt:message key="config.page.configuration.server"/>
</td> </td>
<td><input type="text" size="20" maxlength="100" name="server" <td><input type="text" size="40" maxlength="100" name="server"
value="<%= JiveGlobals.getProperty("voicebridge.default.proxy.sipserver", "") %>"> value="<%= JiveGlobals.getProperty("voicebridge.default.proxy.sipserver", "") %>">
</td> </td>
</tr> </tr>
...@@ -359,7 +383,7 @@ ...@@ -359,7 +383,7 @@
<td align="left" width="150"> <td align="left" width="150">
<fmt:message key="config.page.configuration.outboundproxy"/> <fmt:message key="config.page.configuration.outboundproxy"/>
</td> </td>
<td><input type="text" size="20" maxlength="100" name="outboundproxy" <td><input type="text" size="40" maxlength="100" name="outboundproxy"
value="<%= JiveGlobals.getProperty("voicebridge.default.proxy.outboundproxy", "") %>"> value="<%= JiveGlobals.getProperty("voicebridge.default.proxy.outboundproxy", "") %>">
</td> </td>
</tr> </tr>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment