Changeset View
Changeset View
Standalone View
Standalone View
src/acbf/AcbfBookinfo.cpp
Show First 20 Lines • Show All 55 Lines • ▼ Show 20 Line(s) | 55 | BookInfo::BookInfo(Metadata* parent) | |||
---|---|---|---|---|---|
56 | : QObject(parent) | 56 | : QObject(parent) | ||
57 | , d(new Private) | 57 | , d(new Private) | ||
58 | { | 58 | { | ||
59 | qRegisterMetaType<BookInfo*>("BookInfo*"); | 59 | qRegisterMetaType<BookInfo*>("BookInfo*"); | ||
60 | d->coverPage = new Page(metadata()->document()); | 60 | d->coverPage = new Page(metadata()->document()); | ||
61 | d->coverPage->setIsCoverPage(true); | 61 | d->coverPage->setIsCoverPage(true); | ||
62 | } | 62 | } | ||
63 | 63 | | |||
64 | BookInfo::~BookInfo() | 64 | BookInfo::~BookInfo() = default; | ||
65 | { | | |||
66 | delete d; | | |||
67 | } | | |||
68 | 65 | | |||
69 | Metadata * BookInfo::metadata() | 66 | Metadata * BookInfo::metadata() | ||
70 | { | 67 | { | ||
71 | return qobject_cast<Metadata*>(parent()); | 68 | return qobject_cast<Metadata*>(parent()); | ||
72 | } | 69 | } | ||
73 | 70 | | |||
74 | void BookInfo::toXml(QXmlStreamWriter* writer) | 71 | void BookInfo::toXml(QXmlStreamWriter* writer) | ||
75 | { | 72 | { | ||
76 | writer->writeStartElement("book-info"); | 73 | writer->writeStartElement(QStringLiteral("book-info")); | ||
77 | 74 | | |||
78 | Q_FOREACH(Author* author, d->author) { | 75 | Q_FOREACH(Author* author, d->author) { | ||
79 | author->toXml(writer); | 76 | author->toXml(writer); | ||
80 | } | 77 | } | ||
81 | 78 | | |||
82 | QHashIterator<QString, QString> titles(d->title); | 79 | QHashIterator<QString, QString> titles(d->title); | ||
83 | while(titles.hasNext()) { | 80 | while(titles.hasNext()) { | ||
84 | titles.next(); | 81 | titles.next(); | ||
85 | writer->writeStartElement("book-title"); | 82 | writer->writeStartElement(QStringLiteral("book-title")); | ||
86 | writer->writeAttribute("lang", titles.key()); | 83 | writer->writeAttribute(QStringLiteral("lang"), titles.key()); | ||
87 | writer->writeCharacters(titles.value()); | 84 | writer->writeCharacters(titles.value()); | ||
88 | writer->writeEndElement(); | 85 | writer->writeEndElement(); | ||
89 | } | 86 | } | ||
90 | 87 | | |||
91 | QHashIterator<QString, int> genres(d->genre); | 88 | QHashIterator<QString, int> genres(d->genre); | ||
92 | while(genres.hasNext()) { | 89 | while(genres.hasNext()) { | ||
93 | genres.next(); | 90 | genres.next(); | ||
94 | writer->writeStartElement("genre"); | 91 | writer->writeStartElement(QStringLiteral("genre")); | ||
95 | writer->writeAttribute("match", QString::number(genres.value())); | 92 | writer->writeAttribute(QStringLiteral("match"), QString::number(genres.value())); | ||
96 | writer->writeCharacters(genres.key()); | 93 | writer->writeCharacters(genres.key()); | ||
97 | writer->writeEndElement(); | 94 | writer->writeEndElement(); | ||
98 | } | 95 | } | ||
99 | 96 | | |||
100 | writer->writeStartElement("characters"); | 97 | writer->writeStartElement("characters"); | ||
101 | writer->writeCharacters(""); | 98 | writer->writeCharacters(""); | ||
102 | Q_FOREACH(const QString& character, d->characters) { | 99 | Q_FOREACH(const QString& character, d->characters) { | ||
103 | writer->writeStartElement("name"); | 100 | writer->writeStartElement("name"); | ||
104 | writer->writeCharacters(character); | 101 | writer->writeCharacters(character); | ||
105 | writer->writeEndElement(); | 102 | writer->writeEndElement(); | ||
106 | } | 103 | } | ||
107 | writer->writeEndElement(); | 104 | writer->writeEndElement(); | ||
108 | 105 | | |||
109 | QHashIterator<QString, QStringList> annotations(d->annotation); | 106 | QHashIterator<QString, QStringList> annotations(d->annotation); | ||
110 | while(annotations.hasNext()) { | 107 | while(annotations.hasNext()) { | ||
111 | annotations.next(); | 108 | annotations.next(); | ||
112 | writer->writeStartElement("annotation"); | 109 | writer->writeStartElement(QStringLiteral("annotation")); | ||
113 | writer->writeAttribute("lang", annotations.key()); | 110 | writer->writeAttribute(QStringLiteral("lang"), annotations.key()); | ||
114 | Q_FOREACH(const QString& paragraph, annotations.value()) { | 111 | Q_FOREACH(const QString& paragraph, annotations.value()) { | ||
115 | writer->writeStartElement("p"); | 112 | writer->writeStartElement(QStringLiteral("p")); | ||
116 | writer->writeCharacters(paragraph); | 113 | writer->writeCharacters(paragraph); | ||
117 | writer->writeEndElement(); | 114 | writer->writeEndElement(); | ||
118 | } | 115 | } | ||
119 | writer->writeEndElement(); | 116 | writer->writeEndElement(); | ||
120 | } | 117 | } | ||
121 | 118 | | |||
122 | QHashIterator<QString, QStringList> keywords(d->keywords); | 119 | QHashIterator<QString, QStringList> keywords(d->keywords); | ||
123 | while(keywords.hasNext()) { | 120 | while(keywords.hasNext()) { | ||
124 | keywords.next(); | 121 | keywords.next(); | ||
125 | writer->writeStartElement("keywords"); | 122 | writer->writeStartElement(QStringLiteral("keywords")); | ||
126 | writer->writeAttribute("lang", keywords.key()); | 123 | writer->writeAttribute(QStringLiteral("lang"), keywords.key()); | ||
127 | writer->writeCharacters(keywords.value().join(',')); | 124 | writer->writeCharacters(keywords.value().join(',')); | ||
128 | writer->writeEndElement(); | 125 | writer->writeEndElement(); | ||
129 | } | 126 | } | ||
130 | 127 | | |||
131 | d->coverPage->toXml(writer); | 128 | d->coverPage->toXml(writer); | ||
132 | 129 | | |||
133 | writer->writeStartElement("languages"); | 130 | writer->writeStartElement(QStringLiteral("languages")); | ||
134 | Q_FOREACH(Language* language, d->languages) { | 131 | Q_FOREACH(Language* language, d->languages) { | ||
135 | language->toXml(writer); | 132 | language->toXml(writer); | ||
136 | } | 133 | } | ||
137 | writer->writeEndElement(); | 134 | writer->writeEndElement(); | ||
138 | 135 | | |||
139 | Q_FOREACH(Sequence* sequence, d->sequence) { | 136 | Q_FOREACH(Sequence* sequence, d->sequence) { | ||
140 | sequence->toXml(writer); | 137 | sequence->toXml(writer); | ||
141 | } | 138 | } | ||
142 | Q_FOREACH(DatabaseRef* ref, d->databaseRef) { | 139 | Q_FOREACH(DatabaseRef* ref, d->databaseRef) { | ||
143 | ref->toXml(writer); | 140 | ref->toXml(writer); | ||
144 | } | 141 | } | ||
145 | Q_FOREACH(ContentRating* rating, d->contentRating) { | 142 | Q_FOREACH(ContentRating* rating, d->contentRating) { | ||
146 | rating->toXml(writer); | 143 | rating->toXml(writer); | ||
147 | } | 144 | } | ||
148 | 145 | | |||
149 | writer->writeEndElement(); | 146 | writer->writeEndElement(); | ||
150 | } | 147 | } | ||
151 | 148 | | |||
152 | bool BookInfo::fromXml(QXmlStreamReader *xmlReader) | 149 | bool BookInfo::fromXml(QXmlStreamReader *xmlReader) | ||
153 | { | 150 | { | ||
154 | while(xmlReader->readNextStartElement()) | 151 | while(xmlReader->readNextStartElement()) | ||
155 | { | 152 | { | ||
156 | if(xmlReader->name() == "author") | 153 | if(xmlReader->name() == QStringLiteral("author")) | ||
157 | { | 154 | { | ||
158 | Author* newAuthor = new Author(metadata()); | 155 | Author* newAuthor = new Author(metadata()); | ||
159 | if(!newAuthor->fromXml(xmlReader)) { | 156 | if(!newAuthor->fromXml(xmlReader)) { | ||
160 | return false; | 157 | return false; | ||
161 | } | 158 | } | ||
162 | d->author.append(newAuthor); | 159 | d->author.append(newAuthor); | ||
163 | } | 160 | } | ||
164 | else if(xmlReader->name() == "book-title") | 161 | else if(xmlReader->name() == QStringLiteral("book-title")) | ||
165 | { | 162 | { | ||
166 | QString language = xmlReader->attributes().value("lang").toString(); | 163 | QString language = xmlReader->attributes().value(QStringLiteral("lang")).toString(); | ||
167 | d->title[language] = xmlReader->readElementText(QXmlStreamReader::IncludeChildElements); | 164 | d->title[language] = xmlReader->readElementText(QXmlStreamReader::IncludeChildElements); | ||
168 | } | 165 | } | ||
169 | else if(xmlReader->name() == "genre") | 166 | else if(xmlReader->name() == QStringLiteral("genre")) | ||
170 | { | 167 | { | ||
171 | int match = xmlReader->attributes().value("match").toInt(); | 168 | int match = xmlReader->attributes().value(QStringLiteral("match")).toInt(); | ||
172 | d->genre[xmlReader->readElementText(QXmlStreamReader::IncludeChildElements)] = match; | 169 | d->genre[xmlReader->readElementText(QXmlStreamReader::IncludeChildElements)] = match; | ||
173 | } | 170 | } | ||
174 | else if(xmlReader->name() == "characters") | 171 | else if(xmlReader->name() == QStringLiteral("characters")) | ||
175 | { | 172 | { | ||
176 | while(xmlReader->readNextStartElement()) { | 173 | while(xmlReader->readNextStartElement()) { | ||
177 | if(xmlReader->name() == "name") { | 174 | if(xmlReader->name() == QStringLiteral("name")) { | ||
178 | d->characters.append(xmlReader->readElementText(QXmlStreamReader::IncludeChildElements)); | 175 | d->characters.append(xmlReader->readElementText(QXmlStreamReader::IncludeChildElements)); | ||
179 | } | 176 | } | ||
180 | else { | 177 | else { | ||
181 | xmlReader->skipCurrentElement(); | 178 | xmlReader->skipCurrentElement(); | ||
182 | } | 179 | } | ||
183 | } | 180 | } | ||
184 | qDebug() << "Created character entries, we now have" << d->characters.count() << "characters"; | 181 | qDebug() << "Created character entries, we now have" << d->characters.count() << "characters"; | ||
185 | } | 182 | } | ||
186 | else if(xmlReader->name() == "annotation") | 183 | else if(xmlReader->name() == QStringLiteral("annotation")) | ||
187 | { | 184 | { | ||
188 | QString language = xmlReader->attributes().value("lang").toString(); | 185 | QString language = xmlReader->attributes().value(QStringLiteral("lang")).toString(); | ||
189 | QStringList paragraphs; | 186 | QStringList paragraphs; | ||
190 | while(xmlReader->readNextStartElement()) { | 187 | while(xmlReader->readNextStartElement()) { | ||
191 | if(xmlReader->name() == "p") { | 188 | if(xmlReader->name() == QStringLiteral("p")) { | ||
192 | paragraphs.append(xmlReader->readElementText(QXmlStreamReader::IncludeChildElements)); | 189 | paragraphs.append(xmlReader->readElementText(QXmlStreamReader::IncludeChildElements)); | ||
193 | } | 190 | } | ||
194 | else { | 191 | else { | ||
195 | xmlReader->skipCurrentElement(); | 192 | xmlReader->skipCurrentElement(); | ||
196 | } | 193 | } | ||
197 | } | 194 | } | ||
198 | d->annotation[language] = paragraphs; | 195 | d->annotation[language] = paragraphs; | ||
199 | } | 196 | } | ||
200 | else if(xmlReader->name() == "keywords") | 197 | else if(xmlReader->name() == QStringLiteral("keywords")) | ||
201 | { | 198 | { | ||
202 | QString language = xmlReader->attributes().value("lang").toString(); | 199 | QString language = xmlReader->attributes().value(QStringLiteral("lang")).toString(); | ||
203 | d->keywords[language] = xmlReader->readElementText(QXmlStreamReader::IncludeChildElements).split(','); | 200 | d->keywords[language] = xmlReader->readElementText(QXmlStreamReader::IncludeChildElements).split(','); | ||
204 | } | 201 | } | ||
205 | else if(xmlReader->name() == "coverpage") | 202 | else if(xmlReader->name() == QStringLiteral("coverpage")) | ||
206 | { | 203 | { | ||
207 | if(!d->coverPage->fromXml(xmlReader)) { | 204 | if(!d->coverPage->fromXml(xmlReader)) { | ||
208 | return false; | 205 | return false; | ||
209 | } | 206 | } | ||
210 | } | 207 | } | ||
211 | else if(xmlReader->name() == "languages") | 208 | else if(xmlReader->name() == QStringLiteral("languages")) | ||
212 | { | 209 | { | ||
213 | while(xmlReader->readNextStartElement()) { | 210 | while(xmlReader->readNextStartElement()) { | ||
214 | if(xmlReader->name() == "text-layer") { | 211 | if(xmlReader->name() == QStringLiteral("text-layer")) { | ||
215 | Language* newLanguage = new Language(this); | 212 | Language* newLanguage = new Language(this); | ||
216 | newLanguage->fromXml(xmlReader); | 213 | newLanguage->fromXml(xmlReader); | ||
217 | d->languages.append(newLanguage); | 214 | d->languages.append(newLanguage); | ||
218 | } | 215 | } | ||
219 | else { | 216 | else { | ||
220 | xmlReader->skipCurrentElement(); | 217 | xmlReader->skipCurrentElement(); | ||
221 | } | 218 | } | ||
222 | } | 219 | } | ||
223 | } | 220 | } | ||
224 | else if(xmlReader->name() == "sequence") | 221 | else if(xmlReader->name() == QStringLiteral("sequence")) | ||
225 | { | 222 | { | ||
226 | Sequence* newSequence = new Sequence(this); | 223 | Sequence* newSequence = new Sequence(this); | ||
227 | newSequence->fromXml(xmlReader); | 224 | newSequence->fromXml(xmlReader); | ||
228 | d->sequence.append(newSequence); | 225 | d->sequence.append(newSequence); | ||
229 | } | 226 | } | ||
230 | else if(xmlReader->name() == "databaseref") | 227 | else if(xmlReader->name() == QStringLiteral("databaseref")) | ||
231 | { | 228 | { | ||
232 | DatabaseRef* newDatabaseRef = new DatabaseRef(this); | 229 | DatabaseRef* newDatabaseRef = new DatabaseRef(this); | ||
233 | newDatabaseRef->fromXml(xmlReader); | 230 | newDatabaseRef->fromXml(xmlReader); | ||
234 | d->databaseRef.append(newDatabaseRef); | 231 | d->databaseRef.append(newDatabaseRef); | ||
235 | } | 232 | } | ||
236 | else if(xmlReader->name() == "content-rating") | 233 | else if(xmlReader->name() == QStringLiteral("content-rating")) | ||
237 | { | 234 | { | ||
238 | ContentRating* newContentRating = new ContentRating(this); | 235 | ContentRating* newContentRating = new ContentRating(this); | ||
239 | newContentRating->fromXml(xmlReader); | 236 | newContentRating->fromXml(xmlReader); | ||
240 | d->contentRating.append(newContentRating); | 237 | d->contentRating.append(newContentRating); | ||
241 | } | 238 | } | ||
242 | else | 239 | else | ||
243 | { | 240 | { | ||
244 | qWarning() << Q_FUNC_INFO << "currently unsupported subsection:" << xmlReader->name(); | 241 | qWarning() << Q_FUNC_INFO << "currently unsupported subsection:" << xmlReader->name(); | ||
▲ Show 20 Lines • Show All 133 Lines • ▼ Show 20 Line(s) | |||||
378 | void BookInfo::removeGenre(QString genre) | 375 | void BookInfo::removeGenre(QString genre) | ||
379 | { | 376 | { | ||
380 | d->genre.remove(genre); | 377 | d->genre.remove(genre); | ||
381 | emit genresChanged(); | 378 | emit genresChanged(); | ||
382 | } | 379 | } | ||
383 | 380 | | |||
384 | QStringList BookInfo::availableGenres() | 381 | QStringList BookInfo::availableGenres() | ||
385 | { | 382 | { | ||
386 | QStringList genres; | 383 | return { | ||
387 | genres << "science_fiction"; | 384 | QStringLiteral("science_fiction"), | ||
388 | genres << "fantasy"; | 385 | QStringLiteral("fantasy"), | ||
389 | genres << "adventure"; | 386 | QStringLiteral("adventure"), | ||
390 | genres << "horror"; | 387 | QStringLiteral("horror"), | ||
391 | genres << "mystery"; | 388 | QStringLiteral("mystery"), | ||
392 | genres << "crime"; | 389 | QStringLiteral("crime"), | ||
393 | genres << "military"; // (war ...) | 390 | QStringLiteral("military"), // (war ...) | ||
394 | genres << "real_life"; | 391 | QStringLiteral("real_life"), | ||
395 | genres << "superhero"; // (e.g. Superman, Spiderman … or Super Villains) | 392 | QStringLiteral("superhero"), // (e.g. Superman, Spiderman … or Super Villains) | ||
396 | genres << "humor"; | 393 | QStringLiteral("humor"), | ||
397 | genres << "western"; | 394 | QStringLiteral("western"), | ||
398 | genres << "manga"; | 395 | QStringLiteral("manga"), | ||
399 | genres << "politics"; | 396 | QStringLiteral("politics"), | ||
400 | genres << "caricature"; | 397 | QStringLiteral("caricature"), | ||
401 | genres << "sports"; | 398 | QStringLiteral("sports"), | ||
402 | genres << "history"; // (historical comics) | 399 | QStringLiteral("history"), // (historical comics) | ||
403 | genres << "biography"; // (biographical comics) | 400 | QStringLiteral("biography"), // (biographical comics) | ||
404 | genres << "education"; // (education and science) | 401 | QStringLiteral("education"), // (education and science) | ||
405 | genres << "computer"; // (computers related) | 402 | QStringLiteral("computer"), // (computers related) | ||
406 | genres << "religion"; | 403 | QStringLiteral("religion"), | ||
407 | genres << "romance"; | 404 | QStringLiteral("romance"), | ||
408 | genres << "children"; | 405 | QStringLiteral("children"), | ||
409 | genres << "non-fiction"; | 406 | QStringLiteral("non-fiction"), | ||
410 | genres << "adult"; | 407 | QStringLiteral("adult"), | ||
411 | genres << "alternative"; // (abstract, underground ...) | 408 | QStringLiteral("alternative"), // (abstract, underground ...) | ||
412 | genres << "other"; | 409 | QStringLiteral("other") | ||
413 | return genres; | 410 | }; | ||
414 | } | 411 | } | ||
415 | 412 | | |||
413 | | ||||
416 | QStringList BookInfo::characters() | 414 | QStringList BookInfo::characters() | ||
417 | { | 415 | { | ||
418 | return d->characters; | 416 | return d->characters; | ||
419 | } | 417 | } | ||
420 | 418 | | |||
421 | void BookInfo::addCharacter(QString name) | 419 | void BookInfo::addCharacter(QString name) | ||
422 | { | 420 | { | ||
423 | d->characters.append(name); | 421 | d->characters.append(name); | ||
▲ Show 20 Lines • Show All 113 Lines • Show Last 20 Lines |