linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #05833
[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2984: show plugin addition errors in a message box
------------------------------------------------------------
revno: 2984
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Sat 2012-07-07 18:11:11 +0200
message:
show plugin addition errors in a message box
modified:
dcpp/DCPlusPlus.cpp
dcpp/DCPlusPlus.h
dcpp/PluginManager.cpp
dcpp/PluginManager.h
win32/PluginPage.cpp
win32/main.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-01 18:41:13 +0000
+++ dcpp/DCPlusPlus.cpp 2012-07-07 16:11:11 +0000
@@ -47,7 +47,7 @@
namespace dcpp {
-void startup(void (*f)(void*, const string&), void* p) {
+void startup(function<void (const string&)> f) {
// "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;
@@ -99,16 +99,17 @@
}
#endif
- auto announce = [&f, &p](const string& str) {
- if(f)
- (*f)(p, str);
+ auto announce = [&f](const string& str) {
+ if(f) {
+ f(str);
+ }
};
announce(_("Users"));
ClientManager::getInstance()->loadUsers();
FavoriteManager::getInstance()->load();
- PluginManager::getInstance()->loadPlugins(f, p);
+ PluginManager::getInstance()->loadPlugins(f);
announce(_("Security certificates"));
CryptoManager::getInstance()->loadCertificates();
=== modified file 'dcpp/DCPlusPlus.h'
--- dcpp/DCPlusPlus.h 2012-01-13 20:55:20 +0000
+++ dcpp/DCPlusPlus.h 2012-07-07 16:11:11 +0000
@@ -21,13 +21,15 @@
#include "compiler.h"
+#include <functional>
#include <string>
namespace dcpp {
+using std::function;
using std::string;
-extern void startup(void (*f)(void*, const string&), void* p);
+extern void startup(function<void (const string&)> f);
extern void shutdown();
} // namespace dcpp
=== modified file 'dcpp/PluginManager.cpp'
--- dcpp/PluginManager.cpp 2012-07-03 17:17:03 +0000
+++ dcpp/PluginManager.cpp 2012-07-07 16:11:11 +0000
@@ -61,7 +61,7 @@
}
}
-void PluginManager::loadPlugins(void (*f)(void*, const string&), void* p) {
+void PluginManager::loadPlugins(function<void (const string&)> f) {
PluginApiImpl::initAPI(dcCore);
TimerManager::getInstance()->addListener(this);
@@ -69,20 +69,21 @@
QueueManager::getInstance()->addListener(this);
StringTokenizer<string> st(getPluginSetting("CoreSetup", "Plugins"), ";");
- for(StringIter i = st.getTokens().begin(); i != st.getTokens().end(); ++i) {
- if(!loadPlugin(*i) || !f) continue;
- (*f)(p, Util::getFileName(*i));
+ auto err = [](const string& str) { LogManager::getInstance()->message(str); };
+ for(auto& i: st.getTokens()) {
+ if(!loadPlugin(i, err) || !f) continue;
+ f(Util::getFileName(i));
}
}
-bool PluginManager::loadPlugin(const string& fileName, bool isInstall /*= false*/) {
+bool PluginManager::loadPlugin(const string& fileName, function<void (const string&)> err, bool install) {
Lock l(cs);
dcassert(dcCore.apiVersion != 0);
PluginHandle hr = LOAD_LIBRARY(fileName);
if(!hr) {
- LogManager::getInstance()->message(str(F_("Error loading %1%: %2%") % Util::getFileName(fileName) % GET_ERROR()));
+ err(str(F_("Error loading %1%: %2%") % Util::getFileName(fileName) % GET_ERROR()));
return false;
}
@@ -94,14 +95,14 @@
DCMAIN dcMain;
if((dcMain = pluginInfo(&info)) != NULL) {
- if(checkPlugin(info)) {
- if(dcMain((isInstall ? ON_INSTALL : ON_LOAD), &dcCore, NULL) != False) {
+ if(checkPlugin(info, err)) {
+ if(dcMain((install ? ON_INSTALL : ON_LOAD), &dcCore, NULL) != False) {
plugins.emplace_back(new PluginInfo(fileName, hr, info, dcMain));
return true;
}
}
}
- } else LogManager::getInstance()->message(str(F_("%1% is not a valid plugin") % Util::getFileName(fileName)));
+ } else err(str(F_("%1% is not a valid plugin") % Util::getFileName(fileName)));
FREE_LIBRARY(hr);
return false;
@@ -113,16 +114,16 @@
return (i != plugins.end());
}
-bool PluginManager::checkPlugin(const MetaData& info) {
+bool PluginManager::checkPlugin(const MetaData& info, function<void (const string&)> err) {
// Check if user is trying to load a duplicate
if(isLoaded(info.guid)) {
- LogManager::getInstance()->message(str(F_("%1% is already installed") % info.name));
+ err(str(F_("%1% is already installed") % info.name));
return false;
}
// Check API compatibility (this should only block on absolutely wrecking api changes, which generally should not happen)
if(info.apiVersion < DCAPI_CORE_VER) {
- LogManager::getInstance()->message(str(F_("%1% is too old, contact the plugin author for an update") % info.name));
+ err(str(F_("%1% is too old, contact the plugin author for an update") % info.name));
return false;
}
@@ -130,7 +131,7 @@
if(info.numDependencies != 0) {
for(size_t i = 0; i < info.numDependencies; ++i) {
if(!isLoaded(info.dependencies[i])) {
- LogManager::getInstance()->message(str(F_("Missing dependencies for %1%") % info.name));
+ err(str(F_("Missing dependencies for %1%") % info.name));
return false;
}
}
=== modified file 'dcpp/PluginManager.h'
--- dcpp/PluginManager.h 2012-07-02 21:05:41 +0000
+++ dcpp/PluginManager.h 2012-07-07 16:11:11 +0000
@@ -24,6 +24,7 @@
#include <functional>
#include <map>
#include <memory>
+#include <string>
#include <vector>
#include "Singleton.h"
@@ -47,6 +48,7 @@
using std::function;
using std::map;
+using std::string;
using std::unique_ptr;
using std::vector;
@@ -103,8 +105,8 @@
SettingsManager::getInstance()->removeListener(this);
}
- void loadPlugins(void (*f)(void*, const string&), void* p);
- bool loadPlugin(const string& fileName, bool isInstall = false);
+ void loadPlugins(function<void (const string&)> f);
+ bool loadPlugin(const string& fileName, function<void (const string&)> err, bool install = false);
bool isLoaded(const string& guid);
void unloadPlugins();
@@ -166,7 +168,7 @@
private:
// Check if plugin can be loaded
- bool checkPlugin(const MetaData& info);
+ bool checkPlugin(const MetaData& info, function<void (const string&)> err);
// Listeners
void on(TimerManagerListener::Second, uint64_t ticks) noexcept { runHook(HOOK_TIMER_SECOND, NULL, &ticks); }
=== modified file 'win32/PluginPage.cpp'
--- win32/PluginPage.cpp 2012-07-07 13:21:05 +0000
+++ win32/PluginPage.cpp 2012-07-07 16:11:11 +0000
@@ -253,15 +253,17 @@
}
void PluginPage::handleAddPlugin() {
- auto aPath = Util::emptyStringT;
- LoadDialog dlg(this);
- dlg.addFilter(T_("DLL Files"), _T("*.dll"));
- dlg.setInitialDirectory(Text::toT(Util::getPath(Util::PATH_GLOBAL_CONFIG) + "Plugins"));
-
- if(dlg.open(aPath)) {
+ tstring path;
+ if(LoadDialog(this).addFilter(T_("DLL files"), _T("*.dll"))
+ .setInitialDirectory(Text::toT(Util::getPath(Util::PATH_GLOBAL_CONFIG) + "Plugins")).open(path))
+ {
auto idx = plugins->size();
- if(PluginManager::getInstance()->loadPlugin(Text::fromT(aPath), true))
+ if(PluginManager::getInstance()->loadPlugin(Text::fromT(path), [this, &path](const string& str) {
+ dwt::MessageBox(this).show(Text::toT(str), Text::toT(Util::getFileName(Text::fromT(path))),
+ dwt::MessageBox::BOX_OK, dwt::MessageBox::BOX_ICONSTOP);
+ }, true)) {
addEntry(idx, PluginManager::getInstance()->getPlugin(idx)->getInfo());
+ }
}
}
=== modified file 'win32/main.cpp'
--- win32/main.cpp 2012-01-13 20:55:20 +0000
+++ win32/main.cpp 2012-07-07 16:11:11 +0000
@@ -58,11 +58,6 @@
return TRUE;
}
-void callBack(void* ptr, const string& a) {
- SplashWindow& splash = *((SplashWindow*)ptr);
- splash(a);
-}
-
#ifdef _DEBUG
void (*old_handler)();
@@ -140,7 +135,7 @@
try {
SplashWindow* splash(new SplashWindow);
- startup(&callBack, splash);
+ startup([splash](const string& str) { (*splash)(str); });
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);