1
0
mirror of https://github.com/KubaPro010/fm-dx-webserver.git synced 2026-02-27 06:23:53 +01:00

Several fixes

* Fixed rare unprompted auto-restart stream bug (bkram) [/web/js/3las/main.js]
* Fixed multiple tooltip bug while RDS PS is tentatively loaded [/web/js/main.js]
* Changed copying of plugin files to symlinks (junction for Windows) [/server/plugins.js]
* Auto-reconnect audio stream on restored/changed internet connection [/web/js/3las/3las.js]
* Main WebSocket connection can be shared with plugins [/web/js/websocket.js] [/web/index.ejs]
This commit is contained in:
AmateurAudioDude
2024-07-14 19:52:12 +10:00
committed by GitHub
parent 8b2f489fbe
commit e510ce61e6
6 changed files with 178 additions and 37 deletions

View File

@@ -45,6 +45,7 @@ var _3LAS = /** @class */ (function () {
};
_3LAS.prototype.Start = function () {
this.ConnectivityFlag = false;
this.Stop(); // Attempt to mitigate the 0.5x speed/multiple stream bug
// This is stupid, but required for Android.... thanks Google :(
if (this.WakeLock)
@@ -128,11 +129,50 @@ var _3LAS = /** @class */ (function () {
this.ConnectivityFlag = false;
if (this.ConnectivityCallback)
this.ConnectivityCallback(false);
}
if (shouldReconnect) {
if (!this.ConnectivityFlag) {
console.log("Initial reconnect attempt...");
this.Stop(); // Attempt to mitigate the 0.5x speed/multiple stream bug
this.Start();
}
this.Start();
};
// Delay launch of subsequent reconnect attempts by 3 seconds
setTimeout(() => {
let streamReconnecting = false;
let intervalReconnect = setInterval(() => {
if (this.ConnectivityFlag || typeof Stream === 'undefined' || Stream === null) {
console.log("Reconnect attempts aborted.");
clearInterval(intervalReconnect);
} else if (!streamReconnecting) {
streamReconnecting = true;
console.log("Attempting to restart stream...");
this.Stop(); // Attempt to mitigate the 0.5x speed/multiple stream bug
this.Start();
// Wait for reconnect attempt
setTimeout(() => {
streamReconnecting = false;
}, 3000);
}
// Restore user set volume
if (Stream && typeof newVolumeGlobal !== 'undefined' && newVolumeGlobal !== null) {
Stream.Volume = newVolumeGlobal;
console.log(`User volume restored: ${Math.round(newVolumeGlobal * 100)}%`);
}
}, 3000);
}, 3000);
} else {
this.Logger.Log("Reconnection is disabled.");
}
};
_3LAS.prototype.OnSocketDataReady = function (data) {
this.Fallback.OnSocketDataReady(data);
};
return _3LAS;
}());
}());

View File

@@ -1,43 +1,69 @@
const DefaultVolume = 0.5;
let Stream;
let shouldReconnect = true;
let newVolumeGlobal = 1;
function Init(_ev) {
try {
const settings = new _3LAS_Settings();
if (!Stream) { // Ensure Stream is not re-initialized
Stream = new _3LAS(null, settings);
}
} catch (error) {
console.log(error);
return;
}
Stream.ConnectivityCallback = OnConnectivityCallback;
$(".playbutton").off('click').on('click', OnPlayButtonClick); // Ensure only one event handler is attached
$("#volumeSlider").off("input").on("input", updateVolume); // Ensure only one event handler is attached
}
function createStream() {
try {
const settings = new _3LAS_Settings();
Stream = new _3LAS(null, settings);
Stream.ConnectivityCallback = OnConnectivityCallback;
} catch (error) {
console.error("Initialization Error: ", error);
}
}
function destroyStream() {
if (Stream) {
Stream.Stop();
Stream = null;
}
}
function OnConnectivityCallback(isConnected) {
Stream.Volume = isConnected ? 1.0 : DefaultVolume;
console.log("Connectivity changed:", isConnected);
if (Stream) {
Stream.Volume = isConnected ? 1.0 : DefaultVolume;
} else {
console.warn("Stream is not initialized.");
}
}
function OnPlayButtonClick(_ev) {
const $playbutton = $('.playbutton');
$playbutton.find('.fa-solid').toggleClass('fa-play fa-stop');
if (Stream.ConnectivityFlag) {
Stream.Stop();
if (Stream) {
console.log("Stopping stream...");
shouldReconnect = false;
destroyStream();
$playbutton.find('.fa-solid').toggleClass('fa-stop fa-play');
} else {
console.log("Starting stream...");
shouldReconnect = true;
createStream();
Stream.Start();
$playbutton.addClass('bg-gray').prop('disabled', true);
setTimeout(() => {
$playbutton.removeClass('bg-gray').prop('disabled', false);
}, 3000);
$playbutton.find('.fa-solid').toggleClass('fa-play fa-stop');
}
$playbutton.addClass('bg-gray').prop('disabled', true);
setTimeout(() => {
$playbutton.removeClass('bg-gray').prop('disabled', false);
}, 3000);
}
function updateVolume() {
Stream.Volume = $(this).val();
if (Stream) {
const newVolume = $(this).val();
newVolumeGlobal = newVolume;
console.log("Volume updated to:", newVolume);
Stream.Volume = newVolume;
} else {
console.warn("Stream is not initialized.");
}
}
$(document).ready(Init);
$(document).ready(Init);