playlist/{Stream,Mapper,Any}: propagate exceptions, do not catch&log them

Let the caller handle all the exceptions.
This commit is contained in:
Max Kellermann 2024-05-15 19:58:12 +02:00
parent 9303764a83
commit f53cd44c7a
7 changed files with 37 additions and 31 deletions

View File

@ -10,6 +10,7 @@
#include "SongPrint.hxx" #include "SongPrint.hxx"
#include "song/DetachedSong.hxx" #include "song/DetachedSong.hxx"
#include "song/LightSong.hxx" #include "song/LightSong.hxx"
#include "input/Error.hxx"
#include "fs/Traits.hxx" #include "fs/Traits.hxx"
#include "thread/Mutex.hxx" #include "thread/Mutex.hxx"
#include "Partition.hxx" #include "Partition.hxx"
@ -50,7 +51,7 @@ void
playlist_file_length(Response &r, Partition &partition, playlist_file_length(Response &r, Partition &partition,
const SongLoader &loader, const SongLoader &loader,
const LocatedUri &uri) const LocatedUri &uri)
{ try {
Mutex mutex; Mutex mutex;
#ifndef ENABLE_DATABASE #ifndef ENABLE_DATABASE
@ -66,4 +67,9 @@ playlist_file_length(Response &r, Partition &partition,
throw PlaylistError::NoSuchList(); throw PlaylistError::NoSuchList();
playlist_provider_length(r, loader, uri.canonical_uri, *playlist); playlist_provider_length(r, loader, uri.canonical_uri, *playlist);
} catch (...) {
if (IsFileNotFound(std::current_exception()))
throw PlaylistError::NoSuchList();
throw;
} }

View File

@ -1,8 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
// Copyright The Music Player Daemon Project // Copyright The Music Player Daemon Project
#ifndef MPD_PLAYLIST_ANY_HXX #pragma once
#define MPD_PLAYLIST_ANY_HXX
#include "thread/Mutex.hxx" #include "thread/Mutex.hxx"
#include "config.h" #include "config.h"
@ -16,6 +15,10 @@ class Storage;
* Opens a playlist from the specified URI, which can be either an * Opens a playlist from the specified URI, which can be either an
* absolute remote URI (with a scheme) or a relative path to the * absolute remote URI (with a scheme) or a relative path to the
* music or playlist directory. * music or playlist directory.
*
* Throws on error.
*
* @return a playlist, or nullptr if the file is not supported
*/ */
std::unique_ptr<SongEnumerator> std::unique_ptr<SongEnumerator>
playlist_open_any(const LocatedUri &located_uri, playlist_open_any(const LocatedUri &located_uri,
@ -23,5 +26,3 @@ playlist_open_any(const LocatedUri &located_uri,
const Storage *storage, const Storage *storage,
#endif #endif
Mutex &mutex); Mutex &mutex);
#endif

View File

@ -1,8 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
// Copyright The Music Player Daemon Project // Copyright The Music Player Daemon Project
#ifndef MPD_PLAYLIST_MAPPER_HXX #pragma once
#define MPD_PLAYLIST_MAPPER_HXX
#include "thread/Mutex.hxx" #include "thread/Mutex.hxx"
#include "config.h" #include "config.h"
@ -15,6 +14,10 @@ class Storage;
/** /**
* Opens a playlist from an URI relative to the playlist or music * Opens a playlist from an URI relative to the playlist or music
* directory. * directory.
*
* Throws on error.
*
* @return a playlist, or nullptr if the file is not supported
*/ */
std::unique_ptr<SongEnumerator> std::unique_ptr<SongEnumerator>
playlist_mapper_open(const char *uri, playlist_mapper_open(const char *uri,
@ -22,5 +25,3 @@ playlist_mapper_open(const char *uri,
const Storage *storage, const Storage *storage,
#endif #endif
Mutex &mutex); Mutex &mutex);
#endif

View File

@ -10,6 +10,7 @@
#include "queue/Playlist.hxx" #include "queue/Playlist.hxx"
#include "SongEnumerator.hxx" #include "SongEnumerator.hxx"
#include "song/DetachedSong.hxx" #include "song/DetachedSong.hxx"
#include "input/Error.hxx"
#include "thread/Mutex.hxx" #include "thread/Mutex.hxx"
#include "fs/Traits.hxx" #include "fs/Traits.hxx"
#include "Log.hxx" #include "Log.hxx"
@ -61,7 +62,7 @@ playlist_open_into_queue(const LocatedUri &uri,
unsigned start_index, unsigned end_index, unsigned start_index, unsigned end_index,
playlist &dest, PlayerControl &pc, playlist &dest, PlayerControl &pc,
const SongLoader &loader) const SongLoader &loader)
{ try {
Mutex mutex; Mutex mutex;
auto playlist = playlist_open_any(uri, auto playlist = playlist_open_any(uri,
@ -75,4 +76,9 @@ playlist_open_into_queue(const LocatedUri &uri,
playlist_load_into_queue(uri.canonical_uri, *playlist, playlist_load_into_queue(uri.canonical_uri, *playlist,
start_index, end_index, start_index, end_index,
dest, pc, loader); dest, pc, loader);
} catch (...) {
if (IsFileNotFound(std::current_exception()))
throw PlaylistError::NoSuchList();
throw;
} }

View File

@ -1,13 +1,12 @@
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
// Copyright The Music Player Daemon Project // Copyright The Music Player Daemon Project
#pragma once
/*! \file /*! \file
* \brief Glue between playlist plugin and the play queue * \brief Glue between playlist plugin and the play queue
*/ */
#ifndef MPD_PLAYLIST_QUEUE_HXX
#define MPD_PLAYLIST_QUEUE_HXX
class SongLoader; class SongLoader;
class SongEnumerator; class SongEnumerator;
struct playlist; struct playlist;
@ -31,12 +30,11 @@ playlist_load_into_queue(const char *uri, SongEnumerator &e,
/** /**
* Opens a playlist with a playlist plugin and append to the specified * Opens a playlist with a playlist plugin and append to the specified
* play queue. * play queue.
*
* Throws on error.
*/ */
void void
playlist_open_into_queue(const LocatedUri &uri, playlist_open_into_queue(const LocatedUri &uri,
unsigned start_index, unsigned end_index, unsigned start_index, unsigned end_index,
playlist &dest, PlayerControl &pc, playlist &dest, PlayerControl &pc,
const SongLoader &loader); const SongLoader &loader);
#endif

View File

@ -8,14 +8,13 @@
#include "input/LocalOpen.hxx" #include "input/LocalOpen.hxx"
#include "fs/Path.hxx" #include "fs/Path.hxx"
#include "util/UriExtract.hxx" #include "util/UriExtract.hxx"
#include "Log.hxx"
#include <cassert> #include <cassert>
#include <exception> #include <exception>
static std::unique_ptr<SongEnumerator> static std::unique_ptr<SongEnumerator>
playlist_open_path_suffix(Path path, Mutex &mutex) playlist_open_path_suffix(Path path, Mutex &mutex)
try { {
assert(!path.IsNull()); assert(!path.IsNull());
const auto *suffix = path.GetExtension(); const auto *suffix = path.GetExtension();
@ -29,14 +28,11 @@ try {
auto is = OpenLocalInputStream(path, mutex); auto is = OpenLocalInputStream(path, mutex);
return playlist_list_open_stream_suffix(std::move(is), return playlist_list_open_stream_suffix(std::move(is),
suffix_utf8); suffix_utf8);
} catch (...) {
LogError(std::current_exception());
return nullptr;
} }
std::unique_ptr<SongEnumerator> std::unique_ptr<SongEnumerator>
playlist_open_path(Path path, Mutex &mutex) playlist_open_path(Path path, Mutex &mutex)
try { {
assert(!path.IsNull()); assert(!path.IsNull());
const std::string uri_utf8 = path.ToUTF8Throw(); const std::string uri_utf8 = path.ToUTF8Throw();
@ -45,14 +41,11 @@ try {
playlist = playlist_open_path_suffix(path, mutex); playlist = playlist_open_path_suffix(path, mutex);
return playlist; return playlist;
} catch (...) {
LogError(std::current_exception());
return nullptr;
} }
std::unique_ptr<SongEnumerator> std::unique_ptr<SongEnumerator>
playlist_open_remote(const char *uri, Mutex &mutex) playlist_open_remote(const char *uri, Mutex &mutex)
try { {
assert(uri_has_scheme(uri)); assert(uri_has_scheme(uri));
auto playlist = playlist_list_open_uri(uri, mutex); auto playlist = playlist_list_open_uri(uri, mutex);
@ -61,7 +54,4 @@ try {
auto is = InputStream::OpenReady(uri, mutex); auto is = InputStream::OpenReady(uri, mutex);
return playlist_list_open_stream(std::move(is), uri); return playlist_list_open_stream(std::move(is), uri);
} catch (...) {
LogError(std::current_exception());
return nullptr;
} }

View File

@ -13,8 +13,10 @@ class Path;
/** /**
* Opens a playlist from a local file. * Opens a playlist from a local file.
* *
* Throws on error.
*
* @param path the path of the playlist file * @param path the path of the playlist file
* @return a playlist, or nullptr on error * @return a playlist, or nullptr if the file is not supported
*/ */
std::unique_ptr<SongEnumerator> std::unique_ptr<SongEnumerator>
playlist_open_path(Path path, Mutex &mutex); playlist_open_path(Path path, Mutex &mutex);
@ -22,8 +24,10 @@ playlist_open_path(Path path, Mutex &mutex);
/** /**
* Opens a playlist from a remote file. * Opens a playlist from a remote file.
* *
* Throws on error.
*
* @param uri the absolute URI of the playlist file * @param uri the absolute URI of the playlist file
* @return a playlist, or nullptr on error * @return a playlist, or nullptr if the file is not supported
*/ */
[[gnu::nonnull]] [[gnu::nonnull]]
std::unique_ptr<SongEnumerator> std::unique_ptr<SongEnumerator>