--- deliantra/Deliantra-Client/DC/Protocol.pm 2007/07/10 16:25:16 1.112 +++ deliantra/Deliantra-Client/DC/Protocol.pm 2007/07/12 17:56:51 1.113 @@ -50,6 +50,46 @@ } sort { $a->{par} <=> $b->{par} } CFPlus::Pod::find command => "*"; + $self->connect_ext (event_music => sub { + my ($ev) = @_; + + return unless $::CFG->{bgm_enable}; + + my $faces = $ev->{faces}; + my @songs; + + # request music from server if appropriate + my $pri = -100; + for my $face (@$faces) { + if (defined (my $chksum = $ev->{chksum}{$face})) { + utf8::downgrade $chksum; + + $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]; + + CFPlus::DB::write_file $chksum, $data, sub { }; + CFPlus::DB::put resmap => $chksum => $meta, sub { }; + + $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}; + --$pri; + } + + &::audio_music_set ($self->{songs} = \@songs); + }); + $self->connect_ext (event_capabilities => sub { my ($cap) = @_;