[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kbibtex] /: Various minor fixes and updates for ISBNdb search
From: Thomas Fischer <fischer () unix-ag ! uni-kl ! de>
Date: 2014-01-31 21:40:47
Message-ID: E1W9LpP-0000er-4H () scm ! kde ! org
[Download RAW message or body]
Git commit ad35283b292b728f7d24a3d026e9fea78d20b441 by Thomas Fischer.
Committed on 31/01/2014 at 21:40.
Pushed by thomasfischer into branch 'master'.
Various minor fixes and updates for ISBNdb search
M +27 -25 src/networking/onlinesearch/onlinesearchisbndb.cpp
M +33 -2 xslt/isbndb2bibtex.xsl
http://commits.kde.org/kbibtex/ad35283b292b728f7d24a3d026e9fea78d20b441
diff --git a/src/networking/onlinesearch/onlinesearchisbndb.cpp \
b/src/networking/onlinesearch/onlinesearchisbndb.cpp index dc304c9..383ab22 100644
--- a/src/networking/onlinesearch/onlinesearchisbndb.cpp
+++ b/src/networking/onlinesearch/onlinesearchisbndb.cpp
@@ -34,13 +34,13 @@ private:
static const QString accessKey;
static const QString booksUrl, authorsUrl;
- QString cachedPersonId;
-
public:
XSLTransform *xslt;
+ KUrl queryUrl;
+ int currentPage, maxPage;
OnlineSearchIsbnDBPrivate(OnlineSearchIsbnDB *parent)
- : p(parent), xslt() {
+ : p(parent), xslt(), currentPage(0), maxPage(0) {
xslt = XSLTransform::createXSLTransform(KStandardDirs::locate("data", \
"kbibtex/isbndb2bibtex.xsl")); }
@@ -49,25 +49,22 @@ public:
}
KUrl buildBooksUrl(const QMap<QString, QString> &query, int numResults) {
- Q_UNUSED(numResults)
+ currentPage = 1;
+ maxPage = (numResults + 9) / 10;
- KUrl queryUrl(booksUrl);
+ queryUrl = KUrl(booksUrl);
queryUrl.addQueryItem(QLatin1String("access_key"), accessKey);
- queryUrl.addQueryItem(QLatin1String("results"), \
QLatin1String("details,texts")); + \
queryUrl.addQueryItem(QLatin1String("results"), QLatin1String("texts,authors"));
QString index1, value1;
if (query[queryKeyFreeText].isEmpty() && query[queryKeyAuthor].isEmpty() && \
!query[queryKeyTitle].isEmpty()) { /// only searching for title
index1 = QLatin1String("title");
value1 = query[queryKeyTitle];
- } else if (!cachedPersonId.isEmpty() && query[queryKeyFreeText].isEmpty() && \
!query[queryKeyAuthor].isEmpty() && query[queryKeyTitle].isEmpty()) {
- /// only searching for author
- index1 = QLatin1String("person_id");
- value1 = cachedPersonId;
} else {
/// multiple different values given
index1 = QLatin1String("full");
- value1 = query[queryKeyFreeText] + QChar(' ') + query[queryKeyAuthor] + \
QChar(' ') + query[queryKeyTitle]; + value1 = query[queryKeyFreeText] + \
QLatin1Char(' ') + query[queryKeyAuthor] + QLatin1Char(' ') + query[queryKeyTitle]; \
} queryUrl.addQueryItem(QLatin1String("index1"), index1);
queryUrl.addQueryItem(QLatin1String("value1"), value1);
@@ -95,12 +92,12 @@ void OnlineSearchIsbnDB::startSearch(const QMap<QString, QString> \
&query, int nu {
m_hasBeenCanceled = false;
+ emit progress(0, d->maxPage);
+
QNetworkRequest request(d->buildBooksUrl(query, numResults));
QNetworkReply *reply = InternalNetworkAccessManager::self()->get(request);
InternalNetworkAccessManager::self()->setNetworkReplyTimeout(reply);
connect(reply, SIGNAL(finished()), this, SLOT(downloadDone()));
-
- emit progress(0, 2);
}
void OnlineSearchIsbnDB::startSearch()
@@ -137,7 +134,7 @@ void OnlineSearchIsbnDB::cancel()
void OnlineSearchIsbnDB::downloadDone()
{
- emit progress(1, 2);
+ emit progress(d->currentPage, d->maxPage);
QNetworkReply *reply = static_cast<QNetworkReply *>(sender());
@@ -145,12 +142,8 @@ void OnlineSearchIsbnDB::downloadDone()
/// ensure proper treatment of UTF-8 characters
const QString xmlCode = QString::fromUtf8(reply->readAll().data());
- dumpToFile("xml.xml", xmlCode);
-
/// use XSL transformation to get BibTeX document from XML result
- QString bibtexCode = \
d->xslt->transform(xmlCode).replace(QLatin1String("<?xml version=\"1.0\" \
encoding=\"UTF-8\"?>"), QString());
-
- dumpToFile("bib.bib", bibtexCode);
+ const QString bibtexCode = \
d->xslt->transform(xmlCode).remove(QLatin1String("<?xml version=\"1.0\" \
encoding=\"UTF-8\"?>")).replace(QLatin1String("&"), QLatin1String("&"));
FileImporterBibTeX importer;
File *bibtexFile = importer.fromString(bibtexCode);
@@ -161,18 +154,27 @@ void OnlineSearchIsbnDB::downloadDone()
QSharedPointer<Entry> entry = (*it).dynamicCast<Entry>();
hasEntries |= publishEntry(entry);
}
+ delete bibtexFile;
- if (!hasEntries)
+ if (!hasEntries) {
kDebug() << "No hits found in" << reply->url().toString();
- emit stoppedSearch(resultNoError);
-
- delete bibtexFile;
+ emit stoppedSearch(resultNoError);
+ } else if (d->currentPage >= d->maxPage)
+ emit stoppedSearch(resultNoError);
+ else {
+ ++d->currentPage;
+ KUrl nextUrl = d->queryUrl;
+ nextUrl.addQueryItem(QLatin1String("page_number"), \
QString::number(d->currentPage)); + QNetworkRequest request(nextUrl);
+ QNetworkReply *nextReply = \
InternalNetworkAccessManager::self()->get(request); + \
InternalNetworkAccessManager::self()->setNetworkReplyTimeout(nextReply); + \
connect(nextReply, SIGNAL(finished()), this, SLOT(downloadDone())); + \
return; + }
} else {
kWarning() << "No valid BibTeX file results returned on request on" << \
reply->url().toString(); emit stoppedSearch(resultUnspecifiedError);
}
} else
kDebug() << "url was" << reply->url().toString();
-
- emit progress(2, 2);
}
diff --git a/xslt/isbndb2bibtex.xsl b/xslt/isbndb2bibtex.xsl
index 90e474e..fb0b451 100644
--- a/xslt/isbndb2bibtex.xsl
+++ b/xslt/isbndb2bibtex.xsl
@@ -59,13 +59,44 @@
<xsl:text>}</xsl:text>
</xsl:if>
-<!-- authors (no detailed parsing here) -->
-<xsl:if test="AuthorsText and string-length(AuthorsText)>2">
+<!-- authors -->
+<xsl:choose>
+<xsl:when test="AuthorsText and string-length(AuthorsText)>2">
<xsl:text>,
author = {{</xsl:text>
<xsl:value-of select="AuthorsText" />
<xsl:text>}}</xsl:text>
+</xsl:when>
+<xsl:otherwise>
+<xsl:if test="Authors/Person and string-length(Authors/Person)>2">
+<xsl:text>,
+ author = {</xsl:text>
+<xsl:for-each select="Authors/Person">
+<xsl:apply-templates select="."/>
+<xsl:if test="position()!=last()"><xsl:text> and </xsl:text></xsl:if>
+</xsl:for-each>
+<xsl:text>}</xsl:text>
+</xsl:if>
+</xsl:otherwise>
+</xsl:choose>
+
+<!-- ISBN -->
+<xsl:choose>
+<xsl:when test="@isbn13 and string-length(@isbn13)>2">
+<xsl:text>,
+ isbn = {</xsl:text>
+<xsl:value-of select="@isbn13" />
+<xsl:text>}</xsl:text>
+</xsl:when>
+<xsl:otherwise>
+<xsl:if test="@isbn and string-length(@isbn)>2">
+<xsl:text>,
+ isbn = {</xsl:text>
+<xsl:value-of select="@isbn" />
+<xsl:text>}</xsl:text>
</xsl:if>
+</xsl:otherwise>
+</xsl:choose>
<!-- closing entry -->
<xsl:text>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic