Exemplo n.º 1
0
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;
}