db/Interface: pass std::string_view to GetSong()
This commit is contained in:
parent
212401d687
commit
57fb153c5d
|
@ -75,7 +75,7 @@ public:
|
||||||
* directory (UTF-8)
|
* directory (UTF-8)
|
||||||
* @return a pointer that must be released with ReturnSong()
|
* @return a pointer that must be released with ReturnSong()
|
||||||
*/
|
*/
|
||||||
virtual const LightSong *GetSong(const char *uri_utf8) const = 0;
|
virtual const LightSong *GetSong(std::string_view uri_utf8) const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mark the song object as "unused". Call this on objects
|
* Mark the song object as "unused". Call this on objects
|
||||||
|
|
|
@ -22,12 +22,6 @@
|
||||||
|
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
|
|
||||||
static inline bool
|
|
||||||
isRootDirectory(const char *name)
|
|
||||||
{
|
|
||||||
return name[0] == 0 || (name[0] == '/' && name[1] == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
isRootDirectory(std::string_view name) noexcept
|
isRootDirectory(std::string_view name) noexcept
|
||||||
{
|
{
|
||||||
|
|
|
@ -121,7 +121,7 @@ public:
|
||||||
|
|
||||||
void Open() override;
|
void Open() override;
|
||||||
void Close() noexcept override;
|
void Close() noexcept override;
|
||||||
const LightSong *GetSong(const char *uri_utf8) const override;
|
const LightSong *GetSong(std::string_view uri_utf8) const override;
|
||||||
void ReturnSong(const LightSong *song) const noexcept override;
|
void ReturnSong(const LightSong *song) const noexcept override;
|
||||||
|
|
||||||
void Visit(const DatabaseSelection &selection,
|
void Visit(const DatabaseSelection &selection,
|
||||||
|
@ -641,12 +641,12 @@ ProxyDatabase::OnIdle() noexcept
|
||||||
}
|
}
|
||||||
|
|
||||||
const LightSong *
|
const LightSong *
|
||||||
ProxyDatabase::GetSong(const char *uri) const
|
ProxyDatabase::GetSong(std::string_view uri) const
|
||||||
{
|
{
|
||||||
// TODO: eliminate the const_cast
|
// TODO: eliminate the const_cast
|
||||||
const_cast<ProxyDatabase *>(this)->EnsureConnected();
|
const_cast<ProxyDatabase *>(this)->EnsureConnected();
|
||||||
|
|
||||||
if (!mpd_send_list_meta(connection, uri))
|
if (!mpd_send_list_meta(connection, std::string(uri).c_str()))
|
||||||
ThrowError(connection);
|
ThrowError(connection);
|
||||||
|
|
||||||
struct mpd_song *song = mpd_recv_song(connection);
|
struct mpd_song *song = mpd_recv_song(connection);
|
||||||
|
|
|
@ -197,7 +197,7 @@ SimpleDatabase::Close() noexcept
|
||||||
}
|
}
|
||||||
|
|
||||||
const LightSong *
|
const LightSong *
|
||||||
SimpleDatabase::GetSong(const char *uri) const
|
SimpleDatabase::GetSong(std::string_view uri) const
|
||||||
{
|
{
|
||||||
assert(root != nullptr);
|
assert(root != nullptr);
|
||||||
assert(prefixed_light_song == nullptr);
|
assert(prefixed_light_song == nullptr);
|
||||||
|
@ -211,10 +211,8 @@ SimpleDatabase::GetSong(const char *uri) const
|
||||||
/* pass the request to the mounted database */
|
/* pass the request to the mounted database */
|
||||||
protect.unlock();
|
protect.unlock();
|
||||||
|
|
||||||
/* note: r.rest.data() is actually null-terminated
|
|
||||||
because it points inside the "uri" parameter */
|
|
||||||
const LightSong *song =
|
const LightSong *song =
|
||||||
r.directory->mounted_database->GetSong(r.rest.data());
|
r.directory->mounted_database->GetSong(r.rest);
|
||||||
if (song == nullptr)
|
if (song == nullptr)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
|
@ -224,7 +222,7 @@ SimpleDatabase::GetSong(const char *uri) const
|
||||||
return prefixed_light_song;
|
return prefixed_light_song;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r.rest.data() == nullptr)
|
if (r.rest.empty())
|
||||||
/* it's a directory */
|
/* it's a directory */
|
||||||
throw DatabaseError(DatabaseErrorCode::NOT_FOUND,
|
throw DatabaseError(DatabaseErrorCode::NOT_FOUND,
|
||||||
"No such song");
|
"No such song");
|
||||||
|
|
|
@ -114,7 +114,7 @@ public:
|
||||||
void Open() override;
|
void Open() override;
|
||||||
void Close() noexcept override;
|
void Close() noexcept override;
|
||||||
|
|
||||||
const LightSong *GetSong(const char *uri_utf8) const override;
|
const LightSong *GetSong(std::string_view uri_utf8) const override;
|
||||||
void ReturnSong(const LightSong *song) const noexcept override;
|
void ReturnSong(const LightSong *song) const noexcept override;
|
||||||
|
|
||||||
void Visit(const DatabaseSelection &selection,
|
void Visit(const DatabaseSelection &selection,
|
||||||
|
|
|
@ -62,8 +62,9 @@ class UpnpSong : UpnpSongData, public LightSong {
|
||||||
std::string real_uri2;
|
std::string real_uri2;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
UpnpSong(UPnPDirObject &&object, std::string &&_uri) noexcept
|
template<typename U>
|
||||||
:UpnpSongData(std::move(_uri), std::move(object.tag)),
|
UpnpSong(UPnPDirObject &&object, U &&_uri) noexcept
|
||||||
|
:UpnpSongData(std::forward<U>(_uri), std::move(object.tag)),
|
||||||
LightSong(UpnpSongData::uri.c_str(), UpnpSongData::tag),
|
LightSong(UpnpSongData::uri.c_str(), UpnpSongData::tag),
|
||||||
real_uri2(std::move(object.url)) {
|
real_uri2(std::move(object.url)) {
|
||||||
real_uri = real_uri2.c_str();
|
real_uri = real_uri2.c_str();
|
||||||
|
@ -87,7 +88,7 @@ public:
|
||||||
|
|
||||||
void Open() override;
|
void Open() override;
|
||||||
void Close() noexcept override;
|
void Close() noexcept override;
|
||||||
const LightSong *GetSong(const char *uri_utf8) const override;
|
const LightSong *GetSong(std::string_view uri_utf8) const override;
|
||||||
void ReturnSong(const LightSong *song) const noexcept override;
|
void ReturnSong(const LightSong *song) const noexcept override;
|
||||||
|
|
||||||
void Visit(const DatabaseSelection &selection,
|
void Visit(const DatabaseSelection &selection,
|
||||||
|
@ -185,7 +186,7 @@ UpnpDatabase::ReturnSong(const LightSong *_song) const noexcept
|
||||||
// Get song info by path. We can receive either the id path, or the titles
|
// Get song info by path. We can receive either the id path, or the titles
|
||||||
// one
|
// one
|
||||||
const LightSong *
|
const LightSong *
|
||||||
UpnpDatabase::GetSong(const char *uri) const
|
UpnpDatabase::GetSong(std::string_view uri) const
|
||||||
{
|
{
|
||||||
auto vpath = SplitString(uri, '/');
|
auto vpath = SplitString(uri, '/');
|
||||||
if (vpath.empty())
|
if (vpath.empty())
|
||||||
|
|
Loading…
Reference in New Issue