diff --git a/plugin/SqueezeESP32.zip b/plugin/SqueezeESP32.zip
deleted file mode 100644
index 9180a8fa..00000000
Binary files a/plugin/SqueezeESP32.zip and /dev/null differ
diff --git a/plugin/SqueezeESP32/FirmwareHelper.pm b/plugin/SqueezeESP32/FirmwareHelper.pm
deleted file mode 100644
index 3f0c192e..00000000
--- a/plugin/SqueezeESP32/FirmwareHelper.pm
+++ /dev/null
@@ -1,237 +0,0 @@
-package Plugins::SqueezeESP32::FirmwareHelper;
-
-use strict;
-
-use File::Basename qw(basename);
-use File::Spec::Functions qw(catfile);
-use JSON::XS::VersionOneAndTwo;
-
-use Slim::Utils::Log;
-use Slim::Utils::Prefs;
-
-use constant FIRMWARE_POLL_INTERVAL => 3600 * (5 + rand());
-use constant GITHUB_RELEASES_URI => "https://api.github.com/repos/sle118/squeezelite-esp32/releases";
-use constant GITHUB_ASSET_URI => GITHUB_RELEASES_URI . "/assets/";
-use constant GITHUB_DOWNLOAD_URI => "https://github.com/sle118/squeezelite-esp32/releases/download/";
-my $FW_DOWNLOAD_ID_REGEX = qr|plugins/SqueezeESP32/firmware/(-?\d+)|;
-my $FW_DOWNLOAD_REGEX = qr|plugins/SqueezeESP32/firmware/([-a-z0-9-/.]+\.bin)$|i;
-my $FW_FILENAME_REGEX = qr/^squeezelite-esp32-.*\.bin(\.tmp)?$/;
-my $FW_TAG_REGEX = qr/\/(ESP32-A1S|SqueezeAmp|I2S-4MFlash)\.(16|32)\.(\d+)\.(.*)\//;
-
-my $prefs = preferences('plugin.squeezeesp32');
-my $log = logger('plugin.squeezeesp32');
-
-sub init {
- Slim::Web::Pages->addRawFunction($FW_DOWNLOAD_ID_REGEX, \&handleFirmwareDownload);
- Slim::Web::Pages->addRawFunction($FW_DOWNLOAD_REGEX, \&handleFirmwareDownloadDirect);
-
- # start checking for firmware updates
- Slim::Utils::Timers::setTimer(undef, Time::HiRes::time() + 30 + rand(30), \&prefetchFirmware);
-}
-
-sub prefetchFirmware {
- Slim::Utils::Timers::killTimers(undef, \&prefetchFirmware);
- my $releaseInfo = $prefs->get('lastReleaseTagUsed');
-
- Slim::Networking::SimpleAsyncHTTP->new(
- sub {
- my $http = shift;
- my $content = eval { from_json( $http->content ) };
-
- if (!$content || !ref $content) {
- $@ && $log->error("Failed to parse response: $@");
- }
-
- my $regex = $releaseInfo->{model} . '\.' . $releaseInfo->{res} . '\.\d+\.' . $releaseInfo->{branch};
- my $url;
- foreach (@$content) {
- if ($_->{tag_name} =~ /$regex/ && $_->{assets} && ref $_->{assets}) {
- ($url) = grep /\.bin$/, map {
- $_->{browser_download_url}
- } @{$_->{assets}};
-
- last if $url;
- }
- }
-
- downloadFirmwareFile(sub {
- main::INFOLOG && $log->is_info && $log->info("Pre-cached firmware file: " . $_[0]);
- }, sub {
- my ($http, $error, $url, $code) = @_;
- $error ||= ($http && $http->error) || 'unknown error';
- $url ||= ($http && $http->url) || 'no URL';
-
- $log->error(sprintf("Failed to get firmware image from Github: %s (%s)", $error || $http->error, $url));
- }, $url) if $url && $url =~ /^https?/;
-
- },
- sub {
- my ($http, $error) = @_;
- $log->error("Failed to get releases from Github: $error");
- },
- {
- timeout => 10,
- cache => 1,
- expires => 3600
- }
- )->get(GITHUB_RELEASES_URI) if $releaseInfo;
-
- Slim::Utils::Timers::setTimer(undef, Time::HiRes::time() + FIRMWARE_POLL_INTERVAL, \&prefetchFirmware);
-}
-
-sub handleFirmwareDownload {
- my ($httpClient, $response) = @_;
-
- my $request = $response->request;
-
- my $_errorDownloading = sub {
- _errorDownloading($httpClient, $response, @_);
- };
-
- my $id;
- if (!defined $request || !(($id) = $request->uri =~ $FW_DOWNLOAD_ID_REGEX)) {
- return $_errorDownloading->(undef, 'Invalid request', $request->uri, 400);
- }
-
- # this is the magic number used on the client to figure out whether the plugin does support download proxying
- if ($id == -99) {
- $response->code(204);
- $response->header('Access-Control-Allow-Origin' => '*');
-
- $httpClient->send_response($response);
- return Slim::Web::HTTP::closeHTTPSocket($httpClient);
- }
-
- Slim::Networking::SimpleAsyncHTTP->new(
- sub {
- my $http = shift;
- my $content = eval { from_json( $http->content ) };
-
- if (!$content || !ref $content) {
- $@ && $log->error("Failed to parse response: $@");
- return $_errorDownloading->($http);
- }
- elsif (!$content->{browser_download_url} || !$content->{name}) {
- return $_errorDownloading->($http, 'No download URL found');
- }
-
- downloadFirmwareFile(sub {
- my $firmwareFile = shift;
- $response->code(200);
- Slim::Web::HTTP::sendStreamingFile($httpClient, $response, 'application/octet-stream', $firmwareFile, undef, 1);
- }, $_errorDownloading, $content->{browser_download_url}, $content->{name});
- },
- $_errorDownloading,
- {
- timeout => 10,
- cache => 1,
- expires => 86400
- }
- )->get(GITHUB_ASSET_URI . $id);
-
- return;
-}
-
-sub handleFirmwareDownloadDirect {
- my ($httpClient, $response) = @_;
-
- my $request = $response->request;
-
- my $_errorDownloading = sub {
- _errorDownloading($httpClient, $response, @_);
- };
-
- my $path;
- if (!defined $request || !(($path) = $request->uri =~ $FW_DOWNLOAD_REGEX)) {
- return $_errorDownloading->(undef, 'Invalid request', $request->uri, 400);
- }
-
- main::INFOLOG && $log->is_info && $log->info("Requesting firmware from: $path");
-
- downloadFirmwareFile(sub {
- my $firmwareFile = shift;
- $response->code(200);
- Slim::Web::HTTP::sendStreamingFile($httpClient, $response, 'application/octet-stream', $firmwareFile, undef, 1);
- }, $_errorDownloading, GITHUB_DOWNLOAD_URI . $path);
-}
-
-sub downloadFirmwareFile {
- my ($cb, $ecb, $url, $name) = @_;
-
- # keep track of the last firmware we requested, to prefetch it in the future
- _getFirmwareTag($url);
-
- $name ||= basename($url);
-
- if ($name !~ $FW_FILENAME_REGEX) {
- return $ecb->(undef, 'Unexpected firmware image name: ' . $name, $url, 400);
- }
-
- my $updatesDir = Slim::Utils::OSDetect::dirsFor('updates');
- my $firmwareFile = catfile($updatesDir, $name);
- Slim::Utils::Misc::deleteFiles($updatesDir, $FW_FILENAME_REGEX, $firmwareFile);
-
- if (-f $firmwareFile) {
- main::INFOLOG && $log->is_info && $log->info("Found cached firmware file");
- return $cb->($firmwareFile);
- }
-
- Slim::Networking::SimpleAsyncHTTP->new(
- sub {
- my $http = shift;
-
- if ($http->code != 200 || !-e "$firmwareFile.tmp") {
- return $ecb->($http, $http->mess);
- }
-
- rename "$firmwareFile.tmp", $firmwareFile or return $ecb->($http, "Unable to rename temporary $firmwareFile file" );
-
- return $cb->($firmwareFile);
- },
- $ecb,
- {
- saveAs => "$firmwareFile.tmp",
- }
- )->get($url);
-
- return;
-}
-
-sub _getFirmwareTag {
- my ($url) = @_;
-
- if (my ($model, $resolution, $version, $branch) = $url =~ $FW_TAG_REGEX) {
- my $releaseInfo = {
- model => $model,
- res => $resolution,
- version => $version,
- branch => $branch
- };
-
- $prefs->set('lastReleaseTagUsed', $releaseInfo);
-
- return $releaseInfo;
- }
-}
-
-sub _errorDownloading {
- my ($httpClient, $response, $http, $error, $url, $code) = @_;
-
- $error ||= ($http && $http->error) || 'unknown error';
- $url ||= ($http && $http->url) || 'no URL';
- $code ||= ($http && $http->code) || 500;
-
- $log->error(sprintf("Failed to get data from Github: %s (%s)", $error || $http->error, $url));
-
- $response->headers->remove_content_headers;
- $response->code($code);
- $response->content_type('text/plain');
- $response->header('Connection' => 'close');
- $response->content('');
-
- $httpClient->send_response($response);
- Slim::Web::HTTP::closeHTTPSocket($httpClient);
-};
-
-
-1;
\ No newline at end of file
diff --git a/plugin/SqueezeESP32/Graphics.pm b/plugin/SqueezeESP32/Graphics.pm
deleted file mode 100644
index ce82b9fe..00000000
--- a/plugin/SqueezeESP32/Graphics.pm
+++ /dev/null
@@ -1,254 +0,0 @@
-package Plugins::SqueezeESP32::Graphics;
-
-use strict;
-
-use base qw(Slim::Display::Squeezebox2);
-
-use Slim::Utils::Prefs;
-use Slim::Utils::Log;
-
-my $prefs = preferences('plugin.squeezeesp32');
-my $log = logger('plugin.squeezeesp32');
-
-my $VISUALIZER_NONE = 0;
-my $VISUALIZER_VUMETER = 1;
-my $VISUALIZER_SPECTRUM_ANALYZER = 2;
-my $VISUALIZER_WAVEFORM = 3;
-my $VISUALIZER_VUMETER_ESP32 = 0x11;
-my $VISUALIZER_SPECTRUM_ANALYZER_ESP32 = 0x12;
-
-my %SPECTRUM_DEFAULTS = (
- scale => 25,
- small => {
- size => 25,
- band => 5.33
- },
- full => {
- band => 8
- },
-);
-
-{
- #__PACKAGE__->mk_accessor('array', 'modes');
- __PACKAGE__->mk_accessor('rw', 'modes');
- __PACKAGE__->mk_accessor('rw', qw(vfdmodel));
-}
-
-sub new {
- my $class = shift;
- my $client = shift;
-
- my $display = $class->SUPER::new($client);
- my $cprefs = $prefs->client($client);
-
- $cprefs->init( {
- width => 128,
- small_VU => 15,
- spectrum => \%SPECTRUM_DEFAULTS,
- } );
-
- $prefs->migrateClient(2, sub {
- my ($cprefs, $client) = @_;
- sanitizeSpectrum($cprefs->get('spectrum'));
- 1;
- });
-
- $display->init_accessor(
- modes => $display->build_modes,
- # Only seems to matter for screensaver and update to decide font. Not
- # any value is acceptable, so use Boom value which seems to be best
- # compromise
- vfdmodel => 'graphic-160x32',
- );
-
- return $display;
-}
-
-=comment
-sub modes {
- return \@modes;
-}
-=cut
-
-sub nmodes {
- return scalar($#{shift->modes()});
-}
-
-sub displayWidth {
- my $display = shift;
- my $client = $display->client;
-
- # if we're showing the always-on visualizer & the current buttonmode
- # hasn't overridden, then use the playing display mode to index
- # into the display width, otherwise, it's fullscreen.
- my $mode = 0;
-
- if ( $display->showVisualizer() && !defined($client->modeParam('visu')) ) {
- my $cprefs = preferences('server')->client($client);
- $mode = $cprefs->get('playingDisplayModes')->[ $cprefs->get('playingDisplayMode') ];
- }
-
- if ($display->widthOverride) {
- my $artwork = $prefs->client($client)->get('artwork');
- if ($artwork->{'enable'} && $artwork->{'y'} < 32 && ($client->isPlaying || $client->isPaused)) {
- return ($artwork->{x} || $display->widthOverride) + ($display->modes->[$mode || 0]{_width} || 0);
- } else {
- return $display->widthOverride + ($display->modes->[$mode || 0]{_width} || 0);
- }
- } else {
- return $display->modes->[$mode || 0]{width};
- }
-}
-
-sub brightnessMap {
- return (0 .. 5);
-}
-
-=comment
-sub bytesPerColumn {
- return 4;
-}
-=cut
-
-# I don't think LMS renderer handles properly screens other than 32 pixels. It
-# seems that all we get is a 32 pixel-tall data with anything else padded to 0
-# i.e. if we try 64 pixels height, bytes 0..3 and 4..7 will contains the same
-# pattern than the 32 pixels version, where one would have expected bytes 4..7
-# to be empty
-sub displayHeight {
- return 32;
-}
-
-sub sanitizeSpectrum {
- my ($spectrum) = shift;
-
- $spectrum->{small}->{size} ||= $SPECTRUM_DEFAULTS{small}->{size};
- $spectrum->{small}->{band} ||= $SPECTRUM_DEFAULTS{small}->{band};
- $spectrum->{full}->{band} ||= $SPECTRUM_DEFAULTS{full}->{band};
-
- return $spectrum;
-}
-
-sub build_modes {
- my $client = shift->client;
- my $cprefs = $prefs->client($client);
-
- my $artwork = $cprefs->get('artwork');
- my $disp_width = $cprefs->get('width') || 128;
-
- # if artwork is in main display, reduce width but when artwork is (0,0) fake it
- my $width = ($artwork->{'enable'} && $artwork->{'y'} < 32 && $artwork->{'x'}) ? $artwork->{'x'} : $disp_width;
- my $width_low = ($artwork->{'enable'} && $artwork->{'x'} && ($artwork->{'y'} >= 32 || $disp_width - $artwork->{'x'} > 32)) ? $artwork->{'x'} : $disp_width;
-
- my $small_VU = $cprefs->get('small_VU');
- my $spectrum = sanitizeSpectrum($cprefs->get('spectrum'));
-
- my $small_spectrum_pos = { x => $width - int ($spectrum->{small}->{size} * $width / 100),
- width => int ($spectrum->{small}->{size} * $width / 100),
- };
- my $small_VU_pos = { x => $width - int ($small_VU * $width / 100),
- width => int ($small_VU * $width / 100),
- };
-
- my @modes = (
- # mode 0
- { desc => ['BLANK'],
- bar => 0, secs => 0, width => $width,
- params => [$VISUALIZER_NONE] },
- # mode 1
- { desc => ['PROGRESS_BAR'],
- bar => 1, secs => 0, width => $width,
- params => [$VISUALIZER_NONE] },
- # mode 2
- { desc => ['ELAPSED'],
- bar => 0, secs => 1, width => $width,
- params => [$VISUALIZER_NONE] },
- # mode 3
- { desc => ['ELAPSED', 'AND', 'PROGRESS_BAR'],
- bar => 1, secs => 1, width => $width,
- params => [$VISUALIZER_NONE] },
- # mode 4
- { desc => ['REMAINING'],
- bar => 0, secs => -1, width => $width,
- params => [$VISUALIZER_NONE] },
- # mode 5
- { desc => ['CLOCK'],
- bar => 0, secs => 0, width => $width, clock => 1,
- params => [$VISUALIZER_NONE] },
- # mode 6
- { desc => ['SETUP_SHOWBUFFERFULLNESS'],
- bar => 0, secs => 0, width => $width, fullness => 1,
- params => [$VISUALIZER_NONE] },
- # mode 7
- { desc => ['VISUALIZER_VUMETER_SMALL'],
- bar => 0, secs => 0, width => $width, _width => -$small_VU_pos->{'width'},
- # extra parameters (width, height, col (< 0 = from right), row (< 0 = from bottom), left_space)
- params => [$VISUALIZER_VUMETER_ESP32, $small_VU_pos->{'width'}, 32, $small_VU_pos->{'x'}, 0, 2] },
- # mode 8
- { desc => ['VISUALIZER_SPECTRUM_ANALYZER_SMALL'],
- bar => 0, secs => 0, width => $width, _width => -$small_spectrum_pos->{'width'},
- # extra parameters (width, height, col (< 0 = from right), row (< 0 = from bottom), left_space, #bars, scale)
- params => [$VISUALIZER_SPECTRUM_ANALYZER_ESP32, $small_spectrum_pos->{width}, 32, $small_spectrum_pos->{'x'}, 0, 2, $small_spectrum_pos->{'width'} / $spectrum->{small}->{band}, $spectrum->{scale}] },
- # mode 9
- { desc => ['VISUALIZER_VUMETER'],
- bar => 0, secs => 0, width => $width,
- params => [$VISUALIZER_VUMETER_ESP32, $width_low, 0] },
- # mode 10
- { desc => ['VISUALIZER_ANALOG_VUMETER'],
- bar => 0, secs => 0, width => $width,
- params => [$VISUALIZER_VUMETER_ESP32, $width_low, 1] },
- # mode 11
- { desc => ['VISUALIZER_SPECTRUM_ANALYZER'],
- bar => 0, secs => 0, width => $width,
- # extra parameters (bars)
- params => [$VISUALIZER_SPECTRUM_ANALYZER_ESP32, $width_low, int ($width/$spectrum->{full}->{band}), $spectrum->{scale}] },
- );
-
-my @extra = (
- # mode E1
- { desc => ['VISUALIZER_VUMETER', 'AND', 'ELAPSED'],
- bar => 0, secs => 1, width => $width,
- params => [$VISUALIZER_VUMETER_ESP32, $width_low, 0] },
- # mode E2
- { desc => ['VISUALIZER_ANALOG_VUMETER', 'AND', 'ELAPSED'],
- bar => 0, secs => 1, width => $width,
- params => [$VISUALIZER_VUMETER_ESP32, $width_low, 1] },
- # mode E3
- { desc => ['VISUALIZER_SPECTRUM_ANALYZER', 'AND', 'ELAPSED'],
- bar => 0, secs => 1, width => $width,
- # extra parameters (bars)
- params => [$VISUALIZER_SPECTRUM_ANALYZER_ESP32, $width_low, int ($width/$spectrum->{full}->{band}), $spectrum->{scale}] },
- # mode E4
- { desc => ['VISUALIZER_VUMETER', 'AND', 'REMAINING'],
- bar => 0, secs => -1, width => $width,
- params => [$VISUALIZER_VUMETER_ESP32, $width_low, 0] },
- # mode E5
- { desc => ['VISUALIZER_ANALOG_VUMETER', 'AND', 'REMAINING'],
- bar => 0, secs => -1, width => $width,
- params => [$VISUALIZER_VUMETER_ESP32, $width_low, 1] },
- # mode E6
- { desc => ['VISUALIZER_SPECTRUM_ANALYZER', 'AND', 'REMAINING'],
- bar => 0, secs => -1, width => $width,
- # extra parameters (bars)
- params => [$VISUALIZER_SPECTRUM_ANALYZER_ESP32, $width_low, int ($width/$spectrum->{full}->{band}), $spectrum->{scale}] },
- # mode E7
- { desc => ['VISUALIZER_VUMETER', 'AND', 'PROGRESS_BAR', 'AND', 'REMAINING'],
- bar => 1, secs => -1, width => $width,
- params => [$VISUALIZER_VUMETER_ESP32, $width_low, 0] },
- # mode E8
- { desc => ['VISUALIZER_ANALOG_VUMETER', 'AND', 'PROGRESS_BAR', 'AND', 'REMAINING'],
- bar => 1, secs => -1, width => $width,
- params => [$VISUALIZER_VUMETER_ESP32, $width_low, 1] },
- # mode E9
- { desc => ['VISUALIZER_SPECTRUM_ANALYZER', 'AND', 'PROGRESS_BAR', 'AND', 'REMAINING'],
- bar => 1, secs => -1, width => $width,
- # extra parameters (bars)
- params => [$VISUALIZER_SPECTRUM_ANALYZER_ESP32, $width_low, int ($width/$spectrum->{full}->{band}), $spectrum->{scale}] },
- );
-
- @modes = (@modes, @extra) if $cprefs->get('height') > 32;
-
- return \@modes;
-}
-
-1;
\ No newline at end of file
diff --git a/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html b/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html
deleted file mode 100644
index fd07f991..00000000
--- a/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html
+++ /dev/null
@@ -1,106 +0,0 @@
-[% PROCESS settings/header.html %]
-
- [% IF prefs.pref_width %]
- [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_WIDTH" desc="PLUGIN_SQUEEZEESP32_WIDTH_DESC" %]
-
-
- [% prefs.pref_width %]
- [% END %]
-
- [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_SMALL_VU" desc="PLUGIN_SQUEEZEESP32_SMALL_VU_DESC" %]
-
- [% END %]
-
- [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_SPECTRUM_SCALE" desc="PLUGIN_SQUEEZEESP32_SPECTRUM_SCALE_DESC" %]
-
- [% END %]
-
- [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM" desc="PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM_DESC" %]
- [% "PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM_SIZE" | string %] 
-
- [% "PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM_BAND" | string %] 
-
- [% END %]
-
- [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_FULL_SPECTRUM_BAND" desc="PLUGIN_SQUEEZEESP32_FULL_SPECTRUM_BAND_DESC" %]
-
- [% END %]
-
- [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_ARTWORK" desc="PLUGIN_SQUEEZEESP32_ARTWORK_DESC" %]
- [% "PLUGIN_SQUEEZEESP32_ARTWORK_ENABLE" | string %] 
-
- [% "PLUGIN_SQUEEZEESP32_ARTWORK_X" | string %] 
-
- [% "PLUGIN_SQUEEZEESP32_ARTWORK_Y" | string %] 
-
- [% END %]
-
-
- [% END %]
-
- [% IF pref_equalizer %]
- [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_EQUALIZER" desc="" %]
- [% "PLUGIN_SQUEEZEESP32_EQUALIZER_SAVE" | string %]
- [% END %]
-
-
- [% WRAPPER settingSection %]
- [% WRAPPER settingGroup title='31Hz' desc="" %]
-
- [% END %]
- [% WRAPPER settingGroup title='62Hz' desc="" %]
-
- [% END %]
- [% WRAPPER settingGroup title='125Hz' desc="" %]
-
- [% END %]
- [% WRAPPER settingGroup title='250Hz' desc="" %]
-
- [% END %]
- [% WRAPPER settingGroup title='500Hz' desc="" %]
-
- [% END %]
- [% WRAPPER settingGroup title='1kHz' desc="" %]
-
- [% END %]
- [% WRAPPER settingGroup title='2kHz' desc="" %]
-
- [% END %]
- [% WRAPPER settingGroup title='4kHz' desc="" %]
-
- [% END %]
- [% WRAPPER settingGroup title='8kHz' desc="" %]
-
- [% END %]
- [% WRAPPER settingGroup title='16kHz' desc="" %]
-
- [% END %]
- [% END %]
- [% END %]
-
-[% PROCESS settings/footer.html %]
diff --git a/plugin/SqueezeESP32/Player.pm b/plugin/SqueezeESP32/Player.pm
deleted file mode 100644
index d82b3b5c..00000000
--- a/plugin/SqueezeESP32/Player.pm
+++ /dev/null
@@ -1,351 +0,0 @@
-package Plugins::SqueezeESP32::Player;
-
-use strict;
-use base qw(Slim::Player::SqueezePlay);
-
-use Digest::MD5 qw(md5);
-use List::Util qw(min);
-
-use Slim::Utils::Log;
-use Slim::Utils::Prefs;
-
-my $sprefs = preferences('server');
-my $prefs = preferences('plugin.squeezeesp32');
-my $log = logger('plugin.squeezeesp32');
-
-{
- __PACKAGE__->mk_accessor('rw', qw(tone_update depth));
-}
-
-sub new {
- my $class = shift;
- my $client = $class->SUPER::new(@_);
- $client->init_accessor(
- tone_update => 0,
- );
- return $client;
-}
-
-our $defaultPrefs = {
- 'analogOutMode' => 0,
- 'bass' => 0,
- 'treble' => 0,
- 'lineInAlwaysOn' => 0,
- 'lineInLevel' => 50,
- 'menuItem' => [qw(
- NOW_PLAYING
- BROWSE_MUSIC
- RADIO
- PLUGIN_MY_APPS_MODULE_NAME
- PLUGIN_APP_GALLERY_MODULE_NAME
- FAVORITES
- GLOBAL_SEARCH
- PLUGIN_LINE_IN
- PLUGINS
- SETTINGS
- SQUEEZENETWORK_CONNECT
- )],
-};
-
-my $handlersAdded;
-
-sub model { 'squeezeesp32' }
-sub modelName { 'SqueezeESP32' }
-
-sub hasScrolling { 1 }
-sub hasIR { 1 }
-# TODO: add in settings when ready
-sub hasLineIn { 0 }
-sub hasHeadSubOut { 1 }
-sub maxTreble { 20 }
-sub minTreble { -13 }
-sub maxBass { 20 }
-sub minBass { -13 }
-
-sub init {
- my $client = shift;
- my ($id, $caps) = @_;
-
- my ($depth) = $caps =~ /Depth=(\d+)/;
- $client->depth($depth || 16);
-
- if (!$handlersAdded) {
-
- # Add a handler for line-in/out status changes
- Slim::Networking::Slimproto::addHandler( LIOS => \&lineInOutStatus );
-
- # Create a new event for sending LIOS updates
- Slim::Control::Request::addDispatch(
- ['lios', '_state'],
- [1, 0, 0, undef],
- );
-
- Slim::Control::Request::addDispatch(
- ['lios', 'linein', '_state'],
- [1, 0, 0, undef],
- );
-
- Slim::Control::Request::addDispatch(
- ['lios', 'lineout', '_state'],
- [1, 0, 0, undef],
- );
-
- $handlersAdded = 1;
-
- }
-
- $client->SUPER::init(@_);
- main::INFOLOG && $log->is_info && $log->info("SqueezeESP player connected: " . $client->id);
-}
-
-sub initPrefs {
- my $client = shift;
-
- $sprefs->client($client)->init($defaultPrefs);
-
- $prefs->client($client)->init( {
- equalizer => [(0) x 10],
- artwork => undef,
- } );
-
- $client->SUPER::initPrefs;
-}
-
-sub power {
- my $client = shift;
- my $on = shift;
-
- my $res = $client->SUPER::power($on, @_);
- return $res unless defined $on;
-
- if ($on) {
- $client->update_artwork(1);
- } else {
- $client->clear_artwork(1);
- }
-
- return $res;
-}
-
-# Allow the player to define it's display width (and probably more)
-sub playerSettingsFrame {
- my $client = shift;
- my $data_ref = shift;
-
- my $value;
- my $id = unpack('C', $$data_ref);
-
- # New SETD command 0xfe for display width & height
- if ($id == 0xfe) {
- $value = (unpack('Cn', $$data_ref))[1];
- if ($value > 100 && $value < 400) {
- $prefs->client($client)->set('width', $value);
-
- my $height = (unpack('Cnn', $$data_ref))[2];
- $prefs->client($client)->set('height', $height || 0);
-
- $client->display->modes($client->display->build_modes);
- $client->display->widthOverride(1, $value);
- $client->update;
-
- main::INFOLOG && $log->is_info && $log->info("Setting player $value" . "x" . "$height for ", $client->name);
- }
- }
-
- $client->SUPER::playerSettingsFrame($data_ref);
-}
-
-sub bass {
- my ($client, $new) = @_;
- my $value = $client->SUPER::bass($new);
-
- $client->update_equalizer($value, [2, 1, 3]) if defined $new;
-
- return $value;
-}
-
-sub treble {
- my ($client, $new) = @_;
- my $value = $client->SUPER::treble($new);
-
- $client->update_equalizer($value, [8, 9, 7]) if defined $new;
-
- return $value;
-}
-
-sub send_equalizer {
- my ($client, $equalizer) = @_;
-
- $equalizer ||= $prefs->client($client)->get('equalizer') || [(0) x 10];
- my $size = @$equalizer;
- my $data = pack("c[$size]", @{$equalizer});
- $client->sendFrame( eqlz => \$data );
-}
-
-sub update_equalizer {
- my ($client, $value, $index) = @_;
- return if $client->tone_update;
-
- my $equalizer = $prefs->client($client)->get('equalizer');
- $equalizer->[$index->[0]] = $value;
- $equalizer->[$index->[1]] = int($value / 2 + 0.5);
- $equalizer->[$index->[2]] = int($value / 4 + 0.5);
- $prefs->client($client)->set('equalizer', $equalizer);
-}
-
-sub update_tones {
- my ($client, $equalizer) = @_;
-
- $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('treble', int(($equalizer->[7] * 4 + $equalizer->[8] + $equalizer->[9] * 2) / 7 + 0.5));
- $client->tone_update(0);
-}
-
-sub update_artwork {
- my $client = shift;
- my $cprefs = $prefs->client($client);
-
- my $artwork = $cprefs->get('artwork') || return;
- return unless $artwork->{'enable'};
-
- my $header = pack('Nnn', $artwork->{'enable'}, $artwork->{'x'}, $artwork->{'y'});
- $client->sendFrame( grfa => \$header );
- $client->display->update;
-
- my $s = min($cprefs->get('height') - $artwork->{'y'}, $cprefs->get('width') - $artwork->{'x'});
- my $params = { force => shift || 0 };
- my $path = 'music/current/cover_' . $s . 'x' . $s . '_o.jpg';
- my $body = Slim::Web::Graphics::artworkRequest($client, $path, $params, \&send_artwork, undef, HTTP::Response->new);
-
- send_artwork($client, undef, \$body) if $body;
-}
-
-sub send_artwork {
- my ($client, $params, $dataref) = @_;
-
- # I'm not sure why we are called so often, so only send when needed
- my $md5 = md5($$dataref);
- return if $client->pluginData('artwork_md5') eq $md5 && !$params->{'force'};
-
- $client->pluginData('artwork', $dataref);
- $client->pluginData('artwork_md5', $md5);
-
- my $artwork = $prefs->client($client)->get('artwork') || {};
- my $length = length $$dataref;
- my $offset = 0;
-
- $log->info("got resized artwork (length: ", length $$dataref, ")");
-
- my $header = pack('Nnn', $length, $artwork->{'x'}, $artwork->{'y'});
-
- while ($length > 0) {
- $length = 1280 if $length > 1280;
- $log->info("sending grfa $length");
-
- my $data = $header . pack('N', $offset) . substr( $$dataref, 0, $length, '' );
-
- $client->sendFrame( grfa => \$data );
- $offset += $length;
- $length = length $$dataref;
- }
-}
-
-sub clear_artwork {
- my ($client, $force, $from) = @_;
-
- my $artwork = $prefs->client($client)->get('artwork');
-
- if ($artwork && $artwork->{'enable'}) {
- main::INFOLOG && $log->is_info && $log->info("artwork stop/clear " . ($from || ""));
- $client->pluginData('artwork_md5', '');
- # refresh screen and disable artwork when artwork was full screen (hack)
- if ((!$artwork->{'x'} && !$artwork->{'y'}) || $force) {
- $client->sendFrame(grfa => \("\x00"x4));
- $client->display->update;
- }
- }
-}
-
-sub config_artwork {
- my ($client) = @_;
-
- if ( my $artwork = $prefs->client($client)->get('artwork') ) {
- my $header = pack('Nnn', $artwork->{'enable'}, $artwork->{'x'}, $artwork->{'y'});
- $client->sendFrame( grfa => \$header );
- $client->display->update;
- }
-}
-
-sub reconnect {
- my $client = shift;
- $client->SUPER::reconnect(@_);
-
- $client->pluginData('artwork_md5', '');
- $client->config_artwork;
- $client->send_equalizer;
-}
-
-# Change the analog output mode between headphone and sub-woofer
-# If no mode is specified, the value of the client's analogOutMode preference is used.
-# Otherwise the mode is temporarily changed to the given value without altering the preference.
-sub setAnalogOutMode {
- my $client = shift;
- # 0 = headphone (internal speakers off), 1 = sub out,
- # 2 = always on (internal speakers on), 3 = always off
- my $mode = shift;
-
- if (! defined $mode) {
- $mode = $sprefs->client($client)->get('analogOutMode');
- }
-
- my $data = pack('C', $mode);
- $client->sendFrame('audo', \$data);
-}
-
-# LINE_IN 0x01
-# LINE_OUT 0x02
-# HEADPHONE 0x04
-
-sub lineInConnected {
- my $state = Slim::Networking::Slimproto::voltage(shift) || return 0;
- return $state & 0x01 || 0;
-}
-
-sub lineOutConnected {
- my $state = Slim::Networking::Slimproto::voltage(shift) || return 0;
- return $state & 0x02 || 0;
-}
-
-sub lineInOutStatus {
- my ( $client, $data_ref ) = @_;
-
- my $state = unpack 'n', $$data_ref;
-
- my $oldState = {
- in => $client->lineInConnected(),
- out => $client->lineOutConnected(),
- };
-
- Slim::Networking::Slimproto::voltage( $client, $state );
-
- Slim::Control::Request::notifyFromArray( $client, [ 'lios', $state ] );
-
- if ($oldState->{in} != $client->lineInConnected()) {
- Slim::Control::Request::notifyFromArray( $client, [ 'lios', 'linein', $client->lineInConnected() ] );
- if ( Slim::Utils::PluginManager->isEnabled('Slim::Plugin::LineIn::Plugin')) {
- Slim::Plugin::LineIn::Plugin::lineInItem($client, 1);
- }
- }
-
- if ($oldState->{out} != $client->lineOutConnected()) {
- Slim::Control::Request::notifyFromArray( $client, [ 'lios', 'lineout', $client->lineOutConnected() ] );
- }
-}
-
-sub voltage {
- my $voltage = Slim::Networking::Slimproto::voltage(shift) || return 0;
- return sprintf("%.2f", ($voltage >> 4) / 128);
-}
-
-1;
diff --git a/plugin/SqueezeESP32/PlayerSettings.pm b/plugin/SqueezeESP32/PlayerSettings.pm
deleted file mode 100644
index e1619200..00000000
--- a/plugin/SqueezeESP32/PlayerSettings.pm
+++ /dev/null
@@ -1,101 +0,0 @@
-package Plugins::SqueezeESP32::PlayerSettings;
-
-use strict;
-use base qw(Slim::Web::Settings);
-use List::Util qw(first);
-
-use Slim::Utils::Log;
-use Slim::Utils::Prefs;
-
-my $sprefs = preferences('server');
-my $prefs = preferences('plugin.squeezeesp32');
-my $log = logger('plugin.squeezeesp32');
-
-sub name {
- return Slim::Web::HTTP::CSRF->protectName('PLUGIN_SQUEEZEESP32_PLAYERSETTINGS');
-}
-
-sub needsClient {
- return 1;
-}
-
-sub validFor {
- my ($class, $client) = @_;
- return $client->model eq 'squeezeesp32';
-}
-
-sub page {
- return Slim::Web::HTTP::CSRF->protectURI('plugins/SqueezeESP32/settings/player.html');
-}
-
-sub prefs {
- my ($class, $client) = @_;
- my @prefs;
- push @prefs, qw(width small_VU) if $client->displayWidth;
- return ($prefs->client($client), @prefs);
-}
-
-sub handler {
- my ($class, $client, $paramRef) = @_;
-
- my ($cprefs, @prefs) = $class->prefs($client);
-
- if ($paramRef->{'saveSettings'}) {
- if ($client->displayWidth) {
- $cprefs->set('small_VU', $paramRef->{'pref_small_VU'} || 15);
-
- require Plugins::SqueezeESP32::Graphics;
- my $spectrum = Plugins::SqueezeESP32::Graphics::sanitizeSpectrum({
- scale => $paramRef->{'pref_spectrum_scale'},
- small => {
- size => $paramRef->{'pref_spectrum_small_size'},
- band => $paramRef->{'pref_spectrum_small_band'}
- },
- full => {
- band => $paramRef->{'pref_spectrum_full_band'}
- },
- });
- $cprefs->set('spectrum', $spectrum);
-
- my $artwork = {
- enable => $paramRef->{'pref_artwork_enable'} eq 'on',
- x => $paramRef->{'pref_artwork_x'} || 0,
- y => $paramRef->{'pref_artwork_y'} || 0,
- };
-
- $cprefs->set('artwork', $artwork);
- $client->display->modes($client->display->build_modes);
- # the display update will be done below, after all is completed
-
- # force update or disable artwork
- if ($artwork->{'enable'}) {
- $client->update_artwork(1);
- } else {
- $client->config_artwork();
- }
-
- }
-
- if ($client->depth == 16) {
- my $equalizer = $cprefs->get('equalizer');
- for my $i (0 .. $#{$equalizer}) {
- $equalizer->[$i] = $paramRef->{"pref_equalizer.$i"} || 0;
- }
- $cprefs->set('equalizer', $equalizer);
- $client->update_tones($equalizer);
- }
- }
-
- if ($client->displayWidth) {
- # the Settings super class can't handle anything but scalar values
- # we need to populate the $paramRef for the other prefs manually
- $paramRef->{'pref_spectrum'} = $cprefs->get('spectrum');
- $paramRef->{'pref_artwork'} = $cprefs->get('artwork');
- }
-
- $paramRef->{'pref_equalizer'} = $cprefs->get('equalizer') if $client->depth == 16;
-
- return $class->SUPER::handler($client, $paramRef);
-}
-
-1;
\ No newline at end of file
diff --git a/plugin/SqueezeESP32/Plugin.pm b/plugin/SqueezeESP32/Plugin.pm
deleted file mode 100644
index 6614c179..00000000
--- a/plugin/SqueezeESP32/Plugin.pm
+++ /dev/null
@@ -1,106 +0,0 @@
-package Plugins::SqueezeESP32::Plugin;
-
-use strict;
-
-use base qw(Slim::Plugin::Base);
-
-use Slim::Utils::Prefs;
-use Slim::Utils::Log;
-use Slim::Web::ImageProxy;
-
-use Plugins::SqueezeESP32::FirmwareHelper;
-
-my $prefs = preferences('plugin.squeezeesp32');
-
-my $log = Slim::Utils::Log->addLogCategory({
- 'category' => 'plugin.squeezeesp32',
- 'defaultLevel' => 'INFO',
- 'description' => 'PLUGIN_SQUEEZEESP32',
-});
-
-# migrate 'eq' pref, as that's a reserved word and could cause problems in the future
-$prefs->migrateClient(1, sub {
- my ($cprefs, $client) = @_;
- $cprefs->set('equalizer', $cprefs->get('eq'));
- $cprefs->remove('eq');
- 1;
-});
-
-$prefs->migrateClient(2, sub {
- my ($cprefs, $client) = @_;
- $cprefs->set('artwork', undef) if $cprefs->get('artwork') && ref $cprefs->get('artwork') ne 'HASH';
- 1;
-});
-
-$prefs->setChange(sub {
- $_[2]->send_equalizer;
-}, 'equalizer');
-
-sub initPlugin {
- my $class = shift;
-
- if ( main::WEBUI ) {
- require Plugins::SqueezeESP32::PlayerSettings;
- Plugins::SqueezeESP32::PlayerSettings->new;
-
- # require Plugins::SqueezeESP32::Settings;
- # Plugins::SqueezeESP32::Settings->new;
- }
-
- $class->SUPER::initPlugin(@_);
- # no name can be a subset of others due to a bug in addPlayerClass
- Slim::Networking::Slimproto::addPlayerClass($class, 100, 'squeezeesp32-basic', { client => 'Plugins::SqueezeESP32::Player', display => 'Plugins::SqueezeESP32::Graphics' });
- Slim::Networking::Slimproto::addPlayerClass($class, 101, 'squeezeesp32-graphic', { client => 'Plugins::SqueezeESP32::Player', display => 'Slim::Display::NoDisplay' });
- main::INFOLOG && $log->is_info && $log->info("Added class 100 and 101 for SqueezeESP32");
-
- # register a command to set the EQ - without saving the values! Send params as single comma separated list of values
- Slim::Control::Request::addDispatch(['squeezeesp32', 'seteq', '_eq'], [1, 0, 0, \&setEQ]);
-
- # Note for some forgetful know-it-all: we need to wrap the callback to make it unique. Otherwise subscriptions would overwrite each other.
- Slim::Control::Request::subscribe( sub { onNotification(@_) }, [ ['newmetadata'] ] );
- Slim::Control::Request::subscribe( sub { onNotification(@_) }, [ ['playlist'], ['open', 'newsong'] ]);
- Slim::Control::Request::subscribe( \&onStopClear, [ ['playlist'], ['stop', 'clear'] ]);
-
- Plugins::SqueezeESP32::FirmwareHelper->init();
-}
-
-sub onStopClear {
- my $request = shift;
- my $client = $request->client || return;
-
- if ($client->isa('Plugins::SqueezeESP32::Player')) {
- $client->clear_artwork(0, $request->getRequestString());
- }
-}
-
-sub onNotification {
- my $request = shift;
- my $client = $request->client || return;
-
- foreach my $player ($client->syncGroupActiveMembers) {
- next unless $player->isa('Plugins::SqueezeESP32::Player');
- $player->update_artwork;
- }
-}
-
-sub setEQ {
- my $request = shift;
-
- # check this is the correct command.
- if ($request->isNotCommand([['squeezeesp32'],['seteq']])) {
- $request->setStatusBadDispatch();
- return;
- }
-
- # get our parameters
- my $client = $request->client();
- my @eqParams = split(/,/, $request->getParam('_eq') || '');
-
- for (my $x = 0; $x < 10; $x++) {
- $eqParams[$x] ||= 0;
- }
-
- $client->send_equalizer(\@eqParams);
-}
-
-1;
diff --git a/plugin/SqueezeESP32/Text.pm b/plugin/SqueezeESP32/Text.pm
deleted file mode 100644
index 3048c312..00000000
--- a/plugin/SqueezeESP32/Text.pm
+++ /dev/null
@@ -1,12 +0,0 @@
-package Plugins::SqueezeESP32::Text;
-
-use strict;
-
-use base qw(Slim::Display::Text);
-
-# we don't want the special Noritake codes
-sub vfdmodel {
- return 'squeezeslave';
-}
-
-1;
\ No newline at end of file
diff --git a/plugin/SqueezeESP32/install.xml b/plugin/SqueezeESP32/install.xml
deleted file mode 100644
index 44753dce..00000000
--- a/plugin/SqueezeESP32/install.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
- enabled
- philippe_44@outlook.com
-
- 7.9
- *
- SlimServer
-
- PLUGIN_SQUEEZEESP32
- PLUGIN_SQUEEZEESP32_DESC
- Plugins::SqueezeESP32::Plugin
- 0.310
- Philippe
-
diff --git a/plugin/SqueezeESP32/strings.txt b/plugin/SqueezeESP32/strings.txt
deleted file mode 100644
index 965e67de..00000000
--- a/plugin/SqueezeESP32/strings.txt
+++ /dev/null
@@ -1,104 +0,0 @@
-WELCOME_TO_SQUEEZEESP32
- DE Willkommen bei SqueezeESP32!
- EN Welcome to SqueezeESP32
-
-PLUGIN_SQUEEZEESP32
- EN SqueezeESP32
-
-PLUGIN_SQUEEZEESP32_BANNER
- DE WARNUNG
- EN WARNING
-
-PLUGIN_SQUEEZEESP32_BANNER_TEXT
- DE Sie müssen LMS neu starten, damit diese Einstellungen aktiv werden
- EN You need to restart LMS for these parameters to be taken into account
-
-PLUGIN_SQUEEZEESP32_DESC
- DE Konfiguriert eine neue Player ID (100), um Displays an SqueezeESP32 zu unterstützen
- EN Adds a new player id (100) to enable display with SqueezeESP32
-
-PLUGIN_SQUEEZEESP32_PLAYERSETTINGS
- DE ESP32 Einstellungen
- EN ESP32 settings
-
-PLUGIN_SQUEEZEESP32_WIDTH
- DE Displaybreite
- EN Screen width
-
-PLUGIN_SQUEEZEESP32_WIDTH_DESC
- DE Breite des Displays in Pixeln, wie es vom Player angegeben wird
- EN Width of the display in pixel as reported by the player
-
-PLUGIN_SQUEEZEESP32_SMALL_VU
- DE Kleine VU Grösse
- EN Small VU size
-
-PLUGIN_SQUEEZEESP32_SMALL_VU_DESC
- DE Prozentsatz des Displays, das für den kleinen VU verwendet wird (rechts ausgerichtet)
- EN % of the display used for small VU (right-justified)
-
-PLUGIN_SQUEEZEESP32_SPECTRUM_SCALE
- DE Spektrum-Skalierung
- EN Spectrum scaling
-
-PLUGIN_SQUEEZEESP32_SPECTRUM_SCALE_DESC
- DE Prozentsatz des Spektrums, das in der ersten Hälfte des Bildschirms angezeigt wird. Z.B. 50 bedeutet 50% des Spektrums wird auf dem halben Bildschirm angezeigt.
- DE Aber 25 bedeutet, dass nur 25% des Spektrums auf dem halben Bildschirm angezeigt wird.
- EN % of Spectrum displayed in first half of the screen. For example, 50 means that 50% of spectrum is displayed in 1/2 of the screen
- EN But 25 means that only 25% of spectrum is displayed in 1/2 of the screen, so it's a sort of log
-
-PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM
- DE Kleines Spektrum
- EN Small spectrum options
-
-PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM_DESC
- DE Grösse: Prozentsatz des Displays, das für das kleine Spektrum verwendet wird.
- DE
Band-Faktor: die Anzahl Bänder ist die Breite der Spektrumsanzeige dividiert durch diesen Faktor.
- EN Size: % of the screen used by small spectrum
- EN
Band factor: number of bands is the width of the spectrum screen divided by this factor
-
-PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM_SIZE
- DE Grösse
- EN Size
-
-PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM_BAND
- DE Band-Faktor
- EN Band factor
-
-PLUGIN_SQUEEZEESP32_FULL_SPECTRUM_BAND
- DE Band-Faktor für ganzes Spektrum
- EN Full spectrum band factor
-
-PLUGIN_SQUEEZEESP32_FULL_SPECTRUM_BAND_DESC
- DE Die Anzahl Bänder ist die Breite der Anzeige dividiert durch diesen Faktor.
- EN The number of bands is the width of the screen divided by this factor
-
-PLUGIN_SQUEEZEESP32_ARTWORK
- DE Plattenhüllen
- EN Artwork
-
-PLUGIN_SQUEEZEESP32_ARTWORK_DESC
- DE Wenn die Y Position kleiner als 32 ist, dann werden Plattenhüllen auf der rechten Seite angezeigt, und x definiert die Startposition.
- DE Plattenhüllen werden auf Displays mit weniger als 16 Graustufen in sehr geringer Qualität angezeigt.
- EN When Y position is less than 32, then artwork is displayed at the right of the main screen and X defines the starting position
- EN
On large screen, it's possible to rotate the VU/Spectrum by setting a small X offset (typically 32). That will push the
- EN artwork to the right and make space for a vertical VU to its left.
- EN
Note that using artwork on less than 16-levels grayscale display if really poor quality
-
-PLUGIN_SQUEEZEESP32_ARTWORK_ENABLE
- DE Aktivieren
- EN Enable
-
-PLUGIN_SQUEEZEESP32_ARTWORK_X
- EN X
-
-PLUGIN_SQUEEZEESP32_ARTWORK_Y
- EN Y
-
-PLUGIN_SQUEEZEESP32_EQUALIZER
- DE Parametrischer Equalizer
- EN Parametric equalizer
-
-PLUGIN_SQUEEZEESP32_EQUALIZER_SAVE
- DE Bitte speichern Sie die Equalizer Einstellungen, falls das Gerät diese dauerhaft verwenden soll. Ansonsten werden sie beim nächsten Start zurückgesetzt.
- EN Don't forget to save the Equalizer settings if you want them to stick. Otherwise they'll be reset next time you restart the device.
\ No newline at end of file
diff --git a/plugin/repo.xml b/plugin/repo.xml
index 4e6770bd..90b0a5d8 100644
--- a/plugin/repo.xml
+++ b/plugin/repo.xml
@@ -1,13 +1,13 @@
-
+
https://github.com/sle118/squeezelite-esp32
Philippe
- 39e70a87ce903cc8651e6b3bb2dc86609a8d0541
+ 9f495e973ccb573bf671187dc0a49c510124fbcc
philippe_44@outlook.com
- SqueezeESP32 additional player id (100)
- http://github.com/sle118/squeezelite-esp32/raw/master/plugin/SqueezeESP32.zip
+ SqueezeESP32 additional player id (100/101)
+ http://github.com/sle118/squeezelite-esp32/raw/master-cmake/plugin/SqueezeESP32.zip
SqueezeESP32