SongSave: wrap DetachedSong* in std::unique_ptr
This commit is contained in:
parent
28fdf1e9ed
commit
75582d47b9
@ -76,10 +76,10 @@ song_save(BufferedOutputStream &os, const DetachedSong &song)
|
|||||||
os.Format(SONG_END "\n");
|
os.Format(SONG_END "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
DetachedSong *
|
std::unique_ptr<DetachedSong>
|
||||||
song_load(TextFile &file, const char *uri)
|
song_load(TextFile &file, const char *uri)
|
||||||
{
|
{
|
||||||
DetachedSong *song = new DetachedSong(uri);
|
auto song = std::make_unique<DetachedSong>(uri);
|
||||||
|
|
||||||
TagBuilder tag;
|
TagBuilder tag;
|
||||||
|
|
||||||
@ -88,8 +88,6 @@ song_load(TextFile &file, const char *uri)
|
|||||||
strcmp(line, SONG_END) != 0) {
|
strcmp(line, SONG_END) != 0) {
|
||||||
char *colon = strchr(line, ':');
|
char *colon = strchr(line, ':');
|
||||||
if (colon == nullptr || colon == line) {
|
if (colon == nullptr || colon == line) {
|
||||||
delete song;
|
|
||||||
|
|
||||||
throw FormatRuntimeError("unknown line in db: %s", line);
|
throw FormatRuntimeError("unknown line in db: %s", line);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,8 +114,6 @@ song_load(TextFile &file, const char *uri)
|
|||||||
song->SetStartTime(SongTime::FromMS(start_ms));
|
song->SetStartTime(SongTime::FromMS(start_ms));
|
||||||
song->SetEndTime(SongTime::FromMS(end_ms));
|
song->SetEndTime(SongTime::FromMS(end_ms));
|
||||||
} else {
|
} else {
|
||||||
delete song;
|
|
||||||
|
|
||||||
throw FormatRuntimeError("unknown line in db: %s", line);
|
throw FormatRuntimeError("unknown line in db: %s", line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
#ifndef MPD_SONG_SAVE_HXX
|
#ifndef MPD_SONG_SAVE_HXX
|
||||||
#define MPD_SONG_SAVE_HXX
|
#define MPD_SONG_SAVE_HXX
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#define SONG_BEGIN "song_begin: "
|
#define SONG_BEGIN "song_begin: "
|
||||||
|
|
||||||
struct Song;
|
struct Song;
|
||||||
@ -39,7 +41,7 @@ song_save(BufferedOutputStream &os, const DetachedSong &song);
|
|||||||
*
|
*
|
||||||
* Throws #std::runtime_error on error.
|
* Throws #std::runtime_error on error.
|
||||||
*/
|
*/
|
||||||
DetachedSong *
|
std::unique_ptr<DetachedSong>
|
||||||
song_load(TextFile &file, const char *uri);
|
song_load(TextFile &file, const char *uri);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -160,11 +160,10 @@ directory_load(TextFile &file, Directory &directory)
|
|||||||
if (directory.FindSong(name) != nullptr)
|
if (directory.FindSong(name) != nullptr)
|
||||||
throw FormatRuntimeError("Duplicate song '%s'", name);
|
throw FormatRuntimeError("Duplicate song '%s'", name);
|
||||||
|
|
||||||
DetachedSong *song = song_load(file, name);
|
auto song = song_load(file, name);
|
||||||
|
|
||||||
directory.AddSong(Song::NewFrom(std::move(*song),
|
directory.AddSong(Song::NewFrom(std::move(*song),
|
||||||
directory));
|
directory));
|
||||||
delete song;
|
|
||||||
} else if ((p = StringAfterPrefix(line, PLAYLIST_META_BEGIN))) {
|
} else if ((p = StringAfterPrefix(line, PLAYLIST_META_BEGIN))) {
|
||||||
const char *name = p;
|
const char *name = p;
|
||||||
playlist_metadata_load(file, directory.playlists, name);
|
playlist_metadata_load(file, directory.playlists, name);
|
||||||
|
@ -89,7 +89,7 @@ queue_load_song(TextFile &file, const SongLoader &loader,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DetachedSong *song;
|
std::unique_ptr<DetachedSong> song;
|
||||||
|
|
||||||
if ((p = StringAfterPrefix(line, SONG_BEGIN))) {
|
if ((p = StringAfterPrefix(line, SONG_BEGIN))) {
|
||||||
const char *uri = p;
|
const char *uri = p;
|
||||||
@ -111,14 +111,11 @@ queue_load_song(TextFile &file, const SongLoader &loader,
|
|||||||
|
|
||||||
const char *uri = endptr + 1;
|
const char *uri = endptr + 1;
|
||||||
|
|
||||||
song = new DetachedSong(uri);
|
song = std::make_unique<DetachedSong>(uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!playlist_check_translate_song(*song, nullptr, loader)) {
|
if (playlist_check_translate_song(*song, nullptr, loader))
|
||||||
delete song;
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
queue.Append(std::move(*song), priority);
|
queue.Append(std::move(*song), priority);
|
||||||
delete song;
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user