#ifndef NULLSOFT_AGAVE_SVC_ALBUMARTPROVIDER_H #define NULLSOFT_AGAVE_SVC_ALBUMARTPROVIDER_H #include "../../bfc/dispatch.h" #include "../../bfc/std_mkncc.h" // for MKnCC() enum { ALBUMARTPROVIDER_SUCCESS = 0, ALBUMARTPROVIDER_FAILURE = 1, ALBUMARTPROVIDER_READONLY = 2, ALBUMARTPROVIDER_TYPE_EMBEDDED = 0, // contained within another file (e.g. inside id3v2 tag) ALBUMARTPROVIDER_TYPE_DATABASE = 1, // cached in a database somewhere (e.g. ipod artwork DB) ALBUMARTPROVIDER_TYPE_FOLDER = 2, // sitting on a folder somewhere (e.g. folder.jpg) }; class svc_albumArtProvider : public Dispatchable { protected: svc_albumArtProvider() {} ~svc_albumArtProvider() {} public: static FOURCC getServiceType() { return svc_albumArtProvider::SERVICETYPE; } bool IsMine(const wchar_t *filename); int ProviderType(); // implementation note: use WASABI_API_MEMMGR to alloc bits and mimetype, so that the recipient can free through that int GetAlbumArtData(const wchar_t *filename, const wchar_t *type, void **bits, size_t *len, wchar_t **mimeType); int SetAlbumArtData(const wchar_t *filename, const wchar_t *type, void *bits, size_t len, const wchar_t *mimeType); int DeleteAlbumArt(const wchar_t *filename, const wchar_t *type); DISPATCH_CODES { SVC_ALBUMARTPROVIDER_PROVIDERTYPE = 0, SVC_ALBUMARTPROVIDER_GETALBUMARTDATA = 10, SVC_ALBUMARTPROVIDER_ISMINE = 20, SVC_ALBUMARTPROVIDER_SETALBUMARTDATA = 30, SVC_ALBUMARTPROVIDER_DELETEALBUMART = 40, }; enum { SERVICETYPE = MK3CC('a','a','p') }; }; inline bool svc_albumArtProvider::IsMine(const wchar_t *filename) { return _call(SVC_ALBUMARTPROVIDER_ISMINE, false, filename); } inline int svc_albumArtProvider::ProviderType() { return _call(SVC_ALBUMARTPROVIDER_PROVIDERTYPE, (int)ALBUMARTPROVIDER_TYPE_EMBEDDED); } inline int svc_albumArtProvider::GetAlbumArtData(const wchar_t *filename, const wchar_t *type, void **bits, size_t *len, wchar_t **mimeType) { return _call(SVC_ALBUMARTPROVIDER_GETALBUMARTDATA, (int)ALBUMARTPROVIDER_FAILURE, filename, type, bits, len, mimeType); } inline int svc_albumArtProvider::SetAlbumArtData(const wchar_t *filename, const wchar_t *type, void *bits, size_t len, const wchar_t *mimeType) { return _call(SVC_ALBUMARTPROVIDER_SETALBUMARTDATA, (int)ALBUMARTPROVIDER_FAILURE, filename, type, bits, len, mimeType); } inline int svc_albumArtProvider::DeleteAlbumArt(const wchar_t *filename, const wchar_t *type) { return _call(SVC_ALBUMARTPROVIDER_DELETEALBUMART, (int)ALBUMARTPROVIDER_FAILURE, filename, type); } #endif