QueueSave: use class SongLoader
This commit is contained in:
parent
ca36ac2ba1
commit
5ad2980d69
@ -103,7 +103,8 @@ playlist_state_save(FILE *fp, const struct playlist &playlist,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
playlist_state_load(TextFile &file, struct playlist &playlist)
|
playlist_state_load(TextFile &file, const SongLoader &song_loader,
|
||||||
|
struct playlist &playlist)
|
||||||
{
|
{
|
||||||
const char *line = file.ReadLine();
|
const char *line = file.ReadLine();
|
||||||
if (line == nullptr) {
|
if (line == nullptr) {
|
||||||
@ -112,7 +113,7 @@ playlist_state_load(TextFile &file, struct playlist &playlist)
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (!StringStartsWith(line, PLAYLIST_STATE_FILE_PLAYLIST_END)) {
|
while (!StringStartsWith(line, PLAYLIST_STATE_FILE_PLAYLIST_END)) {
|
||||||
queue_load_song(file, line, playlist.queue);
|
queue_load_song(file, song_loader, line, playlist.queue);
|
||||||
|
|
||||||
line = file.ReadLine();
|
line = file.ReadLine();
|
||||||
if (line == nullptr) {
|
if (line == nullptr) {
|
||||||
@ -128,6 +129,7 @@ playlist_state_load(TextFile &file, struct playlist &playlist)
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
playlist_state_restore(const char *line, TextFile &file,
|
playlist_state_restore(const char *line, TextFile &file,
|
||||||
|
const SongLoader &song_loader,
|
||||||
struct playlist &playlist, PlayerControl &pc)
|
struct playlist &playlist, PlayerControl &pc)
|
||||||
{
|
{
|
||||||
int current = -1;
|
int current = -1;
|
||||||
@ -183,7 +185,7 @@ playlist_state_restore(const char *line, TextFile &file,
|
|||||||
(PLAYLIST_STATE_FILE_CURRENT)]));
|
(PLAYLIST_STATE_FILE_CURRENT)]));
|
||||||
} else if (StringStartsWith(line,
|
} else if (StringStartsWith(line,
|
||||||
PLAYLIST_STATE_FILE_PLAYLIST_BEGIN)) {
|
PLAYLIST_STATE_FILE_PLAYLIST_BEGIN)) {
|
||||||
playlist_state_load(file, playlist);
|
playlist_state_load(file, song_loader, playlist);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
struct playlist;
|
struct playlist;
|
||||||
struct PlayerControl;
|
struct PlayerControl;
|
||||||
class TextFile;
|
class TextFile;
|
||||||
|
class SongLoader;
|
||||||
|
|
||||||
void
|
void
|
||||||
playlist_state_save(FILE *fp, const playlist &playlist,
|
playlist_state_save(FILE *fp, const playlist &playlist,
|
||||||
@ -37,6 +38,7 @@ playlist_state_save(FILE *fp, const playlist &playlist,
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
playlist_state_restore(const char *line, TextFile &file,
|
playlist_state_restore(const char *line, TextFile &file,
|
||||||
|
const SongLoader &song_loader,
|
||||||
playlist &playlist, PlayerControl &pc);
|
playlist &playlist, PlayerControl &pc);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
#include "fs/TextFile.hxx"
|
#include "fs/TextFile.hxx"
|
||||||
#include "Partition.hxx"
|
#include "Partition.hxx"
|
||||||
#include "mixer/Volume.hxx"
|
#include "mixer/Volume.hxx"
|
||||||
|
#include "SongLoader.hxx"
|
||||||
#include "fs/FileSystem.hxx"
|
#include "fs/FileSystem.hxx"
|
||||||
#include "util/Domain.hxx"
|
#include "util/Domain.hxx"
|
||||||
#include "Log.hxx"
|
#include "Log.hxx"
|
||||||
@ -97,11 +97,14 @@ StateFile::Read()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const SongLoader song_loader(nullptr);
|
||||||
|
|
||||||
const char *line;
|
const char *line;
|
||||||
while ((line = file.ReadLine()) != NULL) {
|
while ((line = file.ReadLine()) != NULL) {
|
||||||
success = read_sw_volume_state(line, partition.outputs) ||
|
success = read_sw_volume_state(line, partition.outputs) ||
|
||||||
audio_output_state_read(line, partition.outputs) ||
|
audio_output_state_read(line, partition.outputs) ||
|
||||||
playlist_state_restore(line, file, partition.playlist,
|
playlist_state_restore(line, file, song_loader,
|
||||||
|
partition.playlist,
|
||||||
partition.pc);
|
partition.pc);
|
||||||
if (!success)
|
if (!success)
|
||||||
FormatError(state_file_domain,
|
FormatError(state_file_domain,
|
||||||
|
@ -23,10 +23,10 @@
|
|||||||
#include "PlaylistError.hxx"
|
#include "PlaylistError.hxx"
|
||||||
#include "DetachedSong.hxx"
|
#include "DetachedSong.hxx"
|
||||||
#include "SongSave.hxx"
|
#include "SongSave.hxx"
|
||||||
#include "db/DatabaseSong.hxx"
|
#include "SongLoader.hxx"
|
||||||
|
#include "playlist/PlaylistSong.hxx"
|
||||||
#include "fs/TextFile.hxx"
|
#include "fs/TextFile.hxx"
|
||||||
#include "util/StringUtil.hxx"
|
#include "util/StringUtil.hxx"
|
||||||
#include "util/UriUtil.hxx"
|
|
||||||
#include "util/Error.hxx"
|
#include "util/Error.hxx"
|
||||||
#include "fs/Traits.hxx"
|
#include "fs/Traits.hxx"
|
||||||
#include "Log.hxx"
|
#include "Log.hxx"
|
||||||
@ -69,7 +69,8 @@ queue_save(FILE *fp, const Queue &queue)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
queue_load_song(TextFile &file, const char *line, Queue &queue)
|
queue_load_song(TextFile &file, const SongLoader &loader,
|
||||||
|
const char *line, Queue &queue)
|
||||||
{
|
{
|
||||||
if (queue.IsFull())
|
if (queue.IsFull())
|
||||||
return;
|
return;
|
||||||
@ -87,8 +88,6 @@ queue_load_song(TextFile &file, const char *line, Queue &queue)
|
|||||||
|
|
||||||
if (StringStartsWith(line, SONG_BEGIN)) {
|
if (StringStartsWith(line, SONG_BEGIN)) {
|
||||||
const char *uri = line + sizeof(SONG_BEGIN) - 1;
|
const char *uri = line + sizeof(SONG_BEGIN) - 1;
|
||||||
if (!uri_has_scheme(uri) && !PathTraitsUTF8::IsAbsolute(uri))
|
|
||||||
return;
|
|
||||||
|
|
||||||
Error error;
|
Error error;
|
||||||
song = song_load(file, uri, error);
|
song = song_load(file, uri, error);
|
||||||
@ -107,15 +106,12 @@ queue_load_song(TextFile &file, const char *line, Queue &queue)
|
|||||||
|
|
||||||
const char *uri = endptr + 1;
|
const char *uri = endptr + 1;
|
||||||
|
|
||||||
if (uri_has_scheme(uri)) {
|
song = new DetachedSong(uri);
|
||||||
song = new DetachedSong(uri);
|
}
|
||||||
} else {
|
|
||||||
#ifdef ENABLE_DATABASE
|
if (!playlist_check_translate_song(*song, nullptr, loader)) {
|
||||||
song = DatabaseDetachSong(uri, IgnoreError());
|
delete song;
|
||||||
if (song == nullptr)
|
return;
|
||||||
#endif
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
queue.Append(std::move(*song), priority);
|
queue.Append(std::move(*song), priority);
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
struct Queue;
|
struct Queue;
|
||||||
class TextFile;
|
class TextFile;
|
||||||
|
class SongLoader;
|
||||||
|
|
||||||
void
|
void
|
||||||
queue_save(FILE *fp, const Queue &queue);
|
queue_save(FILE *fp, const Queue &queue);
|
||||||
@ -37,6 +38,7 @@ queue_save(FILE *fp, const Queue &queue);
|
|||||||
* Loads one song from the state file and appends it to the queue.
|
* Loads one song from the state file and appends it to the queue.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
queue_load_song(TextFile &file, const char *line, Queue &queue);
|
queue_load_song(TextFile &file, const SongLoader &loader,
|
||||||
|
const char *line, Queue &queue);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user