#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
/** Bookmark: a volume index and a relative position in volume. */
struct Bookmark
{
- Bookmark(int part_, qreal pos_): part(part_), pos(pos_) {}
+ 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 {
- return (part == other.part)? (pos < other.pos): (part < other.part);
+ 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();
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 part, qreal position);
+ void setLastBookmark(int part, qreal position, bool fast = false);
/** Get last bookmark. */
- Bookmark lastBookmark() const;
+ Bookmark lastBookmark();
/** Add bookmark. */
- void addBookmark(int part, 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 from chapter index. */
- int partFromChapter(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 rights; //< Rights.
QString tocPath; //< Path to toc NCX file.
QString coverPath; //< Path to cover HTML file.
- QStringList chapters; //< Main navigation items from EPUB.
+ 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. */
/** 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