package Slim::Plugin::AudioScrobbler::Settings; # SqueezeCenter Copyright 2001-2007 Logitech. # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License, # version 2. use strict; use base qw(Slim::Web::Settings); use Digest::MD5 qw(md5_hex); use Slim::Utils::Log; use Slim::Utils::Prefs; use Data::Dump; my $prefs = preferences('plugin.audioscrobbler'); my $log = logger('plugin.audioscrobbler'); sub name { return Slim::Web::HTTP::protectName('PLUGIN_AUDIOSCROBBLER_MODULE_NAME'); } sub page { return Slim::Web::HTTP::protectURI('plugins/AudioScrobbler/settings/basic.html'); } sub prefs { return ( $prefs, qw(accounts enable_scrobbling) ); } sub handler { my ($class, $client, $params, $callback, @args) = @_; if ( $params->{saveSettings} ) { # Save existing accounts $params->{pref_accounts} = $prefs->get('accounts') || []; # delete accounts if ( my $delete = $params->{delete} ) { if ( !ref $delete ) { $delete = [ $delete ]; } my $newlist = []; ACCOUNT: for my $account ( @{ $params->{pref_accounts} } ) { for my $todelete ( @{$delete} ) { if ( $todelete eq $account->{username} ) { $log->debug( "Deleting account $todelete" ); next ACCOUNT; } } push @{$newlist}, $account; } $params->{pref_accounts} = $newlist; } # Save new account if ( $params->{pref_password} ) { $params->{pref_password} = md5_hex( $params->{pref_password} ); } # If the user added a username/password, we need to verify their info if ( $params->{pref_username} && $params->{pref_password} ) { logError('going to validate username/prefs'); Slim::Plugin::AudioScrobbler::Plugin::handshake( { username => $params->{pref_username}, password => $params->{pref_password}, pref_accounts => $params->{pref_accounts}, cb => sub { logError('validated correctly'); # Callback for OK handshake response logError(Data::Dump::dump('pref_accounts or not? ' . Data::Dump::dump($params->{pref_accounts}))); push @{ $params->{pref_accounts} }, { username => $params->{pref_username}, password => $params->{pref_password}, }; if ( $log->is_debug ) { $log->debug( "Saving Audioscrobbler accounts: " . Data::Dump::dump( $params->{pref_accounts} ) ); } my $msg = Slim::Utils::Strings::string('PLUGIN_AUDIOSCROBBLER_VALID_LOGIN'); my $body = $class->SUPER::handler( $client, $params ); if ( $params->{AJAX} ) { $params->{warning} = $msg; $params->{validated}->{valid} = 1; } else { $params->{warning} .= $msg . '
'; } logError('calling callback function'); $callback->( $client, $params, $body, @args ); }, ecb => sub { # Callback for any errors my $error = shift; logError('did not validate'); logError(Data::Dump::dump('pref_accounts or not? ' . Data::Dump::dump($params->{pref_accounts}))); if ( $log->is_debug ) { $log->debug( "Error saving Audioscrobbler account: " . Data::Dump::dump( $error ) ); } $error = Slim::Utils::Strings::string( 'SETUP_PLUGIN_AUDIOSCROBBLER_LOGIN_ERROR', $error ); if ( $params->{AJAX} ) { $params->{warning} = $error; $params->{validated}->{valid} = 0; } else { $params->{warning} .= $error . '
'; } delete $params->{pref_username}; delete $params->{pref_password}; my $body = $class->SUPER::handler( $client, $params ); logError('calling callback function'); $callback->( $client, $params, $body, @args ); }, } ); return; } else { logError("username ($params->{pref_username}) or password ($params->{pref_password}) missing? "); } } return $class->SUPER::handler( $client, $params ); } 1;