aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/song.c12
-rw-r--r--src/song.h9
2 files changed, 21 insertions, 0 deletions
diff --git a/src/song.c b/src/song.c
index bddf8eb83..f5cc7c35a 100644
--- a/src/song.c
+++ b/src/song.c
@@ -61,6 +61,18 @@ song_file_new(const char *path, struct directory *parent)
return song_alloc(path, parent);
}
+struct song *
+song_replace_uri(struct song *old_song, const char *uri)
+{
+ struct song *new_song = song_alloc(uri, old_song->parent);
+ new_song->tag = old_song->tag;
+ new_song->mtime = old_song->mtime;
+ new_song->start_ms = old_song->start_ms;
+ new_song->end_ms = old_song->end_ms;
+ g_free(old_song);
+ return new_song;
+}
+
void
song_free(struct song *song)
{
diff --git a/src/song.h b/src/song.h
index 95cc2eb86..8b97d45d0 100644
--- a/src/song.h
+++ b/src/song.h
@@ -74,6 +74,15 @@ song_file_new(const char *path, struct directory *parent);
struct song *
song_file_load(const char *path, struct directory *parent);
+/**
+ * Replaces the URI of a song object. The given song object is
+ * destroyed, and a newly allocated one is returned. It does not
+ * update the reference within the parent directory; the caller is
+ * responsible for doing that.
+ */
+struct song *
+song_replace_uri(struct song *song, const char *uri);
+
void
song_free(struct song *song);