|
@@ -4,6 +4,61 @@
|
|
|
#include <QtDebug>
|
|
|
#include <QNetworkReply>
|
|
|
#include <QNetworkRequest>
|
|
|
+#include <QWebSecurityOrigin>
|
|
|
+
|
|
|
+//---------------------------------------------------------------------------
|
|
|
+// Fb2ImageReply
|
|
|
+//---------------------------------------------------------------------------
|
|
|
+
|
|
|
+Fb2ImageReply::Fb2ImageReply(QNetworkAccessManager::Operation op, const QNetworkRequest &request, const QByteArray &data)
|
|
|
+ : QNetworkReply()
|
|
|
+ , content(data)
|
|
|
+ , offset(0)
|
|
|
+{
|
|
|
+/*
|
|
|
+ QString path = "/home/user/tmp" + request.url().path();
|
|
|
+ qCritical() << path;
|
|
|
+ QFile file(path);
|
|
|
+ file.open(QFile::WriteOnly);
|
|
|
+ file.write(content);
|
|
|
+ file.close();
|
|
|
+*/
|
|
|
+ qCritical() << tr("Image: %1 - %2").arg(request.url().toString()).arg(content.size());
|
|
|
+ setRequest(request);
|
|
|
+ setUrl(request.url());
|
|
|
+ setOperation(op);
|
|
|
+ open(ReadOnly | Unbuffered);
|
|
|
+ setHeader(QNetworkRequest::ContentLengthHeader, QVariant(content.size()));
|
|
|
+ QMetaObject::invokeMethod(this, "readyRead", Qt::QueuedConnection);
|
|
|
+ QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection);
|
|
|
+}
|
|
|
+
|
|
|
+void Fb2ImageReply::abort()
|
|
|
+{
|
|
|
+ close();
|
|
|
+}
|
|
|
+
|
|
|
+qint64 Fb2ImageReply::bytesAvailable() const
|
|
|
+{
|
|
|
+ return content.size() - offset;
|
|
|
+}
|
|
|
+
|
|
|
+bool Fb2ImageReply::isSequential() const
|
|
|
+{
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+qint64 Fb2ImageReply::readData(char *data, qint64 maxSize)
|
|
|
+{
|
|
|
+ if (offset < content.size()) {
|
|
|
+ qint64 number = qMin(maxSize, content.size() - offset);
|
|
|
+ memcpy(data, content.constData() + offset, number);
|
|
|
+ offset += number;
|
|
|
+ return number;
|
|
|
+ } else {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
// Fb2NetworkAccessManager
|
|
@@ -18,10 +73,23 @@ Fb2NetworkAccessManager::Fb2NetworkAccessManager(QObject *parent)
|
|
|
|
|
|
QNetworkReply * Fb2NetworkAccessManager::createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData)
|
|
|
{
|
|
|
- qCritical() << request.url().toString();
|
|
|
+ if (request.url().scheme() == "fb2") return imageRequest(op, request);
|
|
|
return QNetworkAccessManager::createRequest(op, request, outgoingData);
|
|
|
}
|
|
|
|
|
|
+QNetworkReply * Fb2NetworkAccessManager::imageRequest(Operation op, const QNetworkRequest &request)
|
|
|
+{
|
|
|
+ QString file = request.url().path();
|
|
|
+ while (file.left(1) == "/") file.remove(0, 1);
|
|
|
+ ImageMap::const_iterator i = m_images.find(file);
|
|
|
+ if (i == m_images.end()) {
|
|
|
+ qCritical() << "Not found: " << file;
|
|
|
+ return 0;
|
|
|
+ } else {
|
|
|
+ return new Fb2ImageReply(op, request, i.value());
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void Fb2NetworkAccessManager::insert(const QString &file, const QByteArray &data)
|
|
|
{
|
|
|
m_images.insert(file, data);
|
|
@@ -37,6 +105,7 @@ Fb2WebView::Fb2WebView(QWidget *parent)
|
|
|
{
|
|
|
page()->setContentEditable(true);
|
|
|
QWebSettings *settings = page()->settings();
|
|
|
+ settings->setAttribute(QWebSettings::AutoLoadImages, true);
|
|
|
settings->setAttribute(QWebSettings::JavaEnabled, false);
|
|
|
settings->setAttribute(QWebSettings::JavascriptEnabled, true);
|
|
|
settings->setAttribute(QWebSettings::PrivateBrowsingEnabled, true);
|