1 package Display::Plugins::MPD;
5 use POSIX qw/strftime/;
6 use base ('Display::Plugin');
10 my $class = ref($proto) || $proto;
12 my $self = $class->SUPER::new(@_);
14 $self->{'mpd'} = Audio::MPD->new();
16 $self->{'active'} = 0;
18 bless ($self, $class);
26 my $current = $self->{'mpd'}->current();
28 if ($self->{'file'} ne $current->file()) {
30 push @lines, $current->title() if defined $current->title();
31 push @lines, $current->album() if defined $current->album();
32 push @lines, $current->artist() if defined $current->artist();
34 $self->{'status'}->set_text(join("\n", @lines));
36 $self->{'file'} = $current->file();
38 $self->{'bg'}->set_height($self->{'status'}->get_height() + 10);
39 $self->{'bg'}->set_anchor_point(1, $self->{'bg'}->get_height());
40 $self->{'bg'}->set_position(10, $self->{'stage'}->get_height() - 10);
42 $self->{'status'}->set_anchor_point(1, $self->{'status'}->get_height());
43 $self->{'status'}->set_position(15, $self->{'stage'}->get_height() - 20);
45 if (! $self->{'active'}) {
46 $self->{'stage'}->add($self->{'bg'});
47 $self->{'stage'}->add($self->{'status'});
49 $self->{'active'} = time() + 30;
52 Glib::Timeout->add_seconds(30, $self->can('hide_display'), $self);
61 if ($self->{'active'} <= time()) {
62 $self->{'stage'}->remove($self->{'status'});
63 $self->{'stage'}->remove($self->{'bg'});
65 $self->{'active'} = 0;
74 $self->{'status'} = Clutter::Label->new('Sans 20', "Song\nAlbum");
75 $self->{'status'}->set_color(Clutter::Color->parse('White'));
77 $self->{'bg'} = Clutter::Rectangle->new(Clutter::Color->parse('Black'));
78 $self->{'bg'}->set_width($self->{'stage'}->get_width() - 40);
79 $self->{'bg'}->set_opacity(100);
81 Glib::Timeout->add_seconds(5, $self->can('display'), $self);