mirror of
				https://github.com/pierre42100/ComunicWeb
				synced 2025-11-04 12:14:12 +00:00 
			
		
		
		
	Do not start streaming by default
This commit is contained in:
		@@ -109,6 +109,16 @@ class CallWindow extends CustomEvents {
 | 
				
			|||||||
			// Display the list of buttons
 | 
								// Display the list of buttons
 | 
				
			||||||
			const buttonsList = [
 | 
								const buttonsList = [
 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
 | 
									// Audio button
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										icon: "fa-microphone",
 | 
				
			||||||
 | 
										label: "mic",
 | 
				
			||||||
 | 
										selected: false,
 | 
				
			||||||
 | 
										onclick: () => {
 | 
				
			||||||
 | 
											this.toggleStream(false)
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				// Hang up button
 | 
									// Hang up button
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					icon: "fa-phone",
 | 
										icon: "fa-phone",
 | 
				
			||||||
@@ -119,6 +129,17 @@ class CallWindow extends CustomEvents {
 | 
				
			|||||||
					}
 | 
										}
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// Video button
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										icon: "fa-video-camera",
 | 
				
			||||||
 | 
										label: "camera",
 | 
				
			||||||
 | 
										selected: false,
 | 
				
			||||||
 | 
										onclick: () => {
 | 
				
			||||||
 | 
											this.toggleStream(true)
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				//Full screen button
 | 
									//Full screen button
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					icon: "fa-expand",
 | 
										icon: "fa-expand",
 | 
				
			||||||
@@ -129,7 +150,7 @@ class CallWindow extends CustomEvents {
 | 
				
			|||||||
							setButtonSelected(btn, IsFullScreen());
 | 
												setButtonSelected(btn, IsFullScreen());
 | 
				
			||||||
						}, 1000);
 | 
											}, 1000);
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									},
 | 
				
			||||||
			]
 | 
								]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			//Add buttons
 | 
								//Add buttons
 | 
				
			||||||
@@ -140,6 +161,7 @@ class CallWindow extends CustomEvents {
 | 
				
			|||||||
					type: "div",
 | 
										type: "div",
 | 
				
			||||||
					innerHTML: "<i class='fa " + button.icon + "'></i>"
 | 
										innerHTML: "<i class='fa " + button.icon + "'></i>"
 | 
				
			||||||
				});
 | 
									});
 | 
				
			||||||
 | 
									buttonEl.setAttribute("data-label", button.label)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				//Add button optionnal class
 | 
									//Add button optionnal class
 | 
				
			||||||
				if(button.class)
 | 
									if(button.class)
 | 
				
			||||||
@@ -155,6 +177,25 @@ class CallWindow extends CustomEvents {
 | 
				
			|||||||
			});
 | 
								});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								/**
 | 
				
			||||||
 | 
								 * Refresh buttons state
 | 
				
			||||||
 | 
								 */
 | 
				
			||||||
 | 
								this.refreshButtonsState = () => {
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									// Microphone button
 | 
				
			||||||
 | 
									setButtonSelected(
 | 
				
			||||||
 | 
										bottomArea.querySelector("[data-label=\"mic\"]"),
 | 
				
			||||||
 | 
										this.mainStream && this.mainStream.getAudioTracks()[0].enabled
 | 
				
			||||||
 | 
									)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// Video button
 | 
				
			||||||
 | 
									setButtonSelected(
 | 
				
			||||||
 | 
										bottomArea.querySelector("[data-label=\"camera\"]"),
 | 
				
			||||||
 | 
										this.mainStream && this.mainStream.getVideoTracks().length > 0 && 
 | 
				
			||||||
 | 
											this.mainStream.getVideoTracks()[0].enabled
 | 
				
			||||||
 | 
									)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -183,9 +224,6 @@ class CallWindow extends CustomEvents {
 | 
				
			|||||||
				if(user.userID != userID() && user.ready)
 | 
									if(user.userID != userID() && user.ready)
 | 
				
			||||||
					await this.PeerReady(user.userID)
 | 
										await this.PeerReady(user.userID)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Start to stream audio & video
 | 
					 | 
				
			||||||
			await this.startStreaming();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		} catch(e) {
 | 
							} catch(e) {
 | 
				
			||||||
			console.error(e)
 | 
								console.error(e)
 | 
				
			||||||
@@ -379,6 +417,49 @@ class CallWindow extends CustomEvents {
 | 
				
			|||||||
		};
 | 
							};
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Toggle stream state
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param {boolean} isVideo 
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						async toggleStream(isVideo) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if(isVideo && !this.conv.can_have_video_call) {
 | 
				
			||||||
 | 
								notify("Video calls can not be perfomed on this conversations!", "danger")
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							const hasAudio = (this.mainPeer && !this.mainPeer.destroyed) === true;
 | 
				
			||||||
 | 
							const hasVideo = (this.mainPeer && !this.mainPeer.destroyed && this.mainStream && this.mainStream.getVideoTracks().length > 0) === true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Check if current stream is not enough
 | 
				
			||||||
 | 
							if(hasAudio && isVideo && !hasVideo)
 | 
				
			||||||
 | 
								this.mainPeer.destroy()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Check if we have to start stream or just to mute them
 | 
				
			||||||
 | 
							if(!hasAudio || (isVideo && !hasVideo)) {
 | 
				
			||||||
 | 
								await this.startStreaming(isVideo)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Toggle mute
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Video
 | 
				
			||||||
 | 
								if(isVideo) {
 | 
				
			||||||
 | 
									this.mainStream.getVideoTracks()[0].enabled = !this.mainStream.getVideoTracks()[0].enabled
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Audio
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
 | 
									this.mainStream.getAudioTracks()[0].enabled = !this.mainStream.getAudioTracks()[0].enabled
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							this.refreshButtonsState()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Add audio / video stream to the user
 | 
						 * Add audio / video stream to the user
 | 
				
			||||||
	 * 
 | 
						 * 
 | 
				
			||||||
@@ -423,14 +504,17 @@ class CallWindow extends CustomEvents {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Start to send this client audio & video
 | 
						 * Start to send this client audio & video
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param {boolean} includeVideo
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	async startStreaming() {
 | 
						async startStreaming(includeVideo) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// First, query user media
 | 
							// First, query user media
 | 
				
			||||||
		const stream = await navigator.mediaDevices.getUserMedia({
 | 
							const stream = await navigator.mediaDevices.getUserMedia({
 | 
				
			||||||
			video: this.conv.can_have_video_call,
 | 
								video: this.conv.can_have_video_call && includeVideo,
 | 
				
			||||||
			audio: true
 | 
								audio: true
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
							this.mainStream = stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Check if the window was closed in the mean time
 | 
							// Check if the window was closed in the mean time
 | 
				
			||||||
		if(!this.isOpen)
 | 
							if(!this.isOpen)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user