aboutsummaryrefslogtreecommitdiff
path: root/Src/timer/main.cpp
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/timer/main.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/timer/main.cpp')
-rw-r--r--Src/timer/main.cpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/Src/timer/main.cpp b/Src/timer/main.cpp
new file mode 100644
index 00000000..dd8f2b1f
--- /dev/null
+++ b/Src/timer/main.cpp
@@ -0,0 +1,92 @@
+#include "api.h"
+#include "../nu/ServiceWatcher.h"
+#include "../Agave/Component/ifc_wa5component.h"
+#include <api/service/waServiceFactory.h>
+#include "Factory.h"
+#include "ScriptFactory.h"
+
+Factory factory;
+static ScriptFactory scriptFactory;
+api_config *WASABI_API_CONFIG = 0;
+api_syscb *WASABI_API_SYSCB = 0;
+api_service *WASABI_API_SVC = 0;
+api_maki *WASABI_API_MAKI = 0;
+
+static ServiceWatcher serviceWatcher;
+
+class TimerComponent : public ifc_wa5component
+{
+public:
+ void RegisterServices(api_service *service);
+ int RegisterServicesSafeModeOk();
+ void DeregisterServices(api_service *service);
+protected:
+ RECVS_DISPATCH;
+};
+
+
+template <class api_t>
+api_t *GetService(GUID serviceGUID)
+{
+ waServiceFactory *sf = WASABI_API_SVC->service_getServiceByGuid(serviceGUID);
+ if (sf)
+ return (api_t *)sf->getInterface();
+ else
+ return 0;
+}
+
+inline void ReleaseService(GUID serviceGUID, void *service)
+{
+ if (service)
+ {
+ waServiceFactory *sf = WASABI_API_SVC->service_getServiceByGuid(serviceGUID);
+ if (sf)
+ sf->releaseInterface(service);
+ }
+}
+
+void TimerComponent::RegisterServices(api_service *service)
+{
+ WASABI_API_SVC = service;
+ WASABI_API_SYSCB = GetService<api_syscb>(syscbApiServiceGuid);
+ serviceWatcher.WatchWith(WASABI_API_SVC);
+ serviceWatcher.WatchFor(&WASABI_API_CONFIG, configApiServiceGuid);
+ serviceWatcher.WatchFor(&WASABI_API_MAKI, makiApiServiceGuid);
+ service->service_register(&factory);
+ service->service_register(&scriptFactory);
+
+ // register for service callbacks in case any of these don't exist yet
+ WASABI_API_SYSCB->syscb_registerCallback(&serviceWatcher);
+}
+
+int TimerComponent::RegisterServicesSafeModeOk()
+{
+ return 1;
+}
+
+void TimerComponent::DeregisterServices(api_service *service)
+{
+ service->service_deregister(&factory);
+ service->service_deregister(&scriptFactory);
+ serviceWatcher.StopWatching();
+ serviceWatcher.Clear();
+
+ ReleaseService(configApiServiceGuid, WASABI_API_CONFIG);
+ ReleaseService(syscbApiServiceGuid, WASABI_API_SYSCB);
+ ReleaseService(makiApiServiceGuid, WASABI_API_MAKI);
+ factory.Stop();
+}
+
+TimerComponent timerComponent;
+extern "C" __declspec(dllexport) ifc_wa5component *GetWinamp5SystemComponent()
+{
+ return &timerComponent;
+}
+
+#define CBCLASS TimerComponent
+START_DISPATCH;
+VCB(API_WA5COMPONENT_REGISTERSERVICES, RegisterServices)
+CB(15, RegisterServicesSafeModeOk)
+VCB(API_WA5COMPONENT_DEREEGISTERSERVICES, DeregisterServices)
+END_DISPATCH;
+#undef CBCLASS \ No newline at end of file