Index: SqueezeOS.pm =================================================================== --- SqueezeOS.pm (revision 29378) +++ SqueezeOS.pm (working copy) @@ -46,6 +46,13 @@ _checkMediaAtStartup($prefs); $prefs->setChange( \&_onAudiodirChange, 'audiodir', 'FIRST' ); + + eval { + require Slim::Utils::OS::SqueezeOS::PrefSync; + Slim::Utils::OS::SqueezeOS::PrefSync::init(); + }; + + Slim::Utils::Log::logError("Squeezeplay <-> Squeezebox Server prefs syncing failed to initialize: $@") if $@; } sub sqlHelperClass { 'Slim::Utils::SQLiteHelper' } Index: SqueezeOS/PrefSync.pm =================================================================== --- SqueezeOS/PrefSync.pm (revision 0) +++ SqueezeOS/PrefSync.pm (revision 0) @@ -0,0 +1,53 @@ +package Slim::Utils::OS::SqueezeOS::PrefSync; + +use strict; + +use Slim::Utils::Log; +use Slim::Utils::Prefs; + +use Linux::Inotify2; + +my ($i, $w); + +my $handlers = { + 'SetupLanguage.lua' => sub { + my $data = shift; + + if ($$data && $$data =~ /locale="([A-Z][A-Z])"/) { + preferences('server')->set('language', uc($1)); + } + }, + +}; + +sub init { + $i = Linux::Inotify2->new() or die "Unable to start Inotify watcher: $!"; + + $i->watch('/etc/squeezeplay/userpath/settings/', IN_MOVED_TO, \&_parseEvent) + or logError("Unable to add Inotify watcher: $!"); + + $w = AnyEvent->io( + fh => $i->fileno, + poll => 'r', + cb => sub { $i->poll }, + ); +} + +sub _parseEvent { + my $ev = shift; + + if (defined $ev->fullname && defined $ev->name && $handlers->{$ev->name} && -r $ev->fullname ) { + + require File::Slurp; + + my $data = File::Slurp::read_file($ev->fullname); + + #eval { + &{ $handlers->{$ev->name} }(\$data); + #}; + } +} + + +1;