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

List:       kde-commits
Subject:    extragear/office/tellico/src
From:       Robby Stephenson <robby () periapsis ! org>
Date:       2011-03-01 5:08:34
Message-ID: 20110301050834.178B73E1F1 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1223197 by rstephenson:

more fixes for animenfo

 M  +43 -3     fetch/animenfofetcher.cpp  
 M  +1 -1      fetch/animenfofetcher.h  
 M  +9 -2      tests/animenfofetchertest.cpp  
 M  +1 -1      tests/tellicotest.config  


--- trunk/extragear/office/tellico/src/fetch/animenfofetcher.cpp #1223196:1223197
@@ -218,7 +218,7 @@
   f.close();
 #endif
 
-  entry = parseEntry(results);
+  entry = parseEntry(results, url);
   if(!entry) {
     myDebug() << "error in processing entry";
     return Data::EntryPtr();
@@ -227,7 +227,7 @@
   return entry;
 }
 
-Tellico::Data::EntryPtr AnimeNfoFetcher::parseEntry(const QString& str_) {
+Tellico::Data::EntryPtr AnimeNfoFetcher::parseEntry(const QString& str_, const KUrl& \
url_) {  // myDebug();
  // class might be anime_info_top
   QRegExp infoRx(QLatin1String("<td\\s+[^>]*class\\s*=\\s*[\"']anime_info[^>]*>(.*)</td>"), \
Qt::CaseInsensitive); @@ -262,6 +262,15 @@
   f->setCategory(i18n("Features"));
   coll->addField(f);
 
+  f = new Data::Field(QLatin1String("animenfo"), i18n("AnimeNfo Link"), \
Data::Field::URL); +  f->setCategory(i18n("General"));
+  coll->addField(f);
+
+  f = new Data::Field(QLatin1String("animenfo-rating"), i18n("AnimeNfo Rating"), \
Data::Field::Rating); +  f->setCategory(i18n("General"));
+  f->setProperty(QLatin1String("maximum"), QLatin1String("10"));
+  coll->addField(f);
+
  // map captions in HTML to field names
   QHash<QString, QString> fieldMap;
   fieldMap.insert(QLatin1String("Title"), QLatin1String("title"));
@@ -272,6 +281,9 @@
   fieldMap.insert(QLatin1String("Year Published"), QLatin1String("year"));
   fieldMap.insert(QLatin1String("Studio"), QLatin1String("studio"));
   fieldMap.insert(QLatin1String("US Distribution"), QLatin1String("distributor"));
+  fieldMap.insert(QLatin1String("Director"), QLatin1String("director"));
+  fieldMap.insert(QLatin1String("Script"), QLatin1String("writer"));
+  fieldMap.insert(QLatin1String("User Rating"), QLatin1String("animenfo-rating"));
 
   Data::EntryPtr entry(new Data::Entry(coll));
 
@@ -295,6 +307,12 @@
             // strip possible trailing text
             value.remove(QRegExp(QLatin1String("[\\D].*$")));
             entry->setField(fieldMap[key], value);
+          } else if(key == QLatin1String("User Rating")) {
+            QRegExp rating(QLatin1String("^(.*)/10"));
+            if(rating.indexIn(value) > -1) {
+              const double d = rating.cap(1).toDouble();
+              entry->setField(fieldMap[key], \
QString::number(static_cast<int>(d+0.5))); +            }
           } else {
             entry->setField(fieldMap[key], value);
           }
@@ -313,6 +331,7 @@
     }
     n = (n+1)%2;
   }
+  entry->setField(QLatin1String("animenfo"), url_.url());
 
   // image
   QRegExp imgRx(QString::fromLatin1("<img\\s+[^>]*src\\s*=\\s*[\"']([^>]*)[\"']\\s+[^>]*alt\\s*=\\s*[\"']%1[\"']")
 @@ -342,13 +361,32 @@
       entry->setField(QLatin1String("alttitle"), value);
     }
   }
+
+  pos = s.indexOf(QLatin1String("Description"), pos > -1 ? pos : 0);
+  if(pos > -1) {
   QRegExp descRx(QLatin1String("<td\\s[^>]*class\\s*=\\s*[\"']description[\"'].*>(.*)</td"), \
Qt::CaseInsensitive);  descRx.setMinimal(true);
-  pos = descRx.indexIn(s);
+    pos = descRx.indexIn(s, pos+1);
   if(pos > -1) {
     entry->setField(QLatin1String("plot"), descRx.cap(1).simplified());
   }
+  }
 
+  pos = s.indexOf(QLatin1String("Voice Talent"));
+  if(pos > -1) {
+    QRegExp charRx(QLatin1String("<a \
href=['\"]/anime/character/display.php.*>(.*)</a>"), Qt::CaseInsensitive); +    \
charRx.setMinimal(true); +    QRegExp voiceRx(QLatin1String("<a \
href=['\"]animeseiyuu.*>(.*)</a>"), Qt::CaseInsensitive); +    \
voiceRx.setMinimal(true); +    QStringList castLines;
+    for(pos = s.indexOf(charRx, pos); pos > -1; pos = s.indexOf(charRx, pos+1)) {
+      if(voiceRx.indexIn(s, pos) > -1) {
+        castLines << voiceRx.cap(1) + FieldFormat::columnDelimiterString() + \
charRx.cap(1); +      }
+    }
+    entry->setField(QLatin1String("cast"), \
castLines.join(FieldFormat::rowDelimiterString())); +  }
+
   return entry;
 }
 
@@ -379,6 +417,8 @@
   hash[QLatin1String("episodes")]    = i18n("Episodes");
   hash[QLatin1String("origtitle")]   = i18n("Original Title");
   hash[QLatin1String("alttitle")]    = i18n("Alternative Titles");
+  hash[QLatin1String("animenfo-rating")] = i18n("AnimeNfo Rating");
+  hash[QLatin1String("animenfo")]        = i18n("AnimeNfo Link");
   return hash;
 }
 
--- trunk/extragear/office/tellico/src/fetch/animenfofetcher.h #1223196:1223197
@@ -81,7 +81,7 @@
 private:
   virtual void search();
   virtual FetchRequest updateRequest(Data::EntryPtr entry);
-  Data::EntryPtr parseEntry(const QString& str);
+  Data::EntryPtr parseEntry(const QString& str, const KUrl& url);
 
   QByteArray m_data;
   int m_total;
--- trunk/extragear/office/tellico/src/tests/animenfofetchertest.cpp #1223196:1223197
@@ -78,7 +78,7 @@
   QCOMPARE(entry->field("episodes"), QLatin1String("2"));
   QCOMPARE(entry->field("studio"), QLatin1String("AIC (Anime International \
Company)"));  QCOMPARE(entry->field("origtitle"), \
                QString::fromUtf8("ああっ女神さまっ (2011)"));
-  QVERIFY(!entry->field("plot").isEmpty());
+  QVERIFY(entry->field("plot").startsWith(QLatin1String("Keiichi finds out")));
   QVERIFY(!entry->field("cover").isEmpty());
 }
 
@@ -114,9 +114,16 @@
   QCOMPARE(entry->field("genre"), QLatin1String("Comedy; Drama; Romance"));
   QCOMPARE(entry->field("studio"), QLatin1String("J.C.STAFF"));
   QCOMPARE(entry->field("origtitle"), \
QString::fromUtf8("ハチミツとクローバー")); +  \
QCOMPARE(entry->field("director"), QString::fromUtf8("Kasai Kenichi (カサヰ \
ケンイチ)")); +  QCOMPARE(entry->field("writer"), QString::fromUtf8("Kuroda \
Yosuke (黒田洋介)"));  QCOMPARE(entry->field("alttitle"), QLatin1String("Honey \
                and Clover"));
-  QVERIFY(!entry->field("plot").isEmpty());
+  QCOMPARE(entry->field("animenfo-rating"), QLatin1String("9"));
+  QVERIFY(entry->field("plot").startsWith(QLatin1String("Takemoto, Mayama, and \
Morita are students")));  QVERIFY(!entry->field("cover").isEmpty());
+  QVERIFY(!entry->field("animenfo").isEmpty());
+  QStringList castList = Tellico::FieldFormat::splitTable(entry->field("cast"));
+  QCOMPARE(castList.count(), 7);
+  QCOMPARE(castList.at(0), QString::fromUtf8("Kudo Haruka (工藤晴香)::Hanamoto \
Hagumi"));  }
 
 void AnimenfoFetcherTest::slotResult(KJob* job_) {
--- trunk/extragear/office/tellico/src/tests/tellicotest.config #1223196:1223197
@@ -2,7 +2,7 @@
 Custom Fields=alttitle,imdb
 
 [AnimeNfo.com]
-Custom Fields=alttitle,episodes,origtitle,distributor
+Custom Fields=alttitle,episodes,origtitle,distributor,animenfo,animenfo-rating
 
 [GCstar Video]
 CollectionType=3


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

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