[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/office/tellico
From:       Robby Stephenson <robby () periapsis ! org>
Date:       2010-11-24 5:58:19
Message-ID: 20101124055819.04A31AC8A3 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1200168 by rstephenson:

tweak a few tests, and fix google scholar bibtex cookie setting

 M  +4 -0      ChangeLog  
 M  +31 -3     src/fetch/googlescholarfetcher.cpp  
 M  +1 -0      src/fetch/googlescholarfetcher.h  
 M  +12 -3     src/tests/discogsfetchertest.cpp  
 M  +1 -1      src/tests/freebasefetchertest.cpp  
 M  +2 -2      src/tests/themoviedbfetchertest.cpp  


--- trunk/extragear/office/tellico/ChangeLog #1200167:1200168
@@ -1,3 +1,7 @@
+2010-11-23  Robby Stephenson  <robby@periapsis.org>
+
+	* Fixed Google Scholar fetcher to properly set bibtex cookie.
+
 2010-11-21  Robby Stephenson  <robby@periapsis.org>
 
 	* Added cover art to MusicBrainz fetcher.
--- trunk/extragear/office/tellico/src/fetch/googlescholarfetcher.cpp \
#1200167:1200168 @@ -74,9 +74,7 @@
 
 void GoogleScholarFetcher::search() {
   if(!m_cookieIsSet) {
-    // have to set preferences to have bibtex output
-    FileHandler::readTextFile(KUrl(SCHOLAR_SET_BIBTEX_URL), true);
-    m_cookieIsSet = true;
+    setBibtexCookie();
   }
   m_started = true;
   m_start = 0;
@@ -233,6 +231,36 @@
   return favIcon("http://scholar.google.com");
 }
 
+void GoogleScholarFetcher::setBibtexCookie() {
+  // have to set preferences to have bibtex output
+  const QString text = FileHandler::readTextFile(KUrl(SCHOLAR_SET_BIBTEX_URL), \
true); +  // find hidden input variables
+  QRegExp inputRx(QLatin1String("<input\\s+.*\\s+type\\s*=\\s*hidden\\s+.*>"));
+  inputRx.setMinimal(true);
+  QRegExp pairRx(QLatin1String("([^=\\s<]+)\\s*=\\s*\"?([^=\\s\">]+)\"?"));
+  QHash<QString, QString> nameValues;
+  for(int pos = inputRx.indexIn(text); pos > -1; pos = inputRx.indexIn(text, \
pos+inputRx.matchedLength())) { +    const QString input = inputRx.cap(0);
+    QString name, value;
+    for(int pos2 = pairRx.indexIn(input); pos2 > -1; pos2 = pairRx.indexIn(input, \
pos2+pairRx.matchedLength())) { +      if(pairRx.cap(1).toLower() == \
QLatin1String("name")) { +        name = pairRx.cap(2);
+      } else if(pairRx.cap(1).toLower() == QLatin1String("value")) {
+        value = pairRx.cap(2);
+      }
+    }
+    if(!name.isEmpty() && !value.isEmpty()) {
+      nameValues.insert(name, value);
+    }
+  }
+  QString newUrl = QLatin1String(SCHOLAR_SET_BIBTEX_URL);
+  for(QHash<QString, QString>::const_iterator i = nameValues.constBegin(); i != \
nameValues.constEnd(); ++i) { +    newUrl += QLatin1Char('&') + i.key() + \
QLatin1Char('=') + i.value(); +  }
+  FileHandler::readTextFile(KUrl(newUrl), true);
+  m_cookieIsSet = true;
+}
+
 GoogleScholarFetcher::ConfigWidget::ConfigWidget(QWidget* parent_, const \
GoogleScholarFetcher* /*=0*/)  : Fetch::ConfigWidget(parent_) {
   QVBoxLayout* l = new QVBoxLayout(optionsWidget());
--- trunk/extragear/office/tellico/src/fetch/googlescholarfetcher.h #1200167:1200168
@@ -92,6 +92,7 @@
   virtual void search();
   virtual FetchRequest updateRequest(Data::EntryPtr entry);
   void doSearch();
+  void setBibtexCookie();
 
   int m_limit;
   int m_start;
--- trunk/extragear/office/tellico/src/tests/discogsfetchertest.cpp #1200167:1200168
@@ -57,14 +57,23 @@
   // don't use 'this' as job parent, it crashes
   Tellico::Fetch::FetcherJob* job = new Tellico::Fetch::FetcherJob(0, fetcher, \
request);  connect(job, SIGNAL(result(KJob*)), this, SLOT(slotResult(KJob*)));
-  job->setMaximumResults(1);
 
   job->start();
   m_loop.exec();
 
-  QCOMPARE(m_results.size(), 1);
+  QVERIFY(m_results.size() > 0);
+  Tellico::Data::EntryPtr entry;  //  results can be randomly ordered, loop until \
wee find the one we want +  for(int i = 0; i < m_results.size(); ++i) {
+    Tellico::Data::EntryPtr test = m_results.at(i);
+    if(test->field(QLatin1String("artist")).toLower() == \
QLatin1String("evanescence")) { +      entry = test;
+      break;
+    } else {
+      qDebug() << "skipping" << test->title();
+    }
+  }
+  QVERIFY(entry);
 
-  Tellico::Data::EntryPtr entry = m_results.at(0);
   QCOMPARE(entry->field(QLatin1String("title")), QLatin1String("Fallen"));
   QVERIFY(!entry->field(QLatin1String("artist")).isEmpty());
   QVERIFY(!entry->field(QLatin1String("label")).isEmpty());
--- trunk/extragear/office/tellico/src/tests/freebasefetchertest.cpp #1200167:1200168
@@ -242,7 +242,7 @@
   QCOMPARE(entry->field(QLatin1String("title")).toLower(), QLatin1String("the man \
from snowy river"));  QCOMPARE(entry->field(QLatin1String("director")), \
QLatin1String("George T. Miller"));  \
                QCOMPARE(entry->field(QLatin1String("producer")), \
                QLatin1String("Simon Wincer"));
-  QCOMPARE(entry->field(QLatin1String("writer")), QLatin1String("Banjo Paterson"));
+  QCOMPARE(entry->field(QLatin1String("writer")), QLatin1String("Cul Cullen; John \
Dixon"));  QCOMPARE(entry->field(QLatin1String("composer")), QLatin1String("Bruce \
Rowland"));  QCOMPARE(entry->field(QLatin1String("studio")), QLatin1String("20th \
Century Fox"));  QCOMPARE(entry->field(QLatin1String("certification")), \
                QLatin1String("PG (USA)"));
--- trunk/extragear/office/tellico/src/tests/themoviedbfetchertest.cpp \
#1200167:1200168 @@ -49,7 +49,7 @@
   Tellico::ImageFactory::init();
 
   m_fieldValues.insert(QLatin1String("title"), QLatin1String("Superman Returns"));
-  m_fieldValues.insert(QLatin1String("studio"), QLatin1String("Warner Bros. \
Pictures; Dark Castle")); +  m_fieldValues.insert(QLatin1String("studio"), \
QLatin1String("Warner Bros. Pictures"));  m_fieldValues.insert(QLatin1String("year"), \
QLatin1String("2006"));  m_fieldValues.insert(QLatin1String("genre"), \
QLatin1String("action"));  m_fieldValues.insert(QLatin1String("director"), \
QLatin1String("Bryan Singer")); @@ -75,7 +75,7 @@
   while(i.hasNext()) {
     i.next();
     QString result = entry->field(i.key()).toLower();
-    QCOMPARE(result, i.value().toLower());
+    QVERIFY(result.contains(i.value().toLower()));
   }
   QVERIFY(!entry->field(QLatin1String("cast")).isEmpty());
   QVERIFY(!entry->field(QLatin1String("cover")).isEmpty());


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic