vitunes
Main Page
Data Structures
Files
File List
All
Data Structures
src
playlist.h
1
/*
2
* Copyright (c) 2010, 2011 Ryan Flannery <ryan.flannery@gmail.com>
3
*
4
* Permission to use, copy, modify, and distribute this software for any
5
* purpose with or without fee is hereby granted, provided that the above
6
* copyright notice and this permission notice appear in all copies.
7
*
8
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15
*/
16
17
#ifndef PLAYLIST_H
18
#define PLAYLIST_H
19
20
#include "compat/compat.h"
21
22
#include <sys/stat.h>
23
#include <sys/types.h>
24
25
#include <err.h>
26
#include <errno.h>
27
#include <glob.h>
28
#include <stdio.h>
29
#include <libgen.h>
30
#include <stdlib.h>
31
#include <string.h>
32
#include <unistd.h>
33
34
#include "debug.h"
35
#include "meta_info.h"
36
37
#define PLAYLIST_CHUNK_SIZE 100
38
#define DEFAULT_HISTORY_SIZE 100
39
extern
int
history_size;
40
41
typedef
struct
{
42
#define CHANGE_ADD 0
43
#define CHANGE_REMOVE 1
44
short
type;
45
size_t
size;
46
meta_info
**files;
47
int
location;
48
49
}
playlist_changeset
;
50
51
/* the core playlist structure */
52
typedef
struct
{
53
char
*filename;
/* filename containing the playlist */
54
char
*name;
/* name of the playlist used in display */
55
bool
needs_saving;
/* does this playlist have unsaved changes? */
56
57
/* the array of files (their meta information) in the playlist */
58
meta_info
**files;
59
int
nfiles;
/* number of files in the playlist */
60
int
capacity;
/* current size malloc()'d for the files */
61
62
/* history of the playlist */
63
playlist_changeset
**history;
/* complete history */
64
int
hist_present;
/* current changeset in history */
65
66
}
playlist
;
67
68
/*
69
* IMPORTANT NOTES ABOUT THE "playlist" STRUCTURE:
70
* 1. The elements of the "files" array are simply pointers to the
71
* already existing meta-info elements in the media database.
72
*
73
* 2. When loading a playlist from a file, each element of the playlist
74
* is compared against the media database to find a corresponding entry.
75
* If no such file exists in the media database, a new record is added
76
* to the DB but it contains *only* the filename read from the playlist
77
* file (no meta info).
78
*
79
* 3. The media database mentioned above is simply an array of meta_info
80
* structs, passed to the functions when necessary below.
81
*/
82
83
/* create/destroy/duplicate playlist structs */
84
playlist
*playlist_new(
void
);
85
void
playlist_free(
playlist
*p);
86
playlist
*playlist_dup(
const
playlist
*original,
const
char
*filename,
87
const
char
* name);
88
89
/* add/remove/replace files from a playlist */
90
void
playlist_files_add(
playlist
*p,
meta_info
**f,
int
start,
int
size,
bool
);
91
void
playlist_files_append(
playlist
*p,
meta_info
**f,
int
size,
bool
);
92
void
playlist_files_remove(
playlist
*p,
int
start,
int
size,
bool
);
93
void
playlist_file_replace(
playlist
*p,
int
index,
meta_info
*newEntry);
94
95
/* load/save/delete playlists from/to/from filesystem */
96
playlist
*playlist_load(
const
char
*filename,
meta_info
**db,
int
ndb);
97
void
playlist_save(
const
playlist
*p);
98
void
playlist_delete(
playlist
*p);
99
100
/* filter a playlist to all records matching/not-matching a given string */
101
playlist
*playlist_filter(
const
playlist
*p,
bool
m);
102
103
/* retrieve all playlist files in a given directory and return number found */
104
int
retrieve_playlist_filenames(
const
char
*dirname,
char
***files);
105
106
/* for modification and use of the playlist history */
107
playlist_changeset
*changeset_create(
short
t,
size_t
s,
meta_info
**f,
int
l);
108
void
changeset_free(
playlist_changeset
*c);
109
110
playlist_changeset
**playlist_history_new();
111
void
playlist_history_free(
playlist
*p);
112
113
void
playlist_history_push(
playlist
*p,
playlist_changeset
*c);
114
int
playlist_undo(
playlist
*p);
115
int
playlist_redo(
playlist
*p);
116
117
#endif
Generated on Mon Feb 29 2016 23:43:53 for vitunes by
1.8.2