fix problem with status update (#3740)
This commit is contained in:
@@ -43,7 +43,6 @@ Playlist *myPlaylist;
|
|||||||
|
|
||||||
bool Playlist::ReloadTotalLength = 0;
|
bool Playlist::ReloadTotalLength = 0;
|
||||||
bool Playlist::ReloadRemaining = false;
|
bool Playlist::ReloadRemaining = false;
|
||||||
unsigned Playlist::Version = 0;
|
|
||||||
|
|
||||||
namespace {//
|
namespace {//
|
||||||
|
|
||||||
@@ -52,7 +51,8 @@ bool playlistEntryMatcher(const boost::regex &rx, const MPD::Song &s);
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Playlist::Playlist() : itsTotalLength(0), itsRemainingTime(0), itsScrollBegin(0)
|
Playlist::Playlist()
|
||||||
|
: itsTotalLength(0), itsRemainingTime(0), itsScrollBegin(0), m_old_playlist_version(0)
|
||||||
{
|
{
|
||||||
w = NC::Menu<MPD::Song>(0, MainStartY, COLS, MainHeight, Config.columns_in_playlist && Config.titles_visibility ? Display::Columns(COLS) : "", Config.main_color, NC::Border::None);
|
w = NC::Menu<MPD::Song>(0, MainStartY, COLS, MainHeight, Config.columns_in_playlist && Config.titles_visibility ? Display::Columns(COLS) : "", Config.main_color, NC::Border::None);
|
||||||
w.cyclicScrolling(Config.use_cyclic_scrolling);
|
w.cyclicScrolling(Config.use_cyclic_scrolling);
|
||||||
@@ -335,9 +335,9 @@ void Playlist::setStatus(MPD::Status status)
|
|||||||
m_status = status;
|
m_status = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int Playlist::version() const
|
unsigned Playlist::oldVersion() const
|
||||||
{
|
{
|
||||||
return m_status.empty() ? 0 : m_status.playlistVersion();
|
return m_old_playlist_version;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Playlist::currentSongPosition() const
|
int Playlist::currentSongPosition() const
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ struct Playlist: Screen<NC::Menu<MPD::Song>>, Filterable, HasSongs, Searchable,
|
|||||||
void SetSelectedItemsPriority(int prio);
|
void SetSelectedItemsPriority(int prio);
|
||||||
|
|
||||||
void setStatus(MPD::Status status);
|
void setStatus(MPD::Status status);
|
||||||
unsigned version() const;
|
unsigned oldVersion() const;
|
||||||
int currentSongPosition() const;
|
int currentSongPosition() const;
|
||||||
unsigned currentSongLength() const;
|
unsigned currentSongLength() const;
|
||||||
|
|
||||||
@@ -87,7 +87,6 @@ struct Playlist: Screen<NC::Menu<MPD::Song>>, Filterable, HasSongs, Searchable,
|
|||||||
void registerHash(size_t hash);
|
void registerHash(size_t hash);
|
||||||
void unregisterHash(size_t hash);
|
void unregisterHash(size_t hash);
|
||||||
|
|
||||||
static unsigned Version;
|
|
||||||
static bool ReloadTotalLength;
|
static bool ReloadTotalLength;
|
||||||
static bool ReloadRemaining;
|
static bool ReloadRemaining;
|
||||||
|
|
||||||
@@ -107,6 +106,7 @@ private:
|
|||||||
time_t itsTimer;
|
time_t itsTimer;
|
||||||
|
|
||||||
MPD::Status m_status;
|
MPD::Status m_status;
|
||||||
|
unsigned m_old_playlist_version;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern Playlist *myPlaylist;
|
extern Playlist *myPlaylist;
|
||||||
|
|||||||
@@ -167,6 +167,9 @@ void Status::update(int event)
|
|||||||
{
|
{
|
||||||
MPD::Status old_status = m_status;
|
MPD::Status old_status = m_status;
|
||||||
m_status = Mpd.getStatus();
|
m_status = Mpd.getStatus();
|
||||||
|
m_player_state = m_status.playerState();
|
||||||
|
m_volume = m_status.volume();
|
||||||
|
myPlaylist->setStatus(m_status);
|
||||||
|
|
||||||
if (event & MPD_IDLE_DATABASE)
|
if (event & MPD_IDLE_DATABASE)
|
||||||
Changes::database();
|
Changes::database();
|
||||||
@@ -269,7 +272,7 @@ void Status::Changes::playlist()
|
|||||||
myPlaylist->main().resizeList(playlist_length);
|
myPlaylist->main().resizeList(playlist_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
Mpd.GetPlaylistChanges(myPlaylist->version(), [](MPD::Song &&s) {
|
Mpd.GetPlaylistChanges(myPlaylist->oldVersion(), [](MPD::Song &&s) {
|
||||||
size_t pos = s.getPosition();
|
size_t pos = s.getPosition();
|
||||||
if (pos < myPlaylist->main().size())
|
if (pos < myPlaylist->main().size())
|
||||||
{
|
{
|
||||||
@@ -282,8 +285,6 @@ void Status::Changes::playlist()
|
|||||||
myPlaylist->main().addItem(s);
|
myPlaylist->main().addItem(s);
|
||||||
myPlaylist->registerHash(s.getHash());
|
myPlaylist->registerHash(s.getHash());
|
||||||
});
|
});
|
||||||
|
|
||||||
myPlaylist->setStatus(m_status);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (State::player() != MPD::psStop)
|
if (State::player() != MPD::psStop)
|
||||||
@@ -330,8 +331,6 @@ void Status::Changes::database()
|
|||||||
|
|
||||||
void Status::Changes::playerState()
|
void Status::Changes::playerState()
|
||||||
{
|
{
|
||||||
m_player_state = m_status.playerState();
|
|
||||||
|
|
||||||
switch (State::player())
|
switch (State::player())
|
||||||
{
|
{
|
||||||
case MPD::psPlay:
|
case MPD::psPlay:
|
||||||
@@ -622,7 +621,6 @@ void Status::Changes::flags()
|
|||||||
|
|
||||||
void Status::Changes::mixer()
|
void Status::Changes::mixer()
|
||||||
{
|
{
|
||||||
m_volume = m_status.volume();
|
|
||||||
if (!Config.display_volume_level || (!Config.header_visibility && !Config.new_design))
|
if (!Config.display_volume_level || (!Config.header_visibility && !Config.new_design))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user