← Back to team overview

linuxdcpp-team team mailing list archive

[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 3094: make the test plugin play a sound every 10 sec

 

------------------------------------------------------------
revno: 3094
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Mon 2012-10-29 20:00:02 +0100
message:
  make the test plugin play a sound every 10 sec
modified:
  plugins/Test/Plugin.cpp
  plugins/Test/Plugin.h


--
lp:dcplusplus
https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk

Your team Dcplusplus-team is subscribed to branch lp:dcplusplus.
To unsubscribe from this branch go to https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk/+edit-subscription
=== modified file 'plugins/Test/Plugin.cpp'
--- plugins/Test/Plugin.cpp	2012-09-08 13:53:58 +0000
+++ plugins/Test/Plugin.cpp	2012-10-29 19:00:02 +0000
@@ -20,6 +20,8 @@
 #include "Plugin.h"
 #include "Util.h"
 
+Plugin* Plugin::instance = nullptr;
+
 Plugin::Plugin() {
 }
 
@@ -35,15 +37,16 @@
 	case ON_LOAD:
 		{
 			Bool res = True;
-			newInstance();
-			getInstance()->onLoad(core, (state == ON_INSTALL), res);
+			instance = new Plugin();
+			instance->onLoad(core, (state == ON_INSTALL), res);
 			return res;
 		}
 
 	case ON_UNINSTALL:
 	case ON_UNLOAD:
 		{
-			deleteInstance();
+			delete instance;
+			instance = nullptr;
 			return True;
 		}
 
@@ -61,10 +64,10 @@
 	auto utils = reinterpret_cast<DCUtilsPtr>(core->query_interface(DCINTF_DCPP_UTILS, DCINTF_DCPP_UTILS_VER));
 	auto config = reinterpret_cast<DCConfigPtr>(core->query_interface(DCINTF_CONFIG, DCINTF_CONFIG_VER));
 	auto logger = reinterpret_cast<DCLogPtr>(core->query_interface(DCINTF_LOGGING, DCINTF_LOGGING_VER));
-
 	tagger = reinterpret_cast<DCTaggerPtr>(core->query_interface(DCINTF_DCPP_TAGGER, DCINTF_DCPP_TAGGER_VER));
+	ui = reinterpret_cast<DCUIPtr>(core->query_interface(DCINTF_DCPP_UI, DCINTF_DCPP_UI_VER));
 
-	if(!utils || !config || !logger || !tagger) {
+	if(!utils || !config || !logger || !tagger || !ui) {
 		loadRes = False;
 		return;
 	}
@@ -80,7 +83,20 @@
 		return;
 	}*/
 
-	events[HOOK_UI_CHAT_TAGS] = hooks->bind_hook(HOOK_UI_CHAT_TAGS, &uiChatTags, 0);
+	events[HOOK_TIMER_SECOND] = hooks->bind_hook(HOOK_TIMER_SECOND, [](dcptr_t, dcptr_t pData, dcptr_t, Bool*) {
+		return instance->onSecond(*reinterpret_cast<uint64_t*>(pData)); }, nullptr);
+
+	events[HOOK_UI_CHAT_TAGS] = hooks->bind_hook(HOOK_UI_CHAT_TAGS, [](dcptr_t, dcptr_t pData, dcptr_t, Bool*) {
+		return instance->onUiChatTags(reinterpret_cast<TagDataPtr>(pData)); }, nullptr);
+}
+
+Bool Plugin::onSecond(uint64_t tick) {
+	static uint64_t prevTick = 0;
+	if(tick - prevTick >= 10*1000) {
+		prevTick = tick;
+		ui->play_sound("Media\\tada.wav");
+	}
+	return False;
 }
 
 Bool Plugin::onUiChatTags(TagDataPtr tags) {

=== modified file 'plugins/Test/Plugin.h'
--- plugins/Test/Plugin.h	2012-09-08 13:53:58 +0000
+++ plugins/Test/Plugin.h	2012-10-29 19:00:02 +0000
@@ -19,38 +19,35 @@
 #ifndef PLUGINS_DEV_PLUGIN_H
 #define PLUGINS_DEV_PLUGIN_H
 
-#include <Singleton.h>
-
 #include <map>
 
 using std::map;
 using std::string;
 
-class Plugin : public dcpp::Singleton<Plugin>
+class Plugin
 {
 public:
 	static Bool DCAPI main(PluginState state, DCCorePtr core, dcptr_t);
 
 private:
-	friend class dcpp::Singleton<Plugin>;
-
 	Plugin();
 	~Plugin();
 
 	void onLoad(DCCorePtr core, bool install, Bool& loadRes);
+	Bool onSecond(uint64_t tick);
 	Bool onUiChatTags(TagDataPtr tags);
 
-	// Event wrappers
-	static Bool DCAPI uiChatTags(dcptr_t /*pObject*/, dcptr_t pData, dcptr_t, Bool* /*bBreak*/) {
-		return getInstance()->onUiChatTags(reinterpret_cast<TagDataPtr>(pData));
-	}
-
 	map<string, subsHandle> events;
 
 	DCCorePtr dcpp;
 	DCHooksPtr hooks;
 
 	DCTaggerPtr tagger;
+	DCUIPtr ui;
+
+	/** @todo switch to dcpp::Singleton when <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51494>
+	is fixed */
+	static Plugin* instance;
 };
 
 #endif