/******************************************************************************* * plugins/FeedReader/FeedReaderPlugin.cpp * * * * Copyright (C) 2012 by Thunder * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU Affero General Public License as * * published by the Free Software Foundation, either version 3 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 Affero General Public License for more details. * * * * You should have received a copy of the GNU Affero General Public License * * along with this program. If not, see . * * * *******************************************************************************/ #include #include #include #include #include "FeedReaderPlugin.h" #include "gui/FeedReaderDialog.h" #include "gui/FeedReaderNotify.h" #include "gui/FeedReaderConfig.h" #include "gui/FeedReaderFeedNotify.h" #include "services/p3FeedReader.h" #include "services/FeedReaderJsonApi.h" #include #include #include #include #define IMAGE_FEEDREADER ":/images/FeedReader.png" static void *inited = new FeedReaderPlugin(); extern "C" { #ifdef WIN32 __declspec(dllexport) #endif RsPlugin *RETROSHARE_PLUGIN_provide() { return new FeedReaderPlugin(); } // This symbol contains the svn revision number grabbed from the executable. // It will be tested by RS to load the plugin automatically, since it is safe to load plugins // with same revision numbers, assuming that the revision numbers are up-to-date. // #ifdef WIN32 __declspec(dllexport) #endif uint32_t RETROSHARE_PLUGIN_revision = (uint32_t)atoi(RS_EXTRA_VERSION); // This symbol contains the svn revision number grabbed from the executable. // It will be tested by RS to load the plugin automatically, since it is safe to load plugins // with same revision numbers, assuming that the revision numbers are up-to-date. // #ifdef WIN32 __declspec(dllexport) #endif uint32_t RETROSHARE_PLUGIN_api = RS_PLUGIN_API_VERSION ; } void FeedReaderPlugin::getPluginVersion(int& major, int& minor, int &build, int& svn_rev) const { major = RS_MAJOR_VERSION; minor = RS_MINOR_VERSION; build = RS_MINI_VERSION; svn_rev = abs(atoi(RS_EXTRA_VERSION)) ; } FeedReaderPlugin::FeedReaderPlugin() { mainpage = NULL ; mIcon = NULL ; mPlugInHandler = NULL; mFeedReader = NULL; mNotify = NULL; mFeedNotify = NULL; mJsonApiProvider = NULL; Q_INIT_RESOURCE(FeedReader_images); Q_INIT_RESOURCE(FeedReader_qss); } void FeedReaderPlugin::setInterfaces(RsPlugInInterfaces &interfaces) { mInterfaces = interfaces; std::cerr << "FeedReader: JSON API interface pointer=" << static_cast(mInterfaces.mJsonApi) << std::endl; mFeedReader = new p3FeedReader(mPlugInHandler, mInterfaces.mGxsForums, mInterfaces.mPosted); rsFeedReader = mFeedReader; mNotify = new FeedReaderNotify(); mFeedReader->setNotify(mNotify); if(mInterfaces.mJsonApi) { mJsonApiProvider = new FeedReaderJsonApi(*mFeedReader, *mInterfaces.mJsonApi); mInterfaces.mJsonApi->registerResourceProvider(*mJsonApiProvider); std::cerr << "FeedReader: JSON API provider registered=" << mInterfaces.mJsonApi->hasResourceProvider(*mJsonApiProvider) << std::endl; // retroshare-service and Android may start JSON API before plugins are // initialized, while the desktop GUI configures and starts it afterwards. // Restart only an already-running server. In the GUI case the provider is // picked up by the normal, later startupWebServices() call. if(mInterfaces.mJsonApi->isRunning()) { const std::error_condition restartError = mInterfaces.mJsonApi->restart(true); std::cerr << "FeedReader: JSON API restart result=" << restartError.value() << " (" << restartError.message() << ")" << std::endl; } else std::cerr << "FeedReader: JSON API startup deferred to core" << std::endl; } else std::cerr << "FeedReader: JSON API unavailable; routes not registered" << std::endl; } ConfigPage *FeedReaderPlugin::qt_config_page() const { return new FeedReaderConfig(); } MainPage *FeedReaderPlugin::qt_page() const { if (mainpage == NULL) { mainpage = new FeedReaderDialog(mFeedReader, mNotify); } return mainpage; } FeedNotify *FeedReaderPlugin::qt_feedNotify() { if (!mFeedNotify) { mFeedNotify = new FeedReaderFeedNotify(mFeedReader, mNotify); } return mFeedNotify; } void FeedReaderPlugin::stop() { if(mJsonApiProvider) { if(mInterfaces.mJsonApi) { mInterfaces.mJsonApi->unregisterResourceProvider(*mJsonApiProvider); if(mInterfaces.mJsonApi->isRunning()) mInterfaces.mJsonApi->restart(true); } delete mJsonApiProvider; mJsonApiProvider = NULL; } if (mFeedReader) { mFeedReader->setNotify(NULL); mFeedReader->stop(); } if (mNotify) { delete(mNotify); mNotify = NULL; } if (mFeedNotify) { delete mFeedNotify; mFeedNotify = NULL; } } void FeedReaderPlugin::setPlugInHandler(RsPluginHandler *pgHandler) { mPlugInHandler = pgHandler; } QIcon *FeedReaderPlugin::qt_icon() const { if (mIcon == NULL) { mIcon = new QIcon(IMAGE_FEEDREADER); } return mIcon; } std::string FeedReaderPlugin::getShortPluginDescription() const { return QApplication::translate("FeedReaderPlugin", "This plugin provides a Feedreader.").toUtf8().constData(); } std::string FeedReaderPlugin::getPluginName() const { return QApplication::translate("FeedReaderPlugin", "FeedReader").toUtf8().constData(); } void FeedReaderPlugin::getLibraries(std::list &libraries) { libraries.push_back(RsLibraryInfo("LibCurl", LIBCURL_VERSION)); libraries.push_back(RsLibraryInfo("Libxml2", LIBXML_DOTTED_VERSION)); libraries.push_back(RsLibraryInfo("libxslt", LIBXSLT_DOTTED_VERSION)); } QTranslator* FeedReaderPlugin::qt_translator(QApplication */*app*/, const QString& languageCode, const QString& externalDir) const { if (languageCode == "en") { return NULL; } QTranslator* translator = new QTranslator(); if (translator->load(externalDir + "/FeedReader_" + languageCode + ".qm")) { return translator; } else if (translator->load(":/lang/FeedReader_" + languageCode + ".qm")) { return translator; } delete(translator); return NULL; }