[Slimp3-checkins] CVS: slimp3/server/lib/SliMP3/Buttons Block.pm,1.1,1.2 Browse.pm,1.56,1.57 BrowseI
Brought to you by:
blackketter,
slimdevices
From: dean b. <bla...@us...> - 2002-02-27 00:03:29
|
Update of /cvsroot/slimp3/slimp3/server/lib/SliMP3/Buttons In directory usw-pr-cvs1:/tmp/cvs-serv2773/lib/SliMP3/Buttons Modified Files: Block.pm Browse.pm BrowseID3.pm Common.pm Home.pm Playlist.pm Power.pm Search.pm SearchFor.pm Shooter.pm SlimTris.pm TrackInfo.pm Log Message: Enabling the remote-based search facility. From SliMP3 Home, navigate to Search, then choose to search for artists, albums or song titles. Choose characters using the UP/DOWN buttons or the number keys in cellphone style. Press RIGHT to move to the next letter or wait a second after pressing a number key. Press RIGHT again to start the search. To make this actually work we need to keep a stack of the screen modes we've navigated through, so we do that now. If you add a new screen mode, make sure you register it in Buttons::Common.pm I still need to update the documentation and make progressive searching work, but it seems quite workable and useful now. Let me know if you have any problems. Index: Block.pm =================================================================== RCS file: /cvsroot/slimp3/slimp3/server/lib/SliMP3/Buttons/Block.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Block.pm 22 Feb 2002 18:59:59 -0000 1.1 --- Block.pm 27 Feb 2002 00:03:24 -0000 1.2 *************** *** 30,48 **** ); sub block { my $client = shift; my $line1 = shift; my $line2 = shift; - $client->prevbuttons($client->buttons); - $client->prevlines($client->lines); - $client->prevmode($client->mode); - - $client->buttons(\%buttons); - $client->lines(\&lines); - $client->mode('block'); $client->blocklines(1, $line1); $client->blocklines(2, $line2); if (defined $line1) { SliMP3::Animation::showBriefly($client, $line1, $line2); --- 30,49 ---- ); + sub setMode { + my $client = shift; + $client->buttons(\%buttons); + $client->lines(\&lines); + } + sub block { my $client = shift; my $line1 = shift; my $line2 = shift; $client->blocklines(1, $line1); $client->blocklines(2, $line2); + SliMP3::Buttons::Common::pushMode($client,'block'); + if (defined $line1) { SliMP3::Animation::showBriefly($client, $line1, $line2); *************** *** 52,60 **** sub unblock { my $client = shift; ! if ($client->mode eq 'block') { ! $client->buttons($client->prevbuttons); ! $client->lines($client->prevlines); ! $client->mode($client->prevmode); ! } } --- 53,57 ---- sub unblock { my $client = shift; ! SliMP3::Buttons::Common::popMode($client); } Index: Browse.pm =================================================================== RCS file: /cvsroot/slimp3/slimp3/server/lib/SliMP3/Buttons/Browse.pm,v retrieving revision 1.56 retrieving revision 1.57 diff -C2 -d -r1.56 -r1.57 *** Browse.pm 23 Feb 2002 22:17:46 -0000 1.56 --- Browse.pm 27 Feb 2002 00:03:24 -0000 1.57 *************** *** 49,53 **** if ($client->pwd() =~ m|^[/\\]?$|) { # go to the home directory ! SliMP3::Buttons::Home::setMode($client); SliMP3::Animation::pushRight($client, @oldlines, SliMP3::Display::curLines($client)); } else { --- 49,53 ---- if ($client->pwd() =~ m|^[/\\]?$|) { # go to the home directory ! SliMP3::Buttons::Common::setMode($client, 'home'); SliMP3::Animation::pushRight($client, @oldlines, SliMP3::Display::curLines($client)); } else { *************** *** 74,78 **** loadDir($client, $currentItem, "right", \@oldlines); } elsif (SliMP3::Info::isMP3($currentItem)) { ! SliMP3::Buttons::TrackInfo::setMode($client, $currentItem); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); } else { --- 74,79 ---- loadDir($client, $currentItem, "right", \@oldlines); } elsif (SliMP3::Info::isMP3($currentItem)) { ! SliMP3::Buttons::Common::pushMode($client, 'trackinfo'); ! SliMP3::Buttons::TrackInfo::track($client, $currentItem); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); } else { *************** *** 173,177 **** $client->buttons(\%buttons); $client->lines(\&lines); - $client->mode('browse'); } --- 174,177 ---- Index: BrowseID3.pm =================================================================== RCS file: /cvsroot/slimp3/slimp3/server/lib/SliMP3/Buttons/BrowseID3.pm,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** BrowseID3.pm 25 Feb 2002 18:17:12 -0000 1.8 --- BrowseID3.pm 27 Feb 2002 00:03:24 -0000 1.9 *************** *** 19,26 **** # Each button on the remote has a function: ! # browseID3selection =>'%', # hash current ID3 browsing location (artist, album, song, genre...) ! # browseID3lastSelection =>'%', # hash the item that was last selected for a given browse position ! # browseID3dir =>'@', # array current browsing list ! # browseID3dirIndex =>'$', # int current browsing scroll position my %buttons = ( --- 19,26 ---- # Each button on the remote has a function: ! # browseID3selection =>'%', # hash current ID3 browsing location (artist, album, song, genre...) ! # browseID3lastSelection =>'%', # hash the item that was last selected for a given browse position ! # browseID3dir =>'@', # array current browsing list ! # browseID3dirIndex =>'$', # int current browsing scroll position my %buttons = ( *************** *** 59,86 **** updateLastSelection($client); ! if ((!defined($genre) || $genre eq '*') && ! (!defined($artist) || $artist eq '*') && ! (!defined($album) || $album eq '*') && ! (!defined($song) || $song eq '*')) { ! # we don't know anything, go back home... ! # go to the home directory ! SliMP3::Buttons::Home::setMode($client); } else { # go up one level ! if (defined($genre) && defined($artist) && defined($album)) { # we're at the song level # forget we knew the album ! $client->browseID3selection('album', undef); loadDir($client); ! } elsif (defined($genre) && defined($artist)) { # we're at the album level # forget we knew the artist ! $client->browseID3selection('artist', undef); loadDir($client); ! } elsif (defined($genre)) { # we're at the artist level # forget we knew the genre ! $client->browseID3selection('genre', undef); loadDir($client); } --- 59,82 ---- updateLastSelection($client); ! if (any($genre) && any($artist) && any($album) && any($song)) { # we don't know anything, go back home... ! # back to where we came from ! SliMP3::Buttons::Common::popMode($client); } else { # go up one level ! if (specified($album)) { # we're at the song level # forget we knew the album ! $client->browseID3selection('album', $client->browseID3selection('startalbum')); loadDir($client); ! } elsif (specified($artist)) { # we're at the album level # forget we knew the artist ! $client->browseID3selection('artist', $client->browseID3selection('startartist')); loadDir($client); ! } elsif (specified($genre)) { # we're at the artist level # forget we knew the genre ! $client->browseID3selection('genre', $client->browseID3selection('startsong')); loadDir($client); } *************** *** 109,120 **** my $song = $client->browseID3selection('song'); ! if (defined($genre) && defined($artist) && defined($album)) { # we know the genre, artist, album and song. show the song info. ! SliMP3::Buttons::TrackInfo::setMode($client, $currentItem); ! } elsif (defined($genre) && defined($artist)) { # we know the genre, artist and album. show the songs. $client->browseID3selection('album', $currentItem); loadDir($client); ! } elsif (defined($genre)) { # we know the genre and artist. show the album. $client->browseID3selection('artist', $currentItem); --- 105,117 ---- my $song = $client->browseID3selection('song'); ! if (picked($genre) && picked($artist) && picked($album)) { # we know the genre, artist, album and song. show the song info. ! SliMP3::Buttons::Common::pushMode($client, 'trackinfo'); ! SliMP3::Buttons::TrackInfo::track($client, $currentItem); ! } elsif (picked($genre) && picked($artist)) { # we know the genre, artist and album. show the songs. $client->browseID3selection('album', $currentItem); loadDir($client); ! } elsif (picked($genre)) { # we know the genre and artist. show the album. $client->browseID3selection('artist', $currentItem); *************** *** 205,216 **** SliMP3::Animation::showBriefly($client, $line1, $line2); ! if (defined($genre) && defined($artist) && defined($album)) { SliMP3::Playlist::executecommand($client, ["playlist", $add ? "append" : "play", $currentItem]); ! } elsif (defined($genre) && defined($artist)) { SliMP3::Playlist::executecommand($client, ["playlist", $add ? "addalbum" : "loadalbum", $genre, $artist, $currentItem]); if (!$add) { SliMP3::Playlist::executecommand($client, ["playlist", "jump", "0"]); } ! } elsif (defined($genre)) { SliMP3::Playlist::executecommand($client, ["playlist", $add ? "addalbum" : "loadalbum", $genre, $currentItem, "*"]); if (!$add) { --- 202,213 ---- SliMP3::Animation::showBriefly($client, $line1, $line2); ! if (picked($genre) && picked($artist) && picked($album)) { SliMP3::Playlist::executecommand($client, ["playlist", $add ? "append" : "play", $currentItem]); ! } elsif (picked($genre) && picked($artist)) { SliMP3::Playlist::executecommand($client, ["playlist", $add ? "addalbum" : "loadalbum", $genre, $artist, $currentItem]); if (!$add) { SliMP3::Playlist::executecommand($client, ["playlist", "jump", "0"]); } ! } elsif (picked($genre)) { SliMP3::Playlist::executecommand($client, ["playlist", $add ? "addalbum" : "loadalbum", $genre, $currentItem, "*"]); if (!$add) { *************** *** 232,239 **** $client->buttons(\%buttons); $client->lines(\&lines); - $client->mode('browseid3'); loadDir($client); } sub updateLastSelection { my $client = shift; --- 229,251 ---- $client->buttons(\%buttons); $client->lines(\&lines); loadDir($client); } + sub selection { + my $client = shift; + my $genre = shift; + my $artist = shift; + my $album = shift; + my $song = shift; + $client->browseID3selection('genre', $genre); + $client->browseID3selection('artist', $artist); + $client->browseID3selection('album', $album); + $client->browseID3selection('song', $song); + $client->browseID3selection('startgenre', $genre); + $client->browseID3selection('startartist', $artist); + $client->browseID3selection('startalbum', $album); + $client->browseID3selection('startsong', $song); + } + sub updateLastSelection { my $client = shift; *************** *** 265,276 **** $main::d_f && printf "loading dir for $genre - $artist - $album - $song\n"; ! if (defined($genre) && defined($artist) && defined($album)) { ! @{$client->browseID3dir} = SliMP3::Info::songs($genre, $artist, $album, '*'); ! } elsif (defined($genre) && defined($artist)) { ! @{$client->browseID3dir} = SliMP3::Info::albums($genre, $artist, '*', '*'); ! } elsif (defined($genre)) { ! @{$client->browseID3dir} = SliMP3::Info::artists($genre, '*', '*', '*'); } else { ! @{$client->browseID3dir} = SliMP3::Info::genres('*', '*', '*', '*'); } --- 277,288 ---- $main::d_f && printf "loading dir for $genre - $artist - $album - $song\n"; ! if (picked($genre) && picked($artist) && picked($album)) { ! @{$client->browseID3dir} = SliMP3::Info::songs($genre, $artist, $album, $song); ! } elsif (picked($genre) && picked($artist)) { ! @{$client->browseID3dir} = SliMP3::Info::albums($genre, $artist, $album, $song); ! } elsif (picked($genre)) { ! @{$client->browseID3dir} = SliMP3::Info::artists($genre, $artist, $album, $song); } else { ! @{$client->browseID3dir} = SliMP3::Info::genres($genre, $artist, $album, $song); } *************** *** 291,325 **** my $album = $client->browseID3selection('album'); my $song = $client->browseID3selection('song'); ! if (!defined($genre)) { $line1 = string('GENRES'); ! } elsif ($genre eq '*') { ! if (!defined($artist)) { ! $line1 = string('ARTISTS'); ! } elsif ($artist eq '*') { ! if (!defined($album)) { ! $line1 = string('ALBUMS'); ! } elsif ($album eq '*') { ! $line1 = string('SONGS'); ! } else { ! $line1 = $album; ! } ! } else { ! if (!defined($album)) { ! $line1 = $artist; ! } else { ! $line1 = $artist."/".$album; ! } ! } } else { ! if (!defined($artist)) { ! $line1 = $genre; ! } else { ! if (!defined($album)) { ! $line1 = $genre.'/'.$artist; ! } else { ! $line1 = $artist.'/'.$album; ! } ! } } --- 303,335 ---- my $album = $client->browseID3selection('album'); my $song = $client->browseID3selection('song'); ! if (!defined($genre)) { $line1 = string('GENRES'); ! } elsif ($genre eq '*' && !defined($artist)) { ! $line1 = string('ARTISTS'); ! } elsif ($genre eq '*' && $artist eq '*' && !defined($album)) { ! $line1 = string('ALBUMS'); ! } elsif ($genre eq '*' && $artist eq '*' && $album eq '*' && !defined($song)) { ! $line1 = string('SONGS'); ! } elsif ($genre eq '*' && $artist eq '*' && $album eq '*' && !specified($song)) { ! $line1 = string('SONGSMATCHING') . " \"" . searchTerm($song) . "\""; ! } elsif ($genre eq '*' && $artist eq '*' && !specified($album)) { ! $line1 = string('ALBUMSMATCHING') . " \"" . searchTerm($album) . "\""; ! } elsif ($genre eq '*' && !specified($artist)) { ! $line1 = string('ARTISTSMATCHING') . " \"" . searchTerm($artist) . "\""; ! } elsif (specified($genre) && !defined($artist)) { ! $line1 = $genre; ! } elsif ($genre eq '*' && specified($artist) && !defined($album)) { ! $line1 = $artist; ! } elsif ($genre eq '*' && $artist eq '*' && specified($album) && !defined($song)) { ! $line1 = $album; ! } elsif (specified($genre) && specified($artist) && !defined($album)) { ! $line1 = $genre.'/'.$artist; ! } elsif (specified($genre) && specified($artist) && specified($album) && !defined($song)) { ! $line1 = $artist.'/'.$album; ! } elsif ($genre eq '*' && specified($artist) && specified($album) && !defined($song)) { ! $line1 = $artist.'/'.$album; } else { ! die "can't calculate string for $genre $artist $album $song"; } *************** *** 341,345 **** --- 351,379 ---- } + # undefined or contains a * + sub any { + my $i = shift; + return (!defined $i || $i =~ /\*/); + } + + # defined, but does not contain a * + sub specified { + my $i = shift; + if (!defined $i) { return 0}; + return $i !~ /\*/; + } + # defined and does not contain a star or equals star + sub picked { + my $i = shift; + if (!defined $i) { return 0}; + return (specified($i) || $i eq "*"); + } + + sub searchTerm { + my $t = shift; + $t =~ s/^\*(.+)\*$/$1/; + return $t; + } 1; Index: Common.pm =================================================================== RCS file: /cvsroot/slimp3/slimp3/server/lib/SliMP3/Buttons/Common.pm,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** Common.pm 23 Feb 2002 16:18:42 -0000 1.21 --- Common.pm 27 Feb 2002 00:03:24 -0000 1.22 *************** *** 14,20 **** use SliMP3::Strings qw (string); # Common button functions for more than one mode: my %buttons = ( ! 'fwd'=> sub { my $client = shift; --- 14,34 ---- use SliMP3::Strings qw (string); + my %modes = ( + 'block' => \&SliMP3::Buttons::Block::setMode, + 'browse' => \&SliMP3::Buttons::Browse::setMode, + 'browseid3' => \&SliMP3::Buttons::BrowseID3::setMode, + 'home' => \&SliMP3::Buttons::Home::setMode, + 'playlist' => \&SliMP3::Buttons::Playlist::setMode, + 'off' => \&SliMP3::Buttons::Power::setMode, + 'search' => \&SliMP3::Buttons::Search::setMode, + 'searchfor' => \&SliMP3::Buttons::SearchFor::setMode, + 'shooter' => \&SliMP3::Buttons::Shooter::setMode, + 'slimtris' => \&SliMP3::Buttons::SlimTris::setMode, + 'trackinfo' => \&SliMP3::Buttons::TrackInfo::setMode, + ); + # Common button functions for more than one mode: my %buttons = ( ! 'fwd' => sub { my $client = shift; *************** *** 77,84 **** } else { SliMP3::Playlist::executecommand($client, ["stop"]); ! $client->mode('playlist'); ! $client->browseplaylistindex($client->currentsong); ! ! SliMP3::Buttons::Playlist::setMode($client); SliMP3::Animation::showBriefly($client, string('STOPPING'), ""); --- 91,96 ---- } else { SliMP3::Playlist::executecommand($client, ["stop"]); ! $client->browseplaylistindex($client->currentsong); ! SliMP3::Buttons::Common::setMode($client, 'playlist'); SliMP3::Animation::showBriefly($client, string('STOPPING'), ""); *************** *** 88,92 **** 'menu' => sub { my $client = shift; ! SliMP3::Buttons::Home::setMode($client); SliMP3::Display::update($client); }, --- 100,104 ---- 'menu' => sub { my $client = shift; ! SliMP3::Buttons::Common::setMode($client, 'home'); SliMP3::Display::update($client); }, *************** *** 118,125 **** SliMP3::Animation::showBriefly($client, string('PLAYLIST_EMPTY'), ""); } else { - $client->mode('playlist'); $client->browseplaylistindex($client->currentsong); ! SliMP3::Buttons::Playlist::setMode($client); SliMP3::Animation::showBriefly($client, string('VIEWING_PLAYLIST'), ""); --- 130,136 ---- SliMP3::Animation::showBriefly($client, string('PLAYLIST_EMPTY'), ""); } else { $client->browseplaylistindex($client->currentsong); ! SliMP3::Buttons::Common::setMode($client, 'playlist'); SliMP3::Animation::showBriefly($client, string('VIEWING_PLAYLIST'), ""); *************** *** 167,171 **** my $client = shift; ! SliMP3::Buttons::Power::setMode($client); }, --- 178,182 ---- my $client = shift; ! SliMP3::Buttons::Common::setMode($client, 'off'); }, *************** *** 328,331 **** --- 339,370 ---- return $i; + } + + sub mode { + my $client = shift; + return $client->modestack(-1); + } + + sub pushMode { + my $client = shift; + my $setmode = shift; + push @{$client->modestack}, $setmode; + + my $fun = $modes{$setmode}; + &$fun($client, @_); + } + + sub popMode { + my $client = shift; + pop @{$client->modestack}; + my $fun = $modes{mode($client)}; + &$fun($client, @_); + } + + sub setMode { + my $client = shift; + my $setmode = shift; + @{$client->modestack} = (); + pushMode($client, $setmode); } 1; Index: Home.pm =================================================================== RCS file: /cvsroot/slimp3/slimp3/server/lib/SliMP3/Buttons/Home.pm,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** Home.pm 23 Feb 2002 16:18:42 -0000 1.19 --- Home.pm 27 Feb 2002 00:03:24 -0000 1.20 *************** *** 18,22 **** # button functions for top-level home directory ! my @homeChoices = ('MUSIC','GENRES','ARTISTS','ALBUMS','PLAYLIST'); # todo: reenable 'SEARCH'! my %buttons = ( --- 18,22 ---- # button functions for top-level home directory ! my @homeChoices = ('MUSIC','GENRES','ARTISTS','ALBUMS','PLAYLIST','SEARCH'); my %buttons = ( *************** *** 117,155 **** if ($homeChoices[$client->homeSelection] eq 'MUSIC') { # reset to the top level of the music ! SliMP3::Buttons::Browse::setMode($client); SliMP3::Buttons::Browse::loadDir($client, '', "right", \@oldlines); } elsif ($homeChoices[$client->homeSelection] eq 'PLAYLIST') { # reset to the top level of the music ! SliMP3::Buttons::Playlist::setMode($client); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); } elsif ($homeChoices[$client->homeSelection] eq 'ALBUMS') { ! $client->browseID3selection('artist', '*'); ! $client->browseID3selection('album', undef); ! $client->browseID3selection('genre', '*'); ! $client->browseID3selection('song', undef); ! SliMP3::Buttons::BrowseID3::setMode($client); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); } elsif ($homeChoices[$client->homeSelection] eq 'ARTISTS') { ! $client->browseID3selection('artist', undef); ! $client->browseID3selection('album', undef); ! $client->browseID3selection('genre', '*'); ! $client->browseID3selection('song', undef); ! SliMP3::Buttons::BrowseID3::setMode($client); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); } elsif ($homeChoices[$client->homeSelection] eq 'GENRES') { ! $client->browseID3selection('artist', undef); ! $client->browseID3selection('album', undef); ! $client->browseID3selection('genre', undef); ! $client->browseID3selection('song', undef); ! SliMP3::Buttons::BrowseID3::setMode($client); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); } elsif ($homeChoices[$client->homeSelection] eq 'SEARCH') { ! SliMP3::Buttons::Search::setMode($client); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); } elsif ($homeChoices[$client->homeSelection] eq 'SLIMTRIS') { ! SliMP3::Buttons::SlimTris::setMode($client); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); } elsif ($homeChoices[$client->homeSelection] eq 'SHOOTER') { ! SliMP3::Buttons::Shooter::setMode($client); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); } --- 117,153 ---- if ($homeChoices[$client->homeSelection] eq 'MUSIC') { # reset to the top level of the music ! SliMP3::Buttons::Common::pushMode($client, 'browse'); SliMP3::Buttons::Browse::loadDir($client, '', "right", \@oldlines); + } elsif ($homeChoices[$client->homeSelection] eq 'PLAYLIST') { # reset to the top level of the music ! SliMP3::Buttons::Common::pushMode($client, 'playlist'); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); + } elsif ($homeChoices[$client->homeSelection] eq 'ALBUMS') { ! SliMP3::Buttons::BrowseID3::selection($client, '*', '*', undef, undef); ! SliMP3::Buttons::Common::pushMode($client, 'browseid3'); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); + } elsif ($homeChoices[$client->homeSelection] eq 'ARTISTS') { ! SliMP3::Buttons::BrowseID3::selection($client, '*', undef, undef, undef); ! SliMP3::Buttons::Common::pushMode($client, 'browseid3'); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); + } elsif ($homeChoices[$client->homeSelection] eq 'GENRES') { ! SliMP3::Buttons::BrowseID3::selection($client, undef, undef, undef, undef); ! SliMP3::Buttons::Common::pushMode($client, 'browseid3'); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); + } elsif ($homeChoices[$client->homeSelection] eq 'SEARCH') { ! SliMP3::Buttons::Common::pushMode($client, 'search'); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); + } elsif ($homeChoices[$client->homeSelection] eq 'SLIMTRIS') { ! SliMP3::Buttons::Common::pushMode($client, 'slimtris'); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); + } elsif ($homeChoices[$client->homeSelection] eq 'SHOOTER') { ! SliMP3::Buttons::Common::pushMode($client, 'shooter'); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); } *************** *** 161,165 **** $client->buttons(\%buttons); $client->lines(\&lines); - $client->mode('home'); } --- 159,162 ---- Index: Playlist.pm =================================================================== RCS file: /cvsroot/slimp3/slimp3/server/lib/SliMP3/Buttons/Playlist.pm,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** Playlist.pm 23 Feb 2002 22:17:46 -0000 1.32 --- Playlist.pm 27 Feb 2002 00:03:24 -0000 1.33 *************** *** 49,53 **** my @oldlines = SliMP3::Display::curLines($client); ! SliMP3::Buttons::Home::setMode($client); SliMP3::Animation::pushRight($client, @oldlines, SliMP3::Display::curLines($client)); }, --- 49,53 ---- my @oldlines = SliMP3::Display::curLines($client); ! SliMP3::Buttons::Common::setMode($client, 'home'); SliMP3::Animation::pushRight($client, @oldlines, SliMP3::Display::curLines($client)); }, *************** *** 60,64 **** } else { my @oldlines = SliMP3::Display::curLines($client); ! SliMP3::Buttons::TrackInfo::setMode($client, $client->playlist($client->shufflelist($client->browseplaylistindex))); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); } --- 60,65 ---- } else { my @oldlines = SliMP3::Display::curLines($client); ! SliMP3::Buttons::Common::pushMode($client, 'trackinfo'); ! SliMP3::Buttons::TrackInfo::track($client, $client->playlist($client->shufflelist($client->browseplaylistindex))); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); } *************** *** 146,150 **** $client->buttons(\%buttons); $client->lines(\&lines); - $client->mode('playlist'); } --- 147,150 ---- *************** *** 161,165 **** $line1 = string('PLAYLIST'); $line2 = string('EMPTY'); ! } elsif (($client->mode eq 'playlist') && ($client->browseplaylistindex != $client->currentsong)) { $line1 = sprintf "%s (%d %s %d) ", string('PLAYLIST'), $client->browseplaylistindex + 1, string('OUT_OF'), $playlistlen; $line2 = SliMP3::Info::standardTitleLine($client, $client->playlist($client->shufflelist($client->browseplaylistindex))); --- 161,165 ---- $line1 = string('PLAYLIST'); $line2 = string('EMPTY'); ! } elsif ((SliMP3::Buttons::Common::mode($client) eq 'playlist') && ($client->browseplaylistindex != $client->currentsong)) { $line1 = sprintf "%s (%d %s %d) ", string('PLAYLIST'), $client->browseplaylistindex + 1, string('OUT_OF'), $playlistlen; $line2 = SliMP3::Info::standardTitleLine($client, $client->playlist($client->shufflelist($client->browseplaylistindex))); Index: Power.pm =================================================================== RCS file: /cvsroot/slimp3/slimp3/server/lib/SliMP3/Buttons/Power.pm,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** Power.pm 22 Feb 2002 18:59:59 -0000 1.17 --- Power.pm 27 Feb 2002 00:03:24 -0000 1.18 *************** *** 64,69 **** SliMP3::Playlist::executecommand($client, ["stop"]); - - $client->mode('off'); # switch to power off mode --- 64,67 ---- *************** *** 107,111 **** $client->homeSelection(0); ! SliMP3::Buttons::Home::setMode($client); SliMP3::Animation::showBriefly($client, SliMP3::Strings::string('WELCOME_TO_SLIMP3'), ""); --- 105,109 ---- $client->homeSelection(0); ! SliMP3::Buttons::Common::setMode($client, 'home'); SliMP3::Animation::showBriefly($client, SliMP3::Strings::string('WELCOME_TO_SLIMP3'), ""); Index: Search.pm =================================================================== RCS file: /cvsroot/slimp3/slimp3/server/lib/SliMP3/Buttons/Search.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Search.pm 23 Feb 2002 16:18:43 -0000 1.1 --- Search.pm 27 Feb 2002 00:03:24 -0000 1.2 *************** *** 40,44 **** my $client = shift; my @oldlines = SliMP3::Display::curLines($client); ! SliMP3::Buttons::Home::setMode($client); SliMP3::Animation::pushRight($client, @oldlines, SliMP3::Display::curLines($client)); }, --- 40,44 ---- my $client = shift; my @oldlines = SliMP3::Display::curLines($client); ! SliMP3::Buttons::Common::setMode($client, 'home'); SliMP3::Animation::pushRight($client, @oldlines, SliMP3::Display::curLines($client)); }, *************** *** 65,69 **** my @oldlines = SliMP3::Display::curLines($client); ! SliMP3::Buttons::SearchFor::setMode($client, $searchChoices[$client->searchSelection]); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); } --- 65,70 ---- my @oldlines = SliMP3::Display::curLines($client); ! SliMP3::Buttons::Common::pushMode($client, 'searchfor'); ! SliMP3::Buttons::SearchFor::searchFor($client, $searchChoices[$client->searchSelection]); SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); } *************** *** 75,79 **** $client->buttons(\%buttons); $client->lines(\&lines); - $client->mode('search'); } --- 76,79 ---- Index: SearchFor.pm =================================================================== RCS file: /cvsroot/slimp3/slimp3/server/lib/SliMP3/Buttons/SearchFor.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** SearchFor.pm 23 Feb 2002 16:18:43 -0000 1.1 --- SearchFor.pm 27 Feb 2002 00:03:24 -0000 1.2 *************** *** 7,27 **** use strict; use File::Spec::Functions qw(:ALL); use File::Spec::Functions qw(updir); use SliMP3::Buttons::Common; use SliMP3::Strings qw (string); # button functions for search text entry my %buttons = ( ! 'up' => sub { my $client = shift; SliMP3::Display::update($client); }, ! 'down' => sub { my $client = shift; ! SliMP3::Display::update($client); }, --- 7,67 ---- use strict; + use File::Spec::Functions qw(:ALL); use File::Spec::Functions qw(updir); use SliMP3::Buttons::Common; use SliMP3::Strings qw (string); + use Time::HiRes qw(time); + + my @searchChars = ( + chr($SliMP3::VFD::RIGHTARROW), + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + ' ', + '.', ',', "'", '?', '!', '@', '-', '_', '#', '$', '%', '^', '&', + '(', ')', '{', '}', '[', ']', '\\','|', ';', ':', '"', '<', '>', + '*', '=', '+', '`', '~', '/', + + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' + ); + # button functions for search text entry my %buttons = ( ! 'down' => sub { my $client = shift; + my $char = $client->searchTerm($client->searchCursor); + my $index = 0; + foreach my $match (@searchChars) { + last if ($match eq $char); + $index++; + } + + $index++; + + if ($index >= scalar @searchChars) { $index = 0 }; + + $client->searchTerm($client->searchCursor,$searchChars[$index]); SliMP3::Display::update($client); }, ! 'up' => sub { my $client = shift; ! my $char = $client->searchTerm($client->searchCursor); ! my $index = 0; ! ! foreach my $match (@searchChars) { ! last if ($match eq $char); ! $index++; ! } ! ! $index--; ! ! if ($index < 0) { $index = scalar @searchChars - 1; }; ! ! $client->searchTerm($client->searchCursor,$searchChars[$index]); ! SliMP3::Display::update($client); }, *************** *** 29,39 **** 'left' => sub { my $client = shift; ! my @oldlines = SliMP3::Display::curLines($client); ! SliMP3::Buttons::Search::setMode($client); ! SliMP3::Animation::pushRight($client, @oldlines, SliMP3::Display::curLines($client)); }, 'right' => sub { my $client = shift; }, --- 69,119 ---- 'left' => sub { my $client = shift; ! if ($client->searchCursor == 0) { ! my @oldlines = SliMP3::Display::curLines($client); ! SliMP3::Buttons::Common::popMode($client); ! SliMP3::Animation::pushRight($client, @oldlines, SliMP3::Display::curLines($client)); ! } else { ! $client->searchTerm($client->searchCursor, undef); ! $client->searchCursor($client->searchCursor - 1); ! SliMP3::Display::update($client); ! } }, 'right' => sub { my $client = shift; + my $char = $client->searchTerm($client->searchCursor); + if ($char eq chr($SliMP3::VFD::RIGHTARROW)) { + my @oldlines = SliMP3::Display::curLines($client); + + if ($client->searchCursor == 0) { + SliMP3::Animation::bumpRight($client); + } else { + # do the search! + my $term = "*"; + + foreach my $a (@{$client->searchTerm}) { + if (defined $a) { + $term .= $a; + } + } + # get rid of the trailing space + chop($term); + $term .= "*"; + + SliMP3::Animation::showBriefly($client, "Searching..."); + + if ($client->searchFor eq 'ARTISTS') { + SliMP3::Buttons::BrowseID3::selection($client, '*', $term, undef, undef); + } elsif ($client->searchFor eq 'ALBUMS') { + SliMP3::Buttons::BrowseID3::selection($client, '*', '*', $term, undef); + } else { + SliMP3::Buttons::BrowseID3::selection($client, '*', '*', '*', $term); + } + SliMP3::Buttons::Common::pushMode($client, 'browseid3'); + SliMP3::Animation::pushLeft($client, @oldlines, SliMP3::Display::curLines($client)); + } + } else { + nextChar($client); + } }, *************** *** 46,59 **** }, ); sub setMode { my $client = shift; - my $searchFor = shift; - $client->searchFor($searchFor); $client->buttons(\%buttons); $client->lines(\&lines); ! $client->mode('search'); } --- 126,172 ---- }, + '0' => sub { numberScroll(shift, 0); }, + '1' => sub { numberScroll(shift, 1); }, + '2' => sub { numberScroll(shift, 2); }, + '3' => sub { numberScroll(shift, 3); }, + '4' => sub { numberScroll(shift, 4); }, + '5' => sub { numberScroll(shift, 5); }, + '6' => sub { numberScroll(shift, 6); }, + '7' => sub { numberScroll(shift, 7); }, + '8' => sub { numberScroll(shift, 8); }, + '9' => sub { numberScroll(shift, 9); }, + ); + sub numberScroll { + my $client = shift; + my $digit = shift; + $client->searchTerm($client->searchCursor, + SliMP3::Buttons::Common::numberLetter($client, $digit)); + SliMP3::Timers::killTimers($client, \&nextChar); + SliMP3::Timers::setTimer($client, time + 1.0, \&nextChar); + SliMP3::Display::update($client); + } + + sub nextChar { + my $client = shift; + $client->searchCursor($client->searchCursor+1); + $client->searchTerm($client->searchCursor, chr($SliMP3::VFD::RIGHTARROW)); + SliMP3::Display::update($client); + } + sub setMode { my $client = shift; $client->buttons(\%buttons); $client->lines(\&lines); ! if (($client->searchCursor == 0) && !defined($client->searchTerm($client->searchCursor))) { ! $client->searchTerm($client->searchCursor, 'A'); ! } ! } ! ! sub searchFor { ! my $client = shift; ! $client->searchFor(shift); } *************** *** 73,79 **** $line1 .= string('LCSONGS'); } ! $line2 = "ABC"; ! $line2 .= " "; ! substr($line2, 39, 1) = chr($SliMP3::VFD::RIGHTARROW); return ($line1, $line2); --- 186,203 ---- $line1 .= string('LCSONGS'); } ! ! $line2 = ""; ! for (my $i = 0; $i < scalar @{$client->searchTerm}; $i++) { ! if (!defined $client->searchTerm($i)) { last; }; ! ! if ($i == $client->searchCursor) { ! $line2 .= $SliMP3::VFD::CURSORPOS; ! } ! $line2 .= $client->searchTerm($i); ! } ! # if (length($line2) > 2 && substr($line2, -1, 1) eq chr($SliMP3::VFD::RIGHTARROW)) { ! # $line2 .= " "; ! # substr($line2, 39, 1) = chr($SliMP3::VFD::RIGHTARROW); ! # } return ($line1, $line2); Index: Shooter.pm =================================================================== RCS file: /cvsroot/slimp3/slimp3/server/lib/SliMP3/Buttons/Shooter.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Shooter.pm 20 Feb 2002 23:01:34 -0000 1.1 --- Shooter.pm 27 Feb 2002 00:03:24 -0000 1.2 *************** *** 36,40 **** my @oldlines = SliMP3::Display::curLines($client); ! SliMP3::Buttons::Home::setMode($client); SliMP3::Animation::pushRight($client, @oldlines, SliMP3::Display::curLines($client)); }, --- 36,40 ---- my @oldlines = SliMP3::Display::curLines($client); ! SliMP3::Buttons::Common::setMode($client, 'home'); SliMP3::Animation::pushRight($client, @oldlines, SliMP3::Display::curLines($client)); }, *************** *** 98,102 **** $client->buttons(\%buttons); $client->lines(\&lines); - $client->mode('shooter'); $client->cpos(1); --- 98,101 ---- *************** *** 144,148 **** my $nextrun = time() + $framerate; ! if ($client->mode eq 'shooter') { SliMP3::Timers::setTimer($client, $nextrun, \&g_advance, ($nextrun)); } --- 143,147 ---- my $nextrun = time() + $framerate; ! if (SliMP3::Buttons::Common::mode($client) eq 'shooter') { SliMP3::Timers::setTimer($client, $nextrun, \&g_advance, ($nextrun)); } Index: SlimTris.pm =================================================================== RCS file: /cvsroot/slimp3/slimp3/server/lib/SliMP3/Buttons/SlimTris.pm,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** SlimTris.pm 15 Feb 2002 05:00:34 -0000 1.2 --- SlimTris.pm 27 Feb 2002 00:03:24 -0000 1.3 *************** *** 71,75 **** if ($button eq 'left') { @oldlines = SliMP3::Display::curLines($client); ! SliMP3::Buttons::Home::setMode($client); SliMP3::Animation::pushRight($client, @oldlines, SliMP3::Display::curLines($client)); return; --- 71,75 ---- if ($button eq 'left') { @oldlines = SliMP3::Display::curLines($client); ! SliMP3::Buttons::Common::setMode($client, 'home'); SliMP3::Animation::pushRight($client, @oldlines, SliMP3::Display::curLines($client)); return; *************** *** 289,293 **** $client->buttons(\%buttons); $client->lines(\&lines); - $client->mode('slimtris'); } --- 289,292 ---- Index: TrackInfo.pm =================================================================== RCS file: /cvsroot/slimp3/slimp3/server/lib/SliMP3/Buttons/TrackInfo.pm,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** TrackInfo.pm 23 Feb 2002 22:17:46 -0000 1.14 --- TrackInfo.pm 27 Feb 2002 00:03:24 -0000 1.15 *************** *** 37,47 **** # doesn't do anything, we're already at the top level my @oldlines = SliMP3::Display::curLines($client); ! if ($client->prevmode() eq 'browse') { ! SliMP3::Buttons::Browse::setMode($client); ! } elsif ($client->prevmode() eq 'browseid3') { ! SliMP3::Buttons::BrowseID3::setMode($client); ! } else { ! SliMP3::Buttons::Playlist::setMode($client); ! } SliMP3::Animation::pushRight($client, @oldlines, SliMP3::Display::curLines($client)); }, --- 37,41 ---- # doesn't do anything, we're already at the top level my @oldlines = SliMP3::Display::curLines($client); ! SliMP3::Buttons::Common::popMode($client); SliMP3::Animation::pushRight($client, @oldlines, SliMP3::Display::curLines($client)); }, *************** *** 56,77 **** 'play' => sub { my $client = shift; ! if ($client->prevmode() eq 'browse') { ! SliMP3::Buttons::Browse::setMode($client); ! SliMP3::Buttons::Browse::play($client); ! } else { ! SliMP3::Buttons::Playlist::setMode($client); ! SliMP3::Buttons::Playlist::play($client); ! } }, 'rec' => sub { my $client = shift; ! if ($client->prevmode() eq 'browse') { ! SliMP3::Buttons::Browse::setMode($client); ! SliMP3::Buttons::Browse::rec($client); ! } else { ! SliMP3::Buttons::Playlist::setMode($client); ! SliMP3::Buttons::Playlist::rec($client); ! } }, --- 50,61 ---- 'play' => sub { my $client = shift; ! SliMP3::Buttons::Common::popMode($client); ! SliMP3::IR::executeButton($client, 'play'); }, 'rec' => sub { my $client = shift; ! SliMP3::Buttons::Common::popMode($client); ! SliMP3::IR::executeButton($client, 'rec'); }, *************** *** 99,114 **** sub setMode { my $client = shift; - my $item = shift; - - $client->trackInfoTrack($item); - preloadLines($client, $item); - $client->trackInfoLine(0); $client->buttons(\%buttons); $client->lines(\&lines); - $client->prevmode($client->mode()); - $client->mode('trackinfo'); } sub preloadLines { --- 83,100 ---- sub setMode { my $client = shift; $client->trackInfoLine(0); $client->buttons(\%buttons); $client->lines(\&lines); } + + sub track { + my $client = shift; + my $item = shift; + + $client->trackInfoTrack($item); + preloadLines($client, $item); + } + sub preloadLines { |