db/simple/Directory: eliminate method LookupSong()
Move to SimpleDatabase::GetSong() to give that method more control.
This commit is contained in:
parent
69a42fc901
commit
21e19ef69f
@ -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)
|
||||
|
@ -213,17 +213,6 @@ public:
|
||||
return const_cast<Song *>(cthis->FindSong(name_utf8));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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,
|
||||
|
Loading…
Reference in New Issue
Block a user