summaryrefslogtreecommitdiff
path: root/board.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'board.cpp')
-rw-r--r--board.cpp61
1 files changed, 58 insertions, 3 deletions
diff --git a/board.cpp b/board.cpp
index 4275047..acb2b01 100644
--- a/board.cpp
+++ b/board.cpp
@@ -1,4 +1,3 @@
-#include <QtCore/QRegExp>
#include <QtCore/QDir>
#include <QtCore/QDebug>
#include <QtSql/QSqlQuery>
@@ -6,7 +5,7 @@
#include "global.h"
#include "action.h"
-#include "fetchboardconfigaction.h"
+#include "fetchconfigaction.h"
#include "fetchforumsaction.h"
#include "xmlrpcinterface.h"
#include "board.h"
@@ -38,10 +37,12 @@ Board::Board(const QString& forumUrl, QObject *parent) :
fetchConfigIfOutdated();
fetchForumsIfOutdated();
initializeBbCode(); // TODO This might depend on board config
+ initializeSmilies();
}
Board::~Board()
{
+ disconnect(this, SLOT(handleActionFinished(Action*)));
QSqlDatabase::removeDatabase(_slug);
}
@@ -144,6 +145,28 @@ QString Board::bbcodeToRichText(QString text) const
return text;
}
+QString Board::parseSmilies(QString text) const
+{
+ int pos = 0;
+ text.append(' '); // So that the regexp matches a smilie at the end.
+ while ((pos = _smilieRegexp.indexIn(text, pos)) != -1) {
+ const int len = _smilieRegexp.matchedLength();
+ QString smilie = _smilieRegexp.cap(1);
+ const int smilie_pos = _smilieRegexp.pos(1);
+ const int smilie_len = smilie.length();
+ QHash<QString,QString>::const_iterator i = _smilies.find(smilie);
+ if (i != _smilies.end()) {
+ QString replacement = "<img src=\"" + i.value() + "\" />";
+ text.replace(smilie_pos, smilie_len, replacement);
+ pos += replacement.size();
+ } else {
+ pos += len - 1;
+ }
+ }
+ text.remove(text.length() - 1, 1);
+ return text;
+}
+
QString Board::renderHumanDate(const QDateTime &dateTime)
{
QDate date = dateTime.toLocalTime().date();
@@ -346,6 +369,38 @@ void Board::initializeBbCode()
_bbcodes << qMakePair(QRegExp("\n"), QString("<br>"));
}
+void Board::initializeSmilies()
+{
+ _smilies[":)"] = "image://theme/icon-s-messaging-smiley-happy";
+ _smilies[":("] = "image://theme/icon-s-messaging-smiley-sad";
+ _smilies[":D"] = "image://theme/icon-s-messaging-smiley-very-happy";
+ _smilies["=D>"] = "image://theme/icon-s-messaging-smiley-very-happy";
+ _smilies[":lol:"] = "image://theme/icon-s-messaging-smiley-very-happy";
+ _smilies[";)"] = "image://theme/icon-s-messaging-smiley-wink";
+ _smilies[";D"] = "image://theme/icon-s-messaging-smiley-wink";
+ _smilies[":wink:"] = "image://theme/icon-s-messaging-smiley-wink";
+ _smilies[":P"] = "image://theme/icon-s-messaging-smiley-tongue";
+ _smilies[":p"] = "image://theme/icon-s-messaging-smiley-tongue";
+ _smilies[":mrgreen:"] = "image://theme/icon-s-messaging-smiley-grin";
+ _smilies["O_O"] = "image://theme/icon-s-messaging-smiley-surprised";
+ _smilies["O_o"] = "image://theme/icon-s-messaging-smiley-surprised";
+
+ // Let's construct a single regular expression that will cover all smilies
+ QString regexp("[^A-Za-z](");
+ for (QHash<QString, QString>::const_iterator i = _smilies.begin();
+ i != _smilies.end();
+ i++) {
+ if (i != _smilies.begin()) {
+ regexp += "|";
+ }
+ regexp += QRegExp::escape(i.key());
+ }
+ regexp += ")[^A-Za-z]";
+ qDebug() << "Smilie regexp: " << regexp;
+ _smilieRegexp = QRegExp(regexp);
+ Q_ASSERT(_smilieRegexp.isValid());
+}
+
void Board::fetchConfigIfOutdated()
{
if (_iface->isAccessible()) {
@@ -353,7 +408,7 @@ void Board::fetchConfigIfOutdated()
QDateTime last_fetch = QDateTime::fromString(
getConfig("last_config_fetch"), Qt::ISODate);
if (!last_fetch.isValid() || last_fetch.daysTo(QDateTime::currentDateTimeUtc()) >= BOARD_CONFIG_TTL) {
- enqueueAction(new FetchBoardConfigAction(this));
+ enqueueAction(new FetchConfigAction(this));
}
}