Browse Source

完善插件机制

tags/v1.0
chenyong 8 years ago
parent
commit
55d47f28c6
6 changed files with 66 additions and 11 deletions
  1. +2
    -1
      feiq.pro
  2. +16
    -2
      feiqwin.cpp
  3. +22
    -0
      plugin/iplugin.cpp
  4. +19
    -5
      plugin/iplugin.h
  5. +3
    -2
      plugin/unreadchecker.cpp
  6. +4
    -1
      readme.md

+ 2
- 1
feiq.pro View File

@@ -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 \


+ 16
- 2
feiqwin.cpp View File

@@ -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:"<<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;
}
}

+ 22
- 0
plugin/iplugin.cpp View File

@@ -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;
}

+ 19
- 5
plugin/iplugin.h View File

@@ -2,15 +2,14 @@
#define IPLUGIN_H

#include "../feiqwin.h"
#include <unordered_map>
#include <iostream>

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<const char*, IPlugin *> allPlugins;
};

#define REGISTER_PLUGIN(name, PluginCls)\
__attribute__((constructor)) void register##PluginCls()\
{\
PluginManager::instance().allPlugins[name]=new PluginCls();\
}
#endif // IPLUGIN_H

+ 3
- 2
plugin/unreadchecker.cpp View File

@@ -2,9 +2,10 @@
#include <QTimerEvent>
#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);
}


+ 4
- 1
readme.md View File

@@ -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分钟
```

## 计划中的特性


Loading…
Cancel
Save