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/Agave/Queue/api_queue.h | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/Agave/Queue/api_queue.h')
-rw-r--r-- | Src/Agave/Queue/api_queue.h | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/Src/Agave/Queue/api_queue.h b/Src/Agave/Queue/api_queue.h new file mode 100644 index 00000000..272ced86 --- /dev/null +++ b/Src/Agave/Queue/api_queue.h @@ -0,0 +1,202 @@ +#ifndef NULLSOFT_API_QUEUE_H +#define NULLSOFT_API_QUEUE_H + +/* +** JTFE v1.0.1 Wasabi API interface +** (Released: 06/01/2010) +** +** +** This header file provides the interfaces implemented by the JTFE plugin for other plugins/services to be able +** to make use of it's queue which allows for Winamp's playback order to be overriden. +** +** To use this api assumes you know already how to make use of the wasabi service based system +** (see the more complete examples provided in the SDK). +** +** +** Example: +** +** The following psuedo code shows how to clear the current queue (if one exists) and will then add in a specifc +** file by the full path passed and also adding a file based on the position in the current playlist. +** +** if(!WASABI_API_QUEUEMGR) ServiceBuild(WASABI_API_QUEUEMGR,QueueManagerApiGUID); +** if(WASABI_API_QUEUEMGR){ +** // Clear the queue (if one exists) +** WASABI_API_QUEUEMGR->ClearQueue(); +** +** // Add the full file path (wchar_t_path_to_file) +** WASABI_API_QUEUEMGR->AddItemToQueue(0,1,wchar_t_path_to_file); +** +** // Add the first file in the playlist editor into the queue +** WASABI_API_QUEUEMGR->AddItemToQueue(0,0,0); +** } +** +** +** Notes: +** +** This header only provides access to the functions it exports. Some actions like the MoveQueuedItem(s) functions +** have not been implemented in this api even though they are internally implemented. In future releases of the +** plugin it is hoped that these (and another useful/requested) apis will also be implemented and provided. +** +** Changes: +** v1.0.1 - Fixes EnableQueueAdvance(..) and IsQueueAdvanceEnabled(..) interfaces not correctly defined in this file +** - Fixes crash when calling IsQueueAdvanceEnabled(..) (if previous issue was manually corrected) +** +*/ + +#if (_MSC_VER <= 1200) +typedef int intptr_t; +#endif + +enum PLAYLIST_TYPE {M3U_PLAYLIST=0x0, PLS_PLAYLIST=0x1, M3U8_PLAYLIST=0x2}; +enum MOVE_MODE {MOVE_TOP_OF_LIST=-2, MOVE_UP_LIST=-1, MOVE_DOWN_LIST=1, MOVE_END_OF_LIST=2, MOVE_END_TO_START=3 }; + +#ifdef __cplusplus + +#include <bfc/dispatch.h> + +class api_queue : public Dispatchable +{ +protected: + api_queue() {} + ~api_queue() {} + +public: + // main handling functions of the queue to add/remove/clear all + BOOL AddItemToQueue(int item, int update_now, wchar_t* file); + void RemoveQueuedItem(int item, int no_update=0); + void ClearQueue(void); + + /* + ** handling functions to allow for querying/manipulating of the queue items + ** note: need to have a consistancy in the functions and all that... + ** + ** use GetNumberOfQueuedItems() and then loop upto that via GetQueuedItemFromIndex(..) to get item id of the queue + */ + int GetNumberOfQueuedItems(void); + int GetQueuedItemFromIndex(int idx); + wchar_t* GetQueuedItemFilePath(int item); + int GetQueuedItemPlaylistPosition(int item); + int IsItemQueuedMultipleTimes(int item, int test_only); // returns how many times an item is showing in the queue + + // Note: these are to be implemented after JTFE 1.0 + //BOOL MoveQueuedItem(int item, int mode/*MOVE_MODE*/); + //BOOL MoveQueuedItems(int* items, int mode/*MOVE_MODE*/); + + /* + ** miscellaneous actions available on the queue + */ + void RandomiseQueue(void); + // will ignore the item position and match it up against the current playlist (may cause queued item position merging) + void RefreshQueue(void); + BOOL LoadPlaylistIntoQueue(wchar_t* playlist_file, int reset_queue); + BOOL SaveQueueToPlaylist(wchar_t* playlist_file, int playlist_type/*PLAYLIST_TYPE*/); + + // enables/disables queue advancement and query this state + int EnableQueueAdvance(int enabled); + int IsQueueAdvanceEnabled(void); + +public: + DISPATCH_CODES + { + API_QUEUE_ADDITEMTOQUEUE = 1, + API_QUEUE_REMOVEQUEUEDITEM = 2, + API_QUEUE_CLEARQUEUE = 3, + + API_QUEUE_GETNUMBEROFQUEUEDITEMS = 10, + API_QUEUE_GETQUEUEDITEMFROMINDEX = 11, + API_QUEUE_GETQUEUEDITEMFILEPATH = 12, + API_QUEUE_GETQUEUEDITEMPLAYLISTPOSITION = 13, + API_QUEUE_ISITEMQUEUEDMULTIPLETIMES = 14, + + // Note: to be implemented after JTFE 1.0 + //API_QUEUE_MOVEQUEUEDITEM = 15, + //API_QUEUE_MOVEQUEUEDITEMS = 16, + + API_QUEUE_RANDOMISEQUEUE = 20, + API_QUEUE_REFRESHQUEUE = 21, + API_QUEUE_LOADPLAYLISTINTOQUEUE = 22, + API_QUEUE_SAVEQUEUETOPLAYLIST = 23, + + API_QUEUE_ENABLEQUEUEADVANCE = 30, + API_QUEUE_ISQUEUEADVANCEENABLED = 31 + }; +}; + +inline BOOL api_queue::AddItemToQueue(int item, int update_now, wchar_t* file) +{ + return _call(API_QUEUE_ADDITEMTOQUEUE, (BOOL)0, item, update_now, file); +} + +inline void api_queue::RemoveQueuedItem(int item, int no_update) +{ + _voidcall(API_QUEUE_REMOVEQUEUEDITEM, item, no_update); +} + +inline void api_queue::ClearQueue(void) +{ + _voidcall(API_QUEUE_CLEARQUEUE); +} + +inline int api_queue::GetNumberOfQueuedItems(void) +{ + return _call(API_QUEUE_GETNUMBEROFQUEUEDITEMS, (int)0); +} + +inline int api_queue::GetQueuedItemFromIndex(int idx) +{ + return _call(API_QUEUE_GETQUEUEDITEMFROMINDEX, (int)0, idx); +} + +inline wchar_t* api_queue::GetQueuedItemFilePath(int item) +{ + return _call(API_QUEUE_GETQUEUEDITEMFILEPATH, (wchar_t*)0, item); +} + +inline int api_queue::GetQueuedItemPlaylistPosition(int item) +{ + return _call(API_QUEUE_GETQUEUEDITEMPLAYLISTPOSITION, (int)0, item); +} + +inline int api_queue::IsItemQueuedMultipleTimes(int item, int test_only) +{ + return _call(API_QUEUE_ISITEMQUEUEDMULTIPLETIMES, (int)0, item, test_only); +} + +inline void api_queue::RandomiseQueue(void) +{ + _voidcall(API_QUEUE_RANDOMISEQUEUE); +} + +inline void api_queue::RefreshQueue(void) +{ + _voidcall(API_QUEUE_REFRESHQUEUE); +} + +inline int api_queue::LoadPlaylistIntoQueue(wchar_t* playlist_file, int reset_queue) +{ + return _call(API_QUEUE_LOADPLAYLISTINTOQUEUE, (int)0, playlist_file, reset_queue); +} + +inline int api_queue::SaveQueueToPlaylist(wchar_t* playlist_file, int playlist_type) +{ + return _call(API_QUEUE_SAVEQUEUETOPLAYLIST, (int)0, playlist_file, playlist_type); +} + +inline int api_queue::EnableQueueAdvance(int enabled) +{ + return _call(API_QUEUE_ENABLEQUEUEADVANCE, (int)0, enabled); +} + +inline int api_queue::IsQueueAdvanceEnabled(void) +{ + return _call(API_QUEUE_ISQUEUEADVANCEENABLED, (int)0); +} + +#endif + +// {7DC8C14F-F27F-48e8-A3D1-602BB3196E40} +static const GUID QueueManagerApiGUID = +{ 0x7dc8c14f, 0xf27f, 0x48e8, { 0xa3, 0xd1, 0x60, 0x2b, 0xb3, 0x19, 0x6e, 0x40 } }; + + +#endif
\ No newline at end of file |