aboutsummaryrefslogtreecommitdiff
path: root/Src/playlist/svc_playlisthandler.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/playlist/svc_playlisthandler.h')
-rw-r--r--Src/playlist/svc_playlisthandler.h110
1 files changed, 110 insertions, 0 deletions
diff --git a/Src/playlist/svc_playlisthandler.h b/Src/playlist/svc_playlisthandler.h
new file mode 100644
index 00000000..8dc44bc1
--- /dev/null
+++ b/Src/playlist/svc_playlisthandler.h
@@ -0,0 +1,110 @@
+#ifndef NULLSOFT_SVC_PLAYLISTHANDLER_H
+#define NULLSOFT_SVC_PLAYLISTHANDLER_H
+
+#include <bfc/dispatch.h>
+#include <bfc/platform/types.h>
+#include "ifc_playlistloader.h"
+#include <stdint.h>
+
+enum
+{
+ SVC_PLAYLISTHANDLER_SUCCESS = 0,
+ SVC_PLAYLISTHANDLER_FAILED = 1,
+};
+class svc_playlisthandler : public Dispatchable
+{
+protected:
+ svc_playlisthandler() {}
+ ~svc_playlisthandler() {}
+
+public:
+ static FOURCC getServiceType() { return svc_playlisthandler::SERVICETYPE; }
+ const wchar_t *EnumerateExtensions(size_t n); // returns 0 when it's done
+ const char *EnumerateMIMETypes(size_t n); // returns 0 when it's done, returns char * to match HTTP specs
+ const wchar_t *GetName(); // returns a name suitable for display to user of this playlist form (e.g. PLS Playlist)
+ int SupportedFilename(const wchar_t *filename); // returns SUCCESS and FAILED, so be careful ...
+ int SupportedMIMEType(const char *filename); // returns SUCCESS and FAILED, so be careful ...
+ ifc_playlistloader *CreateLoader(const wchar_t *filename);
+ void ReleaseLoader(ifc_playlistloader *loader);
+ int HasWriter(); // returns 1 if writing is supported
+ //ifc_playlistwriter CreateWriter(const wchar_t *writer);
+ //void ReleaseWriter(ifc_playlistwriter *writer);
+
+ size_t SniffSizeRequired(); // return number of bytes required for detection on an unknown file
+ bool IsOurs(const int8_t *data, size_t sizeBytes);
+
+public:
+ DISPATCH_CODES
+ {
+ SVC_PLAYLISTHANDLER_ENUMEXTENSIONS = 10,
+ SVC_PLAYLISTHANDLER_ENUMMIMETYPES = 20,
+ SVC_PLAYLISTHANDLER_SUPPORTFILENAME= 30,
+ SVC_PLAYLISTHANDLER_SUPPORTMIME= 40,
+ SVC_PLAYLISTHANDLER_CREATELOADER = 50,
+ SVC_PLAYLISTHANDLER_RELEASELOADER = 60,
+ SVC_PLAYLISTHANDLER_CREATEWRITER= 70,
+ SVC_PLAYLISTHANDLER_RELEASEWRITER= 80,
+ SVC_PLAYLISTHANDLER_SNIFFSIZE=90,
+ SVC_PLAYLISTHANDLER_SNIFF=100,
+ SVC_PLAYLISTHANDLER_GETNAME=110,
+ SVC_PLAYLISTHANDLER_HASWRITER=120,
+ };
+
+ enum
+ {
+ SERVICETYPE = MK3CC('p','l','h')
+ };
+
+};
+
+inline const wchar_t *svc_playlisthandler::GetName()
+{
+ return _call(SVC_PLAYLISTHANDLER_GETNAME, (const wchar_t *)0);
+}
+
+inline const wchar_t *svc_playlisthandler::EnumerateExtensions(size_t n)
+{
+ return _call(SVC_PLAYLISTHANDLER_ENUMEXTENSIONS, (const wchar_t *)0, n);
+};
+
+inline const char *svc_playlisthandler::EnumerateMIMETypes(size_t n)
+{
+ return _call(SVC_PLAYLISTHANDLER_ENUMMIMETYPES, (const char *)0, n);
+}
+
+inline int svc_playlisthandler::SupportedFilename(const wchar_t *filename)
+{
+ return _call(SVC_PLAYLISTHANDLER_SUPPORTFILENAME, (int)SVC_PLAYLISTHANDLER_FAILED, filename);
+}
+
+inline int svc_playlisthandler::SupportedMIMEType(const char *filename)
+{
+ return _call(SVC_PLAYLISTHANDLER_SUPPORTMIME, (int)SVC_PLAYLISTHANDLER_FAILED, filename);
+}
+
+inline ifc_playlistloader *svc_playlisthandler::CreateLoader(const wchar_t *filename)
+{
+ return _call(SVC_PLAYLISTHANDLER_CREATELOADER, (ifc_playlistloader *)0, filename);
+}
+
+inline void svc_playlisthandler::ReleaseLoader(ifc_playlistloader *loader)
+{
+ _voidcall(SVC_PLAYLISTHANDLER_RELEASELOADER, loader);
+}
+
+inline size_t svc_playlisthandler::SniffSizeRequired()
+{
+ return _call(SVC_PLAYLISTHANDLER_SNIFFSIZE, (size_t)0);
+}
+
+inline bool svc_playlisthandler::IsOurs(const int8_t *data, size_t sizeBytes)
+{
+ return _call(SVC_PLAYLISTHANDLER_SNIFF, (bool)false, data, sizeBytes);
+}
+
+inline int svc_playlisthandler::HasWriter()
+{
+ return _call(SVC_PLAYLISTHANDLER_HASWRITER, (int)0);
+}
+
+#endif \ No newline at end of file