queue/PlaylistTag: throw PlaylistError on error

This commit is contained in:
Max Kellermann 2016-02-28 10:40:31 +01:00
parent f8810d7caf
commit c81747dd15
3 changed files with 18 additions and 42 deletions

View File

@ -41,11 +41,7 @@ handle_addtagid(Client &client, Request args, Response &r)
const char *const value = args[2];
Error error;
if (!client.partition.playlist.AddSongIdTag(song_id, tag_type, value,
error))
return print_error(r, error);
client.partition.playlist.AddSongIdTag(song_id, tag_type, value);
return CommandResult::OK;
}
@ -65,10 +61,6 @@ handle_cleartagid(Client &client, Request args, Response &r)
}
}
Error error;
if (!client.partition.playlist.ClearSongIdTag(song_id, tag_type,
error))
return print_error(r, error);
client.partition.playlist.ClearSongIdTag(song_id, tag_type);
return CommandResult::OK;
}

View File

@ -258,9 +258,8 @@ public:
SongTime start, SongTime end,
Error &error);
bool AddSongIdTag(unsigned id, TagType tag_type, const char *value,
Error &error);
bool ClearSongIdTag(unsigned id, TagType tag_type, Error &error);
void AddSongIdTag(unsigned id, TagType tag_type, const char *value);
void ClearSongIdTag(unsigned id, TagType tag_type);
void Stop(PlayerControl &pc);

View File

@ -29,25 +29,18 @@
#include "DetachedSong.hxx"
#include "tag/Tag.hxx"
#include "tag/TagBuilder.hxx"
#include "util/Error.hxx"
bool
playlist::AddSongIdTag(unsigned id, TagType tag_type, const char *value,
Error &error)
void
playlist::AddSongIdTag(unsigned id, TagType tag_type, const char *value)
{
const int position = queue.IdToPosition(id);
if (position < 0) {
error.Set(playlist_domain, int(PlaylistResult::NO_SUCH_SONG),
"No such song");
return false;
}
if (position < 0)
throw PlaylistError::NoSuchSong();
DetachedSong &song = queue.Get(position);
if (song.IsFile()) {
error.Set(playlist_domain, int(PlaylistResult::DENIED),
"Cannot edit tags of local file");
return false;
}
if (song.IsFile())
throw PlaylistError(PlaylistResult::DENIED,
"Cannot edit tags of local file");
{
TagBuilder tag(std::move(song.WritableTag()));
@ -57,26 +50,19 @@ playlist::AddSongIdTag(unsigned id, TagType tag_type, const char *value,
queue.ModifyAtPosition(position);
OnModified();
return true;
}
bool
playlist::ClearSongIdTag(unsigned id, TagType tag_type,
Error &error)
void
playlist::ClearSongIdTag(unsigned id, TagType tag_type)
{
const int position = queue.IdToPosition(id);
if (position < 0) {
error.Set(playlist_domain, int(PlaylistResult::NO_SUCH_SONG),
"No such song");
return false;
}
if (position < 0)
throw PlaylistError::NoSuchSong();
DetachedSong &song = queue.Get(position);
if (song.IsFile()) {
error.Set(playlist_domain, int(PlaylistResult::DENIED),
"Cannot edit tags of local file");
return false;
}
if (song.IsFile())
throw PlaylistError(PlaylistResult::DENIED,
"Cannot edit tags of local file");
{
TagBuilder tag(std::move(song.WritableTag()));
@ -89,5 +75,4 @@ playlist::ClearSongIdTag(unsigned id, TagType tag_type,
queue.ModifyAtPosition(position);
OnModified();
return true;
}