Skip to content

Commit 8f2a1ae

Browse files
committed
update plugin (credits @mherger)
1 parent e4d6ea9 commit 8f2a1ae

File tree

7 files changed

+122
-71
lines changed

7 files changed

+122
-71
lines changed

plugin/SqueezeESP32.zip

1.2 KB
Binary file not shown.

plugin/SqueezeESP32/FirmwareHelper.pm

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ sub initFirmwareDownload {
6363
$cb->() if $cb;
6464
}
6565
}
66+
elsif ($cb) {
67+
$cb->();
68+
}
6669
},
6770
sub {
6871
my ($http, $error) = @_;
@@ -119,10 +122,15 @@ sub prefetchFirmware {
119122

120123
$cb->($releaseInfo, _gh2lmsUrl($url), $customFwUrl) if $cb;
121124
}
125+
elsif ($cb) {
126+
$cb->();
127+
}
122128
},
123129
sub {
124130
my ($http, $error) = @_;
125131
$log->error("Failed to get releases from Github: $error");
132+
133+
$cb->() if $cb;
126134
},
127135
{
128136
timeout => 10,

plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html

Lines changed: 62 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,55 @@
1+
[% IF useExtJS; extJsScripts = BLOCK %]
2+
<script type="text/javascript">
3+
Ext.onReady(function () {
4+
new Ext.util.TaskRunner().start({
5+
run: checkEq,
6+
interval: 1000
7+
});
8+
});
9+
10+
function checkEq() {
11+
var eqValues = [];
12+
this.lastValues = this.lastValues || [];
13+
14+
for (var x = 0; x < 10; x++) {
15+
eqValues[x] = Ext.get('pref_equalizer.' + x).dom.value || 0;
16+
}
17+
18+
if (eqValues.join() != this.lastValues.join()) {
19+
this.lastValues = eqValues;
20+
SqueezeJS.Controller.request({
21+
params: ['[% playerid %]', ['squeezeesp32', 'seteq', eqValues.join()]]
22+
});
23+
}
24+
}
25+
</script>
26+
[% END; ELSIF !useExtJS; pageHeaderScripts = BLOCK %]
27+
<script type="text/javascript">
28+
setInterval(checkEq, 1000);
29+
30+
function checkEq() {
31+
var eqValues = [];
32+
this.lastValues = this.lastValues || [];
33+
34+
for (var x = 0; x < 10; x++) {
35+
eqValues[x] = $('pref_equalizer.' + x).value || 0;
36+
}
37+
38+
if (eqValues.join() != this.lastValues.join()) {
39+
this.lastValues = eqValues;
40+
new Ajax.Request('/jsonrpc.js', {
41+
method: 'post',
42+
postBody: JSON.stringify({
43+
id: 1,
44+
method: 'slim.request',
45+
params: ['[% playerid %]', ['squeezeesp32', 'seteq', eqValues.join()]]
46+
})
47+
});
48+
}
49+
}
50+
</script>
51+
[% END; END %]
52+
153
[% PROCESS settings/header.html %]
254

355
[% WRAPPER setting title="PLUGIN_SQUEEZEESP32_FIRMWARE" desc="" %]
@@ -59,62 +111,36 @@
59111
<div>[% "PLUGIN_SQUEEZEESP32_EQUALIZER_SAVE" | string %]</div>
60112
[% END %]
61113

62-
<script TYPE="text/javascript">
63-
if (Ext) {
64-
Ext.onReady(function () {
65-
new Ext.util.TaskRunner().start({
66-
run: checkEq,
67-
interval: 1000
68-
});
69-
});
70-
71-
function checkEq() {
72-
var eqValues = [];
73-
this.lastValues = this.lastValues || [];
74-
75-
for (var x = 0; x < 10; x++) {
76-
eqValues[x] = Ext.get('pref_equalizer.' + x).dom.value || 0;
77-
}
78-
79-
if (eqValues.join() != this.lastValues.join()) {
80-
this.lastValues = eqValues;
81-
SqueezeJS.Controller.request({
82-
params: ['[% playerid %]', ['squeezeesp32', 'seteq', eqValues.join()]]
83-
});
84-
}
85-
}
86-
}
87-
</script>
88114
[% WRAPPER settingSection %]
89115
[% WRAPPER settingGroup title='31Hz' desc="" %]
90-
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.0" id="pref_equalizer.0" value="[% pref_equalizer.0 %]" size="2"">
116+
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.0" id="pref_equalizer.0" value="[% pref_equalizer.0 || 0 %]" size="2"">
91117
[% END %]
92118
[% WRAPPER settingGroup title='62Hz' desc="" %]
93-
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.1" id="pref_equalizer.1" value="[% pref_equalizer.1 %]" size="2">
119+
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.1" id="pref_equalizer.1" value="[% pref_equalizer.1 || 0 %]" size="2">
94120
[% END %]
95121
[% WRAPPER settingGroup title='125Hz' desc="" %]
96-
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.2" id="pref_equalizer.2" value="[% pref_equalizer.2 %]" size="2">
122+
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.2" id="pref_equalizer.2" value="[% pref_equalizer.2 || 0 %]" size="2">
97123
[% END %]
98124
[% WRAPPER settingGroup title='250Hz' desc="" %]
99-
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.3" id="pref_equalizer.3" value="[% pref_equalizer.3 %]" size="2">
125+
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.3" id="pref_equalizer.3" value="[% pref_equalizer.3 || 0 %]" size="2">
100126
[% END %]
101127
[% WRAPPER settingGroup title='500Hz' desc="" %]
102-
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.4" id="pref_equalizer.4" value="[% pref_equalizer.4 %]" size="2">
128+
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.4" id="pref_equalizer.4" value="[% pref_equalizer.4 || 0 %]" size="2">
103129
[% END %]
104130
[% WRAPPER settingGroup title='1kHz' desc="" %]
105-
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.5" id="pref_equalizer.5" value="[% pref_equalizer.5 %]" size="2">
131+
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.5" id="pref_equalizer.5" value="[% pref_equalizer.5 || 0 %]" size="2">
106132
[% END %]
107133
[% WRAPPER settingGroup title='2kHz' desc="" %]
108-
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.6" id="pref_equalizer.6" value="[% pref_equalizer.6 %]" size="2">
134+
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.6" id="pref_equalizer.6" value="[% pref_equalizer.6 || 0 %]" size="2">
109135
[% END %]
110136
[% WRAPPER settingGroup title='4kHz' desc="" %]
111-
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.7" id="pref_equalizer.7" value="[% pref_equalizer.7 %]" size="2">
137+
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.7" id="pref_equalizer.7" value="[% pref_equalizer.7 || 0 %]" size="2">
112138
[% END %]
113139
[% WRAPPER settingGroup title='8kHz' desc="" %]
114-
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.8" id="pref_equalizer.8" value="[% pref_equalizer.8 %]" size="2">
140+
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.8" id="pref_equalizer.8" value="[% pref_equalizer.8 || 0 %]" size="2">
115141
[% END %]
116142
[% WRAPPER settingGroup title='16kHz' desc="" %]
117-
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.9" id="pref_equalizer.9" value="[% pref_equalizer.9 %]" size="2">
143+
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.9" id="pref_equalizer.9" value="[% pref_equalizer.9 || 0 %]" size="2">
118144
[% END %]
119145
[% END %]
120146
[% END %]

plugin/SqueezeESP32/Player.pm

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ our $defaultPrefs = {
3232
'analogOutMode' => 0,
3333
'bass' => 0,
3434
'treble' => 0,
35-
'lineInAlwaysOn' => 0,
36-
'lineInLevel' => 50,
35+
'lineInAlwaysOn' => 0,
36+
'lineInLevel' => 50,
3737
'menuItem' => [qw(
3838
NOW_PLAYING
3939
BROWSE_MUSIC
@@ -67,51 +67,66 @@ sub minBass { -13 }
6767
sub init {
6868
my $client = shift;
6969
my ($id, $caps) = @_;
70-
70+
7171
my ($depth) = $caps =~ /Depth=(\d+)/;
7272
$client->depth($depth || 16);
73-
73+
7474
if (!$handlersAdded) {
75-
75+
7676
# Add a handler for line-in/out status changes
7777
Slim::Networking::Slimproto::addHandler( LIOS => \&lineInOutStatus );
78-
78+
7979
# Create a new event for sending LIOS updates
8080
Slim::Control::Request::addDispatch(
8181
['lios', '_state'],
8282
[1, 0, 0, undef],
8383
);
84-
84+
8585
Slim::Control::Request::addDispatch(
8686
['lios', 'linein', '_state'],
8787
[1, 0, 0, undef],
8888
);
89-
89+
9090
Slim::Control::Request::addDispatch(
9191
['lios', 'lineout', '_state'],
9292
[1, 0, 0, undef],
9393
);
94-
94+
9595
$handlersAdded = 1;
9696

9797
}
98-
98+
9999
$client->SUPER::init(@_);
100100
Plugins::SqueezeESP32::FirmwareHelper::init($client);
101101

102102
main::INFOLOG && $log->is_info && $log->info("SqueezeESP player connected: " . $client->id);
103-
}
103+
}
104104

105105
sub initPrefs {
106106
my $client = shift;
107-
107+
108108
$sprefs->client($client)->init($defaultPrefs);
109-
110-
$prefs->client($client)->init( {
109+
110+
$prefs->client($client)->init( {
111111
equalizer => [(0) x 10],
112112
artwork => undef,
113113
} );
114114

115+
$prefs->setValidate({
116+
validator => sub {
117+
my ($pref, $new, $params, $old, $client) = @_;
118+
119+
$new ||= [(0) x 10];
120+
121+
foreach (0..9) {
122+
return 0 if $new->[$_] < $client->minBass;
123+
return 0 if $new->[$_] > $client->maxBass;
124+
}
125+
126+
return 1;
127+
}
128+
}, 'equalizer');
129+
115130
$client->SUPER::initPrefs;
116131
}
117132

@@ -121,15 +136,15 @@ sub power {
121136

122137
my $res = $client->SUPER::power($on, @_);
123138
return $res unless defined $on;
124-
139+
125140
if ($on) {
126141
$client->update_artwork(1);
127142
} else {
128143
$client->clear_artwork(1);
129144
}
130-
145+
131146
return $res;
132-
}
147+
}
133148

134149
# Allow the player to define it's display width (and probably more)
135150
sub playerSettingsFrame {
@@ -162,16 +177,16 @@ sub playerSettingsFrame {
162177
sub bass {
163178
my ($client, $new) = @_;
164179
my $value = $client->SUPER::bass($new);
165-
180+
166181
$client->update_equalizer($value, [2, 1, 3]) if defined $new;
167-
182+
168183
return $value;
169184
}
170185

171186
sub treble {
172187
my ($client, $new) = @_;
173188
my $value = $client->SUPER::treble($new);
174-
189+
175190
$client->update_equalizer($value, [8, 9, 7]) if defined $new;
176191

177192
return $value;
@@ -189,8 +204,8 @@ sub send_equalizer {
189204
sub update_equalizer {
190205
my ($client, $value, $index) = @_;
191206
return if $client->tone_update;
192-
193-
my $equalizer = $prefs->client($client)->get('equalizer');
207+
208+
my $equalizer = $prefs->client($client)->get('equalizer');
194209
$equalizer->[$index->[0]] = $value;
195210
$equalizer->[$index->[1]] = int($value / 2 + 0.5);
196211
$equalizer->[$index->[2]] = int($value / 4 + 0.5);
@@ -203,7 +218,7 @@ sub update_tones {
203218
$client->tone_update(1);
204219
$sprefs->client($client)->set('bass', int(($equalizer->[1] * 2 + $equalizer->[2] + $equalizer->[3] * 4) / 7 + 0.5));
205220
$sprefs->client($client)->set('treble', int(($equalizer->[7] * 4 + $equalizer->[8] + $equalizer->[9] * 2) / 7 + 0.5));
206-
$client->tone_update(0);
221+
$client->tone_update(0);
207222
}
208223

209224
sub update_artwork {
@@ -212,7 +227,7 @@ sub update_artwork {
212227

213228
my $artwork = $cprefs->get('artwork') || return;
214229
return unless $artwork->{'enable'} && $client->display->isa("Plugins::SqueezeESP32::Graphics");
215-
230+
216231
my $header = pack('Nnn', $artwork->{'enable'}, $artwork->{'x'}, $artwork->{'y'});
217232
$client->sendFrame( grfa => \$header );
218233
$client->display->update;
@@ -267,7 +282,7 @@ sub clear_artwork {
267282
if ((!$artwork->{'x'} && !$artwork->{'y'}) || $force) {
268283
$client->sendFrame(grfa => \("\x00"x4));
269284
$client->display->update;
270-
}
285+
}
271286
}
272287
}
273288

@@ -284,7 +299,7 @@ sub config_artwork {
284299
sub reconnect {
285300
my $client = shift;
286301
$client->SUPER::reconnect(@_);
287-
302+
288303
$client->pluginData('artwork_md5', '');
289304
$client->config_artwork if $client->display->isa("Plugins::SqueezeESP32::Graphics");
290305
$client->send_equalizer;
@@ -323,18 +338,18 @@ sub lineOutConnected {
323338

324339
sub lineInOutStatus {
325340
my ( $client, $data_ref ) = @_;
326-
341+
327342
my $state = unpack 'n', $$data_ref;
328343

329344
my $oldState = {
330345
in => $client->lineInConnected(),
331346
out => $client->lineOutConnected(),
332347
};
333-
348+
334349
Slim::Networking::Slimproto::voltage( $client, $state );
335350

336351
Slim::Control::Request::notifyFromArray( $client, [ 'lios', $state ] );
337-
352+
338353
if ($oldState->{in} != $client->lineInConnected()) {
339354
Slim::Control::Request::notifyFromArray( $client, [ 'lios', 'linein', $client->lineInConnected() ] );
340355
if ( Slim::Utils::PluginManager->isEnabled('Slim::Plugin::LineIn::Plugin')) {

plugin/SqueezeESP32/PlayerSettings.pm

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package Plugins::SqueezeESP32::PlayerSettings;
33
use strict;
44
use base qw(Slim::Web::Settings);
55
use JSON::XS::VersionOneAndTwo;
6-
use List::Util qw(first);
6+
use List::Util qw(first min max);
77

88
use Slim::Utils::Log;
99
use Slim::Utils::Prefs;
@@ -79,9 +79,10 @@ sub handler {
7979

8080
if ($client->can('depth') && $client->depth == 16) {
8181
my $equalizer = $cprefs->get('equalizer');
82-
for my $i (0 .. $#{$equalizer}) {
83-
$equalizer->[$i] = $paramRef->{"pref_equalizer.$i"} || 0;
82+
foreach (0 .. 9) {
83+
$equalizer->[$_] = min($client->maxBass, max($client->minBass, $paramRef->{"pref_equalizer.$_"} || 0))
8484
}
85+
$equalizer = [ splice(@$equalizer, 0, 10) ];
8586
$cprefs->set('equalizer', $equalizer);
8687
$client->update_tones($equalizer);
8788
}
@@ -97,6 +98,7 @@ sub handler {
9798
$paramRef->{'pref_equalizer'} = $cprefs->get('equalizer') if $client->can('depth') && $client->depth == 16;
9899
$paramRef->{'player_ip'} = $client->ip;
99100

101+
require Plugins::SqueezeESP32::FirmwareHelper;
100102
Plugins::SqueezeESP32::FirmwareHelper::initFirmwareDownload($client, sub {
101103
my ($currentFWInfo, $newFWUrl, $customFwUrl) = @_;
102104

plugin/SqueezeESP32/install.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
<name>PLUGIN_SQUEEZEESP32</name>
1111
<description>PLUGIN_SQUEEZEESP32_DESC</description>
1212
<module>Plugins::SqueezeESP32::Plugin</module>
13-
<version>0.351</version>
13+
<version>0.352</version>
1414
<creator>Philippe</creator>
1515
</extensions>

0 commit comments

Comments
 (0)