diff --git a/CMakeLists.txt b/CMakeLists.txt index 8fbef39d9..e477d12ac 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -422,7 +422,7 @@ if(${USE_QT_5}) Sql Network Xml - XmlPatterns + #XmlPatterns WebKit WebKitWidgets ) @@ -443,7 +443,7 @@ else(${USE_QT_5}) ${QT_QTNETWORK_LIBRARY} ${QT_QTSQL_LIBRARY} ${QT_QTXML_LIBRARY} - ${QT_QTXMLPATTERNS_LIBRARY} + #${QT_QTXMLPATTERNS_LIBRARY} ${QT_QTMAIN_LIBRARY} ${QT_QTWEBKIT_LIBRARY} ) diff --git a/src/core/messagesmodel.h b/src/core/messagesmodel.h index 469db1e3b..5b355818b 100644 --- a/src/core/messagesmodel.h +++ b/src/core/messagesmodel.h @@ -17,6 +17,10 @@ class Message { QString m_author; QString m_contents; QDateTime m_created; + + // Is true if "created" date was obtained directly + // from the feed, otherwise is false + bool m_createdFromFeed; }; class MessagesModel : public QSqlTableModel { diff --git a/src/core/parsingfactory.cpp b/src/core/parsingfactory.cpp index 1e8bc0242..ea0aa34a9 100644 --- a/src/core/parsingfactory.cpp +++ b/src/core/parsingfactory.cpp @@ -9,9 +9,15 @@ ParsingFactory::ParsingFactory() { } +QList ParsingFactory::parseAsATOM10(const QString &data) { + // TODO: Implement this. + return QList(); +} + QList ParsingFactory::parseAsRSS20(const QString &data) { QList messages; QDomDocument xml_file; + QDateTime current_time = QDateTime::currentDateTime(); xml_file.setContent(data, true); QDomNodeList messages_in_xml = xml_file.elementsByTagName("item"); @@ -49,6 +55,13 @@ QList ParsingFactory::parseAsRSS20(const QString &data) { } new_message.m_created = TextFactory::parseDateTime(elem_updated.text()); + new_message.m_createdFromFeed = !new_message.m_created.isNull(); + + if (!new_message.m_createdFromFeed) { + // Date was NOT obtained from the feed, + // set current date as creation date for the message. + new_message.m_created = current_time; + } messages.append(new_message); } diff --git a/src/core/parsingfactory.h b/src/core/parsingfactory.h index 2973903f0..b1fc0ffce 100644 --- a/src/core/parsingfactory.h +++ b/src/core/parsingfactory.h @@ -10,8 +10,10 @@ // parse input Unicode textual data into // another objects. // -// NOTE: Each parsed message MUST CONTAINT THESE FIELDS. - +// NOTE: Each parsed message MUST CONTAINT THESE FIELDS (fields +// of Message class: +// a) m_created, +// b) m_title. class ParsingFactory { private: // Constructors and destructors. @@ -20,6 +22,7 @@ class ParsingFactory { public: // Parses input textual data into Message objects. // NOTE: Input is correctly encoded in Unicode. + static QList parseAsATOM10(const QString &data); static QList parseAsRSS20(const QString &data); }; diff --git a/src/gui/skinfactory.cpp b/src/gui/skinfactory.cpp index c71f5d5ef..9e36f9752 100644 --- a/src/gui/skinfactory.cpp +++ b/src/gui/skinfactory.cpp @@ -6,8 +6,9 @@ #include #include #include -#include #include +#include +#include QPointer SkinFactory::s_instance; @@ -43,7 +44,7 @@ void SkinFactory::loadCurrentSkin() { else { // TODO: Change this to qFatal once code is stable. qWarning("Skin '%s' not loaded because its data are corrupted. No skin is loaded now!", - qPrintable(skin_name_from_settings)); + qPrintable(skin_name_from_settings)); } } @@ -105,11 +106,11 @@ QString SkinFactory::getCurrentMarkup() { Skin SkinFactory::getSkinInfo(const QString &skin_name, bool *ok) { Skin skin; - QXmlQuery query; QString styles; QFile skin_file(APP_SKIN_PATH + QDir::separator() + skin_name); + QDomDocument dokument; - if (!skin_file.open(QIODevice::Text | QIODevice::ReadOnly) || !query.setFocus(&skin_file)) { + if (!skin_file.open(QIODevice::Text | QIODevice::ReadOnly) || !dokument.setContent(&skin_file, true)) { if (ok) { *ok = false; } @@ -117,39 +118,30 @@ Skin SkinFactory::getSkinInfo(const QString &skin_name, bool *ok) { return skin; } + QDomNode skin_node = dokument.namedItem("skin"); + // Obtain visible skin name. - query.setQuery("string(skin/name)"); - query.evaluateTo(&skin.m_visibleName); - skin.m_visibleName = skin.m_visibleName.remove('\n'); + skin.m_visibleName = skin_node.namedItem("name").toElement().text(); // Obtain skin raw data. - query.setQuery("string(skin/data)"); - query.evaluateTo(&skin.m_rawData); + skin.m_rawData = skin_node.namedItem("data").toElement().text(); skin.m_rawData = QByteArray::fromBase64(skin.m_rawData.toLocal8Bit()); // Obtain style name. - query.setQuery("string(/skin/style)"); - query.evaluateTo(&styles); - skin.m_stylesNames = styles.remove('\n').split(',', QString::SkipEmptyParts); + styles = skin_node.namedItem("style").toElement().text(); + skin.m_stylesNames = styles.split(',', QString::SkipEmptyParts); // Obtain author. - query.setQuery("string(/skin/author/name)"); - query.evaluateTo(&skin.m_author); - skin.m_author = skin.m_author.remove('\n'); + skin.m_author = skin_node.namedItem("author").namedItem("name").toElement().text(); // Obtain email. - query.setQuery("string(/skin/author/email)"); - query.evaluateTo(&skin.m_email); - skin.m_email = skin.m_email.remove('\n'); + skin.m_email = skin_node.namedItem("author").namedItem("email").toElement().text(); // Obtain version. - query.setQuery("string(/skin/@version)"); - query.evaluateTo(&skin.m_version); - skin.m_version = skin.m_version.remove('\n'); + skin.m_version = skin_node.attributes().namedItem("version").toAttr().value(); // Obtain layout markup. - query.setQuery("string(/skin/markup)"); - query.evaluateTo(&skin.m_layoutMarkup); + skin.m_layoutMarkup = skin_node.namedItem("markup").toElement().text(); skin.m_layoutMarkup = QByteArray::fromBase64(skin.m_layoutMarkup.toLocal8Bit()); // Obtain other information. @@ -180,7 +172,7 @@ QList SkinFactory::getInstalledSkins() { foreach (const QString &base_directory, skin_directories) { // Check skins installed in this base directory. QStringList skin_files = QDir(APP_SKIN_PATH + QDir::separator() + base_directory).entryList(QStringList() << "*.xml", - QDir::Files | QDir::Readable | QDir::NoDotAndDotDot | QDir::NoSymLinks); + QDir::Files | QDir::Readable | QDir::NoDotAndDotDot | QDir::NoSymLinks); foreach (const QString &skin_file, skin_files) { // Check if skin file is valid and add it if it is valid.