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;