keep proper songs' positions when playlist is modified
This commit is contained in:
@@ -452,6 +452,7 @@ int main(int argc, char *argv[])
|
|||||||
Mpd->QueueDeleteSongId((*myPlaylist->Main())[*it].GetID());
|
Mpd->QueueDeleteSongId((*myPlaylist->Main())[*it].GetID());
|
||||||
myPlaylist->Main()->DeleteOption(*it);
|
myPlaylist->Main()->DeleteOption(*it);
|
||||||
}
|
}
|
||||||
|
myPlaylist->FixPositions(list.front());
|
||||||
ShowMessage("Selected items deleted!");
|
ShowMessage("Selected items deleted!");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -470,6 +471,7 @@ int main(int argc, char *argv[])
|
|||||||
myPlaylist->Main()->Refresh();
|
myPlaylist->Main()->Refresh();
|
||||||
myPlaylist->Main()->ReadKey(input);
|
myPlaylist->Main()->ReadKey(input);
|
||||||
}
|
}
|
||||||
|
myPlaylist->FixPositions(myPlaylist->Main()->Choice());
|
||||||
myPlaylist->Main()->SetTimeout(ncmpcpp_window_timeout);
|
myPlaylist->Main()->SetTimeout(ncmpcpp_window_timeout);
|
||||||
Playlist::BlockNowPlayingUpdate = 0;
|
Playlist::BlockNowPlayingUpdate = 0;
|
||||||
}
|
}
|
||||||
@@ -634,6 +636,8 @@ int main(int argc, char *argv[])
|
|||||||
for (vector<size_t>::iterator it = list.begin(); it != list.end(); it++)
|
for (vector<size_t>::iterator it = list.begin(); it != list.end(); it++)
|
||||||
{
|
{
|
||||||
(*it)--;
|
(*it)--;
|
||||||
|
myPlaylist->Main()->at((*it)+1).SetPosition(*it);
|
||||||
|
myPlaylist->Main()->at(*it).SetPosition((*it)+1);
|
||||||
myPlaylist->Main()->Swap(*it, (*it)+1);
|
myPlaylist->Main()->Swap(*it, (*it)+1);
|
||||||
}
|
}
|
||||||
myPlaylist->Main()->Highlight(list[(list.size()-1)/2]);
|
myPlaylist->Main()->Highlight(list[(list.size()-1)/2]);
|
||||||
@@ -656,6 +660,8 @@ int main(int argc, char *argv[])
|
|||||||
TraceMpdStatus();
|
TraceMpdStatus();
|
||||||
time(&timer);
|
time(&timer);
|
||||||
to--;
|
to--;
|
||||||
|
myPlaylist->Main()->at(from).SetPosition(to);
|
||||||
|
myPlaylist->Main()->at(to).SetPosition(from);
|
||||||
myPlaylist->Main()->Swap(to, to+1);
|
myPlaylist->Main()->Swap(to, to+1);
|
||||||
myPlaylist->Main()->Scroll(wUp);
|
myPlaylist->Main()->Scroll(wUp);
|
||||||
myPlaylist->Main()->Refresh();
|
myPlaylist->Main()->Refresh();
|
||||||
@@ -743,6 +749,8 @@ int main(int argc, char *argv[])
|
|||||||
for (vector<size_t>::reverse_iterator it = list.rbegin(); it != list.rend(); it++)
|
for (vector<size_t>::reverse_iterator it = list.rbegin(); it != list.rend(); it++)
|
||||||
{
|
{
|
||||||
(*it)++;
|
(*it)++;
|
||||||
|
myPlaylist->Main()->at((*it)-1).SetPosition(*it);
|
||||||
|
myPlaylist->Main()->at(*it).SetPosition((*it)-1);
|
||||||
myPlaylist->Main()->Swap(*it, (*it)-1);
|
myPlaylist->Main()->Swap(*it, (*it)-1);
|
||||||
}
|
}
|
||||||
myPlaylist->Main()->Highlight(list[(list.size()-1)/2]);
|
myPlaylist->Main()->Highlight(list[(list.size()-1)/2]);
|
||||||
@@ -765,6 +773,8 @@ int main(int argc, char *argv[])
|
|||||||
TraceMpdStatus();
|
TraceMpdStatus();
|
||||||
time(&timer);
|
time(&timer);
|
||||||
to++;
|
to++;
|
||||||
|
myPlaylist->Main()->at(from).SetPosition(to);
|
||||||
|
myPlaylist->Main()->at(to).SetPosition(from);
|
||||||
myPlaylist->Main()->Swap(to, to-1);
|
myPlaylist->Main()->Swap(to, to-1);
|
||||||
myPlaylist->Main()->Scroll(wDown);
|
myPlaylist->Main()->Scroll(wDown);
|
||||||
myPlaylist->Main()->Refresh();
|
myPlaylist->Main()->Refresh();
|
||||||
|
|||||||
@@ -255,6 +255,18 @@ void Playlist::Sort()
|
|||||||
ShowMessage("Playlist sorted!");
|
ShowMessage("Playlist sorted!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Playlist::FixPositions(size_t beginning)
|
||||||
|
{
|
||||||
|
bool was_filtered = w->isFiltered();
|
||||||
|
w->ShowAll();
|
||||||
|
for (size_t i = beginning; i < w->Size(); i++)
|
||||||
|
{
|
||||||
|
(*w)[i].SetPosition(i);
|
||||||
|
}
|
||||||
|
if (was_filtered)
|
||||||
|
w->ShowFiltered();
|
||||||
|
}
|
||||||
|
|
||||||
bool Playlist::Sorting(MPD::Song *a, MPD::Song *b)
|
bool Playlist::Sorting(MPD::Song *a, MPD::Song *b)
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < SortOptions; i++)
|
for (size_t i = 0; i < SortOptions; i++)
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ class Playlist : public Screen< Menu<MPD::Song> >
|
|||||||
const MPD::Song *NowPlayingSong();
|
const MPD::Song *NowPlayingSong();
|
||||||
|
|
||||||
void Sort();
|
void Sort();
|
||||||
|
void FixPositions(size_t = 0);
|
||||||
|
|
||||||
static std::string SongToString(const MPD::Song &, void *);
|
static std::string SongToString(const MPD::Song &, void *);
|
||||||
static std::string SongInColumnsToString(const MPD::Song &, void *);
|
static std::string SongInColumnsToString(const MPD::Song &, void *);
|
||||||
|
|||||||
Reference in New Issue
Block a user