Classes | Defines | Functions | Variables

playlist-new.c File Reference

#include <assert.h>
#include <inttypes.h>
#include <stdlib.h>
#include <time.h>
#include <glib.h>
#include <libaudcore/audstrings.h>
#include <libaudcore/hook.h>
#include <libaudcore/tuple_formatter.h>
#include "audconfig.h"
#include "config.h"
#include "i18n.h"
#include "main.h"
#include "misc.h"
#include "playback.h"
#include "playlist.h"
#include "playlist-utils.h"
#include "plugin.h"

Go to the source code of this file.

Classes

struct  entry
struct  playlist

Defines

#define SCAN_DEBUG(...)
#define SCAN_THREADS   4
#define STATE_FILE   "playlist-state"
#define DECLARE_PLAYLIST   struct playlist * playlist
#define DECLARE_PLAYLIST_ENTRY
#define LOOKUP_PLAYLIST
#define LOOKUP_PLAYLIST_RET(ret)
#define LOOKUP_PLAYLIST_ENTRY
#define LOOKUP_PLAYLIST_ENTRY_RET(ret)
#define SELECTION_HAS_CHANGED
#define METADATA_WILL_CHANGE
#define METADATA_HAS_CHANGED
#define PLAYLIST_WILL_CHANGE
#define PLAYLIST_HAS_CHANGED

Functions

static void * scanner (void *unused)
static gchar * title_from_tuple (Tuple *tuple)
static void entry_set_tuple_real (struct entry *entry, Tuple *tuple)
static void entry_set_tuple (struct playlist *playlist, struct entry *entry, Tuple *tuple)
static void entry_set_failed (struct playlist *playlist, struct entry *entry)
static struct entryentry_new (gchar *filename, InputPlugin *decoder, Tuple *tuple)
static void entry_free (struct entry *entry)
static void entry_check_has_decoder (struct playlist *playlist, struct entry *entry)
static struct playlistplaylist_new (void)
static void playlist_free (struct playlist *playlist)
static void number_playlists (gint at, gint length)
static struct playlistlookup_playlist (gint playlist_num)
static void number_entries (struct playlist *playlist, gint at, gint length)
static struct entrylookup_entry (struct playlist *playlist, gint entry_num)
static gboolean update (void *unused)
static void queue_update (gint level)
void scan_receive (void)
static gboolean scan_next (void *unused)
static void scan_continue (void)
static void scan_reset (void)
static void scan_stop (void)
static gboolean scan_threaded (struct playlist *playlist, struct entry *entry)
static void check_scanned (struct playlist *playlist, struct entry *entry)
static void check_selected_scanned (struct playlist *playlist)
static void check_all_scanned (struct playlist *playlist)
void playlist_init (void)
void playlist_end (void)
gint playlist_count (void)
void playlist_insert (gint at)
void playlist_reorder (gint from, gint to, gint count)
void playlist_delete (gint playlist_num)
void playlist_set_filename (gint playlist_num, const gchar *filename)
const gchar * playlist_get_filename (gint playlist_num)
void playlist_set_title (gint playlist_num, const gchar *title)
const gchar * playlist_get_title (gint playlist_num)
void playlist_set_active (gint playlist_num)
gint playlist_get_active (void)
void playlist_set_playing (gint playlist_num)
gint playlist_get_playing (void)
static void set_position (struct playlist *playlist, struct entry *entry)
gint playlist_entry_count (gint playlist_num)
static void make_entries (gchar *filename, InputPlugin *decoder, Tuple *tuple, struct index *list)
void playlist_entry_insert (gint playlist_num, gint at, gchar *filename, Tuple *tuple)
void playlist_entry_insert_batch (gint playlist_num, gint at, struct index *filenames, struct index *tuples)
void playlist_entry_delete (gint playlist_num, gint at, gint number)
const gchar * playlist_entry_get_filename (gint playlist_num, gint entry_num)
InputPlugin * playlist_entry_get_decoder (gint playlist_num, gint entry_num)
void playlist_entry_set_tuple (gint playlist_num, gint entry_num, Tuple *tuple)
const Tupleplaylist_entry_get_tuple (gint playlist_num, gint entry_num, gboolean fast)
const gchar * playlist_entry_get_title (gint playlist_num, gint entry_num, gboolean fast)
gint playlist_entry_get_length (gint playlist_num, gint entry_num, gboolean fast)
gboolean playlist_entry_is_segmented (gint playlist_num, gint entry_num)
gint playlist_entry_get_start_time (gint playlist_num, gint entry_num)
gint playlist_entry_get_end_time (gint playlist_num, gint entry_num)
void playlist_set_position (gint playlist_num, gint entry_num)
gint playlist_get_position (gint playlist_num)
void playlist_entry_set_selected (gint playlist_num, gint entry_num, gboolean selected)
gboolean playlist_entry_get_selected (gint playlist_num, gint entry_num)
gint playlist_selected_count (gint playlist_num)
void playlist_select_all (gint playlist_num, gboolean selected)
gint playlist_shift (gint playlist_num, gint entry_num, gint distance)
void playlist_delete_selected (gint playlist_num)
void playlist_reverse (gint playlist_num)
void playlist_randomize (gint playlist_num)
static gint filename_compare (const void *_a, const void *_b, void *_compare)
static gint tuple_compare (const void *_a, const void *_b, void *_compare)
static void sort (struct playlist *playlist, gint(*compare)(const void *a, const void *b, void *inner), void *inner)
static void sort_selected (struct playlist *playlist, gint(*compare)(const void *a, const void *b, void *inner), void *inner)
void playlist_sort_by_filename (gint playlist_num, gint(*compare)(const gchar *a, const gchar *b))
void playlist_sort_by_tuple (gint playlist_num, gint(*compare)(const Tuple *a, const Tuple *b))
void playlist_sort_selected_by_filename (gint playlist_num, gint(*compare)(const gchar *a, const gchar *b))
void playlist_sort_selected_by_tuple (gint playlist_num, gint(*compare)(const Tuple *a, const Tuple *b))
void playlist_reformat_titles (void)
void playlist_rescan (gint playlist_num)
void playlist_rescan_file (const gchar *filename)
gint64 playlist_get_total_length (gint playlist_num, gboolean fast)
gint64 playlist_get_selected_length (gint playlist_num, gboolean fast)
gint playlist_queue_count (gint playlist_num)
void playlist_queue_insert (gint playlist_num, gint at, gint entry_num)
void playlist_queue_insert_selected (gint playlist_num, gint at)
gint playlist_queue_get_entry (gint playlist_num, gint at)
gint playlist_queue_find_entry (gint playlist_num, gint entry_num)
void playlist_queue_delete (gint playlist_num, gint at, gint number)
void playlist_queue_delete_selected (gint playlist_num)
static gboolean shuffle_prev (struct playlist *playlist)
gboolean playlist_prev_song (gint playlist_num)
static gboolean shuffle_next (struct playlist *playlist)
static void shuffle_reset (struct playlist *playlist)
gboolean playlist_next_song (gint playlist_num, gboolean repeat)
gboolean playlist_update_pending (void)
void playlist_save_state (void)
static void parse_next (FILE *handle)
static gboolean parse_integer (const gchar *key, gint *value)
void playlist_load_state (void)

Variables

static struct indexplaylists
static struct playlistactive_playlist
static struct playlistplaying_playlist
static gint update_source
static gint update_level
static gint scan_source
static GMutex * scan_mutex
static GCond * scan_conds [SCAN_THREADS]
static const gchar * scan_filenames [SCAN_THREADS]
static InputPlugin * scan_decoders [SCAN_THREADS]
static Tuplescan_tuples [SCAN_THREADS]
static gboolean scan_quit
static GThread * scan_threads [SCAN_THREADS]
static gint scan_positions [SCAN_THREADS]
gint updated_ago
static gchar parse_key [32]
static gchar * parse_value

Define Documentation

#define DECLARE_PLAYLIST   struct playlist * playlist

Definition at line 48 of file playlist-new.c.

#define DECLARE_PLAYLIST_ENTRY
Value:
struct playlist * playlist; \
    struct entry * entry

Definition at line 51 of file playlist-new.c.

#define LOOKUP_PLAYLIST
Value:
{ \
    playlist = lookup_playlist (playlist_num); \
    g_return_if_fail (playlist != NULL); \
}

Definition at line 55 of file playlist-new.c.

#define LOOKUP_PLAYLIST_ENTRY
Value:
{ \
    playlist = lookup_playlist (playlist_num); \
    g_return_if_fail (playlist != NULL); \
    entry = lookup_entry (playlist, entry_num); \
    g_return_if_fail (entry != NULL); \
}

Definition at line 67 of file playlist-new.c.

#define LOOKUP_PLAYLIST_ENTRY_RET (   ret  ) 
#define LOOKUP_PLAYLIST_RET (   ret  ) 
#define METADATA_HAS_CHANGED
Value:

Definition at line 93 of file playlist-new.c.

#define METADATA_WILL_CHANGE
Value:
{ \
    scan_stop (); \
}

Definition at line 88 of file playlist-new.c.

#define PLAYLIST_HAS_CHANGED
Value:

Definition at line 104 of file playlist-new.c.

#define PLAYLIST_WILL_CHANGE
Value:
{ \
    scan_stop (); \
}

Definition at line 99 of file playlist-new.c.

#define SCAN_DEBUG (   ...  ) 
#define SCAN_THREADS   4

Definition at line 45 of file playlist-new.c.

#define SELECTION_HAS_CHANGED
Value:

Definition at line 83 of file playlist-new.c.

#define STATE_FILE   "playlist-state"

Definition at line 46 of file playlist-new.c.

Referenced by playlist_load_state(), and playlist_save_state().


Function Documentation

static void check_all_scanned ( struct playlist playlist  )  [static]

Definition at line 611 of file playlist-new.c.

Referenced by playlist_get_total_length(), and playlist_sort_by_tuple().

static void check_scanned ( struct playlist playlist,
struct entry entry 
) [static]
static void check_selected_scanned ( struct playlist playlist  )  [static]
static void entry_check_has_decoder ( struct playlist playlist,
struct entry entry 
) [static]

Definition at line 275 of file playlist-new.c.

Referenced by check_scanned(), playlist_entry_get_decoder(), and scan_next().

static void entry_free ( struct entry entry  )  [static]

Definition at line 264 of file playlist-new.c.

Referenced by playlist_delete_selected(), playlist_entry_delete(), and playlist_free().

static struct entry* entry_new ( gchar *  filename,
InputPlugin *  decoder,
Tuple tuple 
) [static, read]

Definition at line 244 of file playlist-new.c.

Referenced by make_entries().

static void entry_set_failed ( struct playlist playlist,
struct entry entry 
) [static]

Definition at line 238 of file playlist-new.c.

Referenced by check_scanned(), entry_check_has_decoder(), and scan_receive().

static void entry_set_tuple ( struct playlist playlist,
struct entry entry,
Tuple tuple 
) [static]
static void entry_set_tuple_real ( struct entry entry,
Tuple tuple 
) [static]

Definition at line 169 of file playlist-new.c.

Referenced by entry_new(), and entry_set_tuple().

static gint filename_compare ( const void *  _a,
const void *  _b,
void *  _compare 
) [static]
static struct entry* lookup_entry ( struct playlist playlist,
gint  entry_num 
) [static, read]

Definition at line 351 of file playlist-new.c.

static struct playlist* lookup_playlist ( gint  playlist_num  )  [static, read]

Definition at line 331 of file playlist-new.c.

static void make_entries ( gchar *  filename,
InputPlugin *  decoder,
Tuple tuple,
struct index list 
) [static]

Definition at line 882 of file playlist-new.c.

Referenced by playlist_entry_insert_batch().

static void number_entries ( struct playlist playlist,
gint  at,
gint  length 
) [static]
static void number_playlists ( gint  at,
gint  length 
) [static]

Definition at line 319 of file playlist-new.c.

Referenced by playlist_delete(), playlist_insert(), and playlist_reorder().

static gboolean parse_integer ( const gchar *  key,
gint value 
) [static]

Definition at line 1973 of file playlist-new.c.

Referenced by playlist_load_state().

static void parse_next ( FILE *  handle  )  [static]

Definition at line 1950 of file playlist-new.c.

Referenced by playlist_load_state().

gint playlist_count ( void   ) 

Definition at line 683 of file playlist-new.c.

Referenced by activate_temp(), add_cb(), and save_playlists().

void playlist_delete ( gint  playlist_num  ) 

Definition at line 741 of file playlist-new.c.

void playlist_delete_selected ( gint  playlist_num  ) 
void playlist_end ( void   ) 

Definition at line 656 of file playlist-new.c.

Referenced by shut_down().

gint playlist_entry_count ( gint  playlist_num  ) 
void playlist_entry_delete ( gint  playlist_num,
gint  at,
gint  number 
)

Definition at line 968 of file playlist-new.c.

Referenced by add_list(), drct_pl_clear(), and drct_pl_delete().

InputPlugin* playlist_entry_get_decoder ( gint  playlist_num,
gint  entry_num 
)

Definition at line 1026 of file playlist-new.c.

Referenced by playback_play_file(), and playlist_remove_failed().

gint playlist_entry_get_end_time ( gint  playlist_num,
gint  entry_num 
)

Definition at line 1102 of file playlist-new.c.

Referenced by playback_play_file().

const gchar* playlist_entry_get_filename ( gint  playlist_num,
gint  entry_num 
)
gint playlist_entry_get_length ( gint  playlist_num,
gint  entry_num,
gboolean  fast 
)

Definition at line 1073 of file playlist-new.c.

gboolean playlist_entry_get_selected ( gint  playlist_num,
gint  entry_num 
)

Definition at line 1167 of file playlist-new.c.

Referenced by playlist_select_by_patterns().

gint playlist_entry_get_start_time ( gint  playlist_num,
gint  entry_num 
)

Definition at line 1093 of file playlist-new.c.

Referenced by playback_play_file().

const gchar* playlist_entry_get_title ( gint  playlist_num,
gint  entry_num,
gboolean  fast 
)

Definition at line 1061 of file playlist-new.c.

Referenced by drct_pl_get_title(), get_info_cb(), playback_play_file(), and update_cb().

const Tuple* playlist_entry_get_tuple ( gint  playlist_num,
gint  entry_num,
gboolean  fast 
)

Definition at line 1049 of file playlist-new.c.

void playlist_entry_insert ( gint  playlist_num,
gint  at,
gchar *  filename,
Tuple tuple 
)

Definition at line 911 of file playlist-new.c.

void playlist_entry_insert_batch ( gint  playlist_num,
gint  at,
struct index filenames,
struct index tuples 
)

Definition at line 922 of file playlist-new.c.

gboolean playlist_entry_is_segmented ( gint  playlist_num,
gint  entry_num 
)

Definition at line 1084 of file playlist-new.c.

Referenced by playback_play_file().

void playlist_entry_set_selected ( gint  playlist_num,
gint  entry_num,
gboolean  selected 
)
void playlist_entry_set_tuple ( gint  playlist_num,
gint  entry_num,
Tuple tuple 
)

Definition at line 1037 of file playlist-new.c.

Referenced by set_tuple_cb().

static void playlist_free ( struct playlist playlist  )  [static]

Definition at line 304 of file playlist-new.c.

Referenced by playlist_delete(), and playlist_end().

gint playlist_get_active ( void   ) 
const gchar* playlist_get_filename ( gint  playlist_num  ) 

Definition at line 786 of file playlist-new.c.

gint playlist_get_playing ( void   ) 
gint playlist_get_position ( gint  playlist_num  ) 
gint64 playlist_get_selected_length ( gint  playlist_num,
gboolean  fast 
)

Definition at line 1590 of file playlist-new.c.

const gchar* playlist_get_title ( gint  playlist_num  ) 

Definition at line 808 of file playlist-new.c.

Referenced by activate_temp(), and get_info_cb().

gint64 playlist_get_total_length ( gint  playlist_num,
gboolean  fast 
)

Definition at line 1579 of file playlist-new.c.

void playlist_init ( void   ) 

Definition at line 618 of file playlist-new.c.

Referenced by main().

void playlist_insert ( gint  at  ) 

Definition at line 688 of file playlist-new.c.

Referenced by activate_temp(), load_playlists(), and playlist_delete().

void playlist_load_state ( void   ) 

Definition at line 1979 of file playlist-new.c.

Referenced by load_playlists().

static struct playlist* playlist_new ( void   )  [static, read]

Definition at line 286 of file playlist-new.c.

Referenced by playlist_init(), and playlist_insert().

gboolean playlist_next_song ( gint  playlist_num,
gboolean  repeat 
)

Definition at line 1848 of file playlist-new.c.

Referenced by drct_pl_next(), playback_ended(), and playback_play().

gboolean playlist_prev_song ( gint  playlist_num  ) 

Definition at line 1760 of file playlist-new.c.

Referenced by drct_pl_prev().

gint playlist_queue_count ( gint  playlist_num  ) 

Definition at line 1601 of file playlist-new.c.

Referenced by add_list(), drct_pq_clear(), drct_pq_get_length(), and get_position_cb().

void playlist_queue_delete ( gint  playlist_num,
gint  at,
gint  number 
)

Definition at line 1683 of file playlist-new.c.

Referenced by add_list(), drct_pq_clear(), and drct_pq_remove().

void playlist_queue_delete_selected ( gint  playlist_num  ) 

Definition at line 1721 of file playlist-new.c.

gint playlist_queue_find_entry ( gint  playlist_num,
gint  entry_num 
)

Definition at line 1671 of file playlist-new.c.

Referenced by drct_pq_get_queue_position(), and drct_pq_remove().

gint playlist_queue_get_entry ( gint  playlist_num,
gint  at 
)

Definition at line 1655 of file playlist-new.c.

Referenced by drct_pq_get_entry().

void playlist_queue_insert ( gint  playlist_num,
gint  at,
gint  entry_num 
)

Definition at line 1610 of file playlist-new.c.

Referenced by drct_pq_add().

void playlist_queue_insert_selected ( gint  playlist_num,
gint  at 
)

Definition at line 1629 of file playlist-new.c.

void playlist_randomize ( gint  playlist_num  ) 

Definition at line 1362 of file playlist-new.c.

void playlist_reformat_titles ( void   ) 

Definition at line 1500 of file playlist-new.c.

Referenced by on_titlestring_cbox_changed(), and titlestring_timeout_proc().

void playlist_reorder ( gint  from,
gint  to,
gint  count 
)

Definition at line 706 of file playlist-new.c.

void playlist_rescan ( gint  playlist_num  ) 

Definition at line 1524 of file playlist-new.c.

Referenced by playlist_remove_failed().

void playlist_rescan_file ( const gchar *  filename  ) 

Definition at line 1545 of file playlist-new.c.

Referenced by file_write_tuple().

void playlist_reverse ( gint  playlist_num  ) 

Definition at line 1338 of file playlist-new.c.

void playlist_save_state ( void   ) 

Definition at line 1910 of file playlist-new.c.

Referenced by save_playlists().

void playlist_select_all ( gint  playlist_num,
gboolean  selected 
)
gint playlist_selected_count ( gint  playlist_num  ) 

Definition at line 1176 of file playlist-new.c.

void playlist_set_active ( gint  playlist_num  ) 
void playlist_set_filename ( gint  playlist_num,
const gchar *  filename 
)

Definition at line 773 of file playlist-new.c.

void playlist_set_playing ( gint  playlist_num  ) 
void playlist_set_position ( gint  playlist_num,
gint  entry_num 
)

Definition at line 1111 of file playlist-new.c.

Referenced by add_cb(), add_list(), drct_pl_set_pos(), and playback_ended().

void playlist_set_title ( gint  playlist_num,
const gchar *  title 
)

Definition at line 795 of file playlist-new.c.

Referenced by activate_temp().

gint playlist_shift ( gint  playlist_num,
gint  entry_num,
gint  distance 
)

Definition at line 1215 of file playlist-new.c.

void playlist_sort_by_filename ( gint  playlist_num,
gint(*)(const gchar *a, const gchar *b compare 
)

Definition at line 1462 of file playlist-new.c.

void playlist_sort_by_tuple ( gint  playlist_num,
gint(*)(const Tuple *a, const Tuple *b compare 
)
void playlist_sort_selected_by_filename ( gint  playlist_num,
gint(*)(const gchar *a, const gchar *b compare 
)

Definition at line 1481 of file playlist-new.c.

void playlist_sort_selected_by_tuple ( gint  playlist_num,
gint(*)(const Tuple *a, const Tuple *b compare 
)

Definition at line 1491 of file playlist-new.c.

Referenced by playlist_sort_selected_by_scheme().

gboolean playlist_update_pending ( void   ) 

Definition at line 1905 of file playlist-new.c.

static void queue_update ( gint  level  )  [static]

Definition at line 368 of file playlist-new.c.

Referenced by check_scanned(), and scan_next().

static void scan_continue ( void   )  [static]

Definition at line 458 of file playlist-new.c.

Referenced by scan_reset(), and scanner().

static gboolean scan_next ( void *  unused  )  [static]

Definition at line 402 of file playlist-new.c.

Referenced by scan_continue(), and scan_threaded().

void scan_receive ( void   ) 

Definition at line 378 of file playlist-new.c.

Referenced by scan_next(), scan_stop(), and scan_threaded().

static void scan_reset ( void   )  [static]

Definition at line 465 of file playlist-new.c.

Referenced by playlist_init().

static void scan_stop ( void   )  [static]

Definition at line 479 of file playlist-new.c.

Referenced by playlist_end().

static gboolean scan_threaded ( struct playlist playlist,
struct entry entry 
) [static]

Definition at line 544 of file playlist-new.c.

Referenced by check_scanned().

static void * scanner ( void *  unused  )  [static]

Definition at line 506 of file playlist-new.c.

Referenced by playlist_init().

static void set_position ( struct playlist playlist,
struct entry entry 
) [static]
static gboolean shuffle_next ( struct playlist playlist  )  [static]

Definition at line 1789 of file playlist-new.c.

Referenced by playlist_next_song().

static gboolean shuffle_prev ( struct playlist playlist  )  [static]

Definition at line 1738 of file playlist-new.c.

Referenced by playlist_prev_song().

static void shuffle_reset ( struct playlist playlist  )  [static]

Definition at line 1834 of file playlist-new.c.

Referenced by playlist_next_song().

static void sort ( struct playlist playlist,
gint(*)(const void *a, const void *b, void *inner)  compare,
void *  inner 
) [static]

Definition at line 1414 of file playlist-new.c.

Referenced by playlist_sort_by_filename(), and playlist_sort_by_tuple().

static void sort_selected ( struct playlist playlist,
gint(*)(const void *a, const void *b, void *inner)  compare,
void *  inner 
) [static]
static gchar* title_from_tuple ( Tuple tuple  )  [static]

Definition at line 159 of file playlist-new.c.

Referenced by entry_set_tuple_real(), and playlist_reformat_titles().

static gint tuple_compare ( const void *  _a,
const void *  _b,
void *  _compare 
) [static]

Definition at line 1396 of file playlist-new.c.

Referenced by playlist_sort_by_tuple(), and playlist_sort_selected_by_tuple().

static gboolean update ( void *  unused  )  [static]

Definition at line 359 of file playlist-new.c.

Referenced by queue_update().


Variable Documentation

struct playlist* active_playlist [static]

Definition at line 142 of file playlist-new.c.

gchar parse_key[32] [static]

Definition at line 1947 of file playlist-new.c.

gchar* parse_value [static]

Definition at line 1948 of file playlist-new.c.

struct playlist* playing_playlist [static]

Definition at line 143 of file playlist-new.c.

struct index* playlists [static]

Definition at line 141 of file playlist-new.c.

Referenced by activate_temp(), and save_playlists().

GCond* scan_conds[SCAN_THREADS] [static]
InputPlugin* scan_decoders[SCAN_THREADS] [static]

Definition at line 150 of file playlist-new.c.

Referenced by playlist_init(), scan_next(), scan_receive(), scan_stop(), and scanner().

const gchar* scan_filenames[SCAN_THREADS] [static]
GMutex* scan_mutex [static]
gint scan_positions[SCAN_THREADS] [static]

Definition at line 154 of file playlist-new.c.

Referenced by scan_next(), scan_receive(), scan_reset(), and scan_threaded().

gboolean scan_quit [static]

Definition at line 152 of file playlist-new.c.

Referenced by playlist_end(), playlist_init(), and scanner().

gint scan_source [static]

Definition at line 146 of file playlist-new.c.

Referenced by playlist_init(), scan_continue(), scan_next(), and scan_stop().

GThread* scan_threads[SCAN_THREADS] [static]

Definition at line 153 of file playlist-new.c.

Referenced by playlist_end(), and playlist_init().

Tuple* scan_tuples[SCAN_THREADS] [static]

Definition at line 151 of file playlist-new.c.

gint update_level [static]

Definition at line 145 of file playlist-new.c.

Referenced by playlist_init(), queue_update(), and update().

gint update_source [static]

Definition at line 155 of file playlist-new.c.

Referenced by scan_next(), scan_receive(), and scan_reset().