diff --git a/htdocs/index.html b/htdocs/index.html
index 6c1def2..9f899ae 100644
--- a/htdocs/index.html
+++ b/htdocs/index.html
@@ -134,12 +134,12 @@
diff --git a/htdocs/lib/ProgressBar.js b/htdocs/lib/ProgressBar.js
index 9d0736d..0019dc6 100644
--- a/htdocs/lib/ProgressBar.js
+++ b/htdocs/lib/ProgressBar.js
@@ -25,13 +25,16 @@ ProgressBar.prototype.setOver = function(over) {
this.$innerBar.css('backgroundColor', (over) ? "#ff6262" : "#00aba6");
};
-AudioBufferProgressBar = function(el, sampleRate) {
+AudioBufferProgressBar = function(el) {
ProgressBar.call(this, el);
- this.sampleRate = sampleRate;
};
AudioBufferProgressBar.prototype = new ProgressBar();
+AudioBufferProgressBar.prototype.setSampleRate = function(sampleRate) {
+ this.sampleRate = sampleRate;
+};
+
AudioBufferProgressBar.prototype.setBuffersize = function(buffersize) {
var audio_buffer_value = buffersize / this.sampleRate;
var overrun = audio_buffer_value > audio_buffer_maximal_length_sec;
@@ -70,12 +73,15 @@ AudioSpeedProgressBar.prototype.setSpeed = function(speed) {
AudioOutputProgressBar = function(el, sampleRate) {
ProgressBar.call(this, el);
- this.maxRate = sampleRate * 1.25;
- this.minRate = sampleRate * .25;
};
AudioOutputProgressBar.prototype = new ProgressBar();
+AudioOutputProgressBar.prototype.setSampleRate = function(sampleRate) {
+ this.maxRate = sampleRate * 1.25;
+ this.minRate = sampleRate * .25;
+};
+
AudioOutputProgressBar.prototype.setAudioRate = function(audioRate) {
this.set(audioRate / this.maxRate, "Audio output [" + (audioRate / 1000).toFixed(1) + " ksps]", audioRate > this.maxRate || audioRate < this.minRate);
};
@@ -111,3 +117,20 @@ CpuProgressBar.prototype = new ProgressBar();
CpuProgressBar.prototype.setUsage = function(usage) {
this.set(usage, "Server CPU [" + Math.round(usage * 100) + "%]", usage > .85);
};
+
+ProgressBar.types = {
+ cpu: CpuProgressBar,
+ audiobuffer: AudioBufferProgressBar,
+ audiospeed: AudioSpeedProgressBar,
+ audiooutput: AudioOutputProgressBar,
+ clients: ClientsProgressBar,
+ networkspeed: NetworkSpeedProgressBar
+}
+
+$.fn.progressbar = function() {
+ if (!this.data('progressbar')) {
+ var constructor = ProgressBar.types[this.data('type')] || ProgressBar;
+ this.data('progressbar', new constructor(this));
+ }
+ return this.data('progressbar');
+};
diff --git a/htdocs/openwebrx.js b/htdocs/openwebrx.js
index 7b32731..4238ad6 100644
--- a/htdocs/openwebrx.js
+++ b/htdocs/openwebrx.js
@@ -739,7 +739,7 @@ function on_ws_recv(evt) {
divlog("Audio stream is " + ((audio_compression === "adpcm") ? "compressed" : "uncompressed") + ".");
fft_compression = config['fft_compression'];
divlog("FFT stream is " + ((fft_compression === "adpcm") ? "compressed" : "uncompressed") + ".");
- clientProgressBar.setMaxClients(config['max_clients']);
+ $('#openwebrx-bar-clients').progressbar().setMaxClients(config['max_clients']);
waterfall_init();
var demodulatorPanel = $('#openwebrx-panel-receiver').demodulatorPanel();
@@ -773,10 +773,10 @@ function on_ws_recv(evt) {
setSmeterAbsoluteValue(smeter_level);
break;
case "cpuusage":
- cpuProgressBar.setUsage(json['value']);
+ $('#openwebrx-bar-server-cpu').progressbar().setUsage(json['value']);
break;
case "clients":
- clientProgressBar.setClients(json['value']);
+ $('#openwebrx-bar-clients').progressbar().setClients(json['value']);
break;
case "profiles":
var listbox = e("openwebrx-sdr-profiles-listbox");
@@ -1121,7 +1121,7 @@ function on_ws_opened() {
if (!networkSpeedMeasurement) {
networkSpeedMeasurement = new Measurement();
networkSpeedMeasurement.report(60000, 1000, function(rate){
- networkSpeedProgressBar.setSpeed(rate);
+ $('#openwebrx-bar-network-speed').progressbar().setSpeed(rate);
});
} else {
networkSpeedMeasurement.reset();
@@ -1352,33 +1352,23 @@ function init_header() {
});
}
-var audioBufferProgressBar;
-var networkSpeedProgressBar;
-var audioSpeedProgressBar;
-var audioOutputProgressBar;
-var clientProgressBar;
-var cpuProgressBar;
-
function initProgressBars() {
- audioBufferProgressBar = new AudioBufferProgressBar($('#openwebrx-bar-audio-buffer'), audioEngine.getSampleRate());
- networkSpeedProgressBar = new NetworkSpeedProgressBar($('#openwebrx-bar-network-speed'));
- audioSpeedProgressBar = new AudioSpeedProgressBar($('#openwebrx-bar-audio-speed'));
- audioOutputProgressBar = new AudioOutputProgressBar($('#openwebrx-bar-audio-output'), audioEngine.getSampleRate());
- clientProgressBar = new ClientsProgressBar($('#openwebrx-bar-clients'));
- cpuProgressBar = new CpuProgressBar($('#openwebrx-bar-server-cpu'));
+ $('#openwebrx-bar-audio-buffer, #openwebrx-bar-audio-output').each(function() {
+ $(this).progressbar().setSampleRate(audioEngine.getSampleRate());
+ });
}
function audioReporter(stats) {
if (typeof(stats.buffersize) !== 'undefined') {
- audioBufferProgressBar.setBuffersize(stats.buffersize);
+ $('#openwebrx-bar-audio-buffer').progressbar().setBuffersize(stats.buffersize);
}
if (typeof(stats.audioByteRate) !== 'undefined') {
- audioSpeedProgressBar.setSpeed(stats.audioByteRate * 8);
+ $('#openwebrx-bar-audio-speed').progressbar().setSpeed(stats.audioByteRate * 8);
}
if (typeof(stats.audioRate) !== 'undefined') {
- audioOutputProgressBar.setAudioRate(stats.audioRate);
+ $('#openwebrx-bar-audio-output').progressbar().setAudioRate(stats.audioRate);
}
}