| @@ -56,7 +56,8 @@ SOURCES += main.cpp\ | |||||
| chooseemojiwidget.cpp \ | chooseemojiwidget.cpp \ | ||||
| sendtextedit.cpp \ | sendtextedit.cpp \ | ||||
| feiqwin.cpp \ | feiqwin.cpp \ | ||||
| plugin/unreadchecker.cpp | |||||
| plugin/unreadchecker.cpp \ | |||||
| plugin/iplugin.cpp | |||||
| HEADERS += mainwindow.h \ | HEADERS += mainwindow.h \ | ||||
| @@ -54,12 +54,26 @@ void FeiqWin::unInit() | |||||
| for (auto plugin : mPlugins) | for (auto plugin : mPlugins) | ||||
| { | { | ||||
| plugin->unInit(); | plugin->unInit(); | ||||
| delete plugin; | |||||
| } | } | ||||
| mPlugins.clear(); | mPlugins.clear(); | ||||
| } | } | ||||
| void FeiqWin::loadPlugins() | void FeiqWin::loadPlugins() | ||||
| { | { | ||||
| mPlugins.append(new UnreadChecker()); | |||||
| auto gAllPlugins = PluginManager::instance().allPlugins; | |||||
| cout<<"listing all supported plugins:"<<endl; | |||||
| for (auto iter : gAllPlugins) | |||||
| { | |||||
| cout<<iter.first; | |||||
| if (mMainWin->mSettings->value("plugin/"+QString(iter.first), "1").toBool()) | |||||
| { | |||||
| cout<<" enable"; | |||||
| mPlugins.append(iter.second); | |||||
| } | |||||
| else | |||||
| { | |||||
| cout<<" disable"; | |||||
| } | |||||
| cout<<endl; | |||||
| } | |||||
| } | } | ||||
| @@ -0,0 +1,22 @@ | |||||
| #include "iplugin.h" | |||||
| IPlugin::~IPlugin() | |||||
| { | |||||
| } | |||||
| void IPlugin::init(FeiqWin *feiqWin) | |||||
| { | |||||
| mFeiq = feiqWin; | |||||
| } | |||||
| PluginManager::PluginManager() | |||||
| { | |||||
| } | |||||
| PluginManager &PluginManager::instance() | |||||
| { | |||||
| static PluginManager me; | |||||
| return me; | |||||
| } | |||||
| @@ -2,15 +2,14 @@ | |||||
| #define IPLUGIN_H | #define IPLUGIN_H | ||||
| #include "../feiqwin.h" | #include "../feiqwin.h" | ||||
| #include <unordered_map> | |||||
| #include <iostream> | |||||
| class IPlugin | class IPlugin | ||||
| { | { | ||||
| public: | public: | ||||
| virtual ~IPlugin(){} | |||||
| virtual void init(FeiqWin* feiqWin) | |||||
| { | |||||
| mFeiq = feiqWin; | |||||
| } | |||||
| virtual ~IPlugin(); | |||||
| virtual void init(FeiqWin* feiqWin); | |||||
| virtual void unInit() = 0; | virtual void unInit() = 0; | ||||
| @@ -18,4 +17,19 @@ protected: | |||||
| FeiqWin* mFeiq; | FeiqWin* mFeiq; | ||||
| }; | }; | ||||
| class PluginManager | |||||
| { | |||||
| private: | |||||
| PluginManager(); | |||||
| public: | |||||
| static PluginManager& instance(); | |||||
| public: | |||||
| std::unordered_map<const char*, IPlugin *> allPlugins; | |||||
| }; | |||||
| #define REGISTER_PLUGIN(name, PluginCls)\ | |||||
| __attribute__((constructor)) void register##PluginCls()\ | |||||
| {\ | |||||
| PluginManager::instance().allPlugins[name]=new PluginCls();\ | |||||
| } | |||||
| #endif // IPLUGIN_H | #endif // IPLUGIN_H | ||||
| @@ -2,9 +2,10 @@ | |||||
| #include <QTimerEvent> | #include <QTimerEvent> | ||||
| #include "platformdepend.h" | #include "platformdepend.h" | ||||
| REGISTER_PLUGIN("unread_checker", UnreadChecker) | |||||
| UnreadChecker::UnreadChecker() | UnreadChecker::UnreadChecker() | ||||
| { | { | ||||
| } | } | ||||
| void UnreadChecker::timerEvent(QTimerEvent *event) | void UnreadChecker::timerEvent(QTimerEvent *event) | ||||
| @@ -22,7 +23,7 @@ void UnreadChecker::init(FeiqWin *feiqWin) | |||||
| IPlugin::init(feiqWin); | IPlugin::init(feiqWin); | ||||
| auto settings = mFeiq->settings(); | auto settings = mFeiq->settings(); | ||||
| mUnreadTimerInterval = settings->value("app/unread_timer", "0").toInt(); | |||||
| mUnreadTimerInterval = settings->value("plugin/unread_timer", "0").toInt(); | |||||
| if (mUnreadTimerInterval > 0) | if (mUnreadTimerInterval > 0) | ||||
| mUnreadTimerId = startTimer(mUnreadTimerInterval*1000, Qt::VeryCoarseTimer); | mUnreadTimerId = startTimer(mUnreadTimerInterval*1000, Qt::VeryCoarseTimer); | ||||
| } | } | ||||
| @@ -24,10 +24,13 @@ host = Niubility Macbook ;设置主机名 | |||||
| [app] | [app] | ||||
| title = Feiq by CompileLife ;设置一个高端大气上档次的窗口标题名称,亮瞎围观你飞秋的人 | title = Feiq by CompileLife ;设置一个高端大气上档次的窗口标题名称,亮瞎围观你飞秋的人 | ||||
| unread_timer=600 ;启用定时提醒未读消息,间隔10分钟 | |||||
| [network] | [network] | ||||
| custom_group=192.168.74.|192.168.82. ;设置一些广播包无法触及的子网,点号结束一个网段的定义,竖线分隔各个网段 | custom_group=192.168.74.|192.168.82. ;设置一些广播包无法触及的子网,点号结束一个网段的定义,竖线分隔各个网段 | ||||
| [plugin] | |||||
| unread_checker=1 ;启用定时提醒未读通知,默认启用 | |||||
| unread_timer=600 ;启用定时提醒未读消息,间隔10分钟 | |||||
| ``` | ``` | ||||
| ## 计划中的特性 | ## 计划中的特性 | ||||