diff options
Diffstat (limited to 'Src/playlist/ifc_playlist.h')
-rw-r--r-- | Src/playlist/ifc_playlist.h | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/Src/playlist/ifc_playlist.h b/Src/playlist/ifc_playlist.h new file mode 100644 index 00000000..656623c3 --- /dev/null +++ b/Src/playlist/ifc_playlist.h @@ -0,0 +1,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
\ No newline at end of file |