--- deliantra/Deliantra-Client/DC/Protocol.pm 2007/07/12 17:56:51 1.113 +++ deliantra/Deliantra-Client/DC/Protocol.pm 2007/07/12 18:28:34 1.114 @@ -67,20 +67,29 @@ $chksum = unpack "H*", $chksum; $self->{music_map}{$face} = $chksum; - ::message ({ markup => "starting to download song #$face, check your output-rate setting if your connection gets laggy." }); - $self->ask_face ($face, $pri, undef, sub { - my $num = $_[0]; - my $len = length $_[1]; - my ($meta, $data) = unpack "(w/a*)*", $_[1]; + # check if already cached + CFPlus::DB::get resmap => $chksum, sub { + my ($meta) = @_; - CFPlus::DB::write_file $chksum, $data, sub { }; - CFPlus::DB::put resmap => $chksum => $meta, sub { }; + if (defined $meta) { + $self->{music_meta}{$chksum} = $self->{json_coder}->decode ($meta); + } else { + ::message ({ markup => "starting to download song #$face, check your output-rate setting if your connection gets laggy." }); + $self->ask_face ($face, $pri, undef, sub { + my $num = $_[0]; + my $len = length $_[1]; + my ($meta, $data) = unpack "(w/a*)*", $_[1]; - $self->{music_meta}{$chksum} = $self->{json_coder}->decode ($meta); - ::message ({ markup => "downloaded song #$face, size $len octets" }); + CFPlus::DB::write_file $chksum, $data, sub { }; + CFPlus::DB::put resmap => $chksum => $meta, sub { }; - &::audio_music_set ($self->{songs}); - }); + $self->{music_meta}{$chksum} = $self->{json_coder}->decode ($meta); + ::message ({ markup => "downloaded song #$face, size $len octets" }); + + &::audio_music_set ($self->{songs}); + }); + } + } } push @songs, $self->{music_map}{$face};