-#include <QDir>
-#include <QString>
-#include <QDebug>
-#include <QtXml>
#include <qtextdocument.h> // Qt::escape is currently defined here...
-#include <QDirIterator>
-#include <QFileInfo>
-#include <QtAlgorithms>
-#include <QCryptographicHash>
#include "book.h"
#include "opshandler.h"
#include "containerhandler.h"
#include "ncxhandler.h"
#include "trace.h"
+#include "bookdb.h"
const int COVER_WIDTH = 53;
const int COVER_HEIGHT = 59;
bool Book::open()
{
- Trace t("Book::open");
+ TRACE;
qDebug() << path();
close();
clear();
void Book::peek()
{
- Trace t("Book::peek");
+ TRACE;
qDebug() << path();
close();
clear();
void Book::close()
{
- Trace t("Book::close");
+ TRACE;
content.clear();
parts.clear();
QDir::setCurrent(QDir::rootPath());
bool Book::extract(const QStringList &excludedExtensions)
{
- Trace t("Book::extract");
+ TRACE;
bool ret = false;
QString tmp = tmpDir();
qDebug() << "Extracting" << mPath << "to" << tmp;
bool Book::parse()
{
- Trace t("Book::parse");
+ TRACE;
// Parse OPS file
bool ret = false;
void Book::load()
{
- Trace t("Book::load");
+ TRACE;
qDebug() << "path" << path();
- QSettings settings;
- QString key = "book/" + path() + "/";
- qDebug() << "key" << key;
- // Load book info
- title = settings.value(key + "title").toString();
+ QVariantHash data = BookDb::instance()->load(path());
+ title = data["title"].toString();
qDebug() << title;
- creators = settings.value(key + "creators").toStringList();
- date = settings.value(key + "date").toString();
- publisher = settings.value(key + "publisher").toString();
- datePublished = settings.value(key + "datepublished").toString();
- subject = settings.value(key + "subject").toString();
- source = settings.value(key + "source").toString();
- rights = settings.value(key + "rights").toString();
- mLastBookmark.part = settings.value(key + "lastpart").toInt();
- mLastBookmark.pos = settings.value(key + "lastpos").toReal();
- cover = settings.value(key + "cover").value<QImage>().scaled(COVER_WIDTH,
+ creators = data["creators"].toStringList();
+ date = data["date"].toString();
+ publisher = data["publisher"].toString();
+ datePublished = data["datepublished"].toString();
+ subject = data["subject"].toString();
+ source = data["source"].toString();
+ rights = data["rights"].toString();
+ mLastBookmark.part = data["lastpart"].toInt();
+ mLastBookmark.pos = data["lastpos"].toReal();
+ cover = data["cover"].value<QImage>().scaled(COVER_WIDTH,
COVER_HEIGHT, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
if (cover.isNull()) {
cover = makeCover(":/icons/book.png");
}
-
- // Load bookmarks
- int size = settings.value(key + "bookmarks").toInt();
+ int size = data["bookmarks"].toInt();
for (int i = 0; i < size; i++) {
- int part = settings.value(key + "bookmark" + QString::number(i) +
- "/part").toInt();
- qreal pos = settings.value(key + "bookmark" + QString::number(i) +
- "/pos").toReal();
- qDebug() << QString("Bookmark %1 at part %2, %3").
- arg(i).arg(part).arg(pos);
- mBookmarks.append(Bookmark(part, pos));
+ int part = data[QString("bookmark%1part").arg(i)].toInt();
+ qreal pos = data[QString("bookmark%1pos").arg(i)].toReal();
+ QString note = data[QString("bookmark%1note").arg(i)].toString();
+ mBookmarks.append(Bookmark(part, pos, note));
}
}
void Book::save()
{
- Trace t("Book::save");
- QSettings settings;
- QString key = "book/" + path() + "/";
- qDebug() << "key" << key;
-
- // Save book info
- settings.setValue(key + "title", title);
- qDebug() << "title" << title;
- settings.setValue(key + "creators", creators);
- settings.setValue(key + "date", date);
- settings.setValue(key + "publisher", publisher);
- settings.setValue(key + "datepublished", datePublished);
- settings.setValue(key + "subject", subject);
- settings.setValue(key + "source", source);
- settings.setValue(key + "rights", rights);
- settings.setValue(key + "lastpart", mLastBookmark.part);
- settings.setValue(key + "lastpos", mLastBookmark.pos);
- settings.setValue(key + "cover", cover);
-
- // Save bookmarks
- settings.setValue(key + "bookmarks", mBookmarks.size());
+ TRACE;
+
+ QVariantHash data;
+ data["title"] = title;
+ data["creators"] = creators;
+ data["date"] = date;
+ data["publisher"] = publisher;
+ data["datepublished"] = datePublished;
+ data["subject"] = subject;
+ data["source"] = source;
+ data["rights"] = rights;
+ data["lastpart"] = mLastBookmark.part;
+ data["lastpos"] = mLastBookmark.pos;
+ data["cover"] = cover;
+ data["bookmarks"] = mBookmarks.size();
for (int i = 0; i < mBookmarks.size(); i++) {
- qDebug() << QString("Bookmark %1 at %2, %3").
- arg(i).arg(mBookmarks[i].part).arg(mBookmarks[i].pos);
- settings.setValue(key + "bookmark" + QString::number(i) + "/part",
- mBookmarks[i].part);
- settings.setValue(key + "bookmark" + QString::number(i) + "/pos",
- mBookmarks[i].pos);
+ data[QString("bookmark%1part").arg(i)] = mBookmarks[i].part;
+ data[QString("bookmark%1pos").arg(i)] = mBookmarks[i].pos;
+ data[QString("bookmark%1note").arg(i)] = mBookmarks[i].note;
}
+ BookDb::instance()->save(path(), data);
}
void Book::setLastBookmark(int part, qreal position)
{
+ TRACE;
+ qDebug() << "part" << part << "position" << position;
mLastBookmark.part = part;
mLastBookmark.pos = position;
save();
return Book::Bookmark(mLastBookmark);
}
-void Book::addBookmark(int part, qreal position)
+void Book::addBookmark(int part, qreal position, const QString ¬e)
{
- mBookmarks.append(Bookmark(part, position));
+ mBookmarks.append(Bookmark(part, position, note));
qSort(mBookmarks.begin(), mBookmarks.end());
save();
}
QString Book::opsPath()
{
- Trace t("Book::opsPath");
+ TRACE;
QString ret;
QFile container(tmpDir() + "/META-INF/container.xml");
return ret;
}
-int Book::partFromChapter(int index)
+int Book::partFromChapter(int index, QString &fragment)
{
Trace t("Book::partFromChapter");
+ fragment.clear();
QString id = chapters[index];
QString href = content[id].href;
int hashPos = href.indexOf("#");
if (hashPos != -1) {
+ fragment = href.mid(hashPos);
href = href.left(hashPos);
}
qDebug() << "Chapter" << index;
qDebug() << " id" << id;
qDebug() << " href" << href;
+ qDebug() << " fragment" << fragment;
for (int i = 0; i < parts.size(); i++) {
QString partId = parts[i];
void Book::upgrade()
{
- Trace t("Book::upgrade");
+ TRACE;
+
qDebug() << path();
+
+ // Load book from old database (QSettings)
+
+ QSettings settings;
+ QString key = "book/" + path() + "/";
+ title = settings.value(key + "title").toString();
+ qDebug() << title;
+ creators = settings.value(key + "creators").toStringList();
+ date = settings.value(key + "date").toString();
+ publisher = settings.value(key + "publisher").toString();
+ datePublished = settings.value(key + "datepublished").toString();
+ subject = settings.value(key + "subject").toString();
+ source = settings.value(key + "source").toString();
+ rights = settings.value(key + "rights").toString();
+ mLastBookmark.part = settings.value(key + "lastpart").toInt();
+ mLastBookmark.pos = settings.value(key + "lastpos").toReal();
+ cover = settings.value(key + "cover").value<QImage>().scaled(COVER_WIDTH,
+ COVER_HEIGHT, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ if (cover.isNull()) {
+ cover = makeCover(":/icons/book.png");
+ }
+ int size = settings.value(key + "bookmarks").toInt();
+ for (int i = 0; i < size; i++) {
+ int part = settings.value(key + "bookmark" + QString::number(i) +
+ "/part").toInt();
+ qreal pos = settings.value(key + "bookmark" + QString::number(i) +
+ "/pos").toReal();
+ qDebug() << QString("Bookmark %1 at part %2, %3").
+ arg(i).arg(part).arg(pos);
+ mBookmarks.append(Bookmark(part, pos));
+ }
+
+ // Save book to new database
+
+ save();
+}
+
+void Book::remove()
+{
+ TRACE;
+ BookDb::instance()->remove(path());
}