Asset::~Asset() { if (getLoaded()) { unload(); } }
void ZimServer::requestHandler(QHttpRequest *req, QHttpResponse *resp) { //qDebug() << "requestHandler, URL:" << req->url().toString(); if (!getLoaded()) { qWarning() << "ZIM file not loaded!"; resp->setHeader("Content-Length", "0"); resp->setHeader("Connection", "close"); resp->writeHead(500); resp->end(""); return; } QStringList pathlist = req->url().path().split("/"); if (pathlist.size() < 3) { qWarning() << "Invalid Url!"; resp->setHeader("Content-Length", "0"); resp->setHeader("Connection", "close"); resp->writeHead(404); resp->end(""); return; } QString zimUrl = QStringList(pathlist.mid(1,pathlist.size()-1)).join("/"); zim::File::const_iterator it = zimfile->find(zimUrl.toStdString()); if (it == zimfile->end()) { qWarning() << "Article not found!"; resp->setHeader("Content-Length", "0"); resp->setHeader("Connection", "close"); resp->writeHead(404); resp->end(""); return; } if (it->isRedirect()) { resp->setHeader("Content-Length", "0"); resp->setHeader("Location", QString::fromStdString(it->getRedirectArticle().getUrl()).toLatin1()); resp->setHeader("Connection", "close"); resp->writeHead(302); resp->end(""); return; } zim::Blob zimblob = it->getData(); QByteArray data(zimblob.data(), zimblob.size()); resp->setHeader("Content-Length", QString::number(data.size())); resp->setHeader("Content-Type", QString::fromStdString(it->getMimeType()).toLatin1()); resp->setHeader("Connection", "close"); resp->writeHead(200); resp->end(data); }
bool ObjectBuilderAsset::load() { ASSERT(getLoaded() == false, "Attempt to load already loaded asset!"); ASSERT(getPath() != NULL, "Attempt to load an asset with no path!"); if (!getLoaded() && getPath()) { LoaderSystem* loaderSystem = getSystem<LoaderSystem>(); if (loaderSystem) { ObjectHandle<ObjectBuilder> builder = loaderSystem->load(getPath()); if (builder) { setBuilder(builder); setLoaded(true); } } } return getLoaded(); }
void ZimServer::findTitle(const QString &title) { if (!getLoaded()) { qWarning() << "ZIM file not loaded!"; return; } Settings* s = Settings::instance(); s->articleModel->clear(); if (title.trimmed().isEmpty()) return; zim::File::const_iterator it = zimfile->findByTitle('A', title.toStdString()); for (int i = 0; it != zimfile->end() && i < 10; ++it, ++i) { s->articleModel->appendRow(new ArticleItem(QString::number(i), QString::fromStdString(it->getTitle()), getLocalUrl(QString::fromStdString(it->getLongUrl())))); ++i; } }