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