summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/status.cpp85
-rw-r--r--src/status.h2
2 files changed, 46 insertions, 41 deletions
diff --git a/src/status.cpp b/src/status.cpp
index b69bbdff..9ef41de7 100644
--- a/src/status.cpp
+++ b/src/status.cpp
@@ -68,6 +68,14 @@ void WindowTitle(const std::string &status)
}
#endif // !USE_PDCURSES
+void DrawNowPlayingTitle(MPD::Song &np)
+{
+ if (np.empty())
+ np = myPlaylist->nowPlayingSong();
+ if (!np.empty())
+ WindowTitle(np.toString(Config.song_window_title_format));
+}
+
void StatusbarMPDCallback()
{
Mpd.OrderDataFetching();
@@ -136,6 +144,32 @@ void UnlockStatusbar()
}
}
+void TryToClearStatusbarMessage()
+{
+ using Global::Timer;
+ if (lock_statusbar_delay > 0)
+ {
+ if (Timer.tv_sec >= time_of_statusbar_lock.tv_sec+lock_statusbar_delay)
+ {
+ lock_statusbar_delay = -1;
+
+ if (Config.statusbar_visibility)
+ block_statusbar_update = !allow_statusbar_unlock;
+ else
+ block_progressbar_update = !allow_statusbar_unlock;
+
+ if (Mpd.GetState() != MPD::psPlay && !block_statusbar_update && !block_progressbar_update)
+ {
+ if (Config.new_design)
+ DrawProgressbar(Mpd.GetElapsedTime(), Mpd.GetTotalTime());
+ else
+ Statusbar() << wclrtoeol;
+ wFooter->refresh();
+ }
+ }
+ }
+}
+
void TraceMpdStatus()
{
static timeval past = { 0, 0 };
@@ -169,27 +203,7 @@ void TraceMpdStatus()
myPlaylist->Items->refresh();
}
- if (lock_statusbar_delay > 0)
- {
- if (Timer.tv_sec >= time_of_statusbar_lock.tv_sec+lock_statusbar_delay)
- {
- lock_statusbar_delay = -1;
-
- if (Config.statusbar_visibility)
- block_statusbar_update = !allow_statusbar_unlock;
- else
- block_progressbar_update = !allow_statusbar_unlock;
-
- if (Mpd.GetState() != MPD::psPlay && !block_statusbar_update && !block_progressbar_update)
- {
- if (Config.new_design)
- DrawProgressbar(Mpd.GetElapsedTime(), Mpd.GetTotalTime());
- else
- Statusbar() << wclrtoeol;
- wFooter->refresh();
- }
- }
- }
+ TryToClearStatusbarMessage();
}
void NcmpcppErrorCallback(MPD::Connection *, int errorid, const char *msg, void *)
@@ -221,17 +235,14 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
static size_t first_line_scroll_begin = 0;
static size_t second_line_scroll_begin = 0;
static std::string player_state;
- static MPD::Song np;
+
+ MPD::Song np;
int sx = wFooter->getX();
int sy = wFooter->getY();
if (changed.Playlist)
{
- np = Mpd.GetCurrentlyPlayingSong();
- if (!np.empty())
- WindowTitle(np.toString(Config.song_window_title_format));
-
myPlaylist->Items->clearSearchResults();
withUnfilteredMenuReapplyFilter(*myPlaylist->Items, []() {
size_t playlist_length = Mpd.GetPlaylistLength();
@@ -261,6 +272,8 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
}
});
+ DrawNowPlayingTitle(np);
+
Playlist::ReloadTotalLength = true;
Playlist::ReloadRemaining = true;
@@ -323,8 +336,7 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
}
case MPD::psPlay:
{
- if (!np.empty())
- WindowTitle(np.toString(Config.song_window_title_format));
+ DrawNowPlayingTitle(np);
player_state = Config.new_design ? "[playing]" : "Playing: ";
Playlist::ReloadRemaining = true;
if (Mpd.GetOldState() == MPD::psStop) // show track info in status immediately
@@ -389,12 +401,7 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
Lyrics::DownloadInBackground(myPlaylist->nowPlayingSong());
# endif // HAVE_CURL_CURL_H
- if (Mpd.isPlaying())
- {
- np = Mpd.GetCurrentlyPlayingSong();
- if (!np.empty())
- WindowTitle(np.toString(Config.song_window_title_format));
- }
+ DrawNowPlayingTitle(np);
if (Config.autocenter_mode && !myPlaylist->Items->isFiltered())
myPlaylist->Items->highlight(Mpd.GetCurrentlyPlayingSongPos());
@@ -409,14 +416,10 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
}
if (changed.ElapsedTime || changed.SongID || Global::RedrawStatusbar)
{
- if (np.empty())
- {
- np = Mpd.GetCurrentlyPlayingSong();
- if (!np.empty())
- WindowTitle(utf_to_locale_cpy(np.toString(Config.song_window_title_format)));
- }
- if (!np.empty() && Mpd.isPlaying())
+ if (Mpd.isPlaying())
{
+ DrawNowPlayingTitle(np);
+
std::string tracklength;
if (Config.new_design)
{
diff --git a/src/status.h b/src/status.h
index f3af6970..b91d8e5d 100644
--- a/src/status.h
+++ b/src/status.h
@@ -30,6 +30,8 @@
# define WindowTitle(x);
#endif // USE_PDCURSES
+void DrawNowPlayingTitle();
+
void LockProgressbar();
void UnlockProgressbar();