diff options
Diffstat (limited to 'board.cpp')
-rw-r--r-- | board.cpp | 61 |
1 files changed, 58 insertions, 3 deletions
@@ -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)); } } |