40 lines
970 B
C++
40 lines
970 B
C++
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
// Copyright The Music Player Daemon Project
|
|
|
|
#include "PlaylistUtil.hxx"
|
|
#include "playlist/PlaylistRegistry.hxx"
|
|
#include "playlist/SongEnumerator.hxx"
|
|
#include "song/DetachedSong.hxx"
|
|
#include "input/MemoryInputStream.hxx"
|
|
#include "input/Ptr.hxx"
|
|
#include "thread/Mutex.hxx"
|
|
#include "io/BufferedOutputStream.hxx"
|
|
#include "io/StringOutputStream.hxx"
|
|
#include "util/SpanCast.hxx"
|
|
#include "SongSave.hxx"
|
|
|
|
std::unique_ptr<SongEnumerator>
|
|
ParsePlaylist(const char *uri, std::string_view contents)
|
|
{
|
|
Mutex mutex;
|
|
InputStreamPtr input{new MemoryInputStream{uri, mutex, AsBytes(contents)}};
|
|
return playlist_list_open_stream(std::move(input), uri);
|
|
}
|
|
|
|
std::string
|
|
ToString(SongEnumerator &e)
|
|
{
|
|
StringOutputStream sos;
|
|
|
|
WithBufferedOutputStream(sos, [&e](auto &bos){
|
|
while (const auto song = e.NextSong()) {
|
|
bos.Write('\n');
|
|
song_save(bos, *song);
|
|
}
|
|
|
|
bos.Write('\n');
|
|
});
|
|
|
|
return std::move(sos).GetValue();
|
|
}
|