Page *FileEngine::loadPage(const QString &filename) { Q_D(FileEngine); // skip temporary files if (filename.endsWith(QLatin1Char('~'))) { return 0; } const QString &relPathPercent = d->pagesPath.relativeFilePath(filename); QString relPath = QUrl::fromPercentEncoding(relPathPercent.toLatin1()); // Paths like http://foo.com or http://foo.com/bar/ // have files that ends with index if (relPath.endsWith(QLatin1String("index"))) { relPath.remove(relPath.size() - 5, 5); } Page *page = 0; QFileInfo fileInfo(filename); QHash<QString, Page*>::ConstIterator it = d->pathPages.constFind(relPath); if (it != d->pathPages.constEnd()) { page = it.value(); if (page->modified() != fileInfo.lastModified()) { d->pathPages.remove(relPath); d->posts.removeOne(page); d->pages.removeOne(page); delete page; page = 0; } } if (!page) { QSettings data(filename, QSettings::IniFormat); page = new Page(this); page->setPath(relPath); page->setName(data.value(QStringLiteral("Name")).toString()); QString author = data.value(QStringLiteral("Author")).toString(); if (author.isEmpty()) { author = fileInfo.owner(); } page->setAuthor(author); QDateTime modified = QDateTime::fromString(data.value(QStringLiteral("Modified")).toString(), Qt::ISODate); if (modified.isValid()) { } else { modified = fileInfo.lastModified().toUTC(); } page->setModified(modified); QDateTime created = QDateTime::fromString(data.value(QStringLiteral("Created")).toString(), Qt::ISODate); if (created.isValid()) { } else { created = fileInfo.created().toUTC(); } page->setCreated(created); page->setNavigationLabel(data.value(QStringLiteral("NavigationLabel")).toString()); page->setTags(data.value(QStringLiteral("Tags")).toStringList()); page->setBlog(data.value(QStringLiteral("Blog")).toBool()); page->setAllowComments(data.value(QStringLiteral("AllowComments")).toBool()); data.beginGroup(QStringLiteral("Body")); page->setContent(data.value(QStringLiteral("Content")).toString()); data.endGroup(); d->pathPages.insert(relPath, page); if (page->blog()) { d->posts.append(page); } else { d->pages.append(page); } } return page; }