10 #include <QTemporaryFile>
16 class Book: public QObject
22 /** Content item: An individual, named part of the book. */
30 /** Bookmark: a volume index and a relative position in volume. */
33 Bookmark(int part_, qreal pos_, const QString ¬e_ = QString()):
34 part(part_), pos(pos_), note(note_) {}
35 Bookmark(): part(0), pos(0.0) {}
39 bool operator<(const Bookmark &other) const {
40 return (part == other.part)? (pos<other.pos): (part<other.part);
44 /** Construct a book from an EPUB file. */
45 Book(const QString &fileName, QObject *parent = 0);
50 /** Load book meta-data from persistent storage. */
53 /** Save book meta-data to persistent storage. */
56 /** Upgrade persistent storage of book meta-data. */
59 /** Delete book meta-data from persistent storage. */
62 /** Extract and parse EPUB contents, fill in all members except mPath. */
65 /** Extract and parse metadata only, fill in all members except mPath. */
68 /** Clear toc and content members, remove extracted content files. */
71 /** Return path to EPUB. */
75 * Return path to root directory of extracted EPUB.
76 * Only valid after parsing Book::opsPath().
80 /** Return temporary directory path for extracting EPUB file. */
81 QString tmpDir() const;
83 /** Clear directory. */
84 bool clearDir(const QString &directory);
86 /** Set last bookmark. */
87 void setLastBookmark(int part, qreal position, bool fast = false);
89 /** Get last bookmark. */
90 Bookmark lastBookmark();
93 void addBookmark(int part, qreal position, const QString ¬e);
95 /** Change a given bookmark's note text */
96 void setBookmarkNote(int index, const QString ¬e);
98 /** Delete bookmark. */
99 void deleteBookmark(int index);
101 /** List bookmarks. */
102 QList<Bookmark> bookmarks();
106 * @return @see title or path name combined with author(s) name.
110 /** Get cover image. */
113 /** Get short friendly name: title or file name. */
116 /** Get chapter index from part index. */
117 int chapterFromPart(int index);
119 /** Get part index and URL fragment from chapter index. */
120 int partFromChapter(int index, QString &fragment);
122 /** Get progress (0..1) corresponding to part index and part position. */
123 qreal getProgress(int part, qreal position);
125 QString title; //< Book title from EPUB.
126 QStringList parts; //< EPUB part list.
127 QHash<QString, ContentItem> content; //< Content items from EPUB.
128 QImage cover; //< Cover image.
129 QStringList creators; //< Creators.
130 QString date; //< Date of creation.
131 QString publisher; //< Publisher.
132 QString datePublished; //< Date of publishing.
133 QString subject; //< Subject.
134 QString source; //< Source.
135 QString rights; //< Rights.
136 QString tocPath; //< Path to toc NCX file.
137 QString coverPath; //< Path to cover HTML file.
138 QStringList chapters; //< Main navigation items.
139 qint64 size; //< Size of all parts.
140 QDateTime dateAdded; //< Date book added to library.
141 QDateTime dateOpened; //< Date book was last read.
144 /** Emitted if @see open() succeeds. */
145 void opened(const QString &bookPath);
148 /** Extract EPUB as ZIP. */
149 bool extract(const QStringList &excludedExtensions);
151 /** Extract metadata from EPUB. */
152 bool extractMetaData();
154 /** Parse extracted EPUB. */
157 /** Clear all book fields except path. */
160 /** Get location of OPS file in EPUB archive. */
163 /** Make a cover image from a file. */
164 QImage makeCover(const QString &fileName);
166 /** Make a cover image from an pixmap. */
167 QImage makeCover(const QPixmap &pixmap);
169 QString mPath; //< Path to EPUB file.
170 Bookmark mLastBookmark; //< Last position read.
171 QList<Bookmark> mBookmarks; //< List of bookmarks.
172 QString mRootPath; //< Path to root item in EPUB dir.
173 QTemporaryFile mTempFile; //< Guards extracting books.
174 bool loaded; //< True, if loaded from database.