Made remote audio toggle-able. Fixed monitor selection buttons.

This commit is contained in:
Jared Goodwin 2019-06-21 18:27:09 -07:00
parent 70eec05c23
commit 85d1f0fb3d
15 changed files with 76 additions and 16 deletions

View File

@ -39,11 +39,24 @@ namespace Remotely.Desktop.Win.ViewModels
Conductor.ViewerRemoved += ViewerRemoved;
Conductor.ViewerAdded += ViewerAdded;
Conductor.ScreenCastRequested += ScreenCastRequested;
Conductor.AudioToggled += AudioToggled;
CursorIconWatcher = new CursorIconWatcher(Conductor);
CursorIconWatcher.OnChange += CursorIconWatcher_OnChange;
AudioCapturer = new AudioCapturer(Conductor);
}
private void AudioToggled(object sender, bool toggleOn)
{
if (toggleOn)
{
AudioCapturer.Start();
}
else
{
AudioCapturer.Stop();
}
}
public static MainWindowViewModel Current { get; private set; }
public AudioCapturer AudioCapturer { get; private set; }
@ -216,7 +229,6 @@ namespace Remotely.Desktop.Win.ViewModels
}
await Conductor.CasterSocket.SendCursorChange(CursorIconWatcher.GetCurrentCursor(), new List<string>() { screenCastRequest.ViewerID });
ScreenCaster.BeginScreenCasting(screenCastRequest.ViewerID, screenCastRequest.RequesterName, capturer, Conductor);
AudioCapturer.Start();
});
}
});

View File

@ -17,6 +17,8 @@ namespace Remotely.ScreenCast.Core
{
public class Conductor
{
public event EventHandler<bool> AudioToggled;
public event EventHandler<ScreenCastRequest> ScreenCastInitiated;
public event EventHandler<ScreenCastRequest> ScreenCastRequested;
@ -26,16 +28,16 @@ namespace Remotely.ScreenCast.Core
public event EventHandler<Viewer> ViewerAdded;
public event EventHandler<string> ViewerRemoved;
public Dictionary<string, string> ArgDict { get; set; }
public CasterSocket CasterSocket { get; private set; }
public HubConnection Connection { get; private set; }
public string CurrentDesktopName { get; set; }
public string Host { get; private set; }
public AppMode Mode { get; private set; }
public CasterSocket CasterSocket { get; private set; }
public string RequesterID { get; private set; }
public string ServiceID { get; private set; }
public ConcurrentDictionary<string, Viewer> Viewers { get; } = new ConcurrentDictionary<string, Viewer>();
public Task Connect()
{
Connection = new HubConnectionBuilder()
@ -97,6 +99,11 @@ namespace Remotely.ScreenCast.Core
timer.Start();
}
internal void InvokeAudioToggled(bool toggleOn)
{
AudioToggled?.Invoke(null, toggleOn);
}
internal void InvokeScreenCastInitiated(ScreenCastRequest viewerIdAndRequesterName)
{
ScreenCastInitiated?.Invoke(null, viewerIdAndRequesterName);

View File

@ -163,6 +163,11 @@ namespace Remotely.ScreenCast.Core.Sockets
}
});
Connection.On("ToggleAudio", (bool toggleOn) =>
{
Conductor.InvokeAudioToggled(toggleOn);
});
Connection.On("TouchDown", (string viewerID) =>
{

View File

@ -41,6 +41,7 @@ namespace Remotely.ScreenCast.Win
Conductor.Connect().Wait();
Conductor.SetMessageHandlers(new WinInput());
Conductor.ScreenCastInitiated += ScreenCastInitiated;
Conductor.AudioToggled += AudioToggled;
AudioCapturer = new AudioCapturer(Conductor);
CursorIconWatcher = new CursorIconWatcher(Conductor);
CursorIconWatcher.OnChange += CursorIconWatcher_OnChange;
@ -57,6 +58,18 @@ namespace Remotely.ScreenCast.Win
}
}
private static void AudioToggled(object sender, bool toggledOn)
{
if (toggledOn)
{
AudioCapturer.Start();
}
else
{
AudioCapturer.Stop();
}
}
private static void CheckForRelaunch()
{
@ -94,7 +107,6 @@ namespace Remotely.ScreenCast.Win
}
await Conductor.CasterSocket.SendCursorChange(CursorIconWatcher.GetCurrentCursor(), new List<string>() { screenCastRequest.ViewerID });
ScreenCaster.BeginScreenCasting(screenCastRequest.ViewerID, screenCastRequest.RequesterName, capturer, Conductor);
AudioCapturer.Start();
}
public static async void CursorIconWatcher_OnChange(object sender, CursorInfo cursor)

View File

@ -250,7 +250,7 @@
</PropertyGroup>
<PropertyGroup>
<PostBuildEvent>if $(ConfigurationName) == Debug (
if $(PlatformName) == AnyCPU (
if $(PlatformName) == Any CPU (
md "$(SolutionDir)Agent\bin\Debug\netcoreapp2.2\ScreenCast\"
copy /y "$(TargetDir)\*" "$(SolutionDir)Agent\bin\Debug\netcoreapp2.2\ScreenCast\"
)

View File

@ -1 +1 @@
2019.06.20.1643
2019.06.21.1714

View File

@ -51,6 +51,7 @@
<div>
<button id="inviteButton" class="option-button">Invite Others <i class="fas fa-user-plus"></i></button>
<button id="audioButton" class="option-button">Audio <i class="fas fa-volume-up"></i></button>
<button id="fileTransferButton" class="option-button">File Transfer <i class="fas fa-file-upload"></i></button>
<button id="ctrlAltDelButton" class="option-button">Ctrl+Alt+Del <i class="fas fa-sign-in-alt"></i></button>
<button id="keyboardButton" hidden="hidden" class="option-button">Keyboard <i class="fas fa-keyboard"></i></button>

View File

@ -195,6 +195,10 @@ namespace Remotely.Server.Services
{
await RCDeviceHub.Clients.Client(ScreenCasterID).SendAsync("QualityChange", qualityLevel, Context.ConnectionId);
}
public async Task SendToggleAudio(bool toggleOn)
{
await RCDeviceHub.Clients.Client(ScreenCasterID).SendAsync("ToggleAudio", toggleOn);
}
public async Task Tap(double percentX, double percentY)
{
await RCDeviceHub.Clients.Client(ScreenCasterID).SendAsync("Tap", percentX, percentY, Context.ConnectionId);

View File

@ -46,6 +46,11 @@ button[disabled] {
width: 90%;
}
.horizontal-bar-button {
height: 35px;
margin: 5px;
}
.menu-options-header {
text-align: center;
color: lightgray;
@ -121,10 +126,6 @@ button[disabled] {
transition: all 250ms;
}
.horizontal-button-bar .bar-button {
margin: 0 5px 0 5px;
font-size: .8em;
}
#screenViewer {
max-width: 99vw;

View File

@ -82,20 +82,23 @@ export class RCBrowserSockets {
SendQualityChange(qualityLevel) {
this.Connection.invoke("SendQualityChange", qualityLevel);
}
SendToggleAudio(toggleOn) {
this.Connection.invoke("SendToggleAudio", toggleOn);
}
ApplyMessageHandlers(hubConnection) {
hubConnection.on("ScreenCount", (primaryScreenIndex, screenCount) => {
document.querySelector("#screenSelectBar").innerHTML = "";
for (let i = 0; i < screenCount; i++) {
var button = document.createElement("button");
button.innerHTML = `Monitor ${i}`;
button.classList.add("bar-button");
button.classList.add("horizontal-bar-button");
if (i == primaryScreenIndex) {
button.classList.add("toggled");
}
document.querySelector("#screenSelectBar").appendChild(button);
button.onclick = (ev) => {
this.SendSelectScreen(i);
document.querySelectorAll("#screenSelectBar .bar-button").forEach(button => {
document.querySelectorAll("#screenSelectBar .horizontal-bar-button").forEach(button => {
button.classList.remove("toggled");
});
ev.currentTarget.classList.add("toggled");

File diff suppressed because one or more lines are too long

View File

@ -90,20 +90,23 @@ export class RCBrowserSockets {
SendQualityChange(qualityLevel: number) {
this.Connection.invoke("SendQualityChange", qualityLevel);
}
SendToggleAudio(toggleOn: boolean) {
this.Connection.invoke("SendToggleAudio", toggleOn);
}
private ApplyMessageHandlers(hubConnection) {
hubConnection.on("ScreenCount", (primaryScreenIndex: number, screenCount: number) => {
document.querySelector("#screenSelectBar").innerHTML = "";
for (let i = 0; i < screenCount; i++) {
var button = document.createElement("button");
button.innerHTML = `Monitor ${i}`;
button.classList.add("bar-button");
button.classList.add("horizontal-bar-button");
if (i == primaryScreenIndex) {
button.classList.add("toggled");
}
document.querySelector("#screenSelectBar").appendChild(button);
button.onclick = (ev: MouseEvent) => {
this.SendSelectScreen(i);
document.querySelectorAll("#screenSelectBar .bar-button").forEach(button => {
document.querySelectorAll("#screenSelectBar .horizontal-bar-button").forEach(button => {
button.classList.remove("toggled");
});
(ev.currentTarget as HTMLButtonElement).classList.add("toggled");

View File

@ -1,6 +1,7 @@
import { ConnectToClient, RemoteControl } from "./RemoteControl.js";
import { FloatMessage } from "../UI.js";
import { RemoteControlMode } from "../Enums/RemoteControlMode.js";
export var AudioButton = document.getElementById("audioButton");
export var MenuButton = document.getElementById("menuButton");
export var MenuFrame = document.getElementById("menuFrame");
export var SessionIDInput = document.getElementById("sessionIDInput");
@ -79,6 +80,11 @@ export function ApplyInputHandlers(sockets) {
ScreenViewer.style.maxHeight = "unset";
}
});
AudioButton.addEventListener("click", (ev) => {
AudioButton.classList.toggle("toggled");
var toggleOn = AudioButton.classList.contains("toggled");
sockets.SendToggleAudio(toggleOn);
});
DisconnectButton.addEventListener("click", (ev) => {
ConnectButton.removeAttribute("disabled");
RemoteControl.RCBrowserSockets.Connection.stop();

File diff suppressed because one or more lines are too long

View File

@ -5,6 +5,7 @@ import { FloatMessage } from "../UI.js";
import { RemoteControlMode } from "../Enums/RemoteControlMode.js";
import { Point } from "../Models/Point.js";
export var AudioButton = document.getElementById("audioButton") as HTMLButtonElement;
export var MenuButton = document.getElementById("menuButton") as HTMLButtonElement;
export var MenuFrame = document.getElementById("menuFrame") as HTMLDivElement;
export var SessionIDInput = document.getElementById("sessionIDInput") as HTMLInputElement;
@ -88,6 +89,11 @@ export function ApplyInputHandlers(sockets: RCBrowserSockets) {
ScreenViewer.style.maxHeight = "unset";
}
})
AudioButton.addEventListener("click", (ev) => {
AudioButton.classList.toggle("toggled");
var toggleOn = AudioButton.classList.contains("toggled");
sockets.SendToggleAudio(toggleOn);
})
DisconnectButton.addEventListener("click", (ev) => {
ConnectButton.removeAttribute("disabled");
RemoteControl.RCBrowserSockets.Connection.stop();