@@ -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分钟 | |||||
``` | ``` | ||||
## 计划中的特性 | ## 计划中的特性 | ||||