#include <QString>
#include <QStringList>
#include <QHash>
-#include <QIcon>
+#include <QImage>
#include <QMetaType>
#include <QObject>
+#include <QTemporaryFile>
+#include <QDateTime>
+
+class QPixmap;
/** 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);
}
};
- /** Construct a book from an EPUB file in path. */
- Book(const QString &path, QObject *parent = 0);
+ /** Construct a book from an EPUB file. */
+ Book(const QString &fileName, QObject *parent = 0);
- /** Default constructor. */
- Book();
+ /** Destructor. */
+ ~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();
/** Return path to EPUB. */
- QString path() const;
+ QString path();
/**
* Return path to root directory of extracted EPUB.
* Only valid after parsing Book::opsPath().
*/
- QString rootPath() const;
+ QString rootPath();
/** Return temporary directory path for extracting EPUB file. */
QString tmpDir() const;
bool clearDir(const QString &directory);
/** Set last bookmark. */
- void setLastBookmark(int chapter, qreal position);
+ void setLastBookmark(int part, qreal position, bool fast = false);
/** Get last bookmark. */
- Bookmark lastBookmark() const;
+ Bookmark lastBookmark();
/** Add bookmark. */
- void addBookmark(int chapter, qreal position);
+ void addBookmark(int part, qreal position, const QString ¬e);
+
+ /** Change a given bookmark's note text */
+ void setBookmarkNote(int index, const QString ¬e);
/** Delete bookmark. */
void deleteBookmark(int index);
/** List bookmarks. */
- QList<Bookmark> bookmarks() const;
+ QList<Bookmark> bookmarks();
/**
* Get friendly name.
* @return @see title or path name combined with author(s) name.
*/
- QString name() const;
+ QString name();
+
+ /** Get cover image. */
+ QImage coverImage();
/** Get short friendly name: title or file name. */
- QString shortName() const;
+ QString shortName();
+
+ /** 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.
- QStringList chapters; //< Main navigation items from EPUB.
+ QString tocPath; //< Path to toc NCX file.
+ QString coverPath; //< Path to cover HTML file.
+ QStringList chapters; //< Main navigation items.
+ qint64 size; //< Size of all parts.
+ QDateTime dateAdded; //< Date book added to library.
+ QDateTime dateOpened; //< Date book was last read.
signals:
/** Emitted if @see open() succeeds. */
protected:
/** Extract EPUB as ZIP. */
- bool extract();
+ bool extract(const QStringList &excludedExtensions);
- /** Parse exteacted EPUB. */
+ /** Extract metadata from EPUB. */
+ bool extractMetaData();
+
+ /** Parse extracted EPUB. */
bool parse();
/** Clear all book fields except path. */
/** Get location of OPS file in EPUB archive. */
QString opsPath();
+ /** Make a cover image from a file. */
+ QImage makeCover(const QString &fileName);
+
+ /** Make a cover image from an pixmap. */
+ QImage makeCover(const QPixmap &pixmap);
+
QString mPath; //< Path to EPUB file.
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.
+ bool loaded; //< True, if loaded from database.
};
#endif // BOOK_H