Refactorings.

This commit is contained in:
Martin Rotter 2014-03-09 10:17:18 +01:00
parent 5b4f06aa7e
commit d6571bf60c
8 changed files with 91 additions and 85 deletions

View File

@ -4,7 +4,8 @@
<url platform="x86" os="OS2">https://bitbucket.org/skunkos/rssguard/downloads/rssguard-1.9.9.6-os2.7z</url>
<url platform="x86" os="Windows">https://bitbucket.org/skunkos/rssguard/downloads/rssguard-1.9.9.6-win32.7z</url>
<changes>
<![CDATA[Fixed:
<![CDATA[<body>
Fixed:
<ul>
<li>Restarting of application on all platforms fixed.</li>
<li>Feed type saved correctly to database when feed is added.</li>
@ -21,7 +22,8 @@ Changed:
<ul>
<li>Localization handling improved.</li>
<li>Default feed list improved.</li>
</ul>]]>
</ul>
</body>]]>
</changes>
</release>
</releases>

View File

@ -17,6 +17,7 @@
#include "core/parsingfactory.h"
#include "core/webfactory.h"
#include "core/textfactory.h"
#include <QDomDocument>
@ -56,13 +57,13 @@ QList<Message> 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<Message> 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<Message> 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<Message> 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;
}

View File

@ -22,8 +22,6 @@
#include <QString>
#include <QStringList>
#include <QLocale>
#include <QRegExp>
#include <QMap>
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<QString, QString> escape_sequences = generetaEscapes();
QList<QString> 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<QString, QString> deescape_sequences = generateDeescapes();
QList<QString> keys = deescape_sequences.uniqueKeys();
QString output = text;
foreach (const QString &key, keys) {
output.replace(key, deescape_sequences.value(key));
}
return output;
}
QMap<QString, QString> TextFactory::generetaEscapes() {
QMap<QString, QString> sequences;
sequences["&lt;"] = '<';
sequences["&gt;"] = '>';
sequences["&amp;"] = '&';
sequences["&quot;"] = '\"';
sequences["&nbsp;"] = ' ';
sequences["&plusmn;"] = "±";
sequences["&times;"] = "×";
sequences["&#039;"] = '\'';
return sequences;
}
QMap<QString, QString> TextFactory::generateDeescapes() {
QMap<QString, QString> sequences;
sequences["<"] = "&lt;";
sequences[">"] = "&gt;";
sequences["&"] = "&amp;";
sequences["\""] = "&quot;";
sequences["±"] = "&plusmn;";
sequences["×"] = "&times;";
sequences["\'"] = "&#039;";
return sequences;
}

View File

@ -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<QString, QString> generetaEscapes();
static QMap<QString, QString> generateDeescapes();
// Shortens input string according to given length limit.
static QString shorten(const QString &input, int text_length_limit = TEXT_TITLE_LIMIT);
};

View File

@ -1,6 +1,7 @@
#include "core/webfactory.h"
#include <QApplication>
#include <QRegExp>
QPointer<WebFactory> 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<QString, QString> escape_sequences = generetaEscapes();
QList<QString> 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<QString, QString> deescape_sequences = generateDeescapes();
QList<QString> keys = deescape_sequences.uniqueKeys();
QString output = text;
foreach (const QString &key, keys) {
output.replace(key, deescape_sequences.value(key));
}
return output;
}
QMap<QString, QString> WebFactory::generetaEscapes() {
QMap<QString, QString> sequences;
sequences["&lt;"] = '<';
sequences["&gt;"] = '>';
sequences["&amp;"] = '&';
sequences["&quot;"] = '\"';
sequences["&nbsp;"] = ' ';
sequences["&plusmn;"] = "±";
sequences["&times;"] = "×";
sequences["&#039;"] = '\'';
return sequences;
}
QMap<QString, QString> WebFactory::generateDeescapes() {
QMap<QString, QString> sequences;
sequences["<"] = "&lt;";
sequences[">"] = "&gt;";
sequences["&"] = "&amp;";
sequences["\""] = "&quot;";
sequences["±"] = "&plusmn;";
sequences["×"] = "&times;";
sequences["\'"] = "&#039;";
return sequences;
}

View File

@ -3,6 +3,7 @@
#include <QObject>
#include <QPointer>
#include <QMap>
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<QString, QString> generetaEscapes();
QMap<QString, QString> generateDeescapes();
// Singleton.
static QPointer<WebFactory> s_instance;
};

View File

@ -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("<p>RSS Guard is a (very) easy-to-use feed reader. "
tr("<p>%3 is a (very) easy-to-use feed reader. "
"It supports all major feed formats, including RSS, "
"ATOM and RDF.</p>"
"<p>Make sure you explore all available features. "
@ -62,11 +63,12 @@ FormWelcome::FormWelcome(QWidget *parent) : QDialog(parent), m_ui(new Ui::FormWe
"<a href=\"%1\"><span "
"style=\"text-decoration: underline; color:#0000ff;\">issue "
"report</span></a>.</p>"
"<p>RSS Guard can be translated to any language. "
"<p>%3 can be translated to any language. "
"Contact its <a href=\"mailto:%2\"><span "
"style=\"text-decoration: underline; color:#0000ff;\">author</span></a> "
"in case of your interest.</p><p><br/></p>").arg(APP_URL_ISSUES,
APP_EMAIL));
APP_EMAIL,
APP_NAME));
}
void FormWelcome::openLink(const QString &link) {

View File

@ -70,7 +70,7 @@
</font>
</property>
<property name="text">
<string>Welcome to RSS Guard</string>
<string notr="true"/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>