aboutsummaryrefslogtreecommitdiff
path: root/Src/playlist/SPlaylistsEnumerator.cpp
diff options
context:
space:
mode:
authorJean-Francois Mauguit <jfmauguit@mac.com>2024-09-24 09:03:25 -0400
committerGitHub <noreply@github.com>2024-09-24 09:03:25 -0400
commitbab614c421ed7ae329d26bf028c4a3b1d2450f5a (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/playlist/SPlaylistsEnumerator.cpp
parent4bde6044fddf053f31795b9eaccdd2a5a527d21f (diff)
parent20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (diff)
downloadwinamp-bab614c421ed7ae329d26bf028c4a3b1d2450f5a.tar.gz
Merge pull request #5 from WinampDesktop/community
Merge to main
Diffstat (limited to 'Src/playlist/SPlaylistsEnumerator.cpp')
-rw-r--r--Src/playlist/SPlaylistsEnumerator.cpp184
1 files changed, 184 insertions, 0 deletions
diff --git a/Src/playlist/SPlaylistsEnumerator.cpp b/Src/playlist/SPlaylistsEnumerator.cpp
new file mode 100644
index 00000000..376c64f2
--- /dev/null
+++ b/Src/playlist/SPlaylistsEnumerator.cpp
@@ -0,0 +1,184 @@
+#include "SPlaylistsEnumerator.h"
+#include "api__playlist.h"
+#include <bfc/nsguid.h>
+#include "Playlists.h"
+
+extern ScriptObjectController *script_root;
+extern PlaylistsEnumeratorScriptController playlistsEnumeratorController;
+
+// {C18F8E50-2C81-4001-9F46-FD942B07ECCD}
+static const GUID makiPlaylistsEnumeratorGUID =
+{ 0xc18f8e50, 0x2c81, 0x4001, { 0x9f, 0x46, 0xfd, 0x94, 0x2b, 0x7, 0xec, 0xcd } };
+
+// -- Functions table -------------------------------------
+function_descriptor_struct PlaylistsEnumeratorScriptController::exportedFunction[] = {
+ {L"GetCount", 0, (void *)SPlaylistsEnumerator::script_vcpu_GetCount },
+ {L"GetFilename", 1, (void *)SPlaylistsEnumerator::script_vcpu_GetFilename },
+ {L"GetTitle", 1, (void *)SPlaylistsEnumerator::script_vcpu_GetTitle },
+ {L"GetLength", 1, (void *)SPlaylistsEnumerator::script_vcpu_GetLength },
+ {L"GetNumItems", 1, (void *)SPlaylistsEnumerator::script_vcpu_GetNumItems },
+ {L"GetGUID", 1, (void *)SPlaylistsEnumerator::script_vcpu_GetGUID },
+
+};
+// --------------------------------------------------------
+
+const wchar_t *PlaylistsEnumeratorScriptController::getClassName()
+{
+ return L"PlaylistsEnumerator";
+}
+
+const wchar_t *PlaylistsEnumeratorScriptController::getAncestorClassName()
+{
+ return L"Object";
+}
+
+ScriptObjectController *PlaylistsEnumeratorScriptController::getAncestorController()
+{
+ return script_root;
+}
+
+ScriptObject *PlaylistsEnumeratorScriptController::instantiate()
+{
+ SPlaylistsEnumerator *xd = new SPlaylistsEnumerator;
+ ASSERT(xd != NULL);
+ return xd->getScriptObject();
+}
+
+void PlaylistsEnumeratorScriptController::destroy( ScriptObject *o )
+{
+ SPlaylistsEnumerator *xd = static_cast<SPlaylistsEnumerator *>( o->vcpu_getInterface( makiPlaylistsEnumeratorGUID ) );
+ ASSERT( xd != NULL );
+ delete xd;
+}
+
+void *PlaylistsEnumeratorScriptController::encapsulate( ScriptObject *o )
+{
+ return NULL;
+}
+
+void PlaylistsEnumeratorScriptController::deencapsulate( void *o )
+{}
+
+int PlaylistsEnumeratorScriptController::getNumFunctions()
+{
+ return sizeof( exportedFunction ) / sizeof( function_descriptor_struct );
+}
+
+const function_descriptor_struct *PlaylistsEnumeratorScriptController::getExportedFunctions()
+{
+ return exportedFunction;
+}
+
+GUID PlaylistsEnumeratorScriptController::getClassGuid()
+{
+ return makiPlaylistsEnumeratorGUID;
+}
+
+/* --- */
+
+SPlaylistsEnumerator::SPlaylistsEnumerator()
+{
+ getScriptObject()->vcpu_setInterface( makiPlaylistsEnumeratorGUID, static_cast<SPlaylistsEnumerator *>( this ) );
+ getScriptObject()->vcpu_setClassName( L"PlaylistsEnumerator" );
+ getScriptObject()->vcpu_setController( &playlistsEnumeratorController );
+}
+
+SPlaylistsEnumerator::~SPlaylistsEnumerator()
+{
+ //info.deleteAll();
+ for (auto obj : info)
+ {
+ delete obj;
+ }
+ info.clear();
+}
+
+scriptVar SPlaylistsEnumerator::script_vcpu_GetCount( SCRIPT_FUNCTION_PARAMS, ScriptObject *o )
+{
+ SCRIPT_FUNCTION_INIT;
+ SPlaylistsEnumerator *enumerator = static_cast<SPlaylistsEnumerator *>( o->vcpu_getInterface( makiPlaylistsEnumeratorGUID ) );
+ if ( enumerator )
+ {
+ return MAKE_SCRIPT_INT( (int)enumerator->info.size() );
+ }
+
+ return MAKE_SCRIPT_INT( 0 );
+}
+
+static const wchar_t *static_splaylistsenumerator_empty_string = L"";
+scriptVar SPlaylistsEnumerator::script_vcpu_GetFilename( SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar playlistNumber )
+{
+ SCRIPT_FUNCTION_INIT;
+ SPlaylistsEnumerator *enumerator = static_cast<SPlaylistsEnumerator *>( o->vcpu_getInterface( makiPlaylistsEnumeratorGUID ) );
+ size_t i = GET_SCRIPT_INT( playlistNumber );
+ if ( enumerator && i < enumerator->info.size() )
+ {
+ return MAKE_SCRIPT_STRING( enumerator->info[ i ]->filename );
+ }
+
+ return MAKE_SCRIPT_STRING( static_splaylistsenumerator_empty_string );
+}
+
+scriptVar SPlaylistsEnumerator::script_vcpu_GetTitle( SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar playlistNumber )
+{
+ SCRIPT_FUNCTION_INIT;
+ SPlaylistsEnumerator *enumerator = static_cast<SPlaylistsEnumerator *>( o->vcpu_getInterface( makiPlaylistsEnumeratorGUID ) );
+ size_t i = GET_SCRIPT_INT( playlistNumber );
+ if ( enumerator && i < enumerator->info.size() )
+ {
+ return MAKE_SCRIPT_STRING( enumerator->info[ i ]->title );
+ }
+
+ return MAKE_SCRIPT_STRING( static_splaylistsenumerator_empty_string );
+}
+
+scriptVar SPlaylistsEnumerator::script_vcpu_GetLength( SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar playlistNumber )
+{
+ SCRIPT_FUNCTION_INIT;
+ SPlaylistsEnumerator *enumerator = static_cast<SPlaylistsEnumerator *>( o->vcpu_getInterface( makiPlaylistsEnumeratorGUID ) );
+ size_t i = GET_SCRIPT_INT( playlistNumber );
+ if ( enumerator && i < enumerator->info.size() )
+ {
+ return MAKE_SCRIPT_INT( enumerator->info[ i ]->length );
+ }
+
+ return MAKE_SCRIPT_INT( -1 );
+}
+
+scriptVar SPlaylistsEnumerator::script_vcpu_GetNumItems( SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar playlistNumber )
+{
+ SCRIPT_FUNCTION_INIT;
+ SPlaylistsEnumerator *enumerator = static_cast<SPlaylistsEnumerator *>( o->vcpu_getInterface( makiPlaylistsEnumeratorGUID ) );
+ size_t i = GET_SCRIPT_INT( playlistNumber );
+ if ( enumerator && i < enumerator->info.size() )
+ {
+ return MAKE_SCRIPT_INT( enumerator->info[ i ]->numItems );
+ }
+
+ return MAKE_SCRIPT_INT( 0 );
+}
+
+static wchar_t static_splaylistsenumerator_guid_string[39];
+scriptVar SPlaylistsEnumerator::script_vcpu_GetGUID( SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar playlistNumber )
+{
+ SCRIPT_FUNCTION_INIT;
+ SPlaylistsEnumerator *enumerator = static_cast<SPlaylistsEnumerator *>( o->vcpu_getInterface( makiPlaylistsEnumeratorGUID ) );
+ size_t i = GET_SCRIPT_INT( playlistNumber );
+ if ( enumerator && i < enumerator->info.size() )
+ {
+ nsGUID::toCharW( enumerator->info[ i ]->guid, static_splaylistsenumerator_guid_string );
+ return MAKE_SCRIPT_STRING( static_splaylistsenumerator_guid_string );
+ }
+
+ return MAKE_SCRIPT_STRING( static_splaylistsenumerator_empty_string );
+}
+
+void SPlaylistsEnumerator::Reserve( size_t count )
+{
+ info.reserve( count );
+}
+
+void SPlaylistsEnumerator::AppendPlaylist( const PlaylistInfo &newPlaylist )
+{
+ info.push_back( new PlaylistInfo( newPlaylist ) );
+} \ No newline at end of file