From d6571bf60cb4a91178d977c5efb593f38a358c5d Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Sun, 9 Mar 2014 10:17:18 +0100 Subject: [PATCH] Refactorings. --- resources/text/UPDATES | 6 ++-- src/core/parsingfactory.cpp | 15 ++++----- src/core/textfactory.cpp | 61 ------------------------------------- src/core/textfactory.h | 11 ------- src/core/webfactory.cpp | 60 ++++++++++++++++++++++++++++++++++++ src/core/webfactory.h | 13 ++++++++ src/gui/formwelcome.cpp | 8 +++-- src/gui/formwelcome.ui | 2 +- 8 files changed, 91 insertions(+), 85 deletions(-) diff --git a/resources/text/UPDATES b/resources/text/UPDATES index 6f91c6a91..a819d0235 100644 --- a/resources/text/UPDATES +++ b/resources/text/UPDATES @@ -4,7 +4,8 @@ https://bitbucket.org/skunkos/rssguard/downloads/rssguard-1.9.9.6-os2.7z https://bitbucket.org/skunkos/rssguard/downloads/rssguard-1.9.9.6-win32.7z - +Fixed: +]]> \ No newline at end of file diff --git a/src/core/parsingfactory.cpp b/src/core/parsingfactory.cpp index 3061c134b..4c5a00172 100755 --- a/src/core/parsingfactory.cpp +++ b/src/core/parsingfactory.cpp @@ -17,6 +17,7 @@ #include "core/parsingfactory.h" +#include "core/webfactory.h" #include "core/textfactory.h" #include @@ -56,13 +57,13 @@ QList ParsingFactory::parseAsATOM10(const QString &data) { } else { // Title is empty but description is not. - new_message.m_title = TextFactory::stripTags(elem_summary.simplified()); + new_message.m_title = WebFactory::instance()->stripTags(elem_summary.simplified()); new_message.m_contents = elem_summary; } } else { // Title is not empty, description does not matter. - new_message.m_title = TextFactory::stripTags(elem_title); + new_message.m_title = WebFactory::instance()->stripTags(elem_title); new_message.m_contents = elem_summary; } @@ -78,7 +79,7 @@ QList ParsingFactory::parseAsATOM10(const QString &data) { } // Deal with authors. - new_message.m_author = TextFactory::escapeHtml(message_item.namedItem("author").namedItem("name").toElement().text()); + new_message.m_author = WebFactory::instance()->escapeHtml(message_item.namedItem("author").namedItem("name").toElement().text()); // Deal with creation date. new_message.m_created = TextFactory::parseDateTime(message_item.namedItem("updated").toElement().text()); @@ -134,13 +135,13 @@ QList ParsingFactory::parseAsRDF(const QString &data) { } else { // Title is empty but description is not. - new_message.m_title = TextFactory::escapeHtml(TextFactory::stripTags(elem_description.simplified())); + new_message.m_title = WebFactory::instance()->escapeHtml(WebFactory::instance()->stripTags(elem_description.simplified())); new_message.m_contents = elem_description; } } else { // Title is really not empty, description does not matter. - new_message.m_title = TextFactory::escapeHtml(TextFactory::stripTags(elem_title)); + new_message.m_title = WebFactory::instance()->escapeHtml(WebFactory::instance()->stripTags(elem_title)); new_message.m_contents = elem_description; } @@ -210,13 +211,13 @@ QList ParsingFactory::parseAsRSS20(const QString &data) { } else { // Title is empty but description is not. - new_message.m_title = TextFactory::stripTags(elem_description.simplified()); + new_message.m_title = WebFactory::instance()->stripTags(elem_description.simplified()); new_message.m_contents = elem_description; } } else { // Title is really not empty, description does not matter. - new_message.m_title = TextFactory::stripTags(elem_title); + new_message.m_title = WebFactory::instance()->stripTags(elem_title); new_message.m_contents = elem_description; } diff --git a/src/core/textfactory.cpp b/src/core/textfactory.cpp index 4479673b3..05246ab26 100755 --- a/src/core/textfactory.cpp +++ b/src/core/textfactory.cpp @@ -22,8 +22,6 @@ #include #include #include -#include -#include TextFactory::TextFactory() { @@ -100,62 +98,3 @@ QString TextFactory::shorten(const QString &input, int text_length_limit) { return input; } } - -QString TextFactory::stripTags(QString text) { - return text.remove(QRegExp("<[^>]*>")); -} - -QString TextFactory::escapeHtml(const QString &html) { - static QMap escape_sequences = generetaEscapes(); - - QList keys = escape_sequences.uniqueKeys(); - QString output = html; - - foreach (const QString &key, keys) { - output.replace(key, escape_sequences.value(key)); - } - - return output; -} - -QString TextFactory::deEscapeHtrml(const QString &text) { - static QMap deescape_sequences = generateDeescapes(); - - QList keys = deescape_sequences.uniqueKeys(); - QString output = text; - - foreach (const QString &key, keys) { - output.replace(key, deescape_sequences.value(key)); - } - - return output; -} - -QMap TextFactory::generetaEscapes() { - QMap sequences; - - sequences["<"] = '<'; - sequences[">"] = '>'; - sequences["&"] = '&'; - sequences["""] = '\"'; - sequences[" "] = ' '; - sequences["±"] = "±"; - sequences["×"] = "×"; - sequences["'"] = '\''; - - return sequences; -} - -QMap TextFactory::generateDeescapes() { - QMap sequences; - - sequences["<"] = "<"; - sequences[">"] = ">"; - sequences["&"] = "&"; - sequences["\""] = """; - sequences["±"] = "±"; - sequences["×"] = "×"; - sequences["\'"] = "'"; - - return sequences; -} diff --git a/src/core/textfactory.h b/src/core/textfactory.h index a1bbe8dfa..321bdf40a 100644 --- a/src/core/textfactory.h +++ b/src/core/textfactory.h @@ -43,17 +43,6 @@ class TextFactory { // NOTE: This apparently returns date/time in localtime. static QDateTime parseDateTime(qint64 milis_from_epoch); - // Strips "<....>" (HTML, XML) tags from given text. - static QString stripTags(QString text); - - // HTML entity escaping. - // TODO: Optimize these methods. - static QString escapeHtml(const QString &html); - static QString deEscapeHtrml(const QString &text); - - static QMap generetaEscapes(); - static QMap generateDeescapes(); - // Shortens input string according to given length limit. static QString shorten(const QString &input, int text_length_limit = TEXT_TITLE_LIMIT); }; diff --git a/src/core/webfactory.cpp b/src/core/webfactory.cpp index 6e515ad9d..cdfb12e06 100644 --- a/src/core/webfactory.cpp +++ b/src/core/webfactory.cpp @@ -1,6 +1,7 @@ #include "core/webfactory.h" #include +#include QPointer WebFactory::s_instance; @@ -19,3 +20,62 @@ WebFactory *WebFactory::instance() { return s_instance; } + +QString WebFactory::stripTags(QString text) { + return text.remove(QRegExp("<[^>]*>")); +} + +QString WebFactory::escapeHtml(const QString &html) { + static QMap escape_sequences = generetaEscapes(); + + QList keys = escape_sequences.uniqueKeys(); + QString output = html; + + foreach (const QString &key, keys) { + output.replace(key, escape_sequences.value(key)); + } + + return output; +} + +QString WebFactory::deEscapeHtml(const QString &text) { + static QMap deescape_sequences = generateDeescapes(); + + QList keys = deescape_sequences.uniqueKeys(); + QString output = text; + + foreach (const QString &key, keys) { + output.replace(key, deescape_sequences.value(key)); + } + + return output; +} + +QMap WebFactory::generetaEscapes() { + QMap sequences; + + sequences["<"] = '<'; + sequences[">"] = '>'; + sequences["&"] = '&'; + sequences["""] = '\"'; + sequences[" "] = ' '; + sequences["±"] = "±"; + sequences["×"] = "×"; + sequences["'"] = '\''; + + return sequences; +} + +QMap WebFactory::generateDeescapes() { + QMap sequences; + + sequences["<"] = "<"; + sequences[">"] = ">"; + sequences["&"] = "&"; + sequences["\""] = """; + sequences["±"] = "±"; + sequences["×"] = "×"; + sequences["\'"] = "'"; + + return sequences; +} diff --git a/src/core/webfactory.h b/src/core/webfactory.h index 41d5b1b7f..c49206f75 100644 --- a/src/core/webfactory.h +++ b/src/core/webfactory.h @@ -3,6 +3,7 @@ #include #include +#include class WebFactory : public QObject { @@ -12,6 +13,14 @@ class WebFactory : public QObject { // Destructor. virtual ~WebFactory(); + // Strips "<....>" (HTML, XML) tags from given text. + QString stripTags(QString text); + + // HTML entity escaping. + // TODO: Optimize these methods. + QString escapeHtml(const QString &html); + QString deEscapeHtml(const QString &text); + // Singleton getter. static WebFactory *instance(); @@ -24,6 +33,10 @@ class WebFactory : public QObject { // Constructor. explicit WebFactory(QObject *parent = 0); + // Escape sequences generators. + QMap generetaEscapes(); + QMap generateDeescapes(); + // Singleton. static QPointer s_instance; }; diff --git a/src/gui/formwelcome.cpp b/src/gui/formwelcome.cpp index 7eb27069f..285c602a7 100644 --- a/src/gui/formwelcome.cpp +++ b/src/gui/formwelcome.cpp @@ -52,8 +52,9 @@ FormWelcome::FormWelcome(QWidget *parent) : QDialog(parent), m_ui(new Ui::FormWe this, SLOT(openLink(QString))); // Setup the text. + m_ui->m_lblCaption->setText(tr("Welcome to %1").arg(APP_NAME)); m_ui->m_lblInfo->setText( - tr("

RSS Guard is a (very) easy-to-use feed reader. " + tr("

%3 is a (very) easy-to-use feed reader. " "It supports all major feed formats, including RSS, " "ATOM and RDF.

" "

Make sure you explore all available features. " @@ -62,11 +63,12 @@ FormWelcome::FormWelcome(QWidget *parent) : QDialog(parent), m_ui(new Ui::FormWe "issue " "report.

" - "

RSS Guard can be translated to any language. " + "

%3 can be translated to any language. " "Contact its author " "in case of your interest.


").arg(APP_URL_ISSUES, - APP_EMAIL)); + APP_EMAIL, + APP_NAME)); } void FormWelcome::openLink(const QString &link) { diff --git a/src/gui/formwelcome.ui b/src/gui/formwelcome.ui index 2d2418638..188885fa4 100644 --- a/src/gui/formwelcome.ui +++ b/src/gui/formwelcome.ui @@ -70,7 +70,7 @@ - Welcome to RSS Guard + Qt::AlignCenter