Read parser from config and inject it to handlers
This commit is contained in:
rodzic
cec56d5a73
commit
3745a778e5
@ -71,6 +71,7 @@ Config::Config(const std::map<std::string, std::string> &map)
|
||||
|
||||
this->configmap = map;
|
||||
this->wikipath = optional("wikipath", "/");
|
||||
this->parser = optional("parser", "markdown");
|
||||
this->handlersConfig.anon_username = optional("anon_username", "anonymouse");
|
||||
this->handlersConfig.wikiname = required("wikiname");
|
||||
this->logfile = required("logfile");
|
||||
|
1
config.h
1
config.h
@ -86,6 +86,7 @@ class Config
|
||||
std::string templateprefix;
|
||||
std::string logfile;
|
||||
std::string connectionstring;
|
||||
std::string parser;
|
||||
int session_max_lifetime;
|
||||
int threadscount;
|
||||
|
||||
|
@ -9,10 +9,13 @@
|
||||
#include "../database/queryoption.h"
|
||||
#include "../logger.h"
|
||||
#include "../cache/icache.h"
|
||||
#include "../iparser.h"
|
||||
|
||||
class Handler
|
||||
{
|
||||
protected:
|
||||
ICache *cache;
|
||||
IParser *parser;
|
||||
Template *templ;
|
||||
Database *database;
|
||||
Session *userSession;
|
||||
@ -25,7 +28,7 @@ class Handler
|
||||
|
||||
public:
|
||||
Handler(HandlerConfig &handlersConfig, Template &templ, Database &db, Session &userSession, UrlProvider &provider,
|
||||
ICache &cache)
|
||||
ICache &cache, IParser &parser)
|
||||
{
|
||||
this->handlersConfig = &handlersConfig;
|
||||
this->templ = &templ;
|
||||
@ -33,6 +36,7 @@ class Handler
|
||||
this->userSession = &userSession;
|
||||
this->urlProvider = &provider;
|
||||
this->cache = &cache;
|
||||
this->parser = &parser;
|
||||
}
|
||||
|
||||
virtual Response handle(const Request &r);
|
||||
|
@ -10,15 +10,16 @@ class HandlerFactory
|
||||
Database &db;
|
||||
UrlProvider &urlProvider;
|
||||
ICache &cache;
|
||||
IParser &parser;
|
||||
|
||||
template <class T> inline std::unique_ptr<T> produce(Session &userSession)
|
||||
{
|
||||
return std::make_unique<T>(handlerConfig, templ, db, userSession, urlProvider, cache);
|
||||
return std::make_unique<T>(handlerConfig, templ, db, userSession, urlProvider, cache, parser);
|
||||
}
|
||||
|
||||
public:
|
||||
HandlerFactory(HandlerConfig &handlerConfig, Template &templ, Database &db, UrlProvider &urlprovider, ICache &cache)
|
||||
: handlerConfig(handlerConfig), templ(templ), db(db), urlProvider(urlprovider), cache(cache)
|
||||
HandlerFactory(HandlerConfig &handlerConfig, Template &templ, Database &db, UrlProvider &urlprovider, ICache &cache, IParser &parser)
|
||||
: handlerConfig(handlerConfig), templ(templ), db(db), urlProvider(urlprovider), cache(cache), parser(parser)
|
||||
{
|
||||
}
|
||||
std::unique_ptr<Handler> createHandler(const std::string &action, Session &userSession);
|
||||
|
@ -130,7 +130,7 @@ Response HandlerPageView::handleRequest(PageDao &pageDao, std::string pagename,
|
||||
|
||||
TemplatePage &page = this->templ->getPage(templatepartname);
|
||||
|
||||
ParserLegacy parser;
|
||||
|
||||
Response result;
|
||||
result.setStatus(200);
|
||||
std::string indexcontent;
|
||||
@ -138,8 +138,8 @@ Response HandlerPageView::handleRequest(PageDao &pageDao, std::string pagename,
|
||||
|
||||
if(revisionid > 0)
|
||||
{
|
||||
indexcontent = createIndexContent(parser, revision->content);
|
||||
parsedcontent = parser.parse(pageDao, *this->urlProvider, revision->content);
|
||||
indexcontent = createIndexContent(*parser, revision->content);
|
||||
parsedcontent = parser->parse(pageDao, *this->urlProvider, revision->content);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -153,7 +153,7 @@ Response HandlerPageView::handleRequest(PageDao &pageDao, std::string pagename,
|
||||
}
|
||||
else
|
||||
{
|
||||
indexcontent = createIndexContent(parser, revision->content);
|
||||
indexcontent = createIndexContent(*parser, revision->content);
|
||||
this->cache->put(cachekeyindexcontent, indexcontent);
|
||||
}
|
||||
if(cachedparsedcontent)
|
||||
@ -162,7 +162,7 @@ Response HandlerPageView::handleRequest(PageDao &pageDao, std::string pagename,
|
||||
}
|
||||
else
|
||||
{
|
||||
parsedcontent = parser.parse(pageDao, *this->urlProvider, revision->content);
|
||||
parsedcontent = parser->parse(pageDao, *this->urlProvider, revision->content);
|
||||
this->cache->put(cachekeyparsedcontent, parsedcontent);
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,8 @@
|
||||
#include "headline.h"
|
||||
#include "database/pagedao.h"
|
||||
#include "urlprovider.h"
|
||||
|
||||
|
||||
class IParser
|
||||
{
|
||||
public:
|
||||
@ -16,4 +18,6 @@ class IParser
|
||||
virtual ~IParser(){};
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif // PARSER_H
|
||||
|
20
qswiki.cpp
20
qswiki.cpp
@ -37,6 +37,10 @@ SOFTWARE.
|
||||
#include "requestworker.h"
|
||||
#include "cache/fscache.h"
|
||||
#include "sandbox/sandboxfactory.h"
|
||||
#include "iparser.h"
|
||||
#include "parserlegacy.h"
|
||||
#include "parsermarkdown.h"
|
||||
|
||||
void sigterm_handler(int arg)
|
||||
{
|
||||
// TODO: proper shutdown.
|
||||
@ -63,6 +67,17 @@ std::unique_ptr<ICache> createCache(const ConfigVariableResolver &resolver)
|
||||
|
||||
return std::make_unique<FsCache>(path);
|
||||
}
|
||||
|
||||
std::unique_ptr<IParser> createParser(const ConfigVariableResolver &resolver)
|
||||
{
|
||||
std::string parser = resolver.getConfig("parser");
|
||||
if(parser == "legacy")
|
||||
{
|
||||
return std::make_unique<ParserLegacy>();
|
||||
}
|
||||
return std::make_unique<ParserMarkdown>();
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
if(geteuid() == 0)
|
||||
@ -135,7 +150,10 @@ int main(int argc, char **argv)
|
||||
auto cache = createCache(config.configVarResolver);
|
||||
cache->clear();
|
||||
|
||||
HandlerFactory handlerFactory{config.handlersConfig, siteTemplate, *database.get(), urlProvider, *cache.get()};
|
||||
auto parser = createParser(config.configVarResolver);
|
||||
|
||||
|
||||
HandlerFactory handlerFactory{config.handlersConfig, siteTemplate, *database.get(), urlProvider, *cache.get(), *parser.get()};
|
||||
RequestWorker requestWorker{handlerFactory, database->createSessionDao(), siteTemplate};
|
||||
|
||||
auto interface = createGateway(config);
|
||||
|
Ładowanie…
Reference in New Issue
Block a user