aboutsummaryrefslogtreecommitdiffstats
path: root/src/directory.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/directory.c')
-rw-r--r--src/directory.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/directory.c b/src/directory.c
index ef2cd1c2c..85c24fd04 100644
--- a/src/directory.c
+++ b/src/directory.c
@@ -114,6 +114,36 @@ directory_lookup_directory(struct directory *directory, const char *uri)
return found;
}
+struct song *
+directory_lookup_song(struct directory *directory, const char *uri)
+{
+ char *duplicated, *base;
+ struct song *song;
+
+ assert(directory != NULL);
+ assert(uri != NULL);
+
+ duplicated = g_strdup(uri);
+ base = strrchr(duplicated, '/');
+
+ if (base != NULL) {
+ *base++ = 0;
+ directory = directory_lookup_directory(directory, duplicated);
+ if (directory == NULL) {
+ g_free(duplicated);
+ return NULL;
+ }
+ } else
+ base = duplicated;
+
+ song = songvec_find(&directory->songs, base);
+ assert(song == NULL || song->parent == directory);
+
+ g_free(duplicated);
+ return song;
+
+}
+
void
directory_sort(struct directory *directory)
{