Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/lintest/fb2edit.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKandrashin Denis <mail@lintest.ru>2012-11-06 14:03:24 +0400
committerKandrashin Denis <mail@lintest.ru>2012-11-06 14:03:24 +0400
commit11d95f9c0efa06c3f88ca9c8710527de4e7ce7cf (patch)
tree31e1ed1906e1d0045ade0378bcbd89221b93ff2b
parente81199775564f0b93aec3058f2bf8ebb3758644e (diff)
Use class FbStore
-rw-r--r--source/fb2page.cpp14
-rw-r--r--source/fb2page.hpp5
-rw-r--r--source/fb2read.cpp10
-rw-r--r--source/fb2read.hpp6
-rw-r--r--source/fb2save.cpp12
-rw-r--r--source/fb2temp.cpp61
-rw-r--r--source/fb2temp.hpp74
-rw-r--r--source/fb2text.cpp6
-rw-r--r--source/fb2text.hpp2
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);