From a20469b403d9c6e936bb727da6ef970ed8257f59 Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Fri, 13 Mar 2009 12:58:17 +0100 Subject: [PATCH] never get full playlist from mpd, always request for changes --- src/menu.h | 21 +++++++++++++++------ src/search_engine.cpp | 2 +- src/status.cpp | 10 +++------- src/tag_editor.cpp | 2 +- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/menu.h b/src/menu.h index ffd2ca8e..8baab087 100644 --- a/src/menu.h +++ b/src/menu.h @@ -109,7 +109,7 @@ namespace NCurses void SetGetStringFunctionUserData(void *data) { itsGetStringFunctionUserData = data; } void Reserve(size_t size); - void ResizeBuffer(size_t size); + void ResizeList(size_t size); void AddOption(const T &item, bool is_bold = 0, bool is_static = 0); void AddSeparator(); void InsertOption(size_t pos, const T &Item, bool is_bold = 0, bool is_static = 0); @@ -254,12 +254,21 @@ template void NCurses::Menu::Reserve(size_t size) itsOptions.reserve(size); } -template void NCurses::Menu::ResizeBuffer(size_t size) +template void NCurses::Menu::ResizeList(size_t size) { - itsOptions.resize(size); - for (size_t i = 0; i < size; i++) - if (!itsOptions[i]) - itsOptions[i] = new Option(); + if (size > itsOptions.size()) + { + itsOptions.resize(size); + for (size_t i = 0; i < size; i++) + if (!itsOptions[i]) + itsOptions[i] = new Option(); + } + else if (size < itsOptions.size()) + { + for (size_t i = size; i < itsOptions.size(); i++) + delete itsOptions[i]; + itsOptions.resize(size); + } } template void NCurses::Menu::AddOption(const T &item, bool is_bold, bool is_static) diff --git a/src/search_engine.cpp b/src/search_engine.cpp index 710a4aa7..61624a48 100644 --- a/src/search_engine.cpp +++ b/src/search_engine.cpp @@ -345,7 +345,7 @@ void SearchEngine::Prepare() w->SetTitle(""); w->Clear(0); - w->ResizeBuffer(17); + w->ResizeList(17); w->IntoSeparator(10); w->IntoSeparator(14); diff --git a/src/status.cpp b/src/status.cpp index ba00fa7f..e3f0e311 100644 --- a/src/status.cpp +++ b/src/status.cpp @@ -189,16 +189,12 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *) bool was_filtered = myPlaylist->Main()->isFiltered(); myPlaylist->Main()->ShowAll(); SongList list; + size_t playlist_length = Mpd->GetPlaylistLength(); - if (playlist_length < myPlaylist->Main()->Size()) - { - myPlaylist->Main()->Clear(playlist_length < myPlaylist->Main()->GetHeight() && myScreen == myPlaylist); - Mpd->GetPlaylistChanges(-1, list); - } - else - Mpd->GetPlaylistChanges(Mpd->GetOldPlaylistID(), list); + myPlaylist->Main()->ResizeList(playlist_length); + Mpd->GetPlaylistChanges(Mpd->GetOldPlaylistID(), list); myPlaylist->Main()->Reserve(playlist_length); for (SongList::const_iterator it = list.begin(); it != list.end(); it++) { diff --git a/src/tag_editor.cpp b/src/tag_editor.cpp index e279a378..e1d4c650 100644 --- a/src/tag_editor.cpp +++ b/src/tag_editor.cpp @@ -245,7 +245,7 @@ bool TinyTagEditor::GetTags() w->Clear(); w->Reset(); - w->ResizeBuffer(23); + w->ResizeList(23); for (size_t i = 0; i < 7; i++) w->Static(i, 1);