aboutsummaryrefslogtreecommitdiffstats
path: root/src/db
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-02-26 20:10:31 +0100
committerMax Kellermann <max@duempel.org>2014-02-26 20:10:31 +0100
commit21e19ef69f1ab6efb5d6647b4428c31cef5cde69 (patch)
tree5f459e05d03104168c9c62afc84c4a0293648e6f /src/db
parent69a42fc901d06af2f90d7046e153dc1273f19beb (diff)
downloadmpd-21e19ef69f1ab6efb5d6647b4428c31cef5cde69.tar.gz
mpd-21e19ef69f1ab6efb5d6647b4428c31cef5cde69.tar.xz
mpd-21e19ef69f1ab6efb5d6647b4428c31cef5cde69.zip
db/simple/Directory: eliminate method LookupSong()
Move to SimpleDatabase::GetSong() to give that method more control.
Diffstat (limited to 'src/db')
-rw-r--r--src/db/plugins/simple/Directory.cxx18
-rw-r--r--src/db/plugins/simple/Directory.hxx11
-rw-r--r--src/db/plugins/simple/SimpleDatabasePlugin.cxx20
3 files changed, 19 insertions, 30 deletions
diff --git a/src/db/plugins/simple/Directory.cxx b/src/db/plugins/simple/Directory.cxx
index a81021b47..b4255b0ac 100644
--- a/src/db/plugins/simple/Directory.cxx
+++ b/src/db/plugins/simple/Directory.cxx
@@ -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)
diff --git a/src/db/plugins/simple/Directory.hxx b/src/db/plugins/simple/Directory.hxx
index ab03092f7..5b39231e3 100644
--- a/src/db/plugins/simple/Directory.hxx
+++ b/src/db/plugins/simple/Directory.hxx
@@ -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.
*/
diff --git a/src/db/plugins/simple/SimpleDatabasePlugin.cxx b/src/db/plugins/simple/SimpleDatabasePlugin.cxx
index 8ba6eef92..e83ef575b 100644
--- a/src/db/plugins/simple/SimpleDatabasePlugin.cxx
+++ b/src/db/plugins/simple/SimpleDatabasePlugin.cxx
@@ -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,