diff options
Diffstat (limited to '')
-rw-r--r-- | src/song.c | 12 | ||||
-rw-r--r-- | src/song.h | 9 |
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); |