diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/playlist/SPlaylistsEnumerator.cpp | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/playlist/SPlaylistsEnumerator.cpp')
-rw-r--r-- | Src/playlist/SPlaylistsEnumerator.cpp | 184 |
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 |