queue_save: save song priorities
This commit is contained in:
parent
ef5125f8f4
commit
5ad21d7e98
1
NEWS
1
NEWS
@ -13,6 +13,7 @@ ver 0.17.2 (2012/??/??)
|
|||||||
* mapper: fix potential crash in file permission check
|
* mapper: fix potential crash in file permission check
|
||||||
* playlist: fix use-after-free bug
|
* playlist: fix use-after-free bug
|
||||||
* playlist: fix memory leak
|
* playlist: fix memory leak
|
||||||
|
* state_file: save song priorities
|
||||||
|
|
||||||
|
|
||||||
ver 0.17.1 (2012/07/31)
|
ver 0.17.1 (2012/07/31)
|
||||||
|
@ -83,7 +83,7 @@ playlist_append_song(struct playlist *playlist, struct player_control *pc,
|
|||||||
|
|
||||||
queued = playlist_get_queued_song(playlist);
|
queued = playlist_get_queued_song(playlist);
|
||||||
|
|
||||||
id = queue_append(&playlist->queue, song);
|
id = queue_append(&playlist->queue, song, 0);
|
||||||
|
|
||||||
if (playlist->queue.random) {
|
if (playlist->queue.random) {
|
||||||
/* shuffle the new song into the list of remaining
|
/* shuffle the new song into the list of remaining
|
||||||
|
@ -96,7 +96,7 @@ queue_modify_all(struct queue *queue)
|
|||||||
}
|
}
|
||||||
|
|
||||||
unsigned
|
unsigned
|
||||||
queue_append(struct queue *queue, struct song *song)
|
queue_append(struct queue *queue, struct song *song, uint8_t priority)
|
||||||
{
|
{
|
||||||
unsigned id = queue_generate_id(queue);
|
unsigned id = queue_generate_id(queue);
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ queue_append(struct queue *queue, struct song *song)
|
|||||||
.song = song,
|
.song = song,
|
||||||
.id = id,
|
.id = id,
|
||||||
.version = queue->version,
|
.version = queue->version,
|
||||||
.priority = 0,
|
.priority = priority,
|
||||||
};
|
};
|
||||||
|
|
||||||
queue->order[queue->length] = queue->length;
|
queue->order[queue->length] = queue->length;
|
||||||
|
@ -280,9 +280,11 @@ queue_modify_all(struct queue *queue);
|
|||||||
*
|
*
|
||||||
* If a song is not in the database (determined by
|
* If a song is not in the database (determined by
|
||||||
* song_in_database()), it is freed when removed from the queue.
|
* song_in_database()), it is freed when removed from the queue.
|
||||||
|
*
|
||||||
|
* @param priority the priority of this new queue item
|
||||||
*/
|
*/
|
||||||
unsigned
|
unsigned
|
||||||
queue_append(struct queue *queue, struct song *song);
|
queue_append(struct queue *queue, struct song *song, uint8_t priority);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Swaps two songs, addressed by their position.
|
* Swaps two songs, addressed by their position.
|
||||||
|
@ -24,9 +24,12 @@
|
|||||||
#include "uri.h"
|
#include "uri.h"
|
||||||
#include "database.h"
|
#include "database.h"
|
||||||
#include "song_save.h"
|
#include "song_save.h"
|
||||||
|
#include "text_file.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define PRIO_LABEL "Prio: "
|
||||||
|
|
||||||
static void
|
static void
|
||||||
queue_save_database_song(FILE *fp, int idx, const struct song *song)
|
queue_save_database_song(FILE *fp, int idx, const struct song *song)
|
||||||
{
|
{
|
||||||
@ -54,9 +57,14 @@ queue_save_song(FILE *fp, int idx, const struct song *song)
|
|||||||
void
|
void
|
||||||
queue_save(FILE *fp, const struct queue *queue)
|
queue_save(FILE *fp, const struct queue *queue)
|
||||||
{
|
{
|
||||||
for (unsigned i = 0; i < queue_length(queue); i++)
|
for (unsigned i = 0; i < queue_length(queue); i++) {
|
||||||
|
uint8_t prio = queue_get_priority_at_position(queue, i);
|
||||||
|
if (prio != 0)
|
||||||
|
fprintf(fp, PRIO_LABEL "%u\n", prio);
|
||||||
|
|
||||||
queue_save_song(fp, i, queue_get(queue, i));
|
queue_save_song(fp, i, queue_get(queue, i));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static struct song *
|
static struct song *
|
||||||
get_song(const char *uri)
|
get_song(const char *uri)
|
||||||
@ -75,6 +83,15 @@ queue_load_song(FILE *fp, GString *buffer, const char *line,
|
|||||||
if (queue_is_full(queue))
|
if (queue_is_full(queue))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
uint8_t priority = 0;
|
||||||
|
if (g_str_has_prefix(line, PRIO_LABEL)) {
|
||||||
|
priority = strtoul(line + sizeof(PRIO_LABEL) - 1, NULL, 10);
|
||||||
|
|
||||||
|
line = read_text_line(fp, buffer);
|
||||||
|
if (line == NULL)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (g_str_has_prefix(line, SONG_BEGIN)) {
|
if (g_str_has_prefix(line, SONG_BEGIN)) {
|
||||||
const char *uri = line + sizeof(SONG_BEGIN) - 1;
|
const char *uri = line + sizeof(SONG_BEGIN) - 1;
|
||||||
if (!uri_has_scheme(uri) && !g_path_is_absolute(uri))
|
if (!uri_has_scheme(uri) && !g_path_is_absolute(uri))
|
||||||
@ -102,5 +119,5 @@ queue_load_song(FILE *fp, GString *buffer, const char *line,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
queue_append(queue, song);
|
queue_append(queue, song, priority);
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ main(G_GNUC_UNUSED int argc, G_GNUC_UNUSED char **argv)
|
|||||||
queue_init(&queue, 32);
|
queue_init(&queue, 32);
|
||||||
|
|
||||||
for (unsigned i = 0; i < G_N_ELEMENTS(songs); ++i)
|
for (unsigned i = 0; i < G_N_ELEMENTS(songs); ++i)
|
||||||
queue_append(&queue, &songs[i]);
|
queue_append(&queue, &songs[i], 0);
|
||||||
|
|
||||||
assert(queue_length(&queue) == G_N_ELEMENTS(songs));
|
assert(queue_length(&queue) == G_N_ELEMENTS(songs));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user