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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
#ifndef NULLSOFT_API_PLAYLISTMANAGER_H
#define NULLSOFT_API_PLAYLISTMANAGER_H
#include <bfc/dispatch.h>
class ifc_playlistloadercallback;
class ifc_playlist;
class ifc_playlistdirectorycallback;
enum
{
PLAYLISTMANAGER_SUCCESS = 0,
PLAYLISTMANAGER_FAILED = 1,
PLAYLISTMANAGER_LOAD_NO_LOADER = 1,
PLAYLISTMANAGER_LOAD_LOADER_OPEN_FAILED = 2,
};
class api_playlistmanager : public Dispatchable
{
protected:
api_playlistmanager() {}
~api_playlistmanager() {}
public:
int Load( const wchar_t *filename, ifc_playlistloadercallback *playlist );
int LoadAs( const wchar_t *filename, const wchar_t *ext, ifc_playlistloadercallback *playlist ); // call with ext in the format ".pls"
int LoadFromDialog( const wchar_t *fns, ifc_playlistloadercallback *playlist );
int LoadFromANSIDialog( const char *fns, ifc_playlistloadercallback *playlist );
int Save( const wchar_t *filename, ifc_playlist *playlist );
size_t Copy( const wchar_t *destFn, const wchar_t *srcFn ); // returns number of items copied
size_t CountItems( const wchar_t *filename );
int GetLengthMilliseconds( const wchar_t *filename );
uint64_t GetLongLengthMilliseconds( const wchar_t *filename );
void Randomize( ifc_playlist *playlist );
void Reverse( ifc_playlist *playlist );
void LoadDirectory( const wchar_t *directory, ifc_playlistloadercallback *callback, ifc_playlistdirectorycallback *dirCallback );
bool CanLoad( const wchar_t *filename );
void GetExtensionList( wchar_t *extensionList, size_t extensionListCch );
void GetFilterList( wchar_t *extensionList, size_t extensionListCch );
const wchar_t *EnumExtension( size_t num );
public:
DISPATCH_CODES
{
API_PLAYLISTMANAGER_LOAD = 10,
API_PLAYLISTMANAGER_LOADNULLDELIMITED = 11,
API_PLAYLISTMANAGER_LOADNULLDELIMITED_ANSI = 12,
API_PLAYLISTMANAGER_LOADAS = 13,
API_PLAYLISTMANAGER_SAVE = 20,
API_PLAYLISTMANAGER_COPY = 30,
API_PLAYLISTMANAGER_COUNT = 40,
API_PLAYLISTMANAGER_GETLENGTH = 50,
API_PLAYLISTMANAGER_GETLONGLENGTH = 51,
API_PLAYLISTMANAGER_LOADDIRECTORY = 60,
API_PLAYLISTMANAGER_RANDOMIZE = 100,
API_PLAYLISTMANAGER_REVERSE = 110,
API_PLAYLISTMANAGER_CANLOAD = 120,
API_PLAYLISTMANAGER_GETEXTENSIONLIST = 130,
API_PLAYLISTMANAGER_GETFILTERLIST = 140,
API_PLAYLISTMANAGER_ENUMEXTENSION = 150,
};
};
inline void api_playlistmanager::GetFilterList( wchar_t *extensionList, size_t extensionListCch )
{
extensionList[ 0 ] = 0; // just in case no one implements it
extensionList[ 1 ] = 0;
_voidcall( API_PLAYLISTMANAGER_GETFILTERLIST, extensionList, extensionListCch );
}
inline int api_playlistmanager::LoadAs( const wchar_t *filename, const wchar_t *ext, ifc_playlistloadercallback *playlist )
{
return _call( API_PLAYLISTMANAGER_LOADAS, (int)PLAYLISTMANAGER_FAILED, filename, ext, playlist );
}
inline void api_playlistmanager::GetExtensionList( wchar_t *extensionList, size_t extensionListCch )
{
extensionList[ 0 ] = 0; // just in case no one implements it
_voidcall( API_PLAYLISTMANAGER_GETEXTENSIONLIST, extensionList, extensionListCch );
}
inline int api_playlistmanager::Load( const wchar_t *filename, ifc_playlistloadercallback *playlist )
{
return _call( API_PLAYLISTMANAGER_LOAD, (int)PLAYLISTMANAGER_FAILED, filename, playlist );
}
inline int api_playlistmanager::LoadFromDialog( const wchar_t *filename, ifc_playlistloadercallback *playlist )
{
return _call( API_PLAYLISTMANAGER_LOADNULLDELIMITED, (int)PLAYLISTMANAGER_FAILED, filename, playlist );
}
inline int api_playlistmanager::LoadFromANSIDialog( const char *filename, ifc_playlistloadercallback *playlist )
{
return _call( API_PLAYLISTMANAGER_LOADNULLDELIMITED_ANSI, (int)PLAYLISTMANAGER_FAILED, filename, playlist );
}
inline int api_playlistmanager::Save( const wchar_t *filename, ifc_playlist *playlist )
{
return _call( API_PLAYLISTMANAGER_SAVE, (int)PLAYLISTMANAGER_FAILED, filename, playlist );
}
inline size_t api_playlistmanager::Copy( const wchar_t *destFn, const wchar_t *srcFn )
{
return _call( API_PLAYLISTMANAGER_COPY, (size_t)0, destFn, srcFn );
}
inline size_t api_playlistmanager::CountItems( const wchar_t *filename )
{
return _call( API_PLAYLISTMANAGER_COUNT, (size_t)0, filename );
}
inline int api_playlistmanager::GetLengthMilliseconds( const wchar_t *filename )
{
return _call( API_PLAYLISTMANAGER_GETLENGTH, (int)0, filename );
}
inline uint64_t api_playlistmanager::GetLongLengthMilliseconds( const wchar_t *filename )
{
return _call( API_PLAYLISTMANAGER_GETLONGLENGTH, (uint64_t)0, filename );
}
inline void api_playlistmanager::Randomize( ifc_playlist *playlist )
{
_voidcall( API_PLAYLISTMANAGER_RANDOMIZE, playlist );
}
inline void api_playlistmanager::Reverse( ifc_playlist *playlist )
{
_voidcall( API_PLAYLISTMANAGER_REVERSE, playlist );
}
inline void api_playlistmanager::LoadDirectory( const wchar_t *directory, ifc_playlistloadercallback *callback, ifc_playlistdirectorycallback *dirCallback )
{
_voidcall( API_PLAYLISTMANAGER_LOADDIRECTORY, directory, callback, dirCallback );
}
inline bool api_playlistmanager::CanLoad( const wchar_t *filename )
{
return _call( API_PLAYLISTMANAGER_CANLOAD, (bool)true, filename );
}
inline const wchar_t *api_playlistmanager::EnumExtension( size_t num )
{
return _call( API_PLAYLISTMANAGER_ENUMEXTENSION, (const wchar_t *)0, num );
}
// {C5618774-7177-43aa-9906-933C9F40EBDC}
static const GUID api_playlistmanagerGUID =
{ 0xc5618774, 0x7177, 0x43aa, { 0x99, 0x6, 0x93, 0x3c, 0x9f, 0x40, 0xeb, 0xdc } };
#endif
|