fix for &preset, &hidehome and &webcam

This commit is contained in:
steveseguin
2024-04-14 15:41:05 -04:00
parent 2937723961
commit 04c1f3eac1
5 changed files with 459 additions and 233 deletions

View File

@@ -58,7 +58,7 @@
<meta property="twitter:image" content="./media/vdoNinja_logo_full.png" />
<meta name="msapplication-TileColor" content="#da532c" />
<meta name="theme-color" content="#0f131d" />
<link rel="stylesheet" href="./main.css?ver=381" />
<link rel="stylesheet" href="./main.css?ver=382" />
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/adapter.js"></script>
<style id="lightbox-animations" type="text/css"></style>
@@ -92,7 +92,7 @@
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/CodecsHandler.js?ver=10"></script>
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/aes.js"></script>
<script type="text/javascript" crossorigin="anonymous" src="./webrtc.js?ver=781"></script>
<script type="text/javascript" crossorigin="anonymous" src="./webrtc.js?ver=783"></script>
<input id="zoomSlider" type="range" style="display: none;" />
<span id="electronDragZone" style="pointer-events: none; z-index:-10; position:absolute;top:0;left:0;width:100%;height:2%;-webkit-app-region: drag;min-height:20px;"></span>
<div id="header">
@@ -304,88 +304,84 @@
<br />
<span data-translate="rooms-allow-for">Rooms allow for group-chat and the tools to manage multiple guests.</span>
<br />
<br />
<table >
<tr>
<th style="text-align:right;" class="labelLarge">
<b>
<span data-translate="room-name">Room Name</span>:
</b>
</th>
<th class="labelSmall"></th>
<th style="text-align:left;" >
<div class="labelSmall">
<span class="section">
<table style="padding-bottom:0;margin-bottom:0;">
<tr>
<th style="text-align:right;" class="labelLarge">
<b>
<span data-translate="room-name">Room Name</span>:
<span data-translate="room-name">Room Name</span>:
</b>
</div>
<input type="text" autocorrect="off" autocapitalize="none" id="videoname1" placeholder="Enter a room name here" onkeydown="checkStrengthRoom(event, 'securityLevelRoom');" onchange="checkStrengthRoom(event, 'securityLevelRoom');" onkeyup="enterPressed(event, createRoom);" maxlength="30" style="max-width: 431px;width: 100%;font-size: 110%; padding: 5px;" />
<button ontouchstart="getById('videoname1').value = session.generateRandomString();getById('securityLevelRoom').style.display='none';" onmousedown="getById('videoname1').value = session.generateRandomString();getById('securityLevelRoom').style.display='none';" title="Generate a random room name" class="randomRoomName"><i class="las la-random"></i></button>
<div id="securityLevelRoom" style="display:none;margin-top:3px;position:relative;top:3px;font-size:0.8em;"></div>
</th>
</tr><tr>
<th style="text-align:right;" class="labelLarge">
<b>
<span data-translate="password-input-field">Password</span>:
</b>
</th>
<th class="labelSmall"></th>
<th style="text-align:left;">
<div class="labelSmall">
</th>
<th class="labelSmall"></th>
<th style="text-align:left;" >
<div class="labelSmall">
<b>
<span data-translate="room-name">Room Name</span>:
</b>
</div>
<input type="text" autocorrect="off" autocapitalize="none" id="videoname1" placeholder="Enter a room name here" onkeydown="checkStrengthRoom(event, 'securityLevelRoom');" onchange="checkStrengthRoom(event, 'securityLevelRoom');" onkeyup="enterPressed(event, createRoom);" maxlength="30" style="max-width: 431px;width: 100%;font-size: 110%; padding: 5px;" />
<button ontouchstart="getById('videoname1').value = session.generateRandomString();getById('securityLevelRoom').style.display='none';" onmousedown="getById('videoname1').value = session.generateRandomString();getById('securityLevelRoom').style.display='none';" title="Generate a random room name" class="randomRoomName"><i class="las la-random"></i></button>
<div id="securityLevelRoom" style="display:none;margin-top:3px;position:relative;top:3px;font-size:0.8em;"></div>
</th>
</tr>
<tr>
<th style="text-align:right;" class="labelLarge">
<b>
<span data-translate="password-input-field">Password</span>:
</b>
</div>
<input type="text" autocorrect="off" autocapitalize="none" id="passwordRoom" placeholder="Optional room password here" onkeydown="checkStrengthRoom(event, 'securityLevelRoom');" onchange="checkStrengthRoom(event, 'securityLevelRoom');" onkeyup="enterPressed(event, createRoom);" style="max-width: 431px;width: 100%;font-size: 110%; padding: 5px;" />
</th>
</tr><tr >
<th style="text-align:right; padding: 5px; padding-top: 20px;">
<input id="broadcastFlag" type="checkbox" title="For large group rooms, this option can reduce the load on remote guests substantially" />
</th><th style="text-align:left;; padding-top: 20px;">
<b>
<span data-translate="guests-only-see-director" style="cursor: help;" title="For large group rooms, this option can reduce the load on remote guests substantially" >The guests can see the director, but not other guests' videos</span>
</b>
</th>
</tr><tr>
<th style="text-align:right; padding: 5px;; padding-bottom: 20px;">
<input id="showdirectorFlag" type="checkbox" title="The director will be visible in scenes as if a performer themselves." />
</th><th style="text-align:left;; padding-bottom: 20px;">
<b>
<span data-translate="scenes-can-see-director" style="cursor: help;" title="If checked, the director can be added to scenes as if a guest. Otherwise, the director will never appear in a scene." >The director will be performing as well, appearing in group scenes</span>
</b>
</th>
</tr><tr>
<th style="text-align:right; padding: 5px;">
</th>
<th style="text-align:left;">
<b>
<span data-translate="default-codec-select" title="Which video codec would you want used by default?" >Preferred Video Codec: </span>
<select style="font-size:1.1em" id="codecGroupFlag" type="checkbox" title="For large group rooms, this option can reduce the load on remote guests substantially" >
<option value="default" selected>Default</option>
<option value="vp9">VP9</option>
<option value="h264">H264</option>
<option value="vp8">VP8</option>
<option value="av1">AV1</option>
</select >
</b>
</th>
</th>
<th class="labelSmall"></th>
<th style="text-align:left;">
<div class="labelSmall">
<b>
<span data-translate="password-input-field">Password</span>:
</b>
</div>
<input type="text" autocorrect="off" autocapitalize="none" id="passwordRoom" placeholder="Optional room password here" onkeydown="checkStrengthRoom(event, 'securityLevelRoom');" onchange="checkStrengthRoom(event, 'securityLevelRoom');" onkeyup="enterPressed(event, createRoom);" style="max-width: 431px;width: 100%;font-size: 110%; padding: 5px;" />
</th>
</tr>
<tr >
</tr>
</table>
<span style="margin: 0 auto; width: 470px; max-width:100%;display: block;">
<button onclick="createRoom()" class="gobutton gowebcam" style="width:100%;" alt="Enter the room as the group's director" title="You'll enter as the room's director">
<th style="text-align:right; padding: 5px; padding-top: 20px;">
<input id="broadcastFlag" type="checkbox" title="For large group rooms, this option can reduce the load on remote guests substantially" />
</th><th style="text-align:left;; padding-top: 20px;">
<b>
<span data-translate="guests-only-see-director" style="cursor: help;" title="For large group rooms, this option can reduce the load on remote guests substantially" >The guests can see the director, but not other guests' videos</span>
</b>
</th>
</tr>
<tr>
<th style="text-align:right; padding: 5px;; padding-bottom: 20px;">
<input id="showdirectorFlag" type="checkbox" title="The director will be visible in scenes as if a performer themselves." />
</th><th style="text-align:left;; padding-bottom: 20px;">
<b>
<span data-translate="scenes-can-see-director" style="cursor: help;" title="If checked, the director can be added to scenes as if a guest. Otherwise, the director will never appear in a scene." >The director will be performing as well, appearing in group scenes</span>
</b>
</th>
</tr>
<tr>
<th style="text-align:right; padding: 5px;">
</th>
<th style="text-align:left;">
<b>
<span data-translate="default-codec-select" title="Which video codec would you want used by default?" >Preferred Video Codec: </span>
<select style="font-size:1.1em" id="codecGroupFlag" type="checkbox" title="For large group rooms, this option can reduce the load on remote guests substantially" >
<option value="default" selected>Default</option>
<option value="vp9">VP9</option>
<option value="h264">H264</option>
<option value="vp8">VP8</option>
<option value="av1">AV1</option>
</select >
</b>
</th>
</tr>
</table>
<button onclick="createRoom()" class="gobutton gowebcam" style="width: 470px;display: block;margin: 20px auto;" alt="Enter the room as the group's director" title="You'll enter as the room's director">
<span data-translate="enter-the-rooms-control">Enter the room's Control Center in the director's role</span>
</button>
<br />
<button class="roomnotes" style="display: block;" onclick="toggle(document.getElementById('roomnotes'),this);">
<button class="roomnotes" style="display: block;display: block;margin: auto;" onclick="toggle(document.getElementById('roomnotes'),this);">
<span data-translate="show-tips">Show me some tips..</span>
</button>
@@ -399,12 +395,16 @@
<li><a href="https://params.vdo.ninja" style="color:black;"><u>Advanced URL parameters</u></a> are available to customize rooms.</li>
</span>
</ul>
<br />
<br />
</span>
<span class="section hidden" id="lastSavedRoom">
<label>A previous session was found using room: <b id="lastSavedRoomName">*UNDEFINED*</b></label>
<button id="goToLastSavedRoom" style="width: 470px;display: block;margin:5px auto;" class="gobutton gowebcam" alt="Enter the room with the previous room settings" title="Enter director room with previous settings">Load the previous session</button>
</span>
<span class="section">
<i data-translate="looking-to-just-chat-and-not-direct">Looking to just chat and not direct?</i>
<br />
<br />
<button onclick="jumptoroom2()" class="gobutton gowebcam" style="width:100%;" alt="Enter the room as the group's director" title="You'll enter as the room's director">
<button onclick="jumptoroom2()" class="gobutton gowebcam" style="width: 470px;display: block;margin: 5px auto" alt="Enter the room as the group's director" title="You'll enter as the room's director">
<span data-translate="join-the-room-basic">Join the room as a Participant, rather than a director</span>
</button>
</span>
@@ -1750,7 +1750,7 @@
<span data-translate="add-to-scene">add to scene 1</span>
</button>
</div>
<!-- Row of Scenes -->
<div class="row six advanced">
@@ -1774,7 +1774,29 @@
<span>S7</span>
</button>
</div>
<div class="group advanced" data-cluster="1">
<button data-action-type="stats-remote" title="Request the statistics of this video in any active scene" onclick="toggleSceneStats(this);">
<i class="las la-info-circle"></i>
<span data-translate="stats-remote">Scene Stats</span>
</button>
<!-- Graph Section for Scenes -->
<div class="row two advanced">
<span class="graphSection hidden" data-action-type="stats-graphs-bitrate" >
<span class="hidden" data-message="true" data-no-scenes="true">No scenes active</span>
</span>
<span class="graphSection hidden" data-action-type="stats-graphs-details" >
<span class="hidden" data-no-scenes="true"></span>
<span data-action-type="stats-graphs-details-container" class="hidden">
<span class="hidden" data-scene-name="true">scene</span>
<span class="hidden" data-bitrate="true">bitrate (kbps)</span>
<span class="hidden" data-resolution="true">resolution</span>
<span class="hidden" style="word-break: break-all;" data-video-codec="true">video codec</span>
</span>
</span>
</div>
</div>
<!-- Row of Groups -->
<div class="row six advanced">
<button class="btn-HL-green" data-action-type="toggle-group" data-group="1" title="Add/remove from group 1" onclick="changeGroupDirector(this);">
@@ -2722,7 +2744,7 @@
// session.decrypted = session.decodeInvite("U2FsdGVkX1+d58DFIHoO3EQZSuX86ch4PqW2ouztnJ0="); // get a code from invite.cam
</script>
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=1143"></script>
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=852"></script>
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=1149"></script>
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=858"></script>
</body>
</html>

463
lib.js
View File

@@ -4022,7 +4022,7 @@ function hideHomeCheck(){
getById("container-4").classList.add("permahide");
getById("dropButton").classList.add("permahide");
getById("head1").classList.add("permahide");
if ((session.permaid === false) && (session.roomid == false)){
if ((session.permaid === false) && (session.roomid == false) && !session.webcamonly && !session.screenshare){
getById("mainmenu").classList.add("permahide");
} else {
getById("mainmenu").classList.remove("permahide");
@@ -4055,6 +4055,28 @@ function hideHomeCheck(){
}
}
function stashRoomSession(broadcastFlag=null){
try {
let settings = {};
settings.roomid = session.roomid;
settings.password = session.password;
settings.label = session.label;
settings.trb = session.totalRoomBitrate;
settings.widget = session.widget;
settings.codecGroupFlag = session.codecGroupFlag;
settings.showDirector = session.showDirector;
if (broadcastFlag!==null){
settings.broadcast = broadcastFlag;
}
setStorage("directorOtherSettings", settings);
} catch(e){
errorlog(e);
}
}
// toggleQualityDirector(1200, this.dataset.UUID, this)
function switchModes(state=null){
@@ -5135,7 +5157,7 @@ function updateMixerRun(e=false){ // this is the main auto-mixing code. It's a
//if (mediaPool[NW-1].tagName == "VIDEO"){
if (mediaPool[NW-1].dataset.UUID){
if (mediaPool[NW-1].dataset.UUID in session.rpcs){
if (session.rpcs[mediaPool[NW-1].dataset.UUID].screenShareState){
if (session.rpcs[mediaPool[NW-1].dataset.UUID].screenShareState && !session.rpcs[mediaPool[NW-1].dataset.UUID].smallScreen){
sscount+=1;
sssid = mediaPool[NW-1].dataset.sid;
}
@@ -9648,36 +9670,54 @@ function toggleSceneStats(button){
button.value = 0;
button.classList.remove("pressed");
button.ariaPressed = "false";
session.rpcs[UUID].allowGraphs = false;
if (UUID){
session.rpcs[UUID].allowGraphs = false;
} else {
session.allowDirectorGraph = false;
}
} else {
button.value = 1;
button.classList.add("pressed");
button.ariaPressed = "true";
session.rpcs[UUID].allowGraphs = true;
if (UUID){
session.rpcs[UUID].allowGraphs = true;
} else {
session.allowDirectorGraph = true;
}
}
if (UUID){
var controls = getById("container_" + UUID);
} else {
var controls = getById("container_director")
}
if (button.value==1){
getById("container_" + UUID).querySelectorAll('[data-no-scenes]').forEach(ele=>{
controls.querySelectorAll('[data-no-scenes]').forEach(ele=>{
ele.classList.remove("hidden");
if (ele.dataset.message){
ele.innerHTML = "Requesting data ..";
}
});
if (getById("container_" + UUID).querySelector('[data-action-type="stats-graphs-bitrate"]')){
getById("container_" + UUID).querySelector('[data-action-type="stats-graphs-bitrate"]').classList.remove("hidden");
if (controls.querySelector('[data-action-type="stats-graphs-bitrate"]')){
controls.querySelector('[data-action-type="stats-graphs-bitrate"]').classList.remove("hidden");
}
if (getById("container_" + UUID).querySelector('[data-action-type="stats-graphs-details"]')){
getById("container_" + UUID).querySelector('[data-action-type="stats-graphs-details"]').classList.remove("hidden");
if (controls.querySelector('[data-action-type="stats-graphs-details"]')){
controls.querySelector('[data-action-type="stats-graphs-details"]').classList.remove("hidden");
}
if (UUID){
session.sendRequest({'requestStatsContinuous':true, }, UUID);
}
session.sendRequest({'requestStatsContinuous':true, }, UUID);
} else {
session.sendRequest({'requestStatsContinuous':false, }, UUID);
if (getById("container_" + UUID).querySelector('[data-action-type="stats-graphs-bitrate"]')){
getById("container_" + UUID).querySelector('[data-action-type="stats-graphs-bitrate"]').classList.add("hidden");
if (UUID){
session.sendRequest({'requestStatsContinuous':false, }, UUID);
}
if (getById("container_" + UUID).querySelector('[data-action-type="stats-graphs-details"]')){
getById("container_" + UUID).querySelector('[data-action-type="stats-graphs-details"]').classList.add("hidden");
if (controls.querySelector('[data-action-type="stats-graphs-bitrate"]')){
controls.querySelector('[data-action-type="stats-graphs-bitrate"]').classList.add("hidden");
}
if (controls.querySelector('[data-action-type="stats-graphs-details"]')){
controls.querySelector('[data-action-type="stats-graphs-details"]').classList.add("hidden");
}
}
}
@@ -9853,6 +9893,91 @@ function selfDestructElement(UUID, uid){
});
}
function directorGraphStats(){
if (!(session.allowDirectorGraph || session.allowGraphs)){return;}
if (session.director){
var UUID = "director";
var maincon = getById("container_director");
var sceneStats = {};
for (var uuid in session.pcs){
if (session.pcs[uuid].scene!==false){
sceneStats[uuid] = {};
sceneStats[uuid].label = session.pcs[uuid].label;
sceneStats[uuid].scene = session.pcs[uuid].scene;
sceneStats[uuid].resolution = session.pcs[uuid].stats.resolution;
sceneStats[uuid].video_bitrate_kbps = session.pcs[uuid].stats.video_bitrate_kbps;
sceneStats[uuid].video_encoder = session.pcs[uuid].stats.video_encoder;
}
}
if (!Object.keys(sceneStats).length){
maincon.querySelectorAll('[data-no-scenes]').forEach(ele=>{
ele.classList.remove("hidden");
if (ele.dataset.message){
ele.innerHTML = "No scenes active";
}
});
log("zero size");
return;
}
maincon.querySelectorAll('[data-no-scenes]').forEach(ele=>{
ele.classList.add("hidden");
});
for (var uuid in sceneStats){
var container = maincon.querySelector('[data-action-type="stats-graphs-details-container"][data-uid="'+uuid+'"]');
if (!container){
container = maincon.querySelector('[data-action-type="stats-graphs-details-container"]').cloneNode(true);
container.dataset.uid = uuid;
container.classList.remove("hidden");
maincon.querySelector('[data-action-type="stats-graphs-details"]').appendChild(container);
}
plotData(sceneStats[uuid], UUID, uuid);
if (("video_bitrate_kbps" in sceneStats[uuid]) && (sceneStats[uuid].video_bitrate_kbps!=="video_bitrate_kbps")){
var span = container.querySelector('[data-bitrate]');
if (span){
span.classList.remove("hidden");
span.innerHTML = "video bitrate: "+parseInt(sceneStats[uuid].video_bitrate_kbps) + " (kbps)";
}
}
var span = container.querySelector('[data-scene-name]');
if (span && ("label" in sceneStats[uuid]) && sceneStats[uuid].label){
span.classList.remove("hidden");
span.innerHTML = "stats for viewer: " + sceneStats[uuid].label;
} else if (span && ("scene" in sceneStats[uuid]) && (sceneStats[uuid].scene !==false)){
span.classList.remove("hidden");
span.innerHTML = "stats for scene: " + sceneStats[uuid].scene;
} else if (uuid==="meshcast"){
span.classList.remove("hidden");
span.innerHTML = "stats for meshcast ingest";
span.title = "You can use &label=xxxx to give your view links a unique label";
} else {
span.classList.remove("hidden");
span.innerHTML = "stats for some viewer";
span.title = "You can use &label=xxxx to give your view links a unique label";
}
if ("resolution" in sceneStats[uuid]){
var span = container.querySelector('[data-resolution]');
if (span){
span.classList.remove("hidden");
span.innerHTML = sceneStats[uuid].resolution;
}
}
if ("video_encoder" in sceneStats[uuid]){
var span = container.querySelector('[data-video-codec]');
if (span){
span.classList.remove("hidden");
span.innerHTML = "video codec: "+sceneStats[uuid].video_encoder;
}
}
}
};
}
function remoteStats(msg, UUID){
if (isIFrame){
parent.postMessage({"remoteStats": msg.remoteStats , "streamID": session.rpcs[UUID].streamID, "UUID": UUID}, session.iframetarget);
@@ -12240,6 +12365,8 @@ function updateLocalStats(){
//if (relayUsed){
// headerStats += " <span title='A relay-server is being used, which can limit this connection's quality.'>💸</span>";
//}
directorGraphStats();
}
var miniInfo = {}
@@ -14810,11 +14937,13 @@ function remoteVolume(ele) { // A directing room only is controlled by the Direc
} */
function clearDirectorSettings(){ // make sure to wipe the director's room settings if creating a new room.
//console.warn("Clearing");
removeStorage("directorCustomize");
removeStorage("directorWebsiteShare");
}
function saveDirectorSettings(){
//console.warn("Saving");
var settings = {};
if (getById("customizeLinks").classList.contains("hidden")){
@@ -14848,8 +14977,8 @@ function saveDirectorSettings(){
}
function loadDirectorSettings(){
//console.warn("LOAD DIRECTOR SETTING");
var settings = getStorage("directorCustomize");
log("LOAD DIRECTOR SETTING");
if (settings.customizeLinks){
try{
hideDirectorinvites(getById("directorLinksButton"), false);
@@ -14860,7 +14989,7 @@ function loadDirectorSettings(){
var customizeLinks1 = getById("customizeLinks1");
Object.keys(settings.customizeLinks1).forEach((key, index) => {
try {
if (customizeLinks1.querySelector('[data-param="'+key+'"]').checked != settings.customizeLinks1[key]){
if (settings.customizeLinks1[key]){
customizeLinks1.querySelector('[data-param="'+key+'"]').checked = settings.customizeLinks1[key];
customizeLinks1.querySelector('[data-param="'+key+'"]').onchange();
}
@@ -14872,7 +15001,7 @@ function loadDirectorSettings(){
var customizeLinks3 = getById("customizeLinks3");
Object.keys(settings.customizeLinks3).forEach((key, index) => {
try {
if (customizeLinks3.querySelector('[data-param="'+key+'"]').checked == settings.customizeLinks3[key]){
if (settings.customizeLinks3[key]){
customizeLinks3.querySelector('[data-param="'+key+'"]').checked = settings.customizeLinks3[key];
customizeLinks3.querySelector('[data-param="'+key+'"]').onchange();
}
@@ -14884,7 +15013,7 @@ function loadDirectorSettings(){
var directorLinks1 = getById("directorLinks1");
Object.keys(settings.directorLinks1).forEach((key, index) => {
try {
if (directorLinks1.querySelector('[data-param="'+key+'"]').checked == settings.directorLinks1[key]){
if (key in settings.directorLinks1){
directorLinks1.querySelector('[data-param="'+key+'"]').checked = settings.directorLinks1[key];
directorLinks1.querySelector('[data-param="'+key+'"]').onchange();
}
@@ -14899,7 +15028,7 @@ function loadDirectorSettings(){
var directorLinks2 = getById("directorLinks2");
Object.keys(settings.directorLinks2).forEach((key, index) => {
try {
if (directorLinks2.querySelector('[data-param="'+key+'"]').checked == settings.directorLinks2[key]){
if (key in settings.directorLinks2){
directorLinks2.querySelector('[data-param="'+key+'"]').checked = settings.directorLinks2[key];
directorLinks2.querySelector('[data-param="'+key+'"]').onchange();
}
@@ -17228,7 +17357,7 @@ function activeSpeaker(border=false) {
var lastActiveSpeaker = null;
var someoneElseIfSpeaking = false;
var anyoneIsSpeaking = false;
var anyoneIsSpeaking = 0;
var defaultSpeaker = false;
for (var UUID in session.rpcs) {
@@ -17282,13 +17411,15 @@ function activeSpeaker(border=false) {
someoneElseIfSpeaking = true;
}
if (session.rpcs[UUID].activelySpeaking){
anyoneIsSpeaking=true;
anyoneIsSpeaking+=1;
}
if (session.rpcs[UUID].defaultSpeaker===true){
defaultSpeaker=true;
}
}
var loudest=null;
var loudestActive=null;
var changed = false;
@@ -17316,7 +17447,7 @@ function activeSpeaker(border=false) {
changed=true;
log(UUID + " is speaker now");
}
session.rpcs[UUID].defaultSpeaker=true;
session.rpcs[UUID].defaultSpeaker=true;
break
}
@@ -17368,7 +17499,10 @@ function activeSpeaker(border=false) {
changed=true
log(loudestActive + " is loudest but not speaker anymore");
} else {
session.rpcs[loudestActive].defaultSpeaker = setTimeout(function(uuid){session.rpcs[uuid].defaultSpeaker = false;updateMixer();},session.activeSpeakerTimeout,loudestActive);
session.rpcs[loudestActive].defaultSpeaker = setTimeout(function(uuid){
session.rpcs[uuid].defaultSpeaker = false;
updateMixer();
}, session.activeSpeakerTimeout, loudestActive);
}
}
loudestActive = UUID;
@@ -17393,13 +17527,26 @@ function activeSpeaker(border=false) {
}
}
if (loudestActive && (session.rpcs[loudestActive].defaultSpeaker!==true)){
if (session.rpcs[loudestActive].defaultSpeaker){
clearTimeout(session.rpcs[loudestActive].defaultSpeaker);
} else {
changed = true;
log(UUID + " is loudestActive now");
}
for (let UUID in session.rpcs) {
if (loudestActive!==UUID){
if (session.rpcs[UUID].defaultSpeaker===true){
session.rpcs[UUID].defaultSpeaker = false; // Reset immediately before any new logic
changed = true;
} else if (session.rpcs[UUID].defaultSpeaker){
clearTimeout(session.rpcs[UUID].defaultSpeaker);
session.rpcs[UUID].defaultSpeaker = false;
}
}
}
session.rpcs[loudestActive].defaultSpeaker = true;
}
}
@@ -17644,42 +17791,79 @@ function joinRoom(roomname) {
}
}
async function createRoom(roomname = false) {
if (roomname == false) {
roomname = getById("videoname1").value;
roomname = sanitizeRoomName(roomname);
async function createRoom(roomname = false, reload=false) {
if (reload===true){
let oldDirectorSettings = getStorage("directorOtherSettings");
var passwordRoom = oldDirectorSettings.password;
if (passwordRoom === session.defaultPassword){
passwordRoom = "";
} else if (passwordRoom === false){
passwordRoom = "";
session.password = false;
}
roomname = oldDirectorSettings.roomid;
if (!roomname){
warnUser("Couldn't load previous session");
return;
}
if (urlParams.has('dir')){
updateURL("dir=" + roomname, true, false); // make the link reloadable.
} else {
updateURL("director=" + roomname, true, false); // make the link reloadable.
}
clearDirectorSettings();
session.codecGroupFlag = session.codecGroupFlag || oldDirectorSettings.codecGroupFlag || session.codecGroupFlag;
if (roomname.length != 0) {
if (urlParams.has('dir')){
updateURL("dir=" + roomname, true, false); // make the link reloadable.
} else {
updateURL("director=" + roomname, true, false); // make the link reloadable.
session.label = session.label || oldDirectorSettings.label || session.label;
session.codecGroupFlag = session.codecGroupFlag || oldDirectorSettings.codecGroupFlag || session.codecGroupFlag;
session.showDirector = session.showDirector || oldDirectorSettings.showDirector || session.showDirector;
if (oldDirectorSettings.broadcast){
getById("broadcastFlag").checked = true;
}
if (session.showDirector){
getById("showdirectorFlag").checked = true;
}
} else {
if (roomname == false) {
roomname = getById("videoname1").value;
roomname = sanitizeRoomName(roomname);
clearDirectorSettings();
if (roomname.length != 0) {
if (urlParams.has('dir')){
updateURL("dir=" + roomname, true, false); // make the link reloadable.
} else {
updateURL("director=" + roomname, true, false); // make the link reloadable.
}
}
}
if (roomname.length == 0) {
//if (!(session.cleanOutput)) {
// warnUser("Please enter a room name before continuing");
//}
getById("videoname1").focus();
getById("videoname1").classList.remove("shake");
setTimeout(function(){getById("videoname1").classList.add("shake");},10);
return;
}
log(roomname);
var passwordRoom = getById("passwordRoom").value;
passwordRoom = sanitizePassword(passwordRoom);
}
if (roomname.length == 0) {
//if (!(session.cleanOutput)) {
// warnUser("Please enter a room name before continuing");
//}
getById("videoname1").focus();
getById("videoname1").classList.remove("shake");
setTimeout(function(){getById("videoname1").classList.add("shake");},10);
return;
}
log(roomname);
session.roomid = roomname;
getById("dirroomid").innerHTML = decodeURIComponent(session.roomid);
getById("roomid").innerHTML = session.roomid;
var passwordRoom = getById("passwordRoom").value;
passwordRoom = sanitizePassword(passwordRoom);
var passAdd = "";
var passAdd2 = "";
@@ -17739,15 +17923,6 @@ async function createRoom(roomname = false) {
} else {
await createRoomCallback(passAdd, passAdd2);
}
if (session.meshcast){
if (!session.cleanOutput && !session.cleanDirector){
document.getElementById("meshcastMenu").classList.remove("hidden");
}
}
pokeIframeAPI("create-room", roomname);
}
function copyVideoFrameToClipboard(videoElement, e=false) {
@@ -18146,6 +18321,12 @@ async function toggleWidgetURL(ele){
async function createRoomCallback(passAdd, passAdd2) {
if (session.meshcast){
if (!session.cleanOutput && !session.cleanDirector){
document.getElementById("meshcastMenu").classList.remove("hidden");
}
}
if (!session.switchMode){
getById("directorlayout").classList.remove("hidden");
getById("gridlayout").classList.add("hidden");
@@ -18166,6 +18347,8 @@ async function createRoomCallback(passAdd, passAdd2) {
if (broadcastFlag) {
broadcastString = "&broadcast";
getById("broadcastSlider").checked = true;
//customizeLinks1
//saveDirectorSettings
}
var wss = "";
@@ -18205,34 +18388,39 @@ async function createRoomCallback(passAdd, passAdd2) {
var codecGroupFlag = getById("codecGroupFlag");
if (codecGroupFlag.value) {
if (codecGroupFlag.value === "vp9") {
codecGroupFlag = "&codec=vp9";
getById("codech264toggle").disabled=true;
} else if (codecGroupFlag.value === "h264") {
codecGroupFlag = "&codec=h264";
getById("codech264toggle").checked=true;
} else if (codecGroupFlag.value === "vp8") {
codecGroupFlag = "&codec=vp8";
getById("codech264toggle").disabled=true;
} else if (codecGroupFlag.value === "av1") {
codecGroupFlag = "&codec=av1";
getById("codech264toggle").disabled=true;
if (session.codecGroupFlag){
codecGroupFlag = session.codecGroupFlag || "";
} else if (codecGroupFlag) {
if (codecGroupFlag.value) {
if (codecGroupFlag.value === "vp9") {
codecGroupFlag = "&codec=vp9";
getById("codech264toggle").disabled=true;
} else if (codecGroupFlag.value === "h264") {
codecGroupFlag = "&codec=h264";
getById("codech264toggle").checked=true;
} else if (codecGroupFlag.value === "vp8") {
codecGroupFlag = "&codec=vp8";
getById("codech264toggle").disabled=true;
} else if (codecGroupFlag.value === "av1") {
codecGroupFlag = "&codec=av1";
getById("codech264toggle").disabled=true;
} else {
codecGroupFlag = "";
}
} else {
codecGroupFlag = "";
}
} else {
codecGroupFlag = "";
session.codecGroupFlag = session.codecGroupFlag || codecGroupFlag || session.codecGroupFlag;
}
if (codecGroupFlag) {
session.codecGroupFlag = codecGroupFlag;
}
if (session.bitrateGroupFlag){
codecGroupFlag += session.bitrateGroupFlag;
}
stashRoomSession(broadcastFlag);
formSubmitting = false;
try {
var m = getById("mainmenu");
@@ -18331,6 +18519,14 @@ async function createRoomCallback(passAdd, passAdd2) {
token+="&token="+session.token;
}
getById("director_block_1").dataset.raw = "https://" + location.host + location.pathname + "?room=" + session.roomid + broadcastString + passAdd + wss + queue + token;
getById("director_block_1").href = "https://" + location.host + location.pathname + "?room=" + session.roomid + broadcastString + passAdd + wss + queue + token;
getById("director_block_1").innerText = "https://" + location.host + location.pathname + "?room=" + session.roomid + broadcastString + passAdd + wss + queue + token;
getById("director_block_3").dataset.raw = "https://" + location.host + location.pathname + "?scene&room=" + session.roomid + codecGroupFlag + passAdd2 + wss + token;
getById("director_block_3").href = "https://" + location.host + location.pathname + "?scene&room=" + session.roomid + codecGroupFlag + passAdd2 + wss + token;
getById("director_block_3").innerText = "https://" + location.host + location.pathname + "?scene&room=" + session.roomid + codecGroupFlag + passAdd2 + wss + token;
if (session.cleanDirector == false && session.cleanOutput==false) {
getById("roomHeader").style.display = "";
@@ -18338,21 +18534,11 @@ async function createRoomCallback(passAdd, passAdd2) {
getById("directorLinks1").style.display = "inline-block";
getById("directorLinks2").style.display = "inline-block";
getById("director_block_1").dataset.raw = "https://" + location.host + location.pathname + "?room=" + session.roomid + broadcastString + passAdd + wss + queue + token;
getById("director_block_1").href = "https://" + location.host + location.pathname + "?room=" + session.roomid + broadcastString + passAdd + wss + queue + token;
getById("director_block_1").innerText = "https://" + location.host + location.pathname + "?room=" + session.roomid + broadcastString + passAdd + wss + queue + token;
getById("director_block_3").dataset.raw = "https://" + location.host + location.pathname + "?scene&room=" + session.roomid + codecGroupFlag + passAdd2 + wss + token;
getById("director_block_3").href = "https://" + location.host + location.pathname + "?scene&room=" + session.roomid + codecGroupFlag + passAdd2 + wss + token;
getById("director_block_3").innerText = "https://" + location.host + location.pathname + "?scene&room=" + session.roomid + codecGroupFlag + passAdd2 + wss + token;
getById("calendarButton").style.display = "inline-block";
} else {
getById("guestFeeds").innerHTML = '';
}
getById("guestFeeds").style.display = "";
if (!(session.cleanOutput)) {
@@ -18447,10 +18633,17 @@ async function createRoomCallback(passAdd, passAdd2) {
getById("highlightDirector").dataset.sid = session.streamID;
}
setTimeout(function(){loadDirectorSettings();},100);
setTimeout(()=>{
loadDirectorSettings();
if (broadcastFlag){
saveDirectorSettings();
}
},100);
joinRoom(session.roomid);
pokeIframeAPI("create-room", session.roomid);
try {
if (!gotDevices2AlreadyRan && (iOS || iPad)){
await enumerateDevices().then(gotDevices2); // this is needed for iOS; was previous set to timeout at 100ms, but would be useful everywhere I think. (Breaks director's auto start, so just iOS for now)
@@ -18748,8 +18941,8 @@ async function createDirectorOnlyBox() {
slotName = "unset";
}
buttons += "<div draggable='true' title='Drag to swap layout positions' ondragend='dragendSlot(event)' ondragstart='dragSlot(event)' ondrop='dropSlot(event)' ondragover='allowDropSlot(event)' data-sid='"+session.streamID+"' data-slot='"+biggestSlot+"' class='slotsbar'>\
<button ondrop='dropSlot(event)' data-action-type='setslot' data-sid='"+streamID+"' data--u-u-i-d='"+UUID+"' draggable='true' ondragend='dragendSlot(event)' ondragstart='dragSlot(event)' ondragover='allowDropSlot(event)' onclick='changeSlot(event, this);'>"+slotName+"</button></div>";
buttons += "<div draggable='true' title='Drag to swap layout positions' ondragend='dragendSlot(event)' ondragstart='dragSlot(event)' ondrop='dropSlot(event)' ondragover='allowDropSlot(event)' data-sid='"+session.streamID+"' data-slot='"+biggestSlot+"' class='slotsbar'>\
<button ondrop='dropSlot(event)' data-action-type='setslot' draggable='true' ondragend='dragendSlot(event)' ondragstart='dragSlot(event)' ondragover='allowDropSlot(event)' onclick='changeSlot(event, this);'>"+slotName+"</button></div>";
}
buttons += "<div title='Does not impact scene order.' class='shift'><i class='las la-angle-left' onclick='shiftPC(this,-1, true);'></i><i class='las la-angle-right' onclick='shiftPC(this,1, true)';></i></div>\
@@ -18851,6 +19044,7 @@ async function createDirectorOnlyBox() {
data.changeLabel = true;
data.value = session.label;
session.sendMessage(data);
stashRoomSession();
}
}
labelID.style.float = "left";
@@ -18872,7 +19066,7 @@ async function createDirectorOnlyBox() {
function createSlotUpdate(UUID=false){
try {
var newSlots = {};
document.querySelectorAll("[data--u-u-i-d][data-slot]").forEach(ele=>{
document.querySelectorAll("[data-sid][data-slot]").forEach(ele=>{
newSlots[ele.dataset.slot] = ele.dataset.sid;
});
if (!UUID){
@@ -18950,7 +19144,7 @@ async function createDirectorScreenshareOnlyBox() { // sstype=3
buttons += "<div draggable='true' title='Drag to swap layout positions' ondragend='dragendSlot(event)' ondragstart='dragSlot(event)' ondrop='dropSlot(event)' ondragover='allowDropSlot(event)' data-sid='"+session.streamID+":s" +"' data-slot='"+biggestSlot+"' class='slotsbar'>\
<button ondrop='dropSlot(event)' data-action-type='setslot' data-sid='"+streamID+"' data--u-u-i-d='"+UUID+"' draggable='true' ondragend='dragendSlot(event)' ondragstart='dragSlot(event)' ondragover='allowDropSlot(event)' onclick='changeSlot(event, this);'>"+slotName+"</button></div>";
<button ondrop='dropSlot(event)' data-action-type='setslot' draggable='true' ondragend='dragendSlot(event)' ondragstart='dragSlot(event)' ondragover='allowDropSlot(event)' onclick='changeSlot(event, this);'>"+slotName+"</button></div>";
}
buttons += "<div title='Does not impact scene order.' class='shift'><i class='las la-angle-left' onclick='shiftPC(this,-1, true);'></i><i class='las la-angle-right' onclick='shiftPC(this,1, true)';></i></div>\
@@ -19050,7 +19244,7 @@ async function createDirectorScreenshareOnlyBox() { // sstype=3
// newlabel = newlabel.trim();
// if (newlabel === ""){
// newlabel = false;
ee.target.innerHTML = getTranslation("add-a-label");
// ee.target.innerHTML = getTranslation("add-a-label");
// miniTranslate(ee.target,"add-a-label");
// ee.target.classList.add("addALabel");
// } else {
@@ -19203,16 +19397,16 @@ function dragSlot(event) {
log("drag");
var ele = event.target;
if (!ele.dataset.UUID && ele.parentNode.dataset.UUID){
if (!ele.dataset.sid && ele.parentNode.dataset.sid){
ele = ele.parentNode;
}
event.dataTransfer.setDragImage( getById('dragImage'), 24, 24);
event.dataTransfer.setData("text", ele.dataset.UUID);
event.dataTransfer.setData("text", ele.dataset.sid);
var eles = document.querySelectorAll(".slotsbar");
for (var i=0;i<eles.length;i++){
if (eles[i].dataset.UUID == ele.dataset.UUID){continue;}
if (eles[i].dataset.sid == ele.dataset.sid){continue;}
eles[i].style.boxShadow = "0px 0px 8px 2px #FFF";
}
}
@@ -19229,39 +19423,29 @@ function dropSlot(event) {
log("drop");
event.preventDefault();
event.stopPropagation();
var UUID = event.dataTransfer.getData("text");
var origThing = document.querySelector("[data--u-u-i-d='"+UUID+"'][data-slot]");
if (origThing && ("slot" in event.target.dataset)){
log(event.target);
var tmp = event.target.dataset.UUID;
event.target.dataset.UUID = origThing.dataset.UUID;
origThing.dataset.UUID = tmp;
swapNodes(event.target, origThing);
pokeIframeAPI("slot-updated", parseInt(event.target.dataset.slot), null, event.target.dataset.sid ); // need to support self-director
pokeIframeAPI("slot-updated", parseInt(origThing.dataset.slot), null, origThing.dataset.sid); // need to support self-director
session.pastSlots[event.target.dataset.sid] = parseInt(event.target.dataset.slot);
session.pastSlots[origThing.dataset.sid] = parseInt(origThing.dataset.slot);
} else if (origThing && ("slot" in event.target.parentNode.dataset)){
log(event.target.parentNode);
var tmp = event.target.parentNode.dataset.UUID;
event.target.parentNode.dataset.UUID = origThing.dataset.UUID;
origThing.dataset.UUID = tmp;
swapNodes(event.target.parentNode, origThing);
pokeIframeAPI("slot-updated", parseInt(event.target.parentNode.dataset.slot), null, event.target.parentNode.dataset.sid); // need to support self-director
pokeIframeAPI("slot-updated", parseInt(origThing.dataset.slot), null, origThing.dataset.sid); // need to support self-director
session.pastSlots[event.target.parentNode.dataset.sid] = parseInt(event.target.parentNode.dataset.slot);
session.pastSlots[origThing.dataset.sid] = parseInt(origThing.dataset.slot);
}
var SID = event.dataTransfer.getData("text");
if (!SID){return;}
var origThing = document.querySelector("[data-sid='"+SID+"'][data-slot]");
if (!origThing){return;}
var targetSID = event.target.dataset.sid || event.target.parentNode.dataset.sid;
if (!targetSID){return;}
var targetThing = document.querySelector("[data-sid='"+targetSID+"'][data-slot]");
if (!targetThing){return;}
targetThing.dataset.sid = SID;
origThing.dataset.sid = targetSID;
swapNodes(targetThing, origThing);
pokeIframeAPI("slot-updated", parseInt(targetThing.dataset.slot), null, targetThing.dataset.sid ); // need to support self-director
pokeIframeAPI("slot-updated", parseInt(origThing.dataset.slot), null, origThing.dataset.sid); // need to support self-director
session.pastSlots[targetThing.dataset.sid] = parseInt(targetThing.dataset.slot);
session.pastSlots[origThing.dataset.sid] = parseInt(origThing.dataset.slot);
createSlotUpdate();
@@ -19573,8 +19757,8 @@ function createControlBox(UUID, soloLink, streamID, slot_init=false) {
slotName = "unset";
}
buttons += "<div draggable='true' title='Drag to swap layout positions' ondragend='dragendSlot(event)' ondragstart='dragSlot(event)' ondrop='dropSlot(event)' ondragover='allowDropSlot(event)' data-slot='"+biggestSlot+"' data--u-u-i-d='"+UUID+"' data-sid='"+streamID+"' class='slotsbar'>\
<button ondrop='dropSlot(event)' draggable='true' data-action-type='setslot' data-sid='"+streamID+"' data--u-u-i-d='"+UUID+"' ondragend='dragendSlot(event)' ondragstart='dragSlot(event)' ondragover='allowDropSlot(event)' onclick='changeSlot(event, this);'>"+slotName+"</button></div>";
buttons += "<div draggable='true' title='Drag to swap layout positions' ondragend='dragendSlot(event)' ondragstart='dragSlot(event)' ondrop='dropSlot(event)' ondragover='allowDropSlot(event)' data-slot='"+biggestSlot+"' data-sid='"+streamID+"' class='slotsbar'>\
<button ondrop='dropSlot(event)' draggable='true' data-action-type='setslot' ondragend='dragendSlot(event)' ondragstart='dragSlot(event)' ondragover='allowDropSlot(event)' onclick='changeSlot(event, this);'>"+slotName+"</button></div>";
}
buttons += "<div title='Does not impact scene order.' class='shift'><i class='las la-angle-left' data--u-u-i-d='"+UUID+"' onclick='shiftPC(this,-1);'></i><span onclick='lockPosition(this);' style='cursor:pointer;' data-locked='0' data--u-u-i-d='"+UUID+"' id='position_"+UUID+"'><i class='las la-lock-open'></i></span><i class='las la-angle-right' data--u-u-i-d='"+UUID+"' onclick='shiftPC(this,1);'></i></div><div class='streamID' style='user-select: none;'>ID: <span style='user-select: text;'>" + streamID + "</span>\
@@ -31753,8 +31937,8 @@ async function updateCameraConstraints(constraint, value = null, ctrl=false, UUI
log("20788");
log(constraints);
console.warn(constraints);
console.warn(constraint + " : " +value);
///console.warn(constraints);
//console.warn(constraint + " : " +value);
await track0.applyConstraints({
advanced: [constraints]
@@ -33120,8 +33304,7 @@ function updateLinkWebP(arg, input) {
var soloLinkAppended = "";
function updateLink(arg, input, solo=false) {
log("updateLink");
log(input.dataset.param);
log("updateLink: "+input.dataset.param);
if (input.checked) {
getById("director_block_" + arg).dataset.raw += input.dataset.param;
@@ -33223,7 +33406,7 @@ function updateLinkInverse(arg, input) {
function updateLinkScene(arg, input) {
log("updateLinkScene");
var string = getById("director_block_" + arg).dataset.raw;
var string = getById("director_block_" + arg).dataset.raw || "";
if (input.checked) {
string = changeParam(string, "scene", "0");
@@ -43573,8 +43756,8 @@ function createControlBoxScreenshare(UUID, soloLink, streamID) {
}
session.pastSlots[streamID] = biggestSlot;
buttons += "<div draggable='true' title='Drag to swap layout positions' ondragend='dragendSlot(event)' ondragstart='dragSlot(event)' ondrop='dropSlot(event)' ondragover='allowDropSlot(event)' data-slot='"+biggestSlot+"' data-sid='"+streamID+"' data--u-u-i-d='"+UUID+"' class='slotsbar'>\
<button ondrop='dropSlot(event)' data-action-type='setslot' data-sid='"+streamID+"' data--u-u-i-d='"+UUID+"' draggable='true' ondragend='dragendSlot(event)' ondragstart='dragSlot(event)' ondragover='allowDropSlot(event)' onclick='changeSlot(event, this);'>"+slotName+"</button></div>";
buttons += "<div draggable='true' title='Drag to swap layout positions' ondragend='dragendSlot(event)' ondragstart='dragSlot(event)' ondrop='dropSlot(event)' ondragover='allowDropSlot(event)' data-slot='"+biggestSlot+"' data-sid='"+streamID+"' class='slotsbar'>\
<button ondrop='dropSlot(event)' data-action-type='setslot' draggable='true' ondragend='dragendSlot(event)' ondragstart='dragSlot(event)' ondragover='allowDropSlot(event)' onclick='changeSlot(event, this);'>"+slotName+"</button></div>";
}
buttons += "<div title='Does not impact scene order.' class='shift'><i class='las la-angle-left' data--u-u-i-d='"+UUID+"' onclick='shiftPC(this,-1);'></i><span onclick='lockPosition(this);' style='cursor:pointer;' data-locked='0' data--u-u-i-d='"+UUID+"' id='position_"+UUID+"'><i class='las la-lock-open'></i></span><i class='las la-angle-right' data--u-u-i-d='"+UUID+"' onclick='shiftPC(this,1);'></i></div><div class='streamID' style='user-select: none;'>ID: <span style='user-select: text;'>" + streamID + "</span>\

View File

@@ -1956,8 +1956,14 @@ div#chatBody a {
height:100%;
position: relative;
}
.section {
display: block;
padding: 20px 5px;
margin: 20px auto;
border-radius: 20px;
border: 2px solid #6e6e6e;
max-width: 680px;
}
@media only screen and (max-width: 500px) {
#subControlButtons {

25
main.js
View File

@@ -716,7 +716,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
//}
if (urlParams.has('relaywss')) {
session.relaywss = true;
session.relaywss = true; // do not use; this is not completed yet and mainly for debugging at this point.
}
if (urlParams.has('fulltalk') && (urlParams.get('fulltalk').length==6)){
@@ -1212,6 +1212,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
session.accept_layouts = true;
session.layout = {};
session.exclusiveLayoutAudio = true;
session.hiddenSceneViewBitrate = 0;
} else if (urlParams.has('layout')) {
if (!urlParams.get('layout')){
@@ -1231,7 +1232,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
if (urlParams.get('exclusivelayoutaudio')){
session.exclusiveLayoutAudio = true;
} else if (urlParams.get('inlusivelayoutaudio')){
} else if (urlParams.get('inclusivelayoutaudio')){
session.exclusiveLayoutAudio = false;
}
@@ -1937,7 +1938,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
session.labelsize = urlParams.get('sizelabel') || urlParams.get('labelsize') || urlParams.get('fontsize') || 100;
session.labelsize = parseInt(session.labelsize);
}
if (urlParams.has('label') || urlParams.has('l')) {
session.label = urlParams.get('label') || urlParams.get('l') || null;
var updateURLAsNeed = true;
@@ -2416,7 +2417,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
session.ruleOfThirds = decodeURIComponent(session.ruleOfThirds);
}
if (urlParams.has('smallshare')){
if (urlParams.has('smallshare') || urlParams.has('smallscreen')){
session.notifyScreenShare = false;
}
@@ -3320,6 +3321,9 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
session.codecGroupFlag = "&codec="+session.codecGroupFlag.toLowerCase();
}
}
if (session.codecGroupFlag){
getById("codecGroupFlag").disabled = true;
}
if (urlParams.has('scenelinkbitrate')){ // this is mainly for a niche iframe API use
log("bitrateGroupFlag CHANGED");
session.bitrateGroupFlag = urlParams.get('scenelinkbitrate') || false;
@@ -4855,7 +4859,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
getById("container-3").classList.remove('pointer');
delayedStartupFuncs.push([previewWebcam]);
}
}
}
if (session.introOnClean && (session.permaid===false) && (session.roomid===false)){
//getById("container-2").className = 'column columnfade hidden'; // Hide screen share
getById("head3").classList.add('hidden');
@@ -5394,6 +5398,17 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
} catch (e) {
errorlog(e);
};
} else {
try {
let reloadOldRoom = getStorage("directorOtherSettings");
if (reloadOldRoom && reloadOldRoom.roomid){
getById("lastSavedRoomName").innerText = reloadOldRoom.roomid;
getById("lastSavedRoom").classList.remove('hidden');
getById("goToLastSavedRoom").onclick = function(){createRoom(false,true);};
}
} catch(e){
errorlog(e);
}
}
hideHomeCheck();

File diff suppressed because one or more lines are too long