update plugin (credits @mherger)

This commit is contained in:
philippe44
2022-09-25 11:35:37 -07:00
parent e4d6ea9457
commit 8f2a1aec53
7 changed files with 122 additions and 71 deletions

Binary file not shown.

View File

@@ -63,6 +63,9 @@ sub initFirmwareDownload {
$cb->() if $cb; $cb->() if $cb;
} }
} }
elsif ($cb) {
$cb->();
}
}, },
sub { sub {
my ($http, $error) = @_; my ($http, $error) = @_;
@@ -119,10 +122,15 @@ sub prefetchFirmware {
$cb->($releaseInfo, _gh2lmsUrl($url), $customFwUrl) if $cb; $cb->($releaseInfo, _gh2lmsUrl($url), $customFwUrl) if $cb;
} }
elsif ($cb) {
$cb->();
}
}, },
sub { sub {
my ($http, $error) = @_; my ($http, $error) = @_;
$log->error("Failed to get releases from Github: $error"); $log->error("Failed to get releases from Github: $error");
$cb->() if $cb;
}, },
{ {
timeout => 10, timeout => 10,

View File

@@ -1,3 +1,55 @@
[% IF useExtJS; extJsScripts = BLOCK %]
<script type="text/javascript">
Ext.onReady(function () {
new Ext.util.TaskRunner().start({
run: checkEq,
interval: 1000
});
});
function checkEq() {
var eqValues = [];
this.lastValues = this.lastValues || [];
for (var x = 0; x < 10; x++) {
eqValues[x] = Ext.get('pref_equalizer.' + x).dom.value || 0;
}
if (eqValues.join() != this.lastValues.join()) {
this.lastValues = eqValues;
SqueezeJS.Controller.request({
params: ['[% playerid %]', ['squeezeesp32', 'seteq', eqValues.join()]]
});
}
}
</script>
[% END; ELSIF !useExtJS; pageHeaderScripts = BLOCK %]
<script type="text/javascript">
setInterval(checkEq, 1000);
function checkEq() {
var eqValues = [];
this.lastValues = this.lastValues || [];
for (var x = 0; x < 10; x++) {
eqValues[x] = $('pref_equalizer.' + x).value || 0;
}
if (eqValues.join() != this.lastValues.join()) {
this.lastValues = eqValues;
new Ajax.Request('/jsonrpc.js', {
method: 'post',
postBody: JSON.stringify({
id: 1,
method: 'slim.request',
params: ['[% playerid %]', ['squeezeesp32', 'seteq', eqValues.join()]]
})
});
}
}
</script>
[% END; END %]
[% PROCESS settings/header.html %] [% PROCESS settings/header.html %]
[% WRAPPER setting title="PLUGIN_SQUEEZEESP32_FIRMWARE" desc="" %] [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_FIRMWARE" desc="" %]
@@ -59,62 +111,36 @@
<div>[% "PLUGIN_SQUEEZEESP32_EQUALIZER_SAVE" | string %]</div> <div>[% "PLUGIN_SQUEEZEESP32_EQUALIZER_SAVE" | string %]</div>
[% END %] [% END %]
<script TYPE="text/javascript">
if (Ext) {
Ext.onReady(function () {
new Ext.util.TaskRunner().start({
run: checkEq,
interval: 1000
});
});
function checkEq() {
var eqValues = [];
this.lastValues = this.lastValues || [];
for (var x = 0; x < 10; x++) {
eqValues[x] = Ext.get('pref_equalizer.' + x).dom.value || 0;
}
if (eqValues.join() != this.lastValues.join()) {
this.lastValues = eqValues;
SqueezeJS.Controller.request({
params: ['[% playerid %]', ['squeezeesp32', 'seteq', eqValues.join()]]
});
}
}
}
</script>
[% WRAPPER settingSection %] [% WRAPPER settingSection %]
[% WRAPPER settingGroup title='31Hz' desc="" %] [% WRAPPER settingGroup title='31Hz' desc="" %]
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.0" id="pref_equalizer.0" value="[% pref_equalizer.0 %]" size="2""> <input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.0" id="pref_equalizer.0" value="[% pref_equalizer.0 || 0 %]" size="2"">
[% END %] [% END %]
[% WRAPPER settingGroup title='62Hz' desc="" %] [% WRAPPER settingGroup title='62Hz' desc="" %]
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.1" id="pref_equalizer.1" value="[% pref_equalizer.1 %]" size="2"> <input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.1" id="pref_equalizer.1" value="[% pref_equalizer.1 || 0 %]" size="2">
[% END %] [% END %]
[% WRAPPER settingGroup title='125Hz' desc="" %] [% WRAPPER settingGroup title='125Hz' desc="" %]
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.2" id="pref_equalizer.2" value="[% pref_equalizer.2 %]" size="2"> <input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.2" id="pref_equalizer.2" value="[% pref_equalizer.2 || 0 %]" size="2">
[% END %] [% END %]
[% WRAPPER settingGroup title='250Hz' desc="" %] [% WRAPPER settingGroup title='250Hz' desc="" %]
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.3" id="pref_equalizer.3" value="[% pref_equalizer.3 %]" size="2"> <input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.3" id="pref_equalizer.3" value="[% pref_equalizer.3 || 0 %]" size="2">
[% END %] [% END %]
[% WRAPPER settingGroup title='500Hz' desc="" %] [% WRAPPER settingGroup title='500Hz' desc="" %]
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.4" id="pref_equalizer.4" value="[% pref_equalizer.4 %]" size="2"> <input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.4" id="pref_equalizer.4" value="[% pref_equalizer.4 || 0 %]" size="2">
[% END %] [% END %]
[% WRAPPER settingGroup title='1kHz' desc="" %] [% WRAPPER settingGroup title='1kHz' desc="" %]
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.5" id="pref_equalizer.5" value="[% pref_equalizer.5 %]" size="2"> <input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.5" id="pref_equalizer.5" value="[% pref_equalizer.5 || 0 %]" size="2">
[% END %] [% END %]
[% WRAPPER settingGroup title='2kHz' desc="" %] [% WRAPPER settingGroup title='2kHz' desc="" %]
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.6" id="pref_equalizer.6" value="[% pref_equalizer.6 %]" size="2"> <input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.6" id="pref_equalizer.6" value="[% pref_equalizer.6 || 0 %]" size="2">
[% END %] [% END %]
[% WRAPPER settingGroup title='4kHz' desc="" %] [% WRAPPER settingGroup title='4kHz' desc="" %]
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.7" id="pref_equalizer.7" value="[% pref_equalizer.7 %]" size="2"> <input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.7" id="pref_equalizer.7" value="[% pref_equalizer.7 || 0 %]" size="2">
[% END %] [% END %]
[% WRAPPER settingGroup title='8kHz' desc="" %] [% WRAPPER settingGroup title='8kHz' desc="" %]
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.8" id="pref_equalizer.8" value="[% pref_equalizer.8 %]" size="2"> <input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.8" id="pref_equalizer.8" value="[% pref_equalizer.8 || 0 %]" size="2">
[% END %] [% END %]
[% WRAPPER settingGroup title='16kHz' desc="" %] [% WRAPPER settingGroup title='16kHz' desc="" %]
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.9" id="pref_equalizer.9" value="[% pref_equalizer.9 %]" size="2"> <input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.9" id="pref_equalizer.9" value="[% pref_equalizer.9 || 0 %]" size="2">
[% END %] [% END %]
[% END %] [% END %]
[% END %] [% END %]

View File

@@ -32,8 +32,8 @@ our $defaultPrefs = {
'analogOutMode' => 0, 'analogOutMode' => 0,
'bass' => 0, 'bass' => 0,
'treble' => 0, 'treble' => 0,
'lineInAlwaysOn' => 0, 'lineInAlwaysOn' => 0,
'lineInLevel' => 50, 'lineInLevel' => 50,
'menuItem' => [qw( 'menuItem' => [qw(
NOW_PLAYING NOW_PLAYING
BROWSE_MUSIC BROWSE_MUSIC
@@ -67,51 +67,66 @@ sub minBass { -13 }
sub init { sub init {
my $client = shift; my $client = shift;
my ($id, $caps) = @_; my ($id, $caps) = @_;
my ($depth) = $caps =~ /Depth=(\d+)/; my ($depth) = $caps =~ /Depth=(\d+)/;
$client->depth($depth || 16); $client->depth($depth || 16);
if (!$handlersAdded) { if (!$handlersAdded) {
# Add a handler for line-in/out status changes # Add a handler for line-in/out status changes
Slim::Networking::Slimproto::addHandler( LIOS => \&lineInOutStatus ); Slim::Networking::Slimproto::addHandler( LIOS => \&lineInOutStatus );
# Create a new event for sending LIOS updates # Create a new event for sending LIOS updates
Slim::Control::Request::addDispatch( Slim::Control::Request::addDispatch(
['lios', '_state'], ['lios', '_state'],
[1, 0, 0, undef], [1, 0, 0, undef],
); );
Slim::Control::Request::addDispatch( Slim::Control::Request::addDispatch(
['lios', 'linein', '_state'], ['lios', 'linein', '_state'],
[1, 0, 0, undef], [1, 0, 0, undef],
); );
Slim::Control::Request::addDispatch( Slim::Control::Request::addDispatch(
['lios', 'lineout', '_state'], ['lios', 'lineout', '_state'],
[1, 0, 0, undef], [1, 0, 0, undef],
); );
$handlersAdded = 1; $handlersAdded = 1;
} }
$client->SUPER::init(@_); $client->SUPER::init(@_);
Plugins::SqueezeESP32::FirmwareHelper::init($client); Plugins::SqueezeESP32::FirmwareHelper::init($client);
main::INFOLOG && $log->is_info && $log->info("SqueezeESP player connected: " . $client->id); main::INFOLOG && $log->is_info && $log->info("SqueezeESP player connected: " . $client->id);
} }
sub initPrefs { sub initPrefs {
my $client = shift; my $client = shift;
$sprefs->client($client)->init($defaultPrefs); $sprefs->client($client)->init($defaultPrefs);
$prefs->client($client)->init( { $prefs->client($client)->init( {
equalizer => [(0) x 10], equalizer => [(0) x 10],
artwork => undef, artwork => undef,
} ); } );
$prefs->setValidate({
validator => sub {
my ($pref, $new, $params, $old, $client) = @_;
$new ||= [(0) x 10];
foreach (0..9) {
return 0 if $new->[$_] < $client->minBass;
return 0 if $new->[$_] > $client->maxBass;
}
return 1;
}
}, 'equalizer');
$client->SUPER::initPrefs; $client->SUPER::initPrefs;
} }
@@ -121,15 +136,15 @@ sub power {
my $res = $client->SUPER::power($on, @_); my $res = $client->SUPER::power($on, @_);
return $res unless defined $on; return $res unless defined $on;
if ($on) { if ($on) {
$client->update_artwork(1); $client->update_artwork(1);
} else { } else {
$client->clear_artwork(1); $client->clear_artwork(1);
} }
return $res; return $res;
} }
# Allow the player to define it's display width (and probably more) # Allow the player to define it's display width (and probably more)
sub playerSettingsFrame { sub playerSettingsFrame {
@@ -162,16 +177,16 @@ sub playerSettingsFrame {
sub bass { sub bass {
my ($client, $new) = @_; my ($client, $new) = @_;
my $value = $client->SUPER::bass($new); my $value = $client->SUPER::bass($new);
$client->update_equalizer($value, [2, 1, 3]) if defined $new; $client->update_equalizer($value, [2, 1, 3]) if defined $new;
return $value; return $value;
} }
sub treble { sub treble {
my ($client, $new) = @_; my ($client, $new) = @_;
my $value = $client->SUPER::treble($new); my $value = $client->SUPER::treble($new);
$client->update_equalizer($value, [8, 9, 7]) if defined $new; $client->update_equalizer($value, [8, 9, 7]) if defined $new;
return $value; return $value;
@@ -189,8 +204,8 @@ sub send_equalizer {
sub update_equalizer { sub update_equalizer {
my ($client, $value, $index) = @_; my ($client, $value, $index) = @_;
return if $client->tone_update; return if $client->tone_update;
my $equalizer = $prefs->client($client)->get('equalizer'); my $equalizer = $prefs->client($client)->get('equalizer');
$equalizer->[$index->[0]] = $value; $equalizer->[$index->[0]] = $value;
$equalizer->[$index->[1]] = int($value / 2 + 0.5); $equalizer->[$index->[1]] = int($value / 2 + 0.5);
$equalizer->[$index->[2]] = int($value / 4 + 0.5); $equalizer->[$index->[2]] = int($value / 4 + 0.5);
@@ -203,7 +218,7 @@ sub update_tones {
$client->tone_update(1); $client->tone_update(1);
$sprefs->client($client)->set('bass', int(($equalizer->[1] * 2 + $equalizer->[2] + $equalizer->[3] * 4) / 7 + 0.5)); $sprefs->client($client)->set('bass', int(($equalizer->[1] * 2 + $equalizer->[2] + $equalizer->[3] * 4) / 7 + 0.5));
$sprefs->client($client)->set('treble', int(($equalizer->[7] * 4 + $equalizer->[8] + $equalizer->[9] * 2) / 7 + 0.5)); $sprefs->client($client)->set('treble', int(($equalizer->[7] * 4 + $equalizer->[8] + $equalizer->[9] * 2) / 7 + 0.5));
$client->tone_update(0); $client->tone_update(0);
} }
sub update_artwork { sub update_artwork {
@@ -212,7 +227,7 @@ sub update_artwork {
my $artwork = $cprefs->get('artwork') || return; my $artwork = $cprefs->get('artwork') || return;
return unless $artwork->{'enable'} && $client->display->isa("Plugins::SqueezeESP32::Graphics"); return unless $artwork->{'enable'} && $client->display->isa("Plugins::SqueezeESP32::Graphics");
my $header = pack('Nnn', $artwork->{'enable'}, $artwork->{'x'}, $artwork->{'y'}); my $header = pack('Nnn', $artwork->{'enable'}, $artwork->{'x'}, $artwork->{'y'});
$client->sendFrame( grfa => \$header ); $client->sendFrame( grfa => \$header );
$client->display->update; $client->display->update;
@@ -267,7 +282,7 @@ sub clear_artwork {
if ((!$artwork->{'x'} && !$artwork->{'y'}) || $force) { if ((!$artwork->{'x'} && !$artwork->{'y'}) || $force) {
$client->sendFrame(grfa => \("\x00"x4)); $client->sendFrame(grfa => \("\x00"x4));
$client->display->update; $client->display->update;
} }
} }
} }
@@ -284,7 +299,7 @@ sub config_artwork {
sub reconnect { sub reconnect {
my $client = shift; my $client = shift;
$client->SUPER::reconnect(@_); $client->SUPER::reconnect(@_);
$client->pluginData('artwork_md5', ''); $client->pluginData('artwork_md5', '');
$client->config_artwork if $client->display->isa("Plugins::SqueezeESP32::Graphics"); $client->config_artwork if $client->display->isa("Plugins::SqueezeESP32::Graphics");
$client->send_equalizer; $client->send_equalizer;
@@ -323,18 +338,18 @@ sub lineOutConnected {
sub lineInOutStatus { sub lineInOutStatus {
my ( $client, $data_ref ) = @_; my ( $client, $data_ref ) = @_;
my $state = unpack 'n', $$data_ref; my $state = unpack 'n', $$data_ref;
my $oldState = { my $oldState = {
in => $client->lineInConnected(), in => $client->lineInConnected(),
out => $client->lineOutConnected(), out => $client->lineOutConnected(),
}; };
Slim::Networking::Slimproto::voltage( $client, $state ); Slim::Networking::Slimproto::voltage( $client, $state );
Slim::Control::Request::notifyFromArray( $client, [ 'lios', $state ] ); Slim::Control::Request::notifyFromArray( $client, [ 'lios', $state ] );
if ($oldState->{in} != $client->lineInConnected()) { if ($oldState->{in} != $client->lineInConnected()) {
Slim::Control::Request::notifyFromArray( $client, [ 'lios', 'linein', $client->lineInConnected() ] ); Slim::Control::Request::notifyFromArray( $client, [ 'lios', 'linein', $client->lineInConnected() ] );
if ( Slim::Utils::PluginManager->isEnabled('Slim::Plugin::LineIn::Plugin')) { if ( Slim::Utils::PluginManager->isEnabled('Slim::Plugin::LineIn::Plugin')) {

View File

@@ -3,7 +3,7 @@ package Plugins::SqueezeESP32::PlayerSettings;
use strict; use strict;
use base qw(Slim::Web::Settings); use base qw(Slim::Web::Settings);
use JSON::XS::VersionOneAndTwo; use JSON::XS::VersionOneAndTwo;
use List::Util qw(first); use List::Util qw(first min max);
use Slim::Utils::Log; use Slim::Utils::Log;
use Slim::Utils::Prefs; use Slim::Utils::Prefs;
@@ -79,9 +79,10 @@ sub handler {
if ($client->can('depth') && $client->depth == 16) { if ($client->can('depth') && $client->depth == 16) {
my $equalizer = $cprefs->get('equalizer'); my $equalizer = $cprefs->get('equalizer');
for my $i (0 .. $#{$equalizer}) { foreach (0 .. 9) {
$equalizer->[$i] = $paramRef->{"pref_equalizer.$i"} || 0; $equalizer->[$_] = min($client->maxBass, max($client->minBass, $paramRef->{"pref_equalizer.$_"} || 0))
} }
$equalizer = [ splice(@$equalizer, 0, 10) ];
$cprefs->set('equalizer', $equalizer); $cprefs->set('equalizer', $equalizer);
$client->update_tones($equalizer); $client->update_tones($equalizer);
} }
@@ -97,6 +98,7 @@ sub handler {
$paramRef->{'pref_equalizer'} = $cprefs->get('equalizer') if $client->can('depth') && $client->depth == 16; $paramRef->{'pref_equalizer'} = $cprefs->get('equalizer') if $client->can('depth') && $client->depth == 16;
$paramRef->{'player_ip'} = $client->ip; $paramRef->{'player_ip'} = $client->ip;
require Plugins::SqueezeESP32::FirmwareHelper;
Plugins::SqueezeESP32::FirmwareHelper::initFirmwareDownload($client, sub { Plugins::SqueezeESP32::FirmwareHelper::initFirmwareDownload($client, sub {
my ($currentFWInfo, $newFWUrl, $customFwUrl) = @_; my ($currentFWInfo, $newFWUrl, $customFwUrl) = @_;

View File

@@ -10,6 +10,6 @@
<name>PLUGIN_SQUEEZEESP32</name> <name>PLUGIN_SQUEEZEESP32</name>
<description>PLUGIN_SQUEEZEESP32_DESC</description> <description>PLUGIN_SQUEEZEESP32_DESC</description>
<module>Plugins::SqueezeESP32::Plugin</module> <module>Plugins::SqueezeESP32::Plugin</module>
<version>0.351</version> <version>0.352</version>
<creator>Philippe</creator> <creator>Philippe</creator>
</extensions> </extensions>

View File

@@ -1,10 +1,10 @@
<?xml version='1.0' standalone='yes'?> <?xml version='1.0' standalone='yes'?>
<extensions> <extensions>
<plugins> <plugins>
<plugin version="0.351" name="SqueezeESP32" minTarget="7.9" maxTarget="*"> <plugin version="0.352" name="SqueezeESP32" minTarget="7.9" maxTarget="*">
<link>https://github.com/sle118/squeezelite-esp32</link> <link>https://github.com/sle118/squeezelite-esp32</link>
<creator>Philippe</creator> <creator>Philippe</creator>
<sha>3209d93e2b02c1c9161572977f03c93938272b30</sha> <sha>757946e8aecc05a0600fe887c370996a1a399b4b</sha>
<email>philippe_44@outlook.com</email> <email>philippe_44@outlook.com</email>
<desc lang="EN">SqueezeESP32 additional player id (100/101)</desc> <desc lang="EN">SqueezeESP32 additional player id (100/101)</desc>
<url>http://github.com/sle118/squeezelite-esp32/raw/master-cmake/plugin/SqueezeESP32.zip</url> <url>http://github.com/sle118/squeezelite-esp32/raw/master-cmake/plugin/SqueezeESP32.zip</url>