winamp/Src/playlist/api_playlistmanager.h

162 lines
5.8 KiB
C++

#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