1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
#ifndef NULLSOFT_IFC_PLAYLIST_H
#define NULLSOFT_IFC_PLAYLIST_H
#include "bfc/dispatch.h"
#include "bfc/platform/types.h"
enum
{
PLAYLIST_SUCCESS = 0,
PLAYLIST_UNIMPLEMENTED = 1,
};
class ifc_playlist : public Dispatchable
{
protected:
ifc_playlist() {}
~ifc_playlist() {}
public:
DISPATCH_CODES
{
IFC_PLAYLIST_CLEAR = 10,
//IFC_PLAYLIST_APPENDWITHINFO = 20,
//IFC_PLAYLIST_APPEND = 30,
IFC_PLAYLIST_GETNUMITEMS = 40,
IFC_PLAYLIST_GETITEM = 50,
IFC_PLAYLIST_GETITEMTITLE = 60,
IFC_PLAYLIST_GETITEMLENGTHMILLISECONDS = 70,
IFC_PLAYLIST_GETITEMEXTENDEDINFO = 80,
IFC_PLAYLIST_REVERSE = 90,
IFC_PLAYLIST_SWAP = 100,
IFC_PLAYLIST_RANDOMIZE = 110,
IFC_PLAYLIST_REMOVE = 120,
IFC_PLAYLIST_SORTBYTITLE = 130,
IFC_PLAYLIST_SORTBYFILENAME = 140,
IFC_PLAYLIST_SORTBYDIRECTORY = 150,
};
void Clear();
//void AppendWithInfo(const wchar_t *filename, const char *title, int lengthInMS);
//void Append(const wchar_t *filename);
size_t GetNumItems();
size_t GetItem( size_t item, wchar_t *filename, size_t filenameCch );
size_t GetItemTitle( size_t item, wchar_t *title, size_t titleCch );
int GetItemLengthMilliseconds( size_t item ); // TODO: maybe microsecond for better resolution?
size_t GetItemExtendedInfo( size_t item, const wchar_t *metadata, wchar_t *info, size_t infoCch );
int Reverse(); // optional, return 1 to indicate that you did the reversal (otherwise, caller must perform manually)
int Swap( size_t item1, size_t item2 );
int Randomize( int ( *generator )( ) ); // optional, return 1 to indicate that you did the randomization (otherwise, caller must perform manually)
void Remove( size_t item );
int SortByTitle(); // optional, return 1 to indicate that you did the sort (otherwise, caller must perform manually)
int SortByFilename(); // optional, return 1 to indicate that you did the sort (otherwise, caller must perform manually)
int SortByDirectory();
};
inline void ifc_playlist::Clear()
{
_voidcall( IFC_PLAYLIST_CLEAR );
}
/*
inline void ifc_playlist::AppendWithInfo(const wchar_t *filename, const char *title, int lengthInMS)
{
_voidcall(IFC_PLAYLIST_APPENDWITHINFO, filename, title, lengthInMS);
}
*/
/*
inline void ifc_playlist::Append(const wchar_t *filename)
{
_voidcall(IFC_PLAYLIST_APPEND, filename);
}*/
inline size_t ifc_playlist::GetNumItems()
{
return _call( IFC_PLAYLIST_GETNUMITEMS, (size_t)0 );
}
inline size_t ifc_playlist::GetItem( size_t item, wchar_t *filename, size_t filenameCch )
{
return _call( IFC_PLAYLIST_GETITEM, (size_t)0, item, filename, filenameCch );
}
inline size_t ifc_playlist::GetItemTitle( size_t item, wchar_t *title, size_t titleCch )
{
return _call( IFC_PLAYLIST_GETITEMTITLE, (size_t)0, item, title, titleCch );
}
inline int ifc_playlist::GetItemLengthMilliseconds( size_t item )
{
return _call( IFC_PLAYLIST_GETITEMLENGTHMILLISECONDS, (int)-1, item );
}
inline size_t ifc_playlist::GetItemExtendedInfo( size_t item, const wchar_t *metadata, wchar_t *info, size_t infoCch )
{
return _call( IFC_PLAYLIST_GETITEMEXTENDEDINFO, (size_t)0, item, metadata, info, infoCch );
}
inline int ifc_playlist::Reverse()
{
return _call( IFC_PLAYLIST_REVERSE, (int)PLAYLIST_UNIMPLEMENTED );
}
inline int ifc_playlist::Swap( size_t item1, size_t item2 )
{
return _call( IFC_PLAYLIST_SWAP, (int)PLAYLIST_UNIMPLEMENTED, item1, item2 );
}
inline int ifc_playlist::Randomize( int ( *generator )( ) )
{
return _call( IFC_PLAYLIST_RANDOMIZE, (int)PLAYLIST_UNIMPLEMENTED, generator );
}
inline void ifc_playlist::Remove( size_t item )
{
_voidcall( IFC_PLAYLIST_REMOVE, item );
}
inline int ifc_playlist::SortByTitle()
{
return _call( IFC_PLAYLIST_SORTBYTITLE, (int)0 );
}
inline int ifc_playlist::SortByFilename()
{
return _call( IFC_PLAYLIST_SORTBYFILENAME, (int)0 );
}
inline int ifc_playlist::SortByDirectory()
{
return _call( IFC_PLAYLIST_SORTBYDIRECTORY, (int)0 );
}
#endif
|