Show Qt header and runtime versions. Clean temporary files when
[dorian] / model / book.h
1 #ifndef BOOK_H
2 #define BOOK_H
3
4 #include <QString>
5 #include <QStringList>
6 #include <QHash>
7 #include <QIcon>
8 #include <QMetaType>
9 #include <QObject>
10 #include <QTemporaryFile>
11
12 /** A book. */
13 class Book: public QObject
14 {
15     Q_OBJECT
16
17 public:
18
19     /** Content item: An individual, named part of the book. */
20     struct ContentItem
21     {
22         QString href;
23         QString name;
24         qint64 size;
25     };
26
27     /** Bookmark: a volume index and a relative position in volume. */
28     struct Bookmark
29     {
30         Bookmark(int part_, qreal pos_, const QString &note_ = QString()):
31                 part(part_), pos(pos_), note(note_) {}
32         Bookmark(): part(0), pos(0.0) {}
33         int part;
34         qreal pos;
35         QString note;
36         bool operator<(const Bookmark &other) const {
37             return (part == other.part)? (pos < other.pos): (part < other.part);
38         }
39     };
40
41     /** Construct a book from an EPUB file. */
42     Book(const QString &fileName, QObject *parent = 0);
43
44     /** Default constructor. */
45     // Book();
46
47     /** Destructor. */
48     ~Book();
49
50     /** Load book meta-data from persistent storage. */
51     void load();
52
53     /** Save book meta-data to persistent storage. */
54     void save();
55
56     /** Upgrade persistent storage of book meta-data. */
57     void upgrade();
58
59     /** Delete book meta-data from persistent storage. */
60     void remove();
61
62     /** Extract and parse EPUB contents, fill in all members except mPath. */
63     bool open();
64
65     /** Extract and parse metadata only, fill in all members except mPath. */
66     void peek();
67
68     /** Clear toc and content members, remove extracted content files. */
69     void close();
70
71     /** Return path to EPUB. */
72     QString path();
73
74     /**
75      * Return path to root directory of extracted EPUB.
76      * Only valid after parsing Book::opsPath().
77      */
78     QString rootPath();
79
80     /** Return temporary directory path for extracting EPUB file. */
81     QString tmpDir() const;
82
83     /** Clear directory. */
84     bool clearDir(const QString &directory);
85
86     /** Set last bookmark. */
87     void setLastBookmark(int part, qreal position);
88
89     /** Get last bookmark. */
90     Bookmark lastBookmark();
91
92     /** Add bookmark. */
93     void addBookmark(int part, qreal position, const QString &note);
94
95     /** Delete bookmark. */
96     void deleteBookmark(int index);
97
98     /** List bookmarks. */
99     QList<Bookmark> bookmarks();
100
101     /**
102      * Get friendly name.
103      * @return @see title or path name combined with author(s) name.
104      */
105     QString name();
106
107     /** Get short friendly name: title or file name. */
108     QString shortName();
109
110     /** Get chapter index from part index. */
111     int chapterFromPart(int index);
112
113     /** Get part index and URL fragment from chapter index. */
114     int partFromChapter(int index, QString &fragment);
115
116     /** Get progress (0..1) corresponding to part index and part position. */
117     qreal getProgress(int part, qreal position);
118
119     QString title;                          //< Book title from EPUB.
120     QStringList parts;                      //< EPUB part list.
121     QHash<QString, ContentItem> content;    //< Content items from EPUB.
122     QImage cover;                           //< Cover image.
123     QStringList creators;                   //< Creators.
124     QString date;                           //< Date of creation.
125     QString publisher;                      //< Publisher.
126     QString datePublished;                  //< Date of publishing.
127     QString subject;                        //< Subject.
128     QString source;                         //< Source.
129     QString rights;                         //< Rights.
130     QString tocPath;                        //< Path to toc NCX file.
131     QString coverPath;                      //< Path to cover HTML file.
132     QStringList chapters;                   //< Main navigation items from EPUB.
133     qint64 size;                            //< Size of all parts.
134
135 signals:
136     /** Emitted if @see open() succeeds. */
137     void opened(const QString &bookPath);
138
139 protected:
140     /** Extract EPUB as ZIP. */
141     bool extract(const QStringList &excludedExtensions);
142
143     /** Extract metadata from EPUB. */
144     bool extractMetaData();
145
146     /** Parse extracted EPUB. */
147     bool parse();
148
149     /** Clear all book fields except path. */
150     void clear();
151
152     /** Get location of OPS file in EPUB archive. */
153     QString opsPath();
154
155     QString mPath;                          //< Path to EPUB file.
156     Bookmark mLastBookmark;                 //< Last position read.
157     QList<Bookmark> mBookmarks;             //< List of bookmarks.
158     QString mRootPath;                      //< Path to root item in EPUB dir.
159     QTemporaryFile mTempFile;               //< Guards extracting books.
160     bool loaded;                            //< True, if loaded from database.
161 };
162
163 #endif // BOOK_H