[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