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;
|
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
|
static int
|
||||||
directory_cmp(gcc_unused void *priv,
|
directory_cmp(gcc_unused void *priv,
|
||||||
struct list_head *_a, struct list_head *_b)
|
struct list_head *_a, struct list_head *_b)
|
||||||
|
@ -213,17 +213,6 @@ public:
|
|||||||
return const_cast<Song *>(cthis->FindSong(name_utf8));
|
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
|
* Add a song object to this directory. Its "parent" attribute must
|
||||||
* be set already.
|
* be set already.
|
||||||
|
@ -207,7 +207,25 @@ SimpleDatabase::GetSong(const char *uri, Error &error) const
|
|||||||
assert(borrowed_song_count == 0);
|
assert(borrowed_song_count == 0);
|
||||||
|
|
||||||
db_lock();
|
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();
|
db_unlock();
|
||||||
if (song == nullptr) {
|
if (song == nullptr) {
|
||||||
error.Format(db_domain, DB_NOT_FOUND,
|
error.Format(db_domain, DB_NOT_FOUND,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user