aboutsummaryrefslogtreecommitdiff
path: root/Src/playlist/ifc_playlist.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/playlist/ifc_playlist.h')
-rw-r--r--Src/playlist/ifc_playlist.h139
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