#include <QIcon>
#include <QMetaType>
#include <QObject>
+#include <QTemporaryFile>
/** A book. */
class Book: public QObject
public:
- /** Content item in the table of contents. */
+ /** Content item: An individual, named part of the book. */
struct ContentItem
{
QString href;
QString name;
+ qint64 size;
};
/** Bookmark: a volume index and a relative position in volume. */
struct Bookmark
{
- Bookmark(int chapter_, qreal pos_): chapter(chapter_), pos(pos_) {}
- Bookmark() {chapter = pos = 0;}
- int chapter;
+ Bookmark(int part_, qreal pos_, const QString ¬e_ = QString()):
+ part(part_), pos(pos_), note(note_) {}
+ Bookmark(): part(0), pos(0.0) {}
+ int part;
qreal pos;
- bool operator<(const Bookmark&other) const {
- if (chapter != other.chapter) {
- return chapter < other.chapter;
- } else {
- return pos < other.pos;
- }
+ QString note;
+ bool operator<(const Bookmark &other) const {
+ return (part == other.part)? (pos < other.pos): (part < other.part);
}
};
/** Default constructor. */
Book();
- /** Load book from persistent storage. */
+ /** Load book meta-data from persistent storage. */
void load();
- /** Save book to persistent storage. */
+ /** Save book meta-data to persistent storage. */
void save();
+ /** Upgrade persistent storage of book meta-data. */
+ void upgrade();
+
+ /** Delete book meta-data from persistent storage. */
+ void remove();
+
/** Extract and parse EPUB contents, fill in all members except mPath. */
bool open();
+ /** Extract and parse metadata only, fill in all members except mPath. */
+ void peek();
+
/** Clear toc and content members, remove extracted content files. */
void close();
bool clearDir(const QString &directory);
/** Set last bookmark. */
- void setLastBookmark(int chapter, qreal position);
+ void setLastBookmark(int part, qreal position);
/** Get last bookmark. */
Bookmark lastBookmark() const;
/** Add bookmark. */
- void addBookmark(int chapter, qreal position);
+ void addBookmark(int part, qreal position, const QString ¬e);
/** Delete bookmark. */
void deleteBookmark(int index);
/** Get short friendly name: title or file name. */
QString shortName() const;
+ /** Get chapter index from part index. */
+ int chapterFromPart(int index);
+
+ /** Get part index and URL fragment from chapter index. */
+ int partFromChapter(int index, QString &fragment);
+
+ /** Get progress (0..1) corresponding to part index and part position. */
+ qreal getProgress(int part, qreal position);
+
QString title; //< Book title from EPUB.
- QStringList toc; //< Table of contents from EPUB.
+ QStringList parts; //< EPUB part list.
QHash<QString, ContentItem> content; //< Content items from EPUB.
QImage cover; //< Cover image.
QStringList creators; //< Creators.
QString subject; //< Subject.
QString source; //< Source.
QString rights; //< Rights.
- QString tocPath; //< Path to toc ncx.
- QString coverPath; //< Path to cover html.
+ QString tocPath; //< Path to toc NCX file.
+ QString coverPath; //< Path to cover HTML file.
QStringList chapters; //< Main navigation items from EPUB.
+ qint64 size; //< Size of all parts.
signals:
/** Emitted if @see open() succeeds. */
protected:
/** Extract EPUB as ZIP. */
- bool extract();
+ bool extract(const QStringList &excludedExtensions);
+
+ /** Extract metadata from EPUB. */
+ bool extractMetaData();
- /** Parse exteacted EPUB. */
+ /** Parse extracted EPUB. */
bool parse();
/** Clear all book fields except path. */
Bookmark mLastBookmark; //< Last position read.
QList<Bookmark> mBookmarks; //< List of bookmarks.
QString mRootPath; //< Path to root item in EPUB dir.
+ QTemporaryFile mTempFile; //< Guards extracting books.
};
#endif // BOOK_H