diff --git a/core/deck.cpp b/core/deck.cpp index 0567fb0a..e5d65abd 100644 --- a/core/deck.cpp +++ b/core/deck.cpp @@ -10,7 +10,7 @@ extern "C" { #include static GSList *tempq_list; -static struct file deck_file; +static struct file tempq_file; static struct queue *__tempq_alloc(struct queue_ops *ops, unsigned int flags) { @@ -28,30 +28,51 @@ static void __tempq_free(struct queue *queue) delete queue; } +static struct queue *__tempq_read_queue() +{ + unsigned int flags, count, i, track; + struct queue *queue; + + file_readf(&tempq_file, "%u %u", &flags, &count); + queue = __tempq_alloc(NULL, flags); + + for (i = 0; i < count; i++) { + file_readf(&tempq_file, "%u", &track); + queue_add(queue, track_get(track)); + } + + return queue; +} + +static void __tempq_write_queue(struct queue *queue) +{ + struct _q_iter it; + struct track *track; + + file_writef(&tempq_file, "%u %u", queue->q_flags, queue_size(queue)); + _q_for_each(&queue->q_tracks, &it) { + track = (struct track *)_q_iter_val(&it); + file_writef(&tempq_file, " %u", track->tr_dbe.dbe_index); + } + file_writef(&tempq_file, "\n"); +} + void tempq_init(struct queue_ops *ops) { - unsigned int flags, count, j, id; - unsigned int num, i; struct queue *queue; + unsigned int num, i; - file_init(&deck_file, "deck", 1); - if (!file_open(&deck_file, OPEN_READ)) - return; - if (file_version(&deck_file) < 1) + file_init(&tempq_file, "deck", 1); + if (!file_open(&tempq_file, OPEN_READ) || file_version(&tempq_file) < 1) return; - file_readf(&deck_file, "%u", &num); + file_readf(&tempq_file, "%u", &num); for (i = 0; i < num; i++) { - file_readf(&deck_file, "%u %u", &flags, &count); - queue = __tempq_alloc(NULL, flags); - for (j = 0; j < count; j++) { - file_readf(&deck_file, "%u", &id); - queue_add(queue, track_get(id)); - } + queue = __tempq_read_queue(); queue->q_ops = ops; } - file_close(&deck_file); + file_close(&tempq_file); } void tempq_deinit() @@ -62,24 +83,16 @@ void tempq_deinit() void tempq_save(struct queue *queue, enum queue_flags flag) { - unsigned int i; GSList *cur; - if (!file_open(&deck_file, OPEN_WRITE)) + if (!file_open(&tempq_file, OPEN_WRITE)) return; - file_writef(&deck_file, "%zu\n", g_slist_length(tempq_list)); - for (cur = tempq_list; cur; cur = g_slist_next(cur)) { - queue = (struct queue *)cur->data; - file_writef(&deck_file, "%u %zu", queue->q_flags, queue_size(queue)); - for (i = 0; i < queue_size(queue); i++) { - file_writef(&deck_file, " %u", - queue_at(queue, i)->tr_dbe.dbe_index); - } - file_writef(&deck_file, "\n"); - } + file_writef(&tempq_file, "%zu\n", g_slist_length(tempq_list)); + for (cur = tempq_list; cur; cur = g_slist_next(cur)) + __tempq_write_queue((struct queue *)cur->data); - file_close(&deck_file); + file_close(&tempq_file); } struct queue *tempq_alloc(struct queue_ops *ops, unsigned int flags)