aboutsummaryrefslogtreecommitdiff
path: root/Src/playlist/api_playlistmanager.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/playlist/api_playlistmanager.h')
-rw-r--r--Src/playlist/api_playlistmanager.h161
1 files changed, 161 insertions, 0 deletions
diff --git a/Src/playlist/api_playlistmanager.h b/Src/playlist/api_playlistmanager.h
new file mode 100644
index 00000000..f04df555
--- /dev/null
+++ b/Src/playlist/api_playlistmanager.h
@@ -0,0 +1,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