*Save, *State: use the OutputStream API instead of FILE*
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
#include "Playlist.hxx"
|
||||
#include "queue/QueueSave.hxx"
|
||||
#include "fs/TextFile.hxx"
|
||||
#include "fs/output/BufferedOutputStream.hxx"
|
||||
#include "PlayerControl.hxx"
|
||||
#include "config/ConfigGlobal.hxx"
|
||||
#include "config/ConfigOption.hxx"
|
||||
@@ -59,47 +60,45 @@
|
||||
#define PLAYLIST_BUFFER_SIZE 2*MPD_PATH_MAX
|
||||
|
||||
void
|
||||
playlist_state_save(FILE *fp, const struct playlist &playlist,
|
||||
playlist_state_save(BufferedOutputStream &os, const struct playlist &playlist,
|
||||
PlayerControl &pc)
|
||||
{
|
||||
const auto player_status = pc.GetStatus();
|
||||
|
||||
fputs(PLAYLIST_STATE_FILE_STATE, fp);
|
||||
os.Write(PLAYLIST_STATE_FILE_STATE);
|
||||
|
||||
if (playlist.playing) {
|
||||
switch (player_status.state) {
|
||||
case PlayerState::PAUSE:
|
||||
fputs(PLAYLIST_STATE_FILE_STATE_PAUSE "\n", fp);
|
||||
os.Write(PLAYLIST_STATE_FILE_STATE_PAUSE "\n");
|
||||
break;
|
||||
default:
|
||||
fputs(PLAYLIST_STATE_FILE_STATE_PLAY "\n", fp);
|
||||
os.Write(PLAYLIST_STATE_FILE_STATE_PLAY "\n");
|
||||
}
|
||||
fprintf(fp, PLAYLIST_STATE_FILE_CURRENT "%i\n",
|
||||
playlist.queue.OrderToPosition(playlist.current));
|
||||
fprintf(fp, PLAYLIST_STATE_FILE_TIME "%i\n",
|
||||
(int)player_status.elapsed_time);
|
||||
os.Format(PLAYLIST_STATE_FILE_CURRENT "%i\n",
|
||||
playlist.queue.OrderToPosition(playlist.current));
|
||||
os.Format(PLAYLIST_STATE_FILE_TIME "%i\n",
|
||||
(int)player_status.elapsed_time);
|
||||
} else {
|
||||
fputs(PLAYLIST_STATE_FILE_STATE_STOP "\n", fp);
|
||||
os.Write(PLAYLIST_STATE_FILE_STATE_STOP "\n");
|
||||
|
||||
if (playlist.current >= 0)
|
||||
fprintf(fp, PLAYLIST_STATE_FILE_CURRENT "%i\n",
|
||||
os.Format(PLAYLIST_STATE_FILE_CURRENT "%i\n",
|
||||
playlist.queue.OrderToPosition(playlist.current));
|
||||
}
|
||||
|
||||
fprintf(fp, PLAYLIST_STATE_FILE_RANDOM "%i\n", playlist.queue.random);
|
||||
fprintf(fp, PLAYLIST_STATE_FILE_REPEAT "%i\n", playlist.queue.repeat);
|
||||
fprintf(fp, PLAYLIST_STATE_FILE_SINGLE "%i\n", playlist.queue.single);
|
||||
fprintf(fp, PLAYLIST_STATE_FILE_CONSUME "%i\n",
|
||||
playlist.queue.consume);
|
||||
fprintf(fp, PLAYLIST_STATE_FILE_CROSSFADE "%i\n",
|
||||
(int)pc.GetCrossFade());
|
||||
fprintf(fp, PLAYLIST_STATE_FILE_MIXRAMPDB "%f\n",
|
||||
pc.GetMixRampDb());
|
||||
fprintf(fp, PLAYLIST_STATE_FILE_MIXRAMPDELAY "%f\n",
|
||||
pc.GetMixRampDelay());
|
||||
fputs(PLAYLIST_STATE_FILE_PLAYLIST_BEGIN "\n", fp);
|
||||
queue_save(fp, playlist.queue);
|
||||
fputs(PLAYLIST_STATE_FILE_PLAYLIST_END "\n", fp);
|
||||
os.Format(PLAYLIST_STATE_FILE_RANDOM "%i\n", playlist.queue.random);
|
||||
os.Format(PLAYLIST_STATE_FILE_REPEAT "%i\n", playlist.queue.repeat);
|
||||
os.Format(PLAYLIST_STATE_FILE_SINGLE "%i\n", playlist.queue.single);
|
||||
os.Format(PLAYLIST_STATE_FILE_CONSUME "%i\n", playlist.queue.consume);
|
||||
os.Format(PLAYLIST_STATE_FILE_CROSSFADE "%i\n",
|
||||
(int)pc.GetCrossFade());
|
||||
os.Format(PLAYLIST_STATE_FILE_MIXRAMPDB "%f\n", pc.GetMixRampDb());
|
||||
os.Format(PLAYLIST_STATE_FILE_MIXRAMPDELAY "%f\n",
|
||||
pc.GetMixRampDelay());
|
||||
os.Write(PLAYLIST_STATE_FILE_PLAYLIST_BEGIN "\n");
|
||||
queue_save(os, playlist.queue);
|
||||
os.Write(PLAYLIST_STATE_FILE_PLAYLIST_END "\n");
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -25,15 +25,14 @@
|
||||
#ifndef MPD_PLAYLIST_STATE_HXX
|
||||
#define MPD_PLAYLIST_STATE_HXX
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
struct playlist;
|
||||
struct PlayerControl;
|
||||
class TextFile;
|
||||
class BufferedOutputStream;
|
||||
class SongLoader;
|
||||
|
||||
void
|
||||
playlist_state_save(FILE *fp, const playlist &playlist,
|
||||
playlist_state_save(BufferedOutputStream &os, const playlist &playlist,
|
||||
PlayerControl &pc);
|
||||
|
||||
bool
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#include "SongLoader.hxx"
|
||||
#include "playlist/PlaylistSong.hxx"
|
||||
#include "fs/TextFile.hxx"
|
||||
#include "fs/output/BufferedOutputStream.hxx"
|
||||
#include "util/StringUtil.hxx"
|
||||
#include "util/Error.hxx"
|
||||
#include "fs/Traits.hxx"
|
||||
@@ -36,40 +37,41 @@
|
||||
#define PRIO_LABEL "Prio: "
|
||||
|
||||
static void
|
||||
queue_save_database_song(FILE *fp, int idx, const DetachedSong &song)
|
||||
queue_save_database_song(BufferedOutputStream &os,
|
||||
int idx, const DetachedSong &song)
|
||||
{
|
||||
fprintf(fp, "%i:%s\n", idx, song.GetURI());
|
||||
os.Format("%i:%s\n", idx, song.GetURI());
|
||||
}
|
||||
|
||||
static void
|
||||
queue_save_full_song(FILE *fp, const DetachedSong &song)
|
||||
queue_save_full_song(BufferedOutputStream &os, const DetachedSong &song)
|
||||
{
|
||||
song_save(fp, song);
|
||||
song_save(os, song);
|
||||
}
|
||||
|
||||
static void
|
||||
queue_save_song(FILE *fp, int idx, const DetachedSong &song)
|
||||
queue_save_song(BufferedOutputStream &os, int idx, const DetachedSong &song)
|
||||
{
|
||||
if (song.IsInDatabase() &&
|
||||
song.GetStartMS() == 0 && song.GetEndMS() == 0)
|
||||
/* use the brief format (just the URI) for "full"
|
||||
database songs */
|
||||
queue_save_database_song(fp, idx, song);
|
||||
queue_save_database_song(os, idx, song);
|
||||
else
|
||||
/* use the long format (URI, range, tags) for the
|
||||
rest, so all metadata survives a MPD restart */
|
||||
queue_save_full_song(fp, song);
|
||||
queue_save_full_song(os, song);
|
||||
}
|
||||
|
||||
void
|
||||
queue_save(FILE *fp, const Queue &queue)
|
||||
queue_save(BufferedOutputStream &os, const Queue &queue)
|
||||
{
|
||||
for (unsigned i = 0; i < queue.GetLength(); i++) {
|
||||
uint8_t prio = queue.GetPriorityAtPosition(i);
|
||||
if (prio != 0)
|
||||
fprintf(fp, PRIO_LABEL "%u\n", prio);
|
||||
os.Format(PRIO_LABEL "%u\n", prio);
|
||||
|
||||
queue_save_song(fp, i, queue.Get(i));
|
||||
queue_save_song(os, i, queue.Get(i));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -25,14 +25,13 @@
|
||||
#ifndef MPD_QUEUE_SAVE_HXX
|
||||
#define MPD_QUEUE_SAVE_HXX
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
struct Queue;
|
||||
class BufferedOutputStream;
|
||||
class TextFile;
|
||||
class SongLoader;
|
||||
|
||||
void
|
||||
queue_save(FILE *fp, const Queue &queue);
|
||||
queue_save(BufferedOutputStream &os, const Queue &queue);
|
||||
|
||||
/**
|
||||
* Loads one song from the state file and appends it to the queue.
|
||||
|
Reference in New Issue
Block a user