From e6f2d22a8cf29c99816b566e3a7fc89a89186f61 Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 17 Jun 2011 19:59:01 +0000 Subject: [PATCH] added settings page for plugins. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4283 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- libretroshare/src/libretroshare.pro | 6 +- libretroshare/src/plugins/pluginmanager.cc | 5 +- libretroshare/src/plugins/pluginmanager.h | 4 + libretroshare/src/retroshare/rsplugin.h | 3 + libretroshare/src/rsserver/rsinit.cc | 7 +- retroshare-gui/src/RetroShare.pro | 3 + .../src/gui/settings/PluginsPage.cpp | 73 +++ retroshare-gui/src/gui/settings/PluginsPage.h | 43 ++ .../src/gui/settings/PluginsPage.ui | 544 ++++++++++++++++++ .../src/gui/settings/rsettingswin.cpp | 6 + .../src/gui/settings/rsettingswin.h | 2 +- retroshare-gui/src/gui/settings/settings.ui | 9 + 12 files changed, 699 insertions(+), 6 deletions(-) create mode 100644 retroshare-gui/src/gui/settings/PluginsPage.cpp create mode 100644 retroshare-gui/src/gui/settings/PluginsPage.h create mode 100644 retroshare-gui/src/gui/settings/PluginsPage.ui diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 335eb7915..18d79c1a9 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -138,7 +138,8 @@ PUBLIC_HEADERS = retroshare/rsblogs.h \ retroshare/rsturtle.h \ retroshare/rstypes.h -HEADERS += plugins/pluginmanager.h +HEADERS += plugins/pluginmanager.h \ + plugins/dlfcn_win32.h HEADERS += $$PUBLIC_HEADERS @@ -483,7 +484,8 @@ SOURCES += rsserver/p3discovery.cc \ rsserver/rsloginhandler.cc \ rsserver/rstypes.cc -SOURCES += plugins/pluginmanager.cc +SOURCES += plugins/pluginmanager.cc \ + plugins/dlfcn_win32.cc SOURCES += serialiser/rsbaseitems.cc \ serialiser/rsbaseserial.cc \ diff --git a/libretroshare/src/plugins/pluginmanager.cc b/libretroshare/src/plugins/pluginmanager.cc index bfd9bb0fd..a6a0ea112 100644 --- a/libretroshare/src/plugins/pluginmanager.cc +++ b/libretroshare/src/plugins/pluginmanager.cc @@ -20,6 +20,8 @@ std::string RsPluginManager::_plugin_entry_symbol ; std::string RsPluginManager::_local_cache_dir ; std::string RsPluginManager::_remote_cache_dir ; +std::vector RsPluginManager::_plugin_directories ; + ftServer *RsPluginManager::_ftserver = NULL ; p3ConnectMgr *RsPluginManager::_connectmgr = NULL ; @@ -45,6 +47,7 @@ bool RsPluginManager::acceptablePluginName(const std::string& name) void RsPluginManager::loadPlugins(const std::vector& plugin_directories) { + _plugin_directories = plugin_directories ; _plugin_entry_symbol = "RETROSHARE_PLUGIN_provide" ; // 0 - get the list of files to read @@ -55,7 +58,7 @@ void RsPluginManager::loadPlugins(const std::vector& plugin_directo if(!dirIt.isValid()) { std::cerr << "Plugin directory : " << plugin_directories[i] << " does not exist." << std::endl ; - return ; + continue ; } while(dirIt.readdir()) diff --git a/libretroshare/src/plugins/pluginmanager.h b/libretroshare/src/plugins/pluginmanager.h index 8f01e21d3..fdb2096b9 100644 --- a/libretroshare/src/plugins/pluginmanager.h +++ b/libretroshare/src/plugins/pluginmanager.h @@ -16,6 +16,8 @@ class RsPluginManager: public RsPluginHandler virtual int nbPlugins() const { return _plugins.size() ; } virtual RsPlugin *plugin(int i) { return _plugins[i] ; } + virtual const std::vector& getPluginDirectories() const { return _plugin_directories ; } + virtual void slowTickPlugins(time_t sec) ; virtual void addConfigurations(p3ConfigMgr *cfgMgr) ; @@ -44,5 +46,7 @@ class RsPluginManager: public RsPluginHandler static std::string _local_cache_dir ; static ftServer *_ftserver ; static p3ConnectMgr *_connectmgr ; + + static std::vector _plugin_directories ; }; diff --git a/libretroshare/src/retroshare/rsplugin.h b/libretroshare/src/retroshare/rsplugin.h index 0d455e9eb..e35ef5329 100644 --- a/libretroshare/src/retroshare/rsplugin.h +++ b/libretroshare/src/retroshare/rsplugin.h @@ -28,6 +28,7 @@ #include #include #include +#include class RsPluginHandler ; extern RsPluginHandler *rsPlugins ; @@ -61,6 +62,8 @@ class RsPluginHandler // virtual int nbPlugins() const = 0 ; virtual RsPlugin *plugin(int i) = 0 ; + virtual const std::vector& getPluginDirectories() const = 0; + virtual void slowTickPlugins(time_t sec) = 0 ; virtual const std::string& getLocalCacheDir() const =0; diff --git a/libretroshare/src/rsserver/rsinit.cc b/libretroshare/src/rsserver/rsinit.cc index 7d9ff3d05..4236fedc5 100644 --- a/libretroshare/src/rsserver/rsinit.cc +++ b/libretroshare/src/rsserver/rsinit.cc @@ -1925,10 +1925,13 @@ int RsServer::StartupRetroShare() std::string channelsdir = config_dir + "/channels"; std::string blogsdir = config_dir + "/blogs"; std::string forumdir = config_dir + "/forums"; - std::string plugins_dir = "." ; - std::vector plugins_directories ; + +#ifndef WINDOWS_SYS + plugins_directories.push_back(std::string("/usr/lib/retroshare/extensions/")) ; +#endif + plugins_directories.push_back(RsInitConfig::basedir + "/extensions/") ; plugins_directories.push_back(".") ; // this list should be saved/set to some correct value. // possible entries include: /usr/lib/retroshare, ~/.retroshare/extensions/, etc. diff --git a/retroshare-gui/src/RetroShare.pro b/retroshare-gui/src/RetroShare.pro index cd37c501b..833d34678 100644 --- a/retroshare-gui/src/RetroShare.pro +++ b/retroshare-gui/src/RetroShare.pro @@ -290,6 +290,7 @@ HEADERS += rshare.h \ gui/settings/MessagePage.h \ gui/settings/NewTag.h \ gui/settings/ForumPage.h \ + gui/settings/PluginsPage.h \ gui/settings/AppearancePage.h \ gui/settings/FileAssociationsPage.h \ gui/settings/SoundPage.h \ @@ -401,6 +402,7 @@ FORMS += gui/StartDialog.ui \ gui/settings/MessagePage.ui \ gui/settings/NewTag.ui \ gui/settings/ForumPage.ui \ + gui/settings/PluginsPage.ui \ gui/settings/AppearancePage.ui \ gui/settings/TransferPage.ui \ gui/settings/SoundPage.ui \ @@ -543,6 +545,7 @@ SOURCES += main.cpp \ gui/settings/MessagePage.cpp \ gui/settings/NewTag.cpp \ gui/settings/ForumPage.cpp \ + gui/settings/PluginsPage.cpp \ gui/settings/AppearancePage.cpp \ gui/settings/FileAssociationsPage.cpp \ gui/settings/SoundPage.cpp \ diff --git a/retroshare-gui/src/gui/settings/PluginsPage.cpp b/retroshare-gui/src/gui/settings/PluginsPage.cpp new file mode 100644 index 000000000..57ba2b40c --- /dev/null +++ b/retroshare-gui/src/gui/settings/PluginsPage.cpp @@ -0,0 +1,73 @@ +/**************************************************************** + * RetroShare is distributed under the following license: + * + * Copyright (C) 2006, crypton + * + * 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., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + ****************************************************************/ + +#include "PluginsPage.h" +#include "rshare.h" +#include "rsharesettings.h" + +#include + +#include "../MainWindow.h" + +PluginsPage::PluginsPage(QWidget * parent, Qt::WFlags flags) + : ConfigPage(parent, flags) +{ + ui.setupUi(this); + setAttribute(Qt::WA_QuitOnClose, false); + + QString text ; + + if(rsPlugins->nbPlugins() > 0) + for(int i=0;inbPlugins();++i) + { + text += ""+tr("Plugin")+": \t" + QString::fromStdString(rsPlugins->plugin(i)->getPluginName()) + "
" ; + text += ""+tr("Description")+": \t" + QString::fromStdString(rsPlugins->plugin(i)->getShortPluginDescription()) + "
" ; + text += "
" ; + } + else + text = tr("

No plugins loaded.

") ; + + ui._loadedPlugins_TB->setHtml(text) ; + + const std::vector& dirs(rsPlugins->getPluginDirectories()) ; + text = "" ; + + for(int i=0;i
" ; + + ui._lookupDirectories_TB->setHtml(text) ; +} + +PluginsPage::~PluginsPage() +{ +} + +/** Saves the changes on this page */ +bool PluginsPage::save(QString &errmsg) +{ + // nothing to save for now. + return true; +} + +/** Loads the settings for this page */ +void PluginsPage::load() +{ +} diff --git a/retroshare-gui/src/gui/settings/PluginsPage.h b/retroshare-gui/src/gui/settings/PluginsPage.h new file mode 100644 index 000000000..f0f32e649 --- /dev/null +++ b/retroshare-gui/src/gui/settings/PluginsPage.h @@ -0,0 +1,43 @@ +/**************************************************************** + * RetroShare is distributed under the following license: + * + * Copyright (C) 2006, crypton + * + * 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., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + ****************************************************************/ + +#pragma once + +#include "configpage.h" +#include "ui_PluginsPage.h" + +class PluginsPage : public ConfigPage +{ + Q_OBJECT + +public: + PluginsPage(QWidget * parent = 0, Qt::WFlags flags = 0); + ~PluginsPage(); + + /** Saves the changes on this page */ + bool save(QString &errmsg); + /** Loads the settings for this page */ + void load(); + +private: + Ui::PluginsPage ui; +}; + diff --git a/retroshare-gui/src/gui/settings/PluginsPage.ui b/retroshare-gui/src/gui/settings/PluginsPage.ui new file mode 100644 index 000000000..909d8f19d --- /dev/null +++ b/retroshare-gui/src/gui/settings/PluginsPage.ui @@ -0,0 +1,544 @@ + + + PluginsPage + + + + 0 + 0 + 423 + 340 + + + + + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 208 + 208 + 208 + + + + + + + 255 + 255 + 255 + + + + + + + 247 + 247 + 247 + + + + + + + 104 + 104 + 104 + + + + + + + 139 + 139 + 139 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 240 + 240 + 240 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 255 + 0 + 255 + + + + + + + 231 + 231 + 231 + + + + + + + + + 0 + 0 + 0 + + + + + + + 208 + 208 + 208 + + + + + + + 255 + 255 + 255 + + + + + + + 247 + 247 + 247 + + + + + + + 104 + 104 + 104 + + + + + + + 139 + 139 + 139 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 240 + 240 + 240 + + + + + + + 0 + 0 + 0 + + + + + + + 192 + 192 + 192 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 255 + + + + + + + 255 + 0 + 255 + + + + + + + 231 + 231 + 231 + + + + + + + + + 104 + 104 + 104 + + + + + + + 208 + 208 + 208 + + + + + + + 255 + 255 + 255 + + + + + + + 247 + 247 + 247 + + + + + + + 104 + 104 + 104 + + + + + + + 139 + 139 + 139 + + + + + + + 104 + 104 + 104 + + + + + + + 255 + 255 + 255 + + + + + + + 104 + 104 + 104 + + + + + + + 240 + 240 + 240 + + + + + + + 240 + 240 + 240 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 255 + 0 + 255 + + + + + + + 231 + 231 + 231 + + + + + + + + + Arial + 8 + 50 + false + false + false + false + + + + Qt::NoContextMenu + + + + + + Loaded plugins + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Plugin look-up directories + + + + + + + + + + + + + diff --git a/retroshare-gui/src/gui/settings/rsettingswin.cpp b/retroshare-gui/src/gui/settings/rsettingswin.cpp index efceb8c22..b6140a9d5 100644 --- a/retroshare-gui/src/gui/settings/rsettingswin.cpp +++ b/retroshare-gui/src/gui/settings/rsettingswin.cpp @@ -34,6 +34,7 @@ #include "ChatPage.h" #include "MessagePage.h" #include "ForumPage.h" +#include "PluginsPage.h" #define IMAGE_GENERAL ":/images/kcmsystem24.png" @@ -114,6 +115,7 @@ RSettingsWin::initStackedWidget() stackedWidget->addWidget(new ChatPage()); stackedWidget->addWidget(new AppearancePage()); stackedWidget->addWidget(new SoundPage() ); + stackedWidget->addWidget(new PluginsPage() ); setNewPage(General); } @@ -157,6 +159,10 @@ RSettingsWin::setNewPage(int page) text = tr("Forum"); pageicon->setPixmap(QPixmap(":/images/konversation.png")); break; + case Plugins: + text = tr("Plugins"); + pageicon->setPixmap(QPixmap(":/images/extension_32.png")); + break; case Chat: text = tr("Chat"); pageicon->setPixmap(QPixmap(":/images/chat_24.png")); diff --git a/retroshare-gui/src/gui/settings/rsettingswin.h b/retroshare-gui/src/gui/settings/rsettingswin.h index 3d390b85a..98424ad5f 100755 --- a/retroshare-gui/src/gui/settings/rsettingswin.h +++ b/retroshare-gui/src/gui/settings/rsettingswin.h @@ -32,7 +32,7 @@ class RSettingsWin: public QDialog, private Ui::Settings public: enum PageType { LastPage = -1, General = 0, Server, Transfer, - Directories, Notify, Security, Message, Forum, Chat, Appearance, Sound, Fileassociations }; + Directories, Notify, Security, Message, Forum, Chat, Appearance, Sound, Plugins,Fileassociations }; static void showYourself(QWidget *parent, PageType page = LastPage); static void postModDirectories(bool update_local); diff --git a/retroshare-gui/src/gui/settings/settings.ui b/retroshare-gui/src/gui/settings/settings.ui index 660e71d45..2ae96d13a 100755 --- a/retroshare-gui/src/gui/settings/settings.ui +++ b/retroshare-gui/src/gui/settings/settings.ui @@ -176,6 +176,15 @@ :/images/sound.png:/images/sound.png + + + Plugins + + + + :/images/extension_32.png:/images/extension_32.png + +