diff options
author | Kandrashin Denis <mail@lintest.ru> | 2012-11-06 14:03:24 +0400 |
---|---|---|
committer | Kandrashin Denis <mail@lintest.ru> | 2012-11-06 14:03:24 +0400 |
commit | 11d95f9c0efa06c3f88ca9c8710527de4e7ce7cf (patch) | |
tree | 31e1ed1906e1d0045ade0378bcbd89221b93ff2b | |
parent | e81199775564f0b93aec3058f2bf8ebb3758644e (diff) |
Use class FbStore
-rw-r--r-- | source/fb2page.cpp | 14 | ||||
-rw-r--r-- | source/fb2page.hpp | 5 | ||||
-rw-r--r-- | source/fb2read.cpp | 10 | ||||
-rw-r--r-- | source/fb2read.hpp | 6 | ||||
-rw-r--r-- | source/fb2save.cpp | 12 | ||||
-rw-r--r-- | source/fb2temp.cpp | 61 | ||||
-rw-r--r-- | source/fb2temp.hpp | 74 | ||||
-rw-r--r-- | source/fb2text.cpp | 6 | ||||
-rw-r--r-- | source/fb2text.hpp | 2 |
9 files changed, 86 insertions, 104 deletions
diff --git a/source/fb2page.cpp b/source/fb2page.cpp index 591c55d..2af845b 100644 --- a/source/fb2page.cpp +++ b/source/fb2page.cpp @@ -48,7 +48,7 @@ FbTextPage::FbTextPage(QObject *parent) connect(this, SIGNAL(selectionChanged()), SLOT(showStatus())); } -FbNetworkAccessManager *FbTextPage::temp() +FbNetworkAccessManager *FbTextPage::manager() { return qobject_cast<FbNetworkAccessManager*>(networkAccessManager()); } @@ -67,17 +67,11 @@ bool FbTextPage::read(QIODevice *device) return true; } -void FbTextPage::html(QObject *temp, const QString &html) +void FbTextPage::html(const QString &html, FbStore *store) { - FbNetworkAccessManager *manager = qobject_cast<FbNetworkAccessManager*>(temp); - if (!manager) { temp->deleteLater(); return; } - - QUrl url = FbTextPage::createUrl(); - setNetworkAccessManager(manager); - manager->setPath(url.path()); - manager->setParent(this); - QWebSettings::clearMemoryCaches(); + QUrl url = FbTextPage::createUrl(); + manager()->setStore(url, store); mainFrame()->setHtml(html, url); } diff --git a/source/fb2page.hpp b/source/fb2page.hpp index 066b4aa..24db7a0 100644 --- a/source/fb2page.hpp +++ b/source/fb2page.hpp @@ -5,6 +5,7 @@ #include <QUndoCommand> #include <QWebPage> +class FbStore; class FbTextElement; class FbNetworkAccessManager; @@ -28,7 +29,7 @@ class FbTextPage : public QWebPage public: explicit FbTextPage(QObject *parent = 0); - FbNetworkAccessManager *temp(); + FbNetworkAccessManager *manager(); bool read(const QString &html); bool read(QIODevice *device); void push(QUndoCommand * command, const QString &text = QString()); @@ -48,7 +49,7 @@ signals: void status(const QString &text); public slots: - void html(QObject *temp, const QString &html); + void html(const QString &html, FbStore *store); void insertBody(); void insertTitle(); void insertAnnot(); diff --git a/source/fb2read.cpp b/source/fb2read.cpp index 3c7ae5f..cb9c057 100644 --- a/source/fb2read.cpp +++ b/source/fb2read.cpp @@ -12,7 +12,7 @@ void FbReadThread::execute(QObject *parent, QXmlInputSource *source, QIODevice *device) { FbReadThread *thread = new FbReadThread(parent, source, device); - connect(thread, SIGNAL(html(QObject*,QString)), parent, SLOT(html(QObject*,QString))); + connect(thread, SIGNAL(html(QString, FbStore*)), parent, SLOT(html(QString, FbStore*))); thread->start(); } @@ -21,7 +21,7 @@ FbReadThread::FbReadThread(QObject *parent, QXmlInputSource *source, QIODevice * , m_device(device) , m_source(source) { - m_temp = new FbNetworkAccessManager(this); + m_store = new FbStore(this); } FbReadThread::~FbReadThread() @@ -33,9 +33,9 @@ FbReadThread::~FbReadThread() void FbReadThread::run() { if (parse()) { - emit html(m_temp, m_html); + emit html(m_html, m_store); } else { - delete m_temp; + delete m_store; } deleteLater(); } @@ -45,7 +45,7 @@ bool FbReadThread::parse() QXmlStreamWriter writer(&m_html); FbReadHandler handler(writer); - connect(&handler, SIGNAL(binary(QString,QByteArray)), m_temp, SLOT(binary(QString,QByteArray))); + connect(&handler, SIGNAL(binary(QString,QByteArray)), m_store, SLOT(binary(QString,QByteArray))); #ifdef FB2_USE_LIBXML2 XML2::XmlReader reader; diff --git a/source/fb2read.hpp b/source/fb2read.hpp index 9c39dbd..e1c132c 100644 --- a/source/fb2read.hpp +++ b/source/fb2read.hpp @@ -8,7 +8,7 @@ #include <QThread> #include <QXmlDefaultHandler> -class FbNetworkAccessManager; +class FbStore; class FbReadThread : public QThread { @@ -20,7 +20,7 @@ public: signals: void binary(const QString &name, const QByteArray &data); - void html(QObject *temp, const QString &html); + void html(const QString &html, FbStore *store); protected: void run(); @@ -32,7 +32,7 @@ private: private: QIODevice *m_device; QXmlInputSource *m_source; - FbNetworkAccessManager *m_temp; + FbStore *m_store; QString m_html; }; diff --git a/source/fb2save.cpp b/source/fb2save.cpp index 404c28e..c9bd9fa 100644 --- a/source/fb2save.cpp +++ b/source/fb2save.cpp @@ -199,9 +199,12 @@ QByteArray FbSaveWriter::downloadFile(const QUrl &url) QString FbSaveWriter::filename(const QString &path) { + FbStore *store = m_view.store(); + if (!store) return QString(); + if (path.left(1) == "#") { QString name = path.mid(1); - if (m_view.files()->exists(name)) { + if (store->exists(name)) { m_names.append(name); return name; } @@ -210,7 +213,7 @@ QString FbSaveWriter::filename(const QString &path) QUrl url = path; QByteArray data = downloadFile(url); if (data.size() == 0) return QString(); - QString name = m_view.files()->add(url.path(), data); + QString name = store->add(url.path(), data); m_names.append(name); return name; } @@ -237,11 +240,14 @@ void FbSaveWriter::writeStyle() void FbSaveWriter::writeFiles() { + FbStore *store = m_view.store(); + if (!store) return; + QStringListIterator it(m_names); while (it.hasNext()) { QString name = it.next(); if (name.isEmpty()) continue; - FbBinary * file = m_view.files()->get(name); + FbBinary * file = store->get(name); if (!file) continue; writeStartElement("binary", 2); writeAttribute("id", name); diff --git a/source/fb2temp.cpp b/source/fb2temp.cpp index 62f2ce7..a211c0d 100644 --- a/source/fb2temp.cpp +++ b/source/fb2temp.cpp @@ -53,7 +53,8 @@ QByteArray FbBinary::data() // FbStore //--------------------------------------------------------------------------- -FbStore::FbStore() +FbStore::FbStore(QObject *parent) + : QObject(parent) { } @@ -63,6 +64,11 @@ FbStore::~FbStore() while (it.hasNext()) delete it.next(); } +void FbStore::binary(const QString &name, const QByteArray &data) +{ + set(name, data); +} + QString FbStore::add(const QString &path, QByteArray &data) { QString hash = FbBinary::md5(data); @@ -197,47 +203,52 @@ qint64 FbImageReply::readData(char *data, qint64 maxSize) FbNetworkAccessManager::FbNetworkAccessManager(QObject *parent) : QNetworkAccessManager(parent) + , m_store(new FbStore(this)) { -// QWebSettings::clearMemoryCaches(); } -void FbNetworkAccessManager::binary(const QString &name, const QByteArray &data) +void FbNetworkAccessManager::setStore(const QUrl url, FbStore *store) { - m_files.set(name, data); + m_path = url.path(); + if (m_store) delete m_store; + if (!store) store = new FbStore(this); + store->setParent(this); + m_store = store; } QNetworkReply * FbNetworkAccessManager::createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData) { - const QUrl &url = request.url(); - const QString path = url.path(); - if (url.scheme() == "fb2" && path == m_path) return imageRequest(op, request); + if (m_store) { + const QUrl &url = request.url(); + const QString path = url.path(); + if (url.scheme() == "fb2" && path == m_path) { + QString name = request.url().fragment(); + QByteArray data = m_store->data(name); + return new FbImageReply(op, request, data); + } + } return QNetworkAccessManager::createRequest(op, request, outgoingData); } -QNetworkReply * FbNetworkAccessManager::imageRequest(Operation op, const QNetworkRequest &request) -{ - QString name = request.url().fragment(); - QByteArray data = m_files.data(name); - return new FbImageReply(op, request, data); -} - QVariant FbNetworkAccessManager::info(int row, int col) const { + if (!m_store) return QVariant(); if (0 <= row && row < count()) { - FbBinary *file = m_files[row]; + FbBinary *file = m_store->at(row); switch (col) { case 2: return file->type(); case 3: return file->size(); } - return m_files[row]->name(); + return m_store->at(row)->name(); } return QVariant(); } QByteArray FbNetworkAccessManager::data(int index) const { + if (!m_store) return QByteArray(); if (0 <= index && index < count()) { - return m_files[index]->data(); + return m_store->at(index)->data(); } return QByteArray(); } @@ -331,18 +342,6 @@ FbListModel * FbListView::model() const } //--------------------------------------------------------------------------- -// FbListWidget::FbProxy -//--------------------------------------------------------------------------- - -QNetworkReply *FbListWidget::FbProxy::createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData) -{ - if (FbNetworkAccessManager * m = qobject_cast<FbNetworkAccessManager*>(m_page->networkAccessManager())) { - return m->createRequest(op, request, outgoingData); - } - return QNetworkAccessManager::createRequest(op, request, outgoingData); -} - -//--------------------------------------------------------------------------- // FbListWidget //--------------------------------------------------------------------------- @@ -362,10 +361,8 @@ FbListWidget::FbListWidget(FbTextEdit *text, QWidget* parent) FbTextFrame *frame = new FbTextFrame(splitter); splitter->addWidget(frame); - FbProxy *proxy = new FbProxy(text->page(), this); - m_view = new FbTextBase(frame); - m_view->page()->setNetworkAccessManager(proxy); + m_view->page()->setNetworkAccessManager(text->page()->networkAccessManager()); frame->layout()->addWidget(m_view); splitter->setSizes(QList<int>() << 100 << 100); diff --git a/source/fb2temp.hpp b/source/fb2temp.hpp index c84106e..636ed09 100644 --- a/source/fb2temp.hpp +++ b/source/fb2temp.hpp @@ -42,7 +42,7 @@ class FbStore : public QObject, private FbBinatyList { Q_OBJECT public: - explicit FbStore(); + explicit FbStore(QObject *parent); virtual ~FbStore(); QString add(const QString &path, QByteArray &data); bool exists(const QString &name) const; @@ -50,8 +50,10 @@ public: const QString & set(const QString &name, QByteArray data, const QString &hash = QString()); QString name(const QString &hash) const; QByteArray data(const QString &name) const; +public slots: + void binary(const QString &name, const QByteArray &data); public: - inline FbBinary * operator[](int i) const { return FbBinatyList::operator[](i); } + inline FbBinary * at(int i) const { return FbBinatyList::at(i); } inline int count() const { return FbBinatyList::count(); } private: QString newName(const QString &path); @@ -71,6 +73,31 @@ public: #endif +class FbNetworkAccessManager : public QNetworkAccessManager +{ + Q_OBJECT + +public: + explicit FbNetworkAccessManager(QObject *parent = 0); + void setStore(const QUrl url, FbStore *store); + FbStore *store() const { return m_store; } + +public: + QString add(const QString &path, QByteArray &data) { return m_store->add(path, data); } + bool exists(const QString &name) const { return m_store->exists(name); } + FbBinary * get(const QString &name) const { return m_store->get(name); } + int count() const { return m_store->count(); } + QByteArray data(int index) const; + QVariant info(int row, int col) const; + +protected: + virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData = 0); + +private: + FbStore *m_store; + QString m_path; +}; + class FbImageReply : public QNetworkReply { Q_OBJECT @@ -128,17 +155,6 @@ class FbListWidget : public QWidget Q_OBJECT public: - class FbProxy : public QNetworkAccessManager - { - public: - FbProxy(QWebPage *page, QObject *parent): QNetworkAccessManager(parent), m_page(page) {} - protected: - virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData = 0); - private: - QWebPage *m_page; - }; - -public: explicit FbListWidget(FbTextEdit *text, QWidget* parent = 0); QSize sizeHint() const { return QSize(200,200); } @@ -155,36 +171,4 @@ private: QWebView *m_view; }; -class FbNetworkAccessManager : public QNetworkAccessManager -{ - Q_OBJECT - -public: - explicit FbNetworkAccessManager(QObject *parent = 0); - FbStore & files() { return m_files; } - void setPath(const QString &path) { m_path = path; } - -public slots: - void binary(const QString &name, const QByteArray &data); - -public: - QString add(const QString &path, QByteArray &data) { return m_files.add(path, data); } - bool exists(const QString &name) const { return m_files.exists(name); } - FbBinary * get(const QString &name) const { return m_files.get(name); } - int count() const { return m_files.count(); } - QByteArray data(int index) const; - QVariant info(int row, int col) const; - -protected: - virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData = 0); - -private: - QNetworkReply *imageRequest(Operation op, const QNetworkRequest &request); - -private: - FbStore m_files; - QString m_path; - friend class FbListWidget::FbProxy; -}; - #endif // FB2TEMP_H diff --git a/source/fb2text.cpp b/source/fb2text.cpp index 7d58fdd..006e6d8 100644 --- a/source/fb2text.cpp +++ b/source/fb2text.cpp @@ -232,9 +232,9 @@ FbTextPage *FbTextEdit::page() return qobject_cast<FbTextPage*>(FbTextBase::page()); } -FbNetworkAccessManager *FbTextEdit::files() +FbStore *FbTextEdit::store() { - return page()->temp(); + return page()->manager()->store(); } QAction * FbTextEdit::act(Fb::Actions index) const @@ -599,7 +599,7 @@ void FbTextEdit::insertImage() if (!file.open(QIODevice::ReadOnly)) return; QByteArray data = file.readAll(); - QString name = files()->add(path, data); + QString name = store()->add(path, data); execCommand("insertImage", name.prepend("#")); } diff --git a/source/fb2text.hpp b/source/fb2text.hpp index 66293cf..7e57c6e 100644 --- a/source/fb2text.hpp +++ b/source/fb2text.hpp @@ -75,7 +75,7 @@ public: virtual ~FbTextEdit(); FbTextPage *page(); - FbNetworkAccessManager *files(); + FbStore *store(); bool save(QIODevice *device, const QString &codec = QString()); bool save(QByteArray *array); bool save(QString *string); |