Skip to content

Commit 938f670

Browse files
Update plugin API to version 2, add unregister functions for all ResourceManager callbacks
1 parent 6d5ca0b commit 938f670

File tree

3 files changed

+93
-1
lines changed

3 files changed

+93
-1
lines changed

OpenRGBPluginInterface.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,13 @@
1717

1818
#define OpenRGBPluginInterface_IID "com.OpenRGBPluginInterface"
1919

20-
#define OPENRGB_PLUGIN_API_VERSION 1
20+
/*-----------------------------------------------------------------------------------------------------*\
21+
| OpenRGB Plugin API Versions |
22+
| 0: OpenRGB 0.6 Unversioned, early plugin API. |
23+
| 1: OpenRGB 0.61 First versioned API, introduced with plugin settings changes |
24+
| 2: OpenRGB 0.7 First released versioned API, callback unregister functions in ResourceManager |
25+
\*-----------------------------------------------------------------------------------------------------*/
26+
#define OPENRGB_PLUGIN_API_VERSION 2
2127

2228
/*-----------------------------------------------------------------------------------------------------*\
2329
| Plugin Tab Location Values |

ResourceManager.cpp

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,22 @@ void ResourceManager::RegisterDeviceListChangeCallback(DeviceListChangeCallback
232232
{
233233
DeviceListChangeCallbacks.push_back(new_callback);
234234
DeviceListChangeCallbackArgs.push_back(new_callback_arg);
235+
236+
LOG_TRACE("[ResourceManager] Registered device list change callback. Total callbacks registered: %d", DeviceListChangeCallbacks.size());
237+
}
238+
239+
void ResourceManager::UnregisterDeviceListChangeCallback(DeviceListChangeCallback callback, void * callback_arg)
240+
{
241+
for(size_t idx = 0; idx < DeviceListChangeCallbacks.size(); idx++)
242+
{
243+
if(DeviceListChangeCallbacks[idx] == callback && DeviceListChangeCallbackArgs[idx] == callback_arg)
244+
{
245+
DeviceListChangeCallbacks.erase(DeviceListChangeCallbacks.begin() + idx);
246+
DeviceListChangeCallbackArgs.erase(DeviceListChangeCallbackArgs.begin() + idx);
247+
}
248+
}
249+
250+
LOG_TRACE("[ResourceManager] Unregistered device list change callback. Total callbacks registered: %d", DeviceListChangeCallbacks.size());
235251
}
236252

237253
void ResourceManager::RegisterI2CBusListChangeCallback(I2CBusListChangeCallback new_callback, void * new_callback_arg)
@@ -240,10 +256,38 @@ void ResourceManager::RegisterI2CBusListChangeCallback(I2CBusListChangeCallback
240256
I2CBusListChangeCallbackArgs.push_back(new_callback_arg);
241257
}
242258

259+
void ResourceManager::UnregisterI2CBusListChangeCallback(I2CBusListChangeCallback callback, void * callback_arg)
260+
{
261+
for(size_t idx = 0; idx < I2CBusListChangeCallbacks.size(); idx++)
262+
{
263+
if(I2CBusListChangeCallbacks[idx] == callback && I2CBusListChangeCallbackArgs[idx] == callback_arg)
264+
{
265+
I2CBusListChangeCallbacks.erase(I2CBusListChangeCallbacks.begin() + idx);
266+
I2CBusListChangeCallbackArgs.erase(I2CBusListChangeCallbackArgs.begin() + idx);
267+
}
268+
}
269+
}
270+
243271
void ResourceManager::RegisterDetectionProgressCallback(DetectionProgressCallback new_callback, void *new_callback_arg)
244272
{
245273
DetectionProgressCallbacks.push_back(new_callback);
246274
DetectionProgressCallbackArgs.push_back(new_callback_arg);
275+
276+
LOG_TRACE("[ResourceManager] Registered detection progress callback. Total callbacks registered: %d", DetectionProgressCallbacks.size());
277+
}
278+
279+
void ResourceManager::UnregisterDetectionProgressCallback(DetectionProgressCallback callback, void *callback_arg)
280+
{
281+
for(size_t idx = 0; idx < DetectionProgressCallbacks.size(); idx++)
282+
{
283+
if(DetectionProgressCallbacks[idx] == callback && DetectionProgressCallbackArgs[idx] == callback_arg)
284+
{
285+
DetectionProgressCallbacks.erase(DetectionProgressCallbacks.begin() + idx);
286+
DetectionProgressCallbackArgs.erase(DetectionProgressCallbackArgs.begin() + idx);
287+
}
288+
}
289+
290+
LOG_TRACE("[ResourceManager] Unregistered detection progress callback. Total callbacks registered: %d", DetectionProgressCallbacks.size());
247291
}
248292

249293
void ResourceManager::RegisterDetectionStartCallback(DetectionStartCallback new_callback, void *new_callback_arg)
@@ -252,12 +296,36 @@ void ResourceManager::RegisterDetectionStartCallback(DetectionStartCallback new_
252296
DetectionStartCallbackArgs.push_back(new_callback_arg);
253297
}
254298

299+
void ResourceManager::UnregisterDetectionStartCallback(DetectionStartCallback callback, void *callback_arg)
300+
{
301+
for(size_t idx = 0; idx < DetectionStartCallbacks.size(); idx++)
302+
{
303+
if(DetectionStartCallbacks[idx] == callback && DetectionStartCallbackArgs[idx] == callback_arg)
304+
{
305+
DetectionStartCallbacks.erase(DetectionStartCallbacks.begin() + idx);
306+
DetectionStartCallbackArgs.erase(DetectionStartCallbackArgs.begin() + idx);
307+
}
308+
}
309+
}
310+
255311
void ResourceManager::RegisterDetectionEndCallback(DetectionEndCallback new_callback, void *new_callback_arg)
256312
{
257313
DetectionEndCallbacks.push_back(new_callback);
258314
DetectionEndCallbackArgs.push_back(new_callback_arg);
259315
}
260316

317+
void ResourceManager::UnregisterDetectionEndCallback(DetectionEndCallback callback, void *callback_arg)
318+
{
319+
for(size_t idx = 0; idx < DetectionEndCallbacks.size(); idx++)
320+
{
321+
if(DetectionEndCallbacks[idx] == callback && DetectionEndCallbackArgs[idx] == callback_arg)
322+
{
323+
DetectionEndCallbacks.erase(DetectionEndCallbacks.begin() + idx);
324+
DetectionEndCallbackArgs.erase(DetectionEndCallbackArgs.begin() + idx);
325+
}
326+
}
327+
}
328+
261329
void ResourceManager::UpdateDeviceList()
262330
{
263331
DeviceListChangeMutex.lock();
@@ -318,6 +386,8 @@ void ResourceManager::DeviceListChanged()
318386
/*-------------------------------------------------*\
319387
| Device list has changed, call the callbacks |
320388
\*-------------------------------------------------*/
389+
LOG_TRACE("[ResourceManager] Calling device list change callbacks.");
390+
321391
for(unsigned int callback_idx = 0; callback_idx < DeviceListChangeCallbacks.size(); callback_idx++)
322392
{
323393
ResourceManager::DeviceListChangeCallbacks[callback_idx](DeviceListChangeCallbackArgs[callback_idx]);
@@ -331,6 +401,8 @@ void ResourceManager::DetectionProgressChanged()
331401
/*-------------------------------------------------*\
332402
| Detection progress has changed, call the callbacks|
333403
\*-------------------------------------------------*/
404+
LOG_TRACE("[ResourceManager] Calling detection progress callbacks.");
405+
334406
for(unsigned int callback_idx = 0; callback_idx < DetectionProgressCallbacks.size(); callback_idx++)
335407
{
336408
DetectionProgressCallbacks[callback_idx](DetectionProgressCallbackArgs[callback_idx]);
@@ -569,6 +641,8 @@ void ResourceManager::DetectDevices()
569641
/*-----------------------------------------------------*\
570642
| Call detection start callbacks |
571643
\*-----------------------------------------------------*/
644+
LOG_TRACE("[ResourceManager] Calling detection start callbacks.");
645+
572646
for(unsigned int callback_idx = 0; callback_idx < DetectionStartCallbacks.size(); callback_idx++)
573647
{
574648
DetectionStartCallbacks[callback_idx](DetectionStartCallbackArgs[callback_idx]);

ResourceManager.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,12 @@ class ResourceManagerInterface
6767
virtual void RegisterDetectionEndCallback(DetectionEndCallback new_callback, void * new_callback_arg) = 0;
6868
virtual void RegisterI2CBusListChangeCallback(I2CBusListChangeCallback new_callback, void * new_callback_arg) = 0;
6969

70+
virtual void UnregisterDeviceListChangeCallback(DeviceListChangeCallback callback, void * callback_arg) = 0;
71+
virtual void UnregisterDetectionProgressCallback(DetectionProgressCallback callback, void *callback_arg) = 0;
72+
virtual void UnregisterDetectionStartCallback(DetectionStartCallback callback, void *callback_arg) = 0;
73+
virtual void UnregisterDetectionEndCallback(DetectionEndCallback callback, void *callback_arg) = 0;
74+
virtual void UnregisterI2CBusListChangeCallback(I2CBusListChangeCallback callback, void * callback_arg) = 0;
75+
7076
virtual std::vector<RGBController*> & GetRGBControllers() = 0;
7177

7278
virtual unsigned int GetDetectionPercent() = 0;
@@ -120,6 +126,12 @@ class ResourceManager: public ResourceManagerInterface
120126
void RegisterDetectionEndCallback(DetectionEndCallback new_callback, void * new_callback_arg);
121127
void RegisterI2CBusListChangeCallback(I2CBusListChangeCallback new_callback, void * new_callback_arg);
122128

129+
void UnregisterDeviceListChangeCallback(DeviceListChangeCallback callback, void * callback_arg);
130+
void UnregisterDetectionProgressCallback(DetectionProgressCallback callback, void *callback_arg);
131+
void UnregisterDetectionStartCallback(DetectionStartCallback callback, void *callback_arg);
132+
void UnregisterDetectionEndCallback(DetectionEndCallback callback, void *callback_arg);
133+
void UnregisterI2CBusListChangeCallback(I2CBusListChangeCallback callback, void * callback_arg);
134+
123135
bool GetDetectionEnabled();
124136
unsigned int GetDetectionPercent();
125137
const char* GetDetectionString();

0 commit comments

Comments
 (0)