Commit d110131a authored by Max Kellermann's avatar Max Kellermann

Playlist: refresh new tags after database update

Fixes regression from commit e96779de.
parent 10bc1a9a
......@@ -178,6 +178,7 @@ src_mpd_SOURCES = \
src/PlaylistVector.cxx src/PlaylistVector.hxx \
src/PlaylistInfo.hxx \
src/PlaylistDatabase.cxx src/PlaylistDatabase.hxx \
src/PlaylistUpdate.cxx \
src/IdTable.hxx \
src/Queue.cxx src/Queue.hxx \
src/QueuePrint.cxx src/QueuePrint.hxx \
......
......@@ -24,7 +24,7 @@
void
Partition::DatabaseModified()
{
playlist.FullIncrementVersions();
playlist.DatabaseModified();
}
void
......
......@@ -29,13 +29,6 @@
#include <assert.h>
void
playlist::FullIncrementVersions()
{
queue.ModifyAll();
idle_add(IDLE_PLAYLIST);
}
void
playlist::TagModified(Song &&song)
{
if (!playing || song.tag == nullptr)
......
......@@ -135,7 +135,10 @@ public:
*/
void TagModified(Song &&song);
void FullIncrementVersions();
/**
* The database has been modified. Pull all updates.
*/
void DatabaseModified();
PlaylistResult AppendSong(player_control &pc,
Song *song,
......
/*
* Copyright (C) 2003-2013 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "config.h"
#include "Playlist.hxx"
#include "DatabaseGlue.hxx"
#include "DatabasePlugin.hxx"
#include "Song.hxx"
#include "tag/Tag.hxx"
#include "Idle.hxx"
#include "util/Error.hxx"
static bool
UpdatePlaylistSong(const Database &db, Song &song)
{
if (!song.IsInDatabase() || !song.IsDetached())
/* only update Songs instances that are "detached"
from the Database */
return false;
Song *original = db.GetSong(song.uri, IgnoreError());
if (original == nullptr)
/* not found - shouldn't happen, because the update
thread should ensure that all stale Song instances
have been purged */
return false;
if (original->mtime == song.mtime) {
/* not modified */
db.ReturnSong(original);
return false;
}
song.mtime = original->mtime;
if (original->tag != nullptr)
song.ReplaceTag(Tag(*original->tag));
db.ReturnSong(original);
return true;
}
void
playlist::DatabaseModified()
{
const Database *db = GetDatabase();
if (db == nullptr)
/* how can this ever happen? */
return;
bool modified = false;
for (unsigned i = 0, n = queue.GetLength(); i != n; ++i) {
if (UpdatePlaylistSong(*db, queue.Get(i))) {
queue.ModifyAtPosition(i);
modified = true;
}
}
if (modified) {
queue.IncrementVersion();
idle_add(IDLE_PLAYLIST);
}
}
......@@ -85,15 +85,6 @@ queue::ModifyAtOrder(unsigned _order)
ModifyAtPosition(position);
}
void
queue::ModifyAll()
{
for (unsigned i = 0; i < length; i++)
items[i].version = version;
IncrementVersion();
}
unsigned
queue::Append(Song *song, uint8_t priority)
{
......
......@@ -259,11 +259,6 @@ struct queue {
void ModifyAtOrder(unsigned order);
/**
* Marks all songs as "modified" and increments the version number.
*/
void ModifyAll();
/**
* Appends a song to the queue and returns its position. Prior to
* that, the caller must check if the queue is already full.
*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment