← Back to team overview

linuxdcpp-team team mailing list archive

[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 3137: rework plugin init

 

------------------------------------------------------------
revno: 3137
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Wed 2012-11-14 20:53:25 +0100
message:
  rework plugin init
removed:
  test/testbase.cpp
added:
  win32/PluginApiWin.h
renamed:
  win32/PluginApiImpl.cpp => win32/PluginApiWin.cpp
modified:
  dcpp/DCPlusPlus.cpp
  dcpp/DCPlusPlus.h
  dcpp/PluginApiImpl.cpp
  dcpp/PluginApiImpl.h
  dcpp/PluginEntity.h
  dcpp/PluginManager.cpp
  dcpp/PluginManager.h
  msvc/nov2012ctp.patch
  utils/base.h
  win32/main.cpp
  win32/stdafx.h
  win32/PluginApiWin.cpp


--
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 'dcpp/DCPlusPlus.cpp'
--- dcpp/DCPlusPlus.cpp	2012-07-20 13:55:11 +0000
+++ dcpp/DCPlusPlus.cpp	2012-11-14 19:53:25 +0000
@@ -31,6 +31,7 @@
 #include "HashManager.h"
 #include "LogManager.h"
 #include "MappingManager.h"
+#include "PluginApiImpl.h"
 #include "QueueManager.h"
 #include "ResourceManager.h"
 #include "SearchManager.h"
@@ -46,7 +47,7 @@
 
 namespace dcpp {
 
-void startup(function<void (const string&)> f) {
+void startup() {
 	// "Dedicated to the near-memory of Nev. Let's start remembering people while they're still alive."
 	// Nev's great contribution to dc++
 	while(1) break;
@@ -84,7 +85,10 @@
 	UserMatchManager::newInstance();
 	WindowManager::newInstance();
 	PluginManager::newInstance();
+	PluginApiImpl::init();
+}
 
+void load(function<void (const string&)> f) {
 	SettingsManager::getInstance()->load();
 
 #ifdef _WIN32
@@ -142,6 +146,7 @@
 	ClientManager::getInstance()->saveUsers();
 	SettingsManager::getInstance()->save();
 
+	PluginApiImpl::shutdown();
 	PluginManager::deleteInstance();
 	WindowManager::deleteInstance();
 	UserMatchManager::deleteInstance();

=== modified file 'dcpp/DCPlusPlus.h'
--- dcpp/DCPlusPlus.h	2012-07-07 16:11:11 +0000
+++ dcpp/DCPlusPlus.h	2012-11-14 19:53:25 +0000
@@ -19,8 +19,6 @@
 #ifndef DCPLUSPLUS_DCPP_DCPLUSPLUS_H
 #define DCPLUSPLUS_DCPP_DCPLUSPLUS_H
 
-#include "compiler.h"
-
 #include <functional>
 #include <string>
 
@@ -29,8 +27,9 @@
 using std::function;
 using std::string;
 
-extern void startup(function<void (const string&)> f);
-extern void shutdown();
+void startup();
+void load(function<void (const string&)> f);
+void shutdown();
 
 } // namespace dcpp
 

=== modified file 'dcpp/PluginApiImpl.cpp'
--- dcpp/PluginApiImpl.cpp	2012-11-11 15:12:15 +0000
+++ dcpp/PluginApiImpl.cpp	2012-11-14 19:53:25 +0000
@@ -169,15 +169,6 @@
 	&PluginApiImpl::addTag
 };
 
-DCUI PluginApiImpl::dcUI = {
-	DCINTF_DCPP_UI_VER,
-
-	&PluginApiImpl::addCommand,
-	&PluginApiImpl::removeCommand,
-
-	&PluginApiImpl::playSound
-};
-
 Socket* PluginApiImpl::udpSocket = nullptr;
 Socket& PluginApiImpl::getUdpSocket() {
 	if(!udpSocket) {
@@ -186,7 +177,9 @@
 	return *udpSocket;
 }
 
-void PluginApiImpl::initAPI(DCCore& dcCore) {
+void PluginApiImpl::init() {
+	auto& dcCore = *PluginManager::getInstance()->getCore();
+
 	dcCore.apiVersion = DCAPI_CORE_VER;
 
 	// Interface registry
@@ -208,14 +201,13 @@
 	dcCore.register_interface(DCINTF_DCPP_QUEUE, &dcQueue);
 	dcCore.register_interface(DCINTF_DCPP_UTILS, &dcUtils);
 	dcCore.register_interface(DCINTF_DCPP_TAGGER, &dcTagger);
-	dcCore.register_interface(DCINTF_DCPP_UI, &dcUI);
 
 	// Create provided hooks (since these outlast any plugin they don't need to be explictly released)
 	for(int i = 0; i < IMPL_HOOKS_COUNT; ++i)
 		dcHooks.create_hook(hookGuids[i], NULL);
 }
 
-void PluginApiImpl::releaseAPI() {
+void PluginApiImpl::shutdown() {
 	if(udpSocket) {
 		udpSocket->disconnect();
 		delete udpSocket;

=== modified file 'dcpp/PluginApiImpl.h'
--- dcpp/PluginApiImpl.h	2012-11-04 19:15:24 +0000
+++ dcpp/PluginApiImpl.h	2012-11-14 19:53:25 +0000
@@ -24,8 +24,6 @@
 #ifndef DCPLUSPLUS_DCPP_PLUGIN_API_IMPL_H
 #define DCPLUSPLUS_DCPP_PLUGIN_API_IMPL_H
 
-#include <cstdint>
-
 #include "forward.h"
 #include "typedefs.h"
 
@@ -36,8 +34,8 @@
 class PluginApiImpl
 {
 public:
-	static void initAPI(DCCore& dcCore);
-	static void releaseAPI();
+	static void init();
+	static void shutdown();
 
 	static HubDataPtr DCAPI copyData(const HubDataPtr hub);
 	static void DCAPI releaseData(HubDataPtr hub);
@@ -94,12 +92,6 @@
 	// Functions for DCTagger
 	static void DCAPI addTag(TagDataPtr hTags, size_t start, size_t end, const char* id, const char* attributes);
 
-	// Functions for DCUI - the host has to define these
-	static void DCAPI addCommand(const char* name, DCCommandFunc command);
-	static void DCAPI removeCommand(const char* name);
-
-	static void DCAPI playSound(const char* path);
-
 	// Functions for DCQueue
 	static QueueDataPtr DCAPI addList(UserDataPtr user, Bool silent);
 	static QueueDataPtr DCAPI addDownload(const char* hash, uint64_t size, const char* target);
@@ -133,7 +125,6 @@
 	static DCQueue dcQueue;
 	static DCUtils dcUtils;
 	static DCTagger dcTagger;
-	static DCUI dcUI;
 
 	static Socket* udpSocket;
 	static Socket& getUdpSocket();

=== modified file 'dcpp/PluginEntity.h'
--- dcpp/PluginEntity.h	2012-09-08 13:54:40 +0000
+++ dcpp/PluginEntity.h	2012-11-14 19:53:25 +0000
@@ -32,12 +32,7 @@
 class PluginEntity
 {
 public:
-	PluginEntity() {
-#ifndef _MSC_VER
-		pod = { };
-#else
-		memset(&pod, 0, sizeof(PluginType));
-#endif
+	PluginEntity() : pod() {
 		pod.isManaged = True;
 	}
 	virtual ~PluginEntity() { psCache.clear(); }

=== modified file 'dcpp/PluginManager.cpp'
--- dcpp/PluginManager.cpp	2012-11-11 15:12:15 +0000
+++ dcpp/PluginManager.cpp	2012-11-14 19:53:25 +0000
@@ -62,14 +62,8 @@
 	}
 }
 
-PluginManager::PluginManager() : shutdown(false), secNum(Util::rand()) {
-#ifndef _MSC_VER
-	dcCore = { };
-#else
-	memset(&dcCore, 0, sizeof(DCCore));
-#endif
+PluginManager::PluginManager() : dcCore(), shutdown(false), secNum(Util::rand()) {
 	SettingsManager::getInstance()->addListener(this);
-	loadSettings(); // workaround for SettingsManager loading memory of this when loading fails
 }
 
 PluginManager::~PluginManager() {
@@ -77,12 +71,12 @@
 }
 
 void PluginManager::loadPlugins(function<void (const string&)> f) {
-	PluginApiImpl::initAPI(dcCore);
-
 	TimerManager::getInstance()->addListener(this);
 	ClientManager::getInstance()->addListener(this);
 	QueueManager::getInstance()->addListener(this);
 
+	loadSettings(); // workaround for SettingsManager loading memory of this when loading fails
+
 	StringTokenizer<string> st(getPluginSetting("CoreSetup", "Plugins"), ";");
 	auto err = [](const string& str) { LogManager::getInstance()->message(str); };
 	for(auto& i: st.getTokens()) {
@@ -178,8 +172,6 @@
 	TimerManager::getInstance()->removeListener(this);
 	ClientManager::getInstance()->removeListener(this);
 	QueueManager::getInstance()->removeListener(this);
-
-	PluginApiImpl::releaseAPI();
 }
 
 void PluginManager::unloadPlugin(size_t index) {

=== modified file 'dcpp/PluginManager.h'
--- dcpp/PluginManager.h	2012-10-06 03:20:43 +0000
+++ dcpp/PluginManager.h	2012-11-14 19:53:25 +0000
@@ -28,7 +28,6 @@
 #include "typedefs.h"
 
 #include "ClientManagerListener.h"
-#include "PluginApiImpl.h"
 #include "PluginEntity.h"
 #include "QueueManagerListener.h"
 #include "SettingsManager.h"
@@ -36,6 +35,8 @@
 #include "Tagger.h"
 #include "TimerManager.h"
 
+#include <pluginsdk/PluginDefs.h>
+
 #ifdef _WIN32
 typedef HMODULE PluginHandle;
 #else

=== modified file 'msvc/nov2012ctp.patch'
--- msvc/nov2012ctp.patch	2012-11-05 20:39:11 +0000
+++ msvc/nov2012ctp.patch	2012-11-14 19:53:25 +0000
@@ -3,7 +3,7 @@
 
 --- vcvarsall - original.bat	2011-12-12 12:52:48.000000000 +0100
 +++ vcvarsall.bat	2012-11-05 19:00:44.875000000 +0100
-@@ -13,10 +13,14 @@
+@@ -13,11 +13,15 @@
  :x86
  if not exist "%~dp0bin\vcvars32.bat" goto missing
  call "%~dp0bin\vcvars32.bat"
@@ -13,24 +13,25 @@
  
  :amd64
  if not exist "%~dp0bin\amd64\vcvars64.bat" goto missing
+ call "%~dp0bin\amd64\vcvars64.bat"
 +set PATH=C:\Program Files (x86)\Microsoft Visual C++ Compiler Nov 2012 CTP\bin\amd64;%PATH%
 +set INCLUDE=C:\Program Files (x86)\Microsoft Visual C++ Compiler Nov 2012 CTP\include;%INCLUDE%
- call "%~dp0bin\amd64\vcvars64.bat"
  goto :SetVisualStudioVersion
  
-@@ -27,11 +31,15 @@
- 
+ :arm
+@@ -28,11 +32,15 @@
  :x86_amd64
  if not exist "%~dp0bin\x86_amd64\vcvarsx86_amd64.bat" goto missing
+ call "%~dp0bin\x86_amd64\vcvarsx86_amd64.bat"
 +set PATH=C:\Program Files (x86)\Microsoft Visual C++ Compiler Nov 2012 CTP\bin\x86_amd64;%PATH%
 +set INCLUDE=C:\Program Files (x86)\Microsoft Visual C++ Compiler Nov 2012 CTP\include;%INCLUDE%
- call "%~dp0bin\x86_amd64\vcvarsx86_amd64.bat"
  goto :SetVisualStudioVersion
  
  :x86_arm
  if not exist "%~dp0bin\x86_arm\vcvarsx86_arm.bat" goto missing
+ call "%~dp0bin\x86_arm\vcvarsx86_arm.bat"
 +set PATH=C:\Program Files (x86)\Microsoft Visual C++ Compiler Nov 2012 CTP\bin\x86_arm;%PATH%
 +set INCLUDE=C:\Program Files (x86)\Microsoft Visual C++ Compiler Nov 2012 CTP\include;%INCLUDE%
- call "%~dp0bin\x86_arm\vcvarsx86_arm.bat"
  goto :SetVisualStudioVersion
  
+ :SetVisualStudioVersion

=== removed file 'test/testbase.cpp'
--- test/testbase.cpp	2012-11-02 22:23:18 +0000
+++ test/testbase.cpp	1970-01-01 00:00:00 +0000
@@ -1,12 +0,0 @@
-#include "testbase.h"
-
-#include <dcpp/PluginApiImpl.h>
-
-namespace dcpp {
-
-// Functions for DCUI
-void PluginApiImpl::addCommand(const char* name, DCCommandFunc command) { }
-void PluginApiImpl::removeCommand(const char* name) { }
-void PluginApiImpl::playSound(const char* path) { }
-
-} // namespace dcpp

=== modified file 'utils/base.h'
--- utils/base.h	2012-11-02 22:23:18 +0000
+++ utils/base.h	2012-11-14 19:53:25 +0000
@@ -2,15 +2,4 @@
 
 #include <dcpp/stdinc.h>
 
-#include <dcpp/PluginApiImpl.h>
-
 #define _(x)
-
-namespace dcpp {
-
-// Functions for DCUI
-void PluginApiImpl::addCommand(const char* name, DCCommandFunc command) { }
-void PluginApiImpl::removeCommand(const char* name) { }
-void PluginApiImpl::playSound(const char* path) { }
-
-} // namespace dcpp

=== renamed file 'win32/PluginApiImpl.cpp' => 'win32/PluginApiWin.cpp'
--- win32/PluginApiImpl.cpp	2012-11-11 16:16:24 +0000
+++ win32/PluginApiWin.cpp	2012-11-14 19:53:25 +0000
@@ -16,30 +16,37 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-/** @file implement UI-specific functions of the plugin API. */
-
 #include "stdafx.h"
-
-#include <dcpp/PluginApiImpl.h>
-
+#include "PluginApiWin.h"
+
+#include <dcpp/PluginManager.h>
 #include <dcpp/Text.h>
 
 #include "MainWindow.h"
 #include "WinUtil.h"
 
-namespace dcpp {
+DCUI PluginApiWin::dcUI = {
+	DCINTF_DCPP_UI_VER,
+
+	&PluginApiWin::addCommand,
+	&PluginApiWin::removeCommand,
+
+	&PluginApiWin::playSound
+};
+
+void PluginApiWin::init() {
+	PluginManager::getInstance()->registerInterface(DCINTF_DCPP_UI, &dcUI);
+}
 
 // Functions for DCUI
-void PluginApiImpl::addCommand(const char* name, DCCommandFunc command) {
+void PluginApiWin::addCommand(const char* name, DCCommandFunc command) {
 	MainWindow::addPluginCommand(Text::toT(name), [=] { command(name); });
 }
 
-void PluginApiImpl::removeCommand(const char* name) {
+void PluginApiWin::removeCommand(const char* name) {
 	MainWindow::removePluginCommand(Text::toT(name));
 }
 
-void PluginApiImpl::playSound(const char* path) {
+void PluginApiWin::playSound(const char* path) {
 	WinUtil::playSound(Text::toT(path));
 }
-
-} // namespace dcpp

=== added file 'win32/PluginApiWin.h'
--- win32/PluginApiWin.h	1970-01-01 00:00:00 +0000
+++ win32/PluginApiWin.h	2012-11-14 19:53:25 +0000
@@ -0,0 +1,40 @@
+/* 
+ * Copyright (C) 2001-2012 Jacek Sieka, arnetheduck on gmail point com
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/** @file implement UI-specific functions of the plugin API. */
+
+#ifndef DCPLUSPLUS_WIN32_PLUGINAPIWIN_H
+#define DCPLUSPLUS_WIN32_PLUGINAPIWIN_H
+
+#include <pluginsdk/PluginDefs.h>
+
+class PluginApiWin {
+public:
+	static void init();
+
+private:
+	// Functions for DCUI
+	static void DCAPI addCommand(const char* name, DCCommandFunc command);
+	static void DCAPI removeCommand(const char* name);
+
+	static void DCAPI playSound(const char* path);
+
+	static DCUI dcUI;
+};
+
+#endif

=== modified file 'win32/main.cpp'
--- win32/main.cpp	2012-07-07 16:11:11 +0000
+++ win32/main.cpp	2012-11-14 19:53:25 +0000
@@ -21,11 +21,13 @@
 #include <exception>
 
 #include "CrashLogger.h"
+#include "MainWindow.h"
+#include "PluginApiWin.h"
 #include "SingleInstance.h"
+#include "SplashWindow.h"
 #include "WinUtil.h"
-#include "MainWindow.h"
-#include "SplashWindow.h"
 
+#include <dcpp/DCPlusPlus.h>
 #include <dcpp/MerkleTree.h>
 #include <dcpp/File.h>
 #include <dcpp/Text.h>
@@ -135,7 +137,11 @@
 
 	try {
 		SplashWindow* splash(new SplashWindow);
-		startup([splash](const string& str) { (*splash)(str); });
+
+		startup();
+		PluginApiWin::init();
+
+		load([splash](const string& str) { (*splash)(str); });
 
 		bindtextdomain(PACKAGE, LOCALEDIR);
 		textdomain(PACKAGE);

=== modified file 'win32/stdafx.h'
--- win32/stdafx.h	2012-07-12 17:50:02 +0000
+++ win32/stdafx.h	2012-11-14 19:53:25 +0000
@@ -23,9 +23,9 @@
 #include "compiler.h"
 
 #include <dcpp/stdinc.h>
-#include <dcpp/DCPlusPlus.h>
 #include <dcpp/w.h>
 
+namespace dcpp { }
 using namespace dcpp;
 
 #ifdef HAS_PCH