aboutsummaryrefslogtreecommitdiff
path: root/Src/Agave/URIHandler/svc_urihandler.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Agave/URIHandler/svc_urihandler.h')
-rw-r--r--Src/Agave/URIHandler/svc_urihandler.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/Src/Agave/URIHandler/svc_urihandler.h b/Src/Agave/URIHandler/svc_urihandler.h
new file mode 100644
index 00000000..ed964e0e
--- /dev/null
+++ b/Src/Agave/URIHandler/svc_urihandler.h
@@ -0,0 +1,63 @@
+#pragma once
+#include <bfc/dispatch.h>
+#include <bfc/platform/types.h>
+#include <bfc/std_mkncc.h> // for MKnCC()
+
+class svc_urihandler : public Dispatchable
+{
+protected:
+ svc_urihandler() {}
+ ~svc_urihandler() {}
+public:
+ static FOURCC getServiceType() { return svc_urihandler::SERVICETYPE; }
+ enum
+ {
+ NOT_HANDLED = -1, // return if it's not yours
+ HANDLED = 0, // return if it's yours, but other services might want to handle also
+ HANDLED_EXCLUSIVE = 1, // if it's yours AND NO ONE ELSES
+ };
+ int ProcessFilename(const wchar_t *filename);
+ int IsMine(const wchar_t *filename); // just like ProcessFilename but don't actually process
+ int EnumProtocols(size_t n, wchar_t *protocol, size_t protocolCch, wchar_t *description, size_t descriptionCch); // return 0 on success
+ int RegisterProtocol(const wchar_t *protocol, const wchar_t *winampexe);
+ int UnregisterProtocol(const wchar_t *protocol);
+
+ enum
+ {
+ PROCESSFILENAME=0,
+ ISMINE=1,
+ ENUMPROTOCOLS=2,
+ REGISTERPROTOCOL=3,
+ UNREGISTERPROTOCOL=4,
+ };
+
+ enum
+ {
+ SERVICETYPE = MK4CC('u','r','i', 'h')
+ };
+};
+
+inline int svc_urihandler::ProcessFilename(const wchar_t *filename)
+{
+ return _call(PROCESSFILENAME, (int)NOT_HANDLED, filename);
+}
+
+inline int svc_urihandler::IsMine(const wchar_t *filename)
+{
+ return _call(ISMINE, (int)NOT_HANDLED, filename);
+}
+
+inline int svc_urihandler::EnumProtocols(size_t n, wchar_t *protocol, size_t protocolCch, wchar_t *description, size_t descriptionCch)
+{
+ return _call(ENUMPROTOCOLS, (int)1, n, protocol, protocolCch, description, descriptionCch);
+}
+
+inline int svc_urihandler::RegisterProtocol(const wchar_t *protocol, const wchar_t *winampexe)
+{
+ return _call(REGISTERPROTOCOL, (int)1, protocol, winampexe);
+}
+
+ inline int svc_urihandler::UnregisterProtocol(const wchar_t *protocol)
+ {
+ return _call(UNREGISTERPROTOCOL, (int)1, protocol);
+ }