mirror of
https://github.com/YACReader/yacreader
synced 2025-05-28 03:10:27 -04:00
Merge pull request #85 from ivanvranjic/story-arcs-parsing
Fix for story arcs not being parsed from comicvine.
This commit is contained in:
commit
f3937b6e20
@ -44,6 +44,9 @@ static const QString CV_COVER_URL = CV_WEB_ADDRESS + "/issue/4000-%1/?api_key="
|
||||
//gets comics matching name %1 and number %2
|
||||
//http://comicvine.com/api/issues/?api_key=46680bebb358f1de690a5a365e15d325f9649f91&limit=20&filter=name:super,issue_number:15
|
||||
|
||||
//gets story arc detail
|
||||
static const QString CV_STORY_ARC_DETAIL = CV_WEB_ADDRESS + "/story_arc/4045-%1/?api_key=" + CV_API_KEY + "&format=json";
|
||||
|
||||
ComicVineClient::ComicVineClient(QObject *parent)
|
||||
: QObject(parent)
|
||||
{
|
||||
@ -173,6 +176,24 @@ void ComicVineClient::getComicDetailAsync(const QString &id)
|
||||
search->get();
|
||||
}
|
||||
|
||||
//CV_STORY_ARC_DETAIL
|
||||
QByteArray ComicVineClient::getStoryArcDetail(const QString &id, bool &outError, bool &outTimeout)
|
||||
{
|
||||
HttpWorker *search = new HttpWorker(QString(CV_STORY_ARC_DETAIL).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(id));
|
||||
|
||||
//connect(search,SIGNAL(dataReady(const QByteArray &)),this,SLOT(proccessComicDetailData(const QByteArray &)));
|
||||
//connect(search,SIGNAL(timeout()),this,SIGNAL(timeOut()));
|
||||
//connect(search,SIGNAL(finished()),search,SLOT(deleteLater()));
|
||||
search->get();
|
||||
search->wait();
|
||||
outError = !(search->wasValid());
|
||||
outTimeout = search->wasTimeout();
|
||||
QByteArray result = search->getResult();
|
||||
delete search;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void ComicVineClient::getComicCover(const QString &url)
|
||||
{
|
||||
auto search = new HttpWorker(url);
|
||||
|
@ -29,6 +29,7 @@ public slots:
|
||||
void getVolumeComicsInfo(const QString &idVolume, int page = 1);
|
||||
void getAllVolumeComicsInfo(const QString &idVolume);
|
||||
QByteArray getComicDetail(const QString &id, bool &outError, bool &outTimeout);
|
||||
QByteArray getStoryArcDetail(const QString &id, bool &outError, bool &outTimeout);
|
||||
void getComicCover(const QString &url);
|
||||
|
||||
void getComicId(const QString &id, int comicNumber);
|
||||
|
@ -554,6 +554,26 @@ ComicDB ComicVineDialog::parseComicInfo(ComicDB &comic, const QString &json, int
|
||||
comic.info.characters = characters;
|
||||
}
|
||||
|
||||
if (!result.property("story_arc_credits").isNull()) {
|
||||
QPair<QString, QString> storyArcIdAndName = getFirstStoryArcIdAndName(result.property("story_arc_credits"));
|
||||
QString storyArcId = storyArcIdAndName.first;
|
||||
QString storyArcName = storyArcIdAndName.second;
|
||||
if (!storyArcId.isNull()) {
|
||||
|
||||
QString comicId = result.property("id").toString();
|
||||
|
||||
QPair<QString, QString> arcNumberAndArcCount = getArcNumberAndArcCount(storyArcId, comicId);
|
||||
if (!arcNumberAndArcCount.first.isNull()) {
|
||||
QString arcNumber = arcNumberAndArcCount.first;
|
||||
QString arcCount = arcNumberAndArcCount.second;
|
||||
|
||||
comic.info.storyArc = storyArcName;
|
||||
comic.info.arcNumber = arcNumber;
|
||||
comic.info.arcCount = arcCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
comic.info.count = count;
|
||||
|
||||
comic.info.publisher = publisher;
|
||||
@ -615,6 +635,75 @@ QMap<QString, QString> ComicVineDialog::getAuthors(const QScriptValue &json_auth
|
||||
return authors;
|
||||
}
|
||||
|
||||
QPair<QString, QString> ComicVineDialog::getFirstStoryArcIdAndName(const QScriptValue &json_story_arcs)
|
||||
{
|
||||
QString story_arc_id = QString();
|
||||
QString story_arc_name = QString();
|
||||
|
||||
QScriptValueIterator it(json_story_arcs);
|
||||
QScriptValue resultsValue;
|
||||
while (it.hasNext()) {
|
||||
it.next();
|
||||
if (it.flags() & QScriptValue::SkipInEnumeration)
|
||||
continue;
|
||||
resultsValue = it.value();
|
||||
story_arc_id = resultsValue.property("id").toString();
|
||||
story_arc_name = resultsValue.property("name").toString();
|
||||
break;
|
||||
}
|
||||
return qMakePair(story_arc_id, story_arc_name);
|
||||
}
|
||||
|
||||
QPair<QString, QString> ComicVineDialog::getArcNumberAndArcCount(const QString &storyArcId, const QString &comicId)
|
||||
{
|
||||
auto comicVineClient = new ComicVineClient;
|
||||
bool error;
|
||||
bool timeout;
|
||||
QByteArray result = comicVineClient->getStoryArcDetail(storyArcId, error, timeout);
|
||||
if (error || timeout)
|
||||
return qMakePair(QString(), QString());
|
||||
QString json = result;
|
||||
|
||||
QScriptEngine engine;
|
||||
QScriptValue sc;
|
||||
sc = engine.evaluate("(" + json + ")");
|
||||
|
||||
if (!sc.property("error").isValid() && sc.property("error").toString() != "OK") {
|
||||
qDebug("Error detected");
|
||||
return qMakePair(QString(), QString());
|
||||
} else {
|
||||
int numResults = sc.property("number_of_total_results").toString().toInt(); //fix to weird behaviour using hasNext
|
||||
|
||||
if (numResults > 0) {
|
||||
QScriptValue result = sc.property("results");
|
||||
|
||||
if (!result.property("issues").isNull()) {
|
||||
QScriptValue issues = result.property("issues");
|
||||
|
||||
int arcNumber = 0;
|
||||
int arcCount = 0;
|
||||
|
||||
QScriptValueIterator it(issues);
|
||||
QScriptValue resultsValue;
|
||||
while (it.hasNext()) {
|
||||
it.next();
|
||||
if (it.flags() & QScriptValue::SkipInEnumeration)
|
||||
continue;
|
||||
resultsValue = it.value();
|
||||
if (comicId == resultsValue.property("id").toString()) {
|
||||
arcNumber = arcCount + 1;
|
||||
}
|
||||
arcCount++;
|
||||
}
|
||||
return qMakePair(QString::number(arcNumber), QString::number(arcCount));
|
||||
}
|
||||
return qMakePair(QString(), QString());
|
||||
}
|
||||
return qMakePair(QString(), QString());
|
||||
}
|
||||
return qMakePair(QString(), QString());
|
||||
}
|
||||
|
||||
void ComicVineDialog::toggleSkipButton()
|
||||
{
|
||||
if (mode == SingleComicInList)
|
||||
|
@ -66,6 +66,8 @@ protected slots:
|
||||
private:
|
||||
QString getCharacters(const QScriptValue &json_characters);
|
||||
QMap<QString, QString> getAuthors(const QScriptValue &json_authors);
|
||||
QPair<QString, QString> getFirstStoryArcIdAndName(const QScriptValue &json_story_arcs);
|
||||
QPair<QString, QString> getArcNumberAndArcCount(const QString &storyArcId, const QString &comicId);
|
||||
|
||||
void toggleSkipButton();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user