linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #06281
[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