Seek immediately after invoking appropriate action once

master
Andrzej Rybczak 9 years ago
parent 9227eb8f80
commit 05bf53d0ab
  1. 1
      NEWS
  2. 36
      src/actions.cpp

@ -24,6 +24,7 @@ ncmpcpp-0.8 (????-??-??)
* Added test that checks if lyrics fetchers work (available via command line parameter --test-lyrics-fetchers).
* Fixed fetching lyrics from justsomelyrics.com.
* Added support for fetching lyrics from jah-lyrics.com and plyrics.com.
* Seek immediately after invoking appropriate action once.
ncmpcpp-0.7.7 (2016-10-31)
* Fixed compilation on 32bit platforms.

@ -84,7 +84,7 @@ bool scrollTagCanBeRun(NC::List *&list, const SongList *&songs);
void scrollTagUpRun(NC::List *list, const SongList *songs, MPD::Song::GetFunction get);
void scrollTagDownRun(NC::List *list, const SongList *songs, MPD::Song::GetFunction get);
void seek();
void seek(SearchDirection sd);
void findItem(const SearchDirection direction);
void listsChangeFinisher();
@ -1033,7 +1033,7 @@ bool SeekForward::canBeRun()
void SeekForward::run()
{
seek();
seek(SearchDirection::Forward);
}
bool SeekBackward::canBeRun()
@ -1043,7 +1043,7 @@ bool SeekBackward::canBeRun()
void SeekBackward::run()
{
seek();
seek(SearchDirection::Backward);
}
bool ToggleDisplayMode::canBeRun()
@ -2876,7 +2876,7 @@ void scrollTagDownRun(NC::List *list, const SongList *songs, MPD::Song::GetFunct
}
}
void seek()
void seek(SearchDirection sd)
{
using Global::wHeader;
using Global::wFooter;
@ -2894,7 +2894,7 @@ void seek()
unsigned songpos = Status::State::elapsedTime();
auto t = Timer;
int old_timeout = wFooter->getTimeout();
wFooter->setTimeout(BaseScreen::defaultWindowTimeout);
@ -2938,14 +2938,9 @@ void seek()
NC::Key::Type input = readKey(*wFooter);
auto k = Bindings.get(input);
if (hasRunnableAction(k, Actions::Type::SeekForward))
{
if (songpos < Status::State::totalTime())
songpos = std::min(songpos + howmuch, Status::State::totalTime());
}
else if (hasRunnableAction(k, Actions::Type::SeekBackward))
switch (sd)
{
case SearchDirection::Backward:
if (songpos > 0)
{
if (songpos < howmuch)
@ -2953,10 +2948,13 @@ void seek()
else
songpos -= howmuch;
}
}
else
break;
case SearchDirection::Forward:
if (songpos < Status::State::totalTime())
songpos = std::min(songpos + howmuch, Status::State::totalTime());
break;
};
std::string tracklength;
// FIXME: merge this with the code in status.cpp
switch (Config.design)
@ -2998,6 +2996,14 @@ void seek()
}
Progressbar::draw(songpos, Status::State::totalTime());
wFooter->refresh();
auto k = Bindings.get(input);
if (hasRunnableAction(k, Actions::Type::SeekBackward))
sd = SearchDirection::Backward;
else if (hasRunnableAction(k, Actions::Type::SeekForward))
sd = SearchDirection::Forward;
else
break;
}
SeekingInProgress = false;
Mpd.Seek(Status::State::currentSongPosition(), songpos);

Loading…
Cancel
Save