Commit 21e19ef6 authored by Max Kellermann's avatar Max Kellermann

db/simple/Directory: eliminate method LookupSong()

Move to SimpleDatabase::GetSong() to give that method more control.
parent 69a42fc9
......@@ -202,24 +202,6 @@ Directory::FindSong(const char *name_utf8) const
return nullptr;
}
Song *
Directory::LookupSong(const char *uri)
{
assert(holding_db_lock());
assert(uri != nullptr);
auto r = LookupDirectory(uri);
if (r.uri == nullptr)
/* it's a directory */
return nullptr;
if (strchr(r.uri, '/') != nullptr)
/* refers to a URI "below" the actual song */
return nullptr;
return r.directory->FindSong(r.uri);
}
static int
directory_cmp(gcc_unused void *priv,
struct list_head *_a, struct list_head *_b)
......
......@@ -214,17 +214,6 @@ public:
}
/**
* Looks up a song by its relative URI.
*
* Caller must lock the #db_mutex.
*
* @param uri the relative URI
* @return the song, or nullptr if none was found
*/
gcc_pure
Song *LookupSong(const char *uri);
/**
* Add a song object to this directory. Its "parent" attribute must
* be set already.
*/
......
......@@ -207,7 +207,25 @@ SimpleDatabase::GetSong(const char *uri, Error &error) const
assert(borrowed_song_count == 0);
db_lock();
const Song *song = root->LookupSong(uri);
auto r = root->LookupDirectory(uri);
if (r.uri == nullptr) {
/* it's a directory */
db_unlock();
error.Format(db_domain, DB_NOT_FOUND,
"No such song: %s", uri);
return nullptr;
}
if (strchr(r.uri, '/') != nullptr) {
/* refers to a URI "below" the actual song */
db_unlock();
error.Format(db_domain, DB_NOT_FOUND,
"No such song: %s", uri);
return nullptr;
}
const Song *song = r.directory->FindSong(r.uri);
db_unlock();
if (song == nullptr) {
error.Format(db_domain, DB_NOT_FOUND,
......
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