move code responsible for marking song as now playing to display functions
This commit is contained in:
@@ -19,7 +19,6 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "display.h"
|
#include "display.h"
|
||||||
#include "global.h"
|
|
||||||
#include "helpers.h"
|
#include "helpers.h"
|
||||||
#include "playlist.h"
|
#include "playlist.h"
|
||||||
|
|
||||||
@@ -106,6 +105,10 @@ void Display::SongsInColumns(const MPD::Song &s, void *, Menu<MPD::Song> *menu)
|
|||||||
if (!s.Localized())
|
if (!s.Localized())
|
||||||
const_cast<MPD::Song *>(&s)->Localize();
|
const_cast<MPD::Song *>(&s)->Localize();
|
||||||
|
|
||||||
|
bool is_now_playing = menu == myPlaylist->Items && menu->CurrentlyDrawedPosition() == myPlaylist->NowPlaying;
|
||||||
|
if (is_now_playing)
|
||||||
|
*menu << fmtBold;
|
||||||
|
|
||||||
if (Config.columns.empty())
|
if (Config.columns.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -205,6 +208,8 @@ void Display::SongsInColumns(const MPD::Song &s, void *, Menu<MPD::Song> *menu)
|
|||||||
}
|
}
|
||||||
if ((--it)->color != clDefault)
|
if ((--it)->color != clDefault)
|
||||||
*menu << clEnd;
|
*menu << clEnd;
|
||||||
|
if (is_now_playing)
|
||||||
|
*menu << fmtBoldEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Display::Songs(const MPD::Song &s, void *data, Menu<MPD::Song> *menu)
|
void Display::Songs(const MPD::Song &s, void *data, Menu<MPD::Song> *menu)
|
||||||
@@ -212,6 +217,10 @@ void Display::Songs(const MPD::Song &s, void *data, Menu<MPD::Song> *menu)
|
|||||||
if (!s.Localized())
|
if (!s.Localized())
|
||||||
const_cast<MPD::Song *>(&s)->Localize();
|
const_cast<MPD::Song *>(&s)->Localize();
|
||||||
|
|
||||||
|
bool is_now_playing = menu == myPlaylist->Items && menu->CurrentlyDrawedPosition() == myPlaylist->NowPlaying;
|
||||||
|
if (is_now_playing)
|
||||||
|
*menu << fmtBold;
|
||||||
|
|
||||||
std::string line = s.toString(*static_cast<std::string *>(data));
|
std::string line = s.toString(*static_cast<std::string *>(data));
|
||||||
for (std::string::const_iterator it = line.begin(); it != line.end(); ++it)
|
for (std::string::const_iterator it = line.begin(); it != line.end(); ++it)
|
||||||
{
|
{
|
||||||
@@ -235,6 +244,8 @@ void Display::Songs(const MPD::Song &s, void *data, Menu<MPD::Song> *menu)
|
|||||||
else
|
else
|
||||||
*menu << *it;
|
*menu << *it;
|
||||||
}
|
}
|
||||||
|
if (is_now_playing)
|
||||||
|
*menu << fmtBoldEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Display::Tags(const MPD::Song &s, void *data, Menu<MPD::Song> *menu)
|
void Display::Tags(const MPD::Song &s, void *data, Menu<MPD::Song> *menu)
|
||||||
|
|||||||
@@ -806,18 +806,32 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
std::vector<size_t> list;
|
std::vector<size_t> list;
|
||||||
myPlaylist->Items->GetSelected(list);
|
myPlaylist->Items->GetSelected(list);
|
||||||
|
|
||||||
for (std::vector<size_t>::iterator it = list.begin(); it != list.end(); ++it)
|
|
||||||
if (*it == size_t(myPlaylist->NowPlaying) && list.front() > 0)
|
|
||||||
myPlaylist->Items->Bold(myPlaylist->NowPlaying, 0);
|
|
||||||
|
|
||||||
std::vector<size_t> origs(list);
|
std::vector<size_t> origs(list);
|
||||||
|
|
||||||
|
// NOTICE: since ncmpcpp only pretends to move the songs until the key is
|
||||||
|
// released, mpd doesn't know about the change while the songs are moved
|
||||||
|
// so wee need to block playlist update for this time and also if one of
|
||||||
|
// the songs being moved is currently playing, now playing update to prevent
|
||||||
|
// mpd from 'updating' and thus showing wrong position
|
||||||
|
|
||||||
|
bool modify_now_playing = 0;
|
||||||
|
for (std::vector<size_t>::iterator it = list.begin(); it != list.end(); ++it)
|
||||||
|
{
|
||||||
|
if (*it == size_t(myPlaylist->NowPlaying) && list.front() > 0)
|
||||||
|
{
|
||||||
|
modify_now_playing = 1;
|
||||||
|
Playlist::BlockNowPlayingUpdate = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while (Keypressed(input, Key.MvSongUp) && list.front() > 0)
|
while (Keypressed(input, Key.MvSongUp) && list.front() > 0)
|
||||||
{
|
{
|
||||||
TraceMpdStatus();
|
TraceMpdStatus();
|
||||||
Playlist::BlockUpdate = 1;
|
Playlist::BlockUpdate = 1;
|
||||||
myPlaylist->UpdateTimer();
|
myPlaylist->UpdateTimer();
|
||||||
|
if (modify_now_playing)
|
||||||
|
--myPlaylist->NowPlaying;
|
||||||
for (std::vector<size_t>::iterator it = list.begin(); it != list.end(); ++it)
|
for (std::vector<size_t>::iterator it = list.begin(); it != list.end(); ++it)
|
||||||
{
|
{
|
||||||
--*it;
|
--*it;
|
||||||
@@ -829,6 +843,7 @@ int main(int argc, char *argv[])
|
|||||||
myPlaylist->Items->Refresh();
|
myPlaylist->Items->Refresh();
|
||||||
myPlaylist->Items->ReadKey(input);
|
myPlaylist->Items->ReadKey(input);
|
||||||
}
|
}
|
||||||
|
Playlist::BlockNowPlayingUpdate = 0;
|
||||||
Mpd.StartCommandsList();
|
Mpd.StartCommandsList();
|
||||||
for (size_t i = 0; i < list.size(); ++i)
|
for (size_t i = 0; i < list.size(); ++i)
|
||||||
Mpd.Move(origs[i], list[i]);
|
Mpd.Move(origs[i], list[i]);
|
||||||
@@ -838,14 +853,16 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
size_t from, to;
|
size_t from, to;
|
||||||
from = to = myPlaylist->Items->Choice();
|
from = to = myPlaylist->Items->Choice();
|
||||||
// unbold now playing as if song changes during move, this won't be unbolded.
|
bool modify_now_playing = from == size_t(myPlaylist->NowPlaying);
|
||||||
if (to == size_t(myPlaylist->NowPlaying) && to > 0)
|
if (modify_now_playing)
|
||||||
myPlaylist->Items->Bold(myPlaylist->NowPlaying, 0);
|
Playlist::BlockNowPlayingUpdate = 1;
|
||||||
while (Keypressed(input, Key.MvSongUp) && to > 0)
|
while (Keypressed(input, Key.MvSongUp) && to > 0)
|
||||||
{
|
{
|
||||||
TraceMpdStatus();
|
TraceMpdStatus();
|
||||||
Playlist::BlockUpdate = 1;
|
Playlist::BlockUpdate = 1;
|
||||||
myPlaylist->UpdateTimer();
|
myPlaylist->UpdateTimer();
|
||||||
|
if (modify_now_playing)
|
||||||
|
--myPlaylist->NowPlaying;
|
||||||
--to;
|
--to;
|
||||||
myPlaylist->Items->at(from).SetPosition(to);
|
myPlaylist->Items->at(from).SetPosition(to);
|
||||||
myPlaylist->Items->at(to).SetPosition(from);
|
myPlaylist->Items->at(to).SetPosition(from);
|
||||||
@@ -855,6 +872,7 @@ int main(int argc, char *argv[])
|
|||||||
myPlaylist->Items->ReadKey(input);
|
myPlaylist->Items->ReadKey(input);
|
||||||
}
|
}
|
||||||
Mpd.Move(from, to);
|
Mpd.Move(from, to);
|
||||||
|
Playlist::BlockNowPlayingUpdate = 0;
|
||||||
UpdateStatusImmediately = 1;
|
UpdateStatusImmediately = 1;
|
||||||
}
|
}
|
||||||
myPlaylist->Items->SetTimeout(ncmpcpp_window_timeout);
|
myPlaylist->Items->SetTimeout(ncmpcpp_window_timeout);
|
||||||
@@ -920,18 +938,26 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
std::vector<size_t> list;
|
std::vector<size_t> list;
|
||||||
myPlaylist->Items->GetSelected(list);
|
myPlaylist->Items->GetSelected(list);
|
||||||
|
|
||||||
for (std::vector<size_t>::iterator it = list.begin(); it != list.end(); ++it)
|
|
||||||
if (*it == size_t(myPlaylist->NowPlaying) && list.back() < myPlaylist->Items->Size()-1)
|
|
||||||
myPlaylist->Items->Bold(myPlaylist->NowPlaying, 0);
|
|
||||||
|
|
||||||
std::vector<size_t> origs(list);
|
std::vector<size_t> origs(list);
|
||||||
|
|
||||||
|
bool modify_now_playing = 0;
|
||||||
|
for (std::vector<size_t>::iterator it = list.begin(); it != list.end(); ++it)
|
||||||
|
{
|
||||||
|
if (*it == size_t(myPlaylist->NowPlaying) && list.back() < myPlaylist->Items->Size()-1)
|
||||||
|
{
|
||||||
|
modify_now_playing = 1;
|
||||||
|
Playlist::BlockNowPlayingUpdate = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while (Keypressed(input, Key.MvSongDown) && list.back() < myPlaylist->Items->Size()-1)
|
while (Keypressed(input, Key.MvSongDown) && list.back() < myPlaylist->Items->Size()-1)
|
||||||
{
|
{
|
||||||
TraceMpdStatus();
|
TraceMpdStatus();
|
||||||
Playlist::BlockUpdate = 1;
|
Playlist::BlockUpdate = 1;
|
||||||
myPlaylist->UpdateTimer();
|
myPlaylist->UpdateTimer();
|
||||||
|
if (modify_now_playing)
|
||||||
|
++myPlaylist->NowPlaying;
|
||||||
for (std::vector<size_t>::reverse_iterator it = list.rbegin(); it != list.rend(); ++it)
|
for (std::vector<size_t>::reverse_iterator it = list.rbegin(); it != list.rend(); ++it)
|
||||||
{
|
{
|
||||||
++*it;
|
++*it;
|
||||||
@@ -943,6 +969,7 @@ int main(int argc, char *argv[])
|
|||||||
myPlaylist->Items->Refresh();
|
myPlaylist->Items->Refresh();
|
||||||
myPlaylist->Items->ReadKey(input);
|
myPlaylist->Items->ReadKey(input);
|
||||||
}
|
}
|
||||||
|
Playlist::BlockNowPlayingUpdate = 0;
|
||||||
Mpd.StartCommandsList();
|
Mpd.StartCommandsList();
|
||||||
for (int i = list.size()-1; i >= 0; --i)
|
for (int i = list.size()-1; i >= 0; --i)
|
||||||
Mpd.Move(origs[i], list[i]);
|
Mpd.Move(origs[i], list[i]);
|
||||||
@@ -952,14 +979,16 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
size_t from, to;
|
size_t from, to;
|
||||||
from = to = myPlaylist->Items->Choice();
|
from = to = myPlaylist->Items->Choice();
|
||||||
// unbold now playing as if song changes during move, this won't be unbolded.
|
bool modify_now_playing = from == size_t(myPlaylist->NowPlaying);
|
||||||
if (to == size_t(myPlaylist->NowPlaying) && to < myPlaylist->Items->Size()-1)
|
if (modify_now_playing)
|
||||||
myPlaylist->Items->Bold(myPlaylist->NowPlaying, 0);
|
Playlist::BlockNowPlayingUpdate = 1;
|
||||||
while (Keypressed(input, Key.MvSongDown) && to < myPlaylist->Items->Size()-1)
|
while (Keypressed(input, Key.MvSongDown) && to < myPlaylist->Items->Size()-1)
|
||||||
{
|
{
|
||||||
TraceMpdStatus();
|
TraceMpdStatus();
|
||||||
Playlist::BlockUpdate = 1;
|
Playlist::BlockUpdate = 1;
|
||||||
myPlaylist->UpdateTimer();
|
myPlaylist->UpdateTimer();
|
||||||
|
if (modify_now_playing)
|
||||||
|
++myPlaylist->NowPlaying;
|
||||||
++to;
|
++to;
|
||||||
myPlaylist->Items->at(from).SetPosition(to);
|
myPlaylist->Items->at(from).SetPosition(to);
|
||||||
myPlaylist->Items->at(to).SetPosition(from);
|
myPlaylist->Items->at(to).SetPosition(from);
|
||||||
@@ -969,6 +998,7 @@ int main(int argc, char *argv[])
|
|||||||
myPlaylist->Items->ReadKey(input);
|
myPlaylist->Items->ReadKey(input);
|
||||||
}
|
}
|
||||||
Mpd.Move(from, to);
|
Mpd.Move(from, to);
|
||||||
|
Playlist::BlockNowPlayingUpdate = 0;
|
||||||
UpdateStatusImmediately = 1;
|
UpdateStatusImmediately = 1;
|
||||||
}
|
}
|
||||||
myPlaylist->Items->SetTimeout(ncmpcpp_window_timeout);
|
myPlaylist->Items->SetTimeout(ncmpcpp_window_timeout);
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
class Playlist : public Screen<Window>
|
class Playlist : public Screen<Window>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Playlist() : NowPlaying(-1), OldPlaying(-1), itsTotalLength(0), itsRemainingTime(0), itsScrollBegin(0) { }
|
Playlist() : NowPlaying(-1), itsTotalLength(0), itsRemainingTime(0), itsScrollBegin(0) { }
|
||||||
~Playlist() { }
|
~Playlist() { }
|
||||||
|
|
||||||
virtual void SwitchTo();
|
virtual void SwitchTo();
|
||||||
@@ -73,7 +73,6 @@ class Playlist : public Screen<Window>
|
|||||||
Menu< MPD::Song > *Items;
|
Menu< MPD::Song > *Items;
|
||||||
|
|
||||||
int NowPlaying;
|
int NowPlaying;
|
||||||
int OldPlaying;
|
|
||||||
|
|
||||||
static bool ReloadTotalLength;
|
static bool ReloadTotalLength;
|
||||||
static bool ReloadRemaining;
|
static bool ReloadRemaining;
|
||||||
|
|||||||
@@ -185,25 +185,8 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
|
|||||||
*wFooter << fmtBold;
|
*wFooter << fmtBold;
|
||||||
wFooter->GetXY(sx, sy);
|
wFooter->GetXY(sx, sy);
|
||||||
|
|
||||||
if ((myPlaylist->NowPlaying != Mpd.GetCurrentSongPos() || changed.SongID) && !Playlist::BlockNowPlayingUpdate)
|
if (!Playlist::BlockNowPlayingUpdate)
|
||||||
{
|
|
||||||
myPlaylist->OldPlaying = myPlaylist->NowPlaying;
|
|
||||||
myPlaylist->NowPlaying = Mpd.GetCurrentSongPos();
|
myPlaylist->NowPlaying = Mpd.GetCurrentSongPos();
|
||||||
bool was_filtered = myPlaylist->Items->isFiltered();
|
|
||||||
myPlaylist->Items->ShowAll();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
myPlaylist->Items->Bold(myPlaylist->OldPlaying, 0);
|
|
||||||
}
|
|
||||||
catch (std::out_of_range) { }
|
|
||||||
try
|
|
||||||
{
|
|
||||||
myPlaylist->Items->Bold(myPlaylist->NowPlaying, 1);
|
|
||||||
}
|
|
||||||
catch (std::out_of_range) { }
|
|
||||||
if (was_filtered)
|
|
||||||
myPlaylist->Items->ShowFiltered();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (changed.Playlist)
|
if (changed.Playlist)
|
||||||
{
|
{
|
||||||
@@ -234,7 +217,7 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// otherwise just add it to playlist
|
// otherwise just add it to playlist
|
||||||
myPlaylist->Items->AddOption(**it, myPlaylist->NowPlaying == pos);
|
myPlaylist->Items->AddOption(**it);
|
||||||
}
|
}
|
||||||
myPlaylist->Items->at(pos).CopyPtr(0);
|
myPlaylist->Items->at(pos).CopyPtr(0);
|
||||||
(*it)->NullMe();
|
(*it)->NullMe();
|
||||||
|
|||||||
Reference in New Issue
Block a user