Merge pull request #222 from YACReader/feature/drop_qtscript

fix: Replace QtScript with QJson*
This commit is contained in:
Luis Ángel San Martín 2021-02-27 13:58:56 +01:00 committed by GitHub
commit 81f9b74fa2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 236 additions and 263 deletions

View File

@ -69,7 +69,7 @@ macx {
#CONFIG += release #CONFIG += release
CONFIG -= flat CONFIG -= flat
QT += sql network widgets script svg QT += sql network widgets svg
!CONFIG(no_opengl) { !CONFIG(no_opengl) {
QT += opengl QT += opengl
} }

View File

@ -3,7 +3,9 @@
#include "http_worker.h" #include "http_worker.h"
#include "response_parser.h" #include "response_parser.h"
#include <QtScript> #include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
ComicVineAllVolumeComicsRetriever::ComicVineAllVolumeComicsRetriever(const QString &volumeURLString, QObject *parent) ComicVineAllVolumeComicsRetriever::ComicVineAllVolumeComicsRetriever(const QString &volumeURLString, QObject *parent)
: QObject(parent), volumeURLString(volumeURLString) : QObject(parent), volumeURLString(volumeURLString)

View File

@ -1,21 +1,22 @@
#include "comic_vine_dialog.h" #include "comic_vine_dialog.h"
#include <QtWidgets>
#include <QVBoxLayout>
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QLabel> #include <QLabel>
#include <QPushButton>
#include <QStackedWidget>
#include <QRadioButton>
#include <QMessageBox> #include <QMessageBox>
#include <QPushButton>
#include <QRadioButton>
#include <QStackedWidget>
#include <QTableView> #include <QTableView>
#include <QVBoxLayout>
#include <QtWidgets>
#if QT_VERSION >= 0x050000 #if QT_VERSION >= 0x050000
#include <QtConcurrent/QtConcurrentRun> #include <QtConcurrent/QtConcurrentRun>
#else #else
#include <QtConcurrentRun> #include <QtConcurrentRun>
#endif #endif
#include <QSqlDatabase>
#include <QtScript>
#include "data_base_management.h" #include "data_base_management.h"
#include <QJsonDocument>
#include <QJsonParseError>
#include <QSqlDatabase>
#include "yacreader_busy_widget.h" #include "yacreader_busy_widget.h"
#include "comic_vine_client.h" #include "comic_vine_client.h"
@ -488,38 +489,24 @@ void ComicVineDialog::getComicInfo(const QString &comicId, int count, const QStr
ComicDB ComicVineDialog::parseComicInfo(ComicDB &comic, const QString &json, int count, const QString &publisher) ComicDB ComicVineDialog::parseComicInfo(ComicDB &comic, const QString &json, int count, const QString &publisher)
{ {
QScriptEngine engine; QJsonParseError Err;
QScriptValue sc;
sc = engine.evaluate("(" + json + ")");
if (!sc.property("error").isValid() && sc.property("error").toString() != "OK") { QVariantMap sc = QJsonDocument::fromJson(json.toUtf8(), &Err).toVariant().toMap();
if (Err.error != QJsonParseError::NoError) {
qDebug("Error detected"); qDebug("Error detected");
} else { return comic;
int numResults = sc.property("number_of_total_results").toString().toInt(); //fix to weird behaviour using hasNext }
int numResults = sc.value("number_of_total_results").toInt(); //fix to weird behaviour using hasNext
if (numResults > 0) { if (numResults > 0) {
QScriptValue result = sc.property("results"); QVariantMap result = sc.value("results").toMap();
comic.info.title = result.value("name");
comic.info.number = result.value("issue_number");
comic.info.volume = result.value("volume").toMap().value("name");
if (!result.property("name").isNull()) { if (result.contains("person_credits") && !result.value("person_credits").isNull()) {
QString title = result.property("name").toString(); QMap<QString, QString> authors = getAuthors(result.value("person_credits"));
comic.info.title = title;
}
if (!result.property("issue_number").isNull()) {
QString number = result.property("issue_number").toString();
comic.info.number = number;
}
if (!result.property("volume").property("name").isNull()) {
QString volume = result.property("volume").property("name").toString();
comic.info.volume = volume;
}
if (!result.property("person_credits").isNull()) {
QMap<QString, QString> authors = getAuthors(result.property("person_credits"));
QString writer = QStringList(authors.values("writer")).join("\n"); QString writer = QStringList(authors.values("writer")).join("\n");
QString penciller = QStringList(authors.values("penciller")).join("\n"); QString penciller = QStringList(authors.values("penciller")).join("\n");
@ -536,8 +523,8 @@ ComicDB ComicVineDialog::parseComicInfo(ComicDB &comic, const QString &json, int
comic.info.coverArtist = coverArtist; comic.info.coverArtist = coverArtist;
} }
if (!result.property("cover_date").isNull()) { if (result.contains("cover_date") && !result.value("conver_date").isNull()) {
QString date = result.property("cover_date").toString(); QString date = result.value("cover_date").toString();
QStringList tempList = date.split("-"); QStringList tempList = date.split("-");
@ -547,24 +534,21 @@ ComicDB ComicVineDialog::parseComicInfo(ComicDB &comic, const QString &json, int
} }
} }
if (!result.property("description").isNull()) { if (result.contains("description") && !result.value("description").isNull()) {
QString synopsis = result.property("description").toString().remove(QRegExp("<[^>]*>")); //description comic.info.synopsis = result.value("description").toString().remove(QRegExp("<[^>]*>")); //description
comic.info.synopsis = synopsis;
} }
if (!result.property("character_credits").isNull()) { if (result.contains("character_credits") && !result.value("character_credits").isNull()) {
QString characters = getCharacters(result.property("character_credits")); comic.info.characters = getCharacters(result.value("character_credits"));
comic.info.characters = characters;
} }
if (!result.property("story_arc_credits").isNull()) { if (result.contains("story_arc_credits") && !result.value("story_arc_credits").isNull()) {
QPair<QString, QString> storyArcIdAndName = getFirstStoryArcIdAndName(result.property("story_arc_credits")); QPair<QString, QString> storyArcIdAndName = getFirstStoryArcIdAndName(result.value("story_arc_credits"));
QString storyArcId = storyArcIdAndName.first; QString storyArcId = storyArcIdAndName.first;
QString storyArcName = storyArcIdAndName.second; QString storyArcName = storyArcIdAndName.second;
if (!storyArcId.isNull()) { if (!storyArcId.isNull()) {
QString comicId = result.property("id").toString(); QString comicId = result.value("id").toString();
QPair<QString, QString> arcNumberAndArcCount = getArcNumberAndArcCount(storyArcId, comicId); QPair<QString, QString> arcNumberAndArcCount = getArcNumberAndArcCount(storyArcId, comicId);
if (!arcNumberAndArcCount.first.isNull()) { if (!arcNumberAndArcCount.first.isNull()) {
@ -582,44 +566,37 @@ ComicDB ComicVineDialog::parseComicInfo(ComicDB &comic, const QString &json, int
comic.info.publisher = publisher; comic.info.publisher = publisher;
} }
}
return comic; return comic;
} }
QString ComicVineDialog::getCharacters(const QScriptValue &json_characters) QString ComicVineDialog::getCharacters(const QVariant &json_characters)
{ {
QString characters; QStringList characters;
QScriptValueIterator it(json_characters); QListIterator<QVariant> it(json_characters.toList());
QScriptValue resultsValue; QVariantMap resultsValue;
while (it.hasNext()) { while (it.hasNext()) {
it.next(); resultsValue = it.next().toMap();
if (it.flags() & QScriptValue::SkipInEnumeration)
continue;
resultsValue = it.value();
characters += resultsValue.property("name").toString() + "\n"; characters << resultsValue.value("name").toString();
} }
return characters; return (characters.isEmpty()) ? "" : (characters.join("\n") + "\n");
} }
QMap<QString, QString> ComicVineDialog::getAuthors(const QScriptValue &json_authors) QMap<QString, QString> ComicVineDialog::getAuthors(const QVariant &json_authors)
{ {
QMap<QString, QString> authors; QMap<QString, QString> authors;
QScriptValueIterator it(json_authors); QListIterator<QVariant> it(json_authors.toList());
QScriptValue resultsValue; QVariantMap resultsValue;
while (it.hasNext()) { while (it.hasNext()) {
it.next(); resultsValue = it.next().toMap();
if (it.flags() & QScriptValue::SkipInEnumeration)
continue;
resultsValue = it.value();
QString authorName = resultsValue.property("name").toString(); QString authorName = resultsValue.value("name").toString();
QStringList roles = resultsValue.property("role").toString().split(","); QStringList roles = resultsValue.value("role").toString().split(",");
foreach (QString role, roles) { foreach (QString role, roles) {
if (role.trimmed() == "writer") if (role.trimmed() == "writer")
authors.insertMulti("writer", authorName); authors.insertMulti("writer", authorName);
@ -639,20 +616,17 @@ QMap<QString, QString> ComicVineDialog::getAuthors(const QScriptValue &json_auth
return authors; return authors;
} }
QPair<QString, QString> ComicVineDialog::getFirstStoryArcIdAndName(const QScriptValue &json_story_arcs) QPair<QString, QString> ComicVineDialog::getFirstStoryArcIdAndName(const QVariant &json_story_arcs)
{ {
QString story_arc_id = QString(); QString story_arc_id = QString();
QString story_arc_name = QString(); QString story_arc_name = QString();
QScriptValueIterator it(json_story_arcs); QListIterator<QVariant> it(json_story_arcs.toList());
QScriptValue resultsValue; QVariantMap resultsValue;
while (it.hasNext()) { while (it.hasNext()) {
it.next(); resultsValue = it.next().toMap();
if (it.flags() & QScriptValue::SkipInEnumeration) story_arc_id = resultsValue.value("id").toString();
continue; story_arc_name = resultsValue.value("name").toString();
resultsValue = it.value();
story_arc_id = resultsValue.property("id").toString();
story_arc_name = resultsValue.property("name").toString();
break; break;
} }
return qMakePair(story_arc_id, story_arc_name); return qMakePair(story_arc_id, story_arc_name);
@ -668,33 +642,28 @@ QPair<QString, QString> ComicVineDialog::getArcNumberAndArcCount(const QString &
return qMakePair(QString(), QString()); return qMakePair(QString(), QString());
QString json = result; QString json = result;
QScriptEngine engine; QJsonParseError Err;
QScriptValue sc; QVariantMap sc = QJsonDocument::fromJson(json.toUtf8(), &Err).toVariant().toMap();
sc = engine.evaluate("(" + json + ")");
if (!sc.property("error").isValid() && sc.property("error").toString() != "OK") { if (Err.error != QJsonParseError::NoError) {
qDebug("Error detected"); qDebug("Error detected");
return qMakePair(QString(), QString()); return qMakePair(QString(), QString());
} else { }
int numResults = sc.property("number_of_total_results").toString().toInt(); //fix to weird behaviour using hasNext
int numResults = sc.value("number_of_total_results").toInt(); //fix to weird behaviour using hasNext
if (numResults > 0) { if (numResults > 0) {
QScriptValue result = sc.property("results"); QVariantMap result = sc.value("results").toMap();
if (!result.property("issues").isNull()) {
QScriptValue issues = result.property("issues");
if (result.contains("issues")) {
QListIterator<QVariant> it(result.value("issues").toList());
int arcNumber = 0; int arcNumber = 0;
int arcCount = 0; int arcCount = 0;
QScriptValueIterator it(issues); QVariantMap resultsValue;
QScriptValue resultsValue;
while (it.hasNext()) { while (it.hasNext()) {
it.next(); resultsValue = it.next().toMap();
if (it.flags() & QScriptValue::SkipInEnumeration) if (comicId == resultsValue.value("id").toString()) {
continue;
resultsValue = it.value();
if (comicId == resultsValue.property("id").toString()) {
arcNumber = arcCount + 1; arcNumber = arcCount + 1;
} }
arcCount++; arcCount++;
@ -704,8 +673,6 @@ QPair<QString, QString> ComicVineDialog::getArcNumberAndArcCount(const QString &
return qMakePair(QString(), QString()); return qMakePair(QString(), QString());
} }
return qMakePair(QString(), QString()); return qMakePair(QString(), QString());
}
return qMakePair(QString(), QString());
} }
void ComicVineDialog::toggleSkipButton() void ComicVineDialog::toggleSkipButton()

View File

@ -18,7 +18,6 @@ class SearchVolume;
class SelectComic; class SelectComic;
class SelectVolume; class SelectVolume;
class SortVolumeComics; class SortVolumeComics;
class QScriptValue;
//TODO this should use a QStateMachine //TODO this should use a QStateMachine
//---------------------------------------- //----------------------------------------
@ -64,9 +63,9 @@ protected slots:
void goToNextComic(); void goToNextComic();
private: private:
QString getCharacters(const QScriptValue &json_characters); QString getCharacters(const QVariant &json_characters);
QMap<QString, QString> getAuthors(const QScriptValue &json_authors); QMap<QString, QString> getAuthors(const QVariant &json_authors);
QPair<QString, QString> getFirstStoryArcIdAndName(const QScriptValue &json_story_arcs); QPair<QString, QString> getFirstStoryArcIdAndName(const QVariant &json_story_arcs);
QPair<QString, QString> getArcNumberAndArcCount(const QString &storyArcId, const QString &comicId); QPair<QString, QString> getArcNumberAndArcCount(const QString &storyArcId, const QString &comicId);
void toggleSkipButton(); void toggleSkipButton();

View File

@ -1,7 +1,7 @@
#include "response_parser.h" #include "response_parser.h"
#include <QtScript>
#include <QDebug> #include <QDebug>
#include <QJsonDocument>
#include <QJsonParseError>
ResponseParser::ResponseParser(QObject *parent) ResponseParser::ResponseParser(QObject *parent)
: QObject(parent), error(false), errorTxt("None"), numResults(-1), currentPage(-1), totalPages(-1) : QObject(parent), error(false), errorTxt("None"), numResults(-1), currentPage(-1), totalPages(-1)
@ -46,32 +46,43 @@ bool ResponseParser::isError(qint32 error)
void ResponseParser::loadJSONResponse(const QString &response) void ResponseParser::loadJSONResponse(const QString &response)
{ {
QScriptEngine engine; QJsonParseError Err;
QScriptValue sc; QVariantMap sc = QJsonDocument::fromJson(response.toUtf8(), &Err).toVariant().toMap();
sc = engine.evaluate("(" + response + ")");
errorTxt = "None"; errorTxt = "None";
if (!sc.property("status_code").isValid() || isError(sc.property("status_code").toInt32())) { if (Err.error != QJsonParseError::NoError) {
errorTxt = "Json syntax error";
error = true; error = true;
if (sc.property("error").isValid()) return;
errorTxt = sc.property("error").toString(); }
else
errorTxt = "Unknown error";
} else {
error = false;
if (sc.property("number_of_total_results").isValid())
numResults = sc.property("number_of_total_results").toString().toInt(); // sc.property("number_of_total_results").toInt32();
else
qDebug() << sc.property("oops").toString();
int limit = sc.property("limit").toInt32(); if (!sc.value("status_code").isValid() || isError(sc.value("status_code").toInt())) {
int offset = sc.property("offset").toInt32(); error = true;
int total = sc.property("number_of_total_results").toInt32(); if (sc.value("error").isValid()) {
errorTxt = sc.value("error").toString();
} else {
errorTxt = "Unknown error";
}
return;
}
error = false;
if (sc.value("number_of_total_results").isValid()) {
numResults = sc.value("number_of_total_results").toInt(); // sc.property("number_of_total_results").toInt32();
} else {
qDebug() << sc.value("oops").toString();
}
auto limit = sc.value("limit").toInt();
auto offset = sc.value("offset").toInt();
auto total = sc.value("number_of_total_results").toInt();
if (limit > 0) { if (limit > 0) {
totalPages = (total / limit) + (total % limit > 0 ? 1 : 0); totalPages = (total / limit) + (total % limit > 0 ? 1 : 0);
currentPage = (offset / limit) + 1; currentPage = (offset / limit) + 1;
} else } else {
totalPages = currentPage = 1; totalPages = currentPage = 1;
} }
} }

View File

@ -1,7 +1,8 @@
#include "volume_comics_model.h" #include "volume_comics_model.h"
#include "qnaturalsorting.h" #include "qnaturalsorting.h"
#include <QtScript> #include <QJsonDocument>
#include <QJsonParseError>
bool lessThan(const QList<QString> &left, const QList<QString> &right) bool lessThan(const QList<QString> &left, const QList<QString> &right)
{ {
@ -18,33 +19,29 @@ VolumeComicsModel::VolumeComicsModel(QObject *parent)
void VolumeComicsModel::load(const QString &json) void VolumeComicsModel::load(const QString &json)
{ {
QScriptEngine engine; QJsonParseError Err;
QScriptValue sc; QVariantMap sc = QJsonDocument::fromJson(json.toUtf8(), &Err).toVariant().toMap();
sc = engine.evaluate("(" + json + ")");
if (!sc.property("error").isValid() && sc.property("error").toString() != "OK") { if (Err.error != QJsonParseError::NoError) {
qDebug("Error detected"); qDebug("Error detected");
} else { return;
QScriptValueIterator it(sc.property("results")); }
//bool test;
QScriptValue resultsValue; QListIterator<QVariant> it(sc.value("results").toList());
QVariantMap resultsValue;
while (it.hasNext()) { while (it.hasNext()) {
it.next(); resultsValue = it.next().toMap();
if (it.flags() & QScriptValue::SkipInEnumeration) QString issueNumber = resultsValue.value("issue_number").toString();
continue; QVariant propertyName = resultsValue.value("name");
resultsValue = it.value();
QString issueNumber = resultsValue.property("issue_number").toString();
QScriptValue propertyName = resultsValue.property("name");
QString name = propertyName.isNull() ? "-" : propertyName.toString(); QString name = propertyName.isNull() ? "-" : propertyName.toString();
QString coverURL = resultsValue.property("image").property("medium_url").toString(); QString coverURL = resultsValue.value("image").toMap().value("medium_url").toString();
QString id = resultsValue.property("id").toString(); QString id = resultsValue.value("id").toString();
QStringList l; QStringList l;
l << issueNumber << name << coverURL << id; l << issueNumber << name << coverURL << id;
_data.push_back(l); _data.push_back(l);
} }
qSort(_data.begin(), _data.end(), lessThan); qSort(_data.begin(), _data.end(), lessThan);
}
} }
/*void VolumeComicsModel::load(const QStringList &jsonList) /*void VolumeComicsModel::load(const QStringList &jsonList)

View File

@ -1,6 +1,7 @@
#include "volumes_model.h" #include "volumes_model.h"
#include <QtScript> #include <QJsonDocument>
#include <QJsonParseError>
VolumesModel::VolumesModel(QObject *parent) VolumesModel::VolumesModel(QObject *parent)
: JSONModel(parent) : JSONModel(parent)
@ -14,27 +15,27 @@ VolumesModel::~VolumesModel()
void VolumesModel::load(const QString &json) void VolumesModel::load(const QString &json)
{ {
QScriptEngine engine; QJsonParseError Err;
QScriptValue sc; QVariantMap sc = QJsonDocument::fromJson(json.toUtf8(), &Err).toVariant().toMap();
sc = engine.evaluate("(" + json + ")");
if (!sc.property("error").isValid() && sc.property("error").toString() != "OK") { if (Err.error != QJsonParseError::NoError) {
qDebug("Error detected"); qDebug("Error detected");
} else { return;
int numResults = sc.property("number_of_total_results").toString().toInt(); //fix to weird behaviour using hasNext }
QScriptValueIterator it(sc.property("results"));
int numResults = sc.value("number_of_total_results").toInt(); //fix to weird behaviour using hasNext
QListIterator<QVariant> it(sc.value("results").toList());
bool test; bool test;
QScriptValue resultsValue; QVariantMap resultsValue;
while (it.hasNext()) { while (it.hasNext()) {
it.next(); resultsValue = it.next().toMap();
resultsValue = it.value(); QString numIssues = resultsValue.value("count_of_issues").toString();
QString numIssues = resultsValue.property("count_of_issues").toString(); QString year = resultsValue.value("start_year").toString();
QString year = resultsValue.property("start_year").toString(); QString name = resultsValue.value("name").toString();
QString name = resultsValue.property("name").toString(); QString publisher = resultsValue.value("publisher").toMap().value("name").toString();
QString publisher = resultsValue.property("publisher").property("name").toString(); QString url = resultsValue.value("image").toMap().value("medium_url").toString();
QString url = resultsValue.property("image").property("medium_url").toString(); QString deck = resultsValue.value("deck").toString();
QString deck = resultsValue.property("deck").toString(); QString id = resultsValue.value("id").toString();
QString id = resultsValue.property("id").toString();
QStringList l; QStringList l;
l << name << year << numIssues << publisher << url << deck << id; l << name << year << numIssues << publisher << url << deck << id;
test = name.isEmpty() && year.isEmpty() && numIssues.isEmpty() && url.isEmpty(); test = name.isEmpty() && year.isEmpty() && numIssues.isEmpty() && url.isEmpty();
@ -42,7 +43,6 @@ void VolumesModel::load(const QString &json)
_data.push_back(l); _data.push_back(l);
numResults--; numResults--;
} }
}
} }
QModelIndex VolumesModel::parent(const QModelIndex &index) const QModelIndex VolumesModel::parent(const QModelIndex &index) const

View File

@ -4,7 +4,6 @@
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QLabel> #include <QLabel>
#include <QToolButton> #include <QToolButton>
#include <QtScript>
ScraperResultsPaginator::ScraperResultsPaginator(QWidget *parent) ScraperResultsPaginator::ScraperResultsPaginator(QWidget *parent)
: QWidget(parent), customLabel("items") : QWidget(parent), customLabel("items")

View File

@ -5,9 +5,10 @@
#include "scraper_tableview.h" #include "scraper_tableview.h"
#include "volume_comics_model.h" #include "volume_comics_model.h"
#include <QJsonDocument>
#include <QJsonParseError>
#include <QLabel> #include <QLabel>
#include <QLayout> #include <QLayout>
#include <QtScript>
SelectComic::SelectComic(QWidget *parent) SelectComic::SelectComic(QWidget *parent)
: ScraperSelector(parent), model(0) : ScraperSelector(parent), model(0)
@ -121,18 +122,17 @@ void SelectComic::setCover(const QByteArray &data)
void SelectComic::setDescription(const QString &jsonDetail) void SelectComic::setDescription(const QString &jsonDetail)
{ {
QScriptEngine engine; QJsonParseError Err;
QScriptValue sc; QVariantMap sc = QJsonDocument::fromJson(jsonDetail.toUtf8(), &Err).toVariant().toMap();
sc = engine.evaluate("(" + jsonDetail + ")");
if (!sc.property("error").isValid() && sc.property("error").toString() != "OK") { if (Err.error != QJsonParseError::NoError) {
qDebug("Error detected"); qDebug("Error detected");
} else { return;
}
QScriptValue descriptionValues = sc.property("results").property("description"); QVariant descriptionValues = sc.value("results").toMap().value("description");
bool valid = !descriptionValues.isNull() && descriptionValues.isValid(); bool valid = !descriptionValues.isNull() && descriptionValues.isValid();
detailLabel->setText(valid ? descriptionValues.toString().replace("<a", "<a style = 'color:#827A68; text-decoration:none;'") : tr("description unavailable")); detailLabel->setText(valid ? descriptionValues.toString().replace("<a", "<a style = 'color:#827A68; text-decoration:none;'") : tr("description unavailable"));
}
} }
QString SelectComic::getSelectedComicId() QString SelectComic::getSelectedComicId()

View File

@ -1,20 +1,20 @@
#include "select_volume.h" #include "select_volume.h"
#include <QLabel> #include <QDesktopServices>
#include <QVBoxLayout>
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QScrollBar> #include <QHeaderView>
#include <QJsonDocument>
#include <QJsonParseError>
#include <QLabel>
#include <QModelIndex> #include <QModelIndex>
#include <QScrollArea> #include <QScrollArea>
#include <QDesktopServices> #include <QScrollBar>
#include <QHeaderView>
#include <QToolButton>
#include <QSortFilterProxyModel> #include <QSortFilterProxyModel>
#include <QToolButton>
#include <QVBoxLayout>
#include "scraper_tableview.h" #include "scraper_tableview.h"
#include <QtScript>
#include "volumes_model.h" #include "volumes_model.h"
#include "comic_vine_client.h" #include "comic_vine_client.h"
#include "scraper_scroll_label.h" #include "scraper_scroll_label.h"
@ -149,18 +149,17 @@ void SelectVolume::setCover(const QByteArray &data)
void SelectVolume::setDescription(const QString &jsonDetail) void SelectVolume::setDescription(const QString &jsonDetail)
{ {
QScriptEngine engine; QJsonParseError Err;
QScriptValue sc; QVariantMap sc = QJsonDocument::fromJson(jsonDetail.toUtf8(), &Err).toVariant().toMap();
sc = engine.evaluate("(" + jsonDetail + ")");
if (!sc.property("error").isValid() && sc.property("error").toString() != "OK") { if (Err.error != QJsonParseError::NoError) {
qDebug("Error detected"); qDebug("Error detected");
} else { return;
}
QScriptValue descriptionValues = sc.property("results").property("description"); QVariant descriptionValues = sc.value("results").toMap().value("description");
bool valid = !descriptionValues.isNull() && descriptionValues.isValid(); bool valid = !descriptionValues.isNull() && descriptionValues.isValid();
detailLabel->setText(valid ? descriptionValues.toString().replace("<a", "<a style = 'color:#827A68; text-decoration:none;'") : tr("description unavailable")); detailLabel->setText(valid ? descriptionValues.toString().replace("<a", "<a style = 'color:#827A68; text-decoration:none;'") : tr("description unavailable"));
}
} }
QString SelectVolume::getSelectedVolumeId() QString SelectVolume::getSelectedVolumeId()

View File

@ -17,7 +17,7 @@ jobs:
- script: | - script: |
pip install aqtinstall pip install aqtinstall
mkdir C:\Qt mkdir C:\Qt
python -m aqt install -O c:\Qt ${{ parameters.qt_version }} windows desktop ${{ parameters.qt_aqt_spec }} -m qtscript python -m aqt install -O c:\Qt ${{ parameters.qt_version }} windows desktop ${{ parameters.qt_aqt_spec }}
dir C:\Qt\${{ parameters.qt_version }}\${{ parameters.qt_spec }}\bin dir C:\Qt\${{ parameters.qt_version }}\${{ parameters.qt_spec }}\bin
choco install -y wget choco install -y wget
choco install innosetup choco install innosetup

View File

@ -37,7 +37,7 @@ jobs:
sudo add-apt-repository ppa:kubuntu-ppa/backports sudo add-apt-repository ppa:kubuntu-ppa/backports
sudo apt-get update sudo apt-get update
sudo apt-get install -y --allow-unauthenticated qt-default qt5-qmake \ sudo apt-get install -y --allow-unauthenticated qt-default qt5-qmake \
qtbase5-dev qtmultimedia5-dev libpoppler-qt5-dev qtscript5-dev \ qtbase5-dev qtmultimedia5-dev libpoppler-qt5-dev \
libqt5opengl5-dev libglu1-mesa-dev libunarr-dev qtdeclarative5-dev libqt5svg5-dev libqt5opengl5-dev libglu1-mesa-dev libunarr-dev qtdeclarative5-dev libqt5svg5-dev
displayName: 'Install dependencies' displayName: 'Install dependencies'
- script: | - script: |

View File

@ -38,7 +38,6 @@ Source: Qt5Multimedia.dll; DestDir: {app}
Source: Qt5Network.dll; DestDir: {app} Source: Qt5Network.dll; DestDir: {app}
Source: Qt5Qml.dll; DestDir: {app} Source: Qt5Qml.dll; DestDir: {app}
Source: Qt5Quick.dll; DestDir: {app} Source: Qt5Quick.dll; DestDir: {app}
Source: Qt5Script.dll; DestDir: {app}
Source: Qt5Sql.dll; DestDir: {app} Source: Qt5Sql.dll; DestDir: {app}
Source: Qt5Svg.dll; DestDir: {app} Source: Qt5Svg.dll; DestDir: {app}
Source: Qt5Widgets.dll; DestDir: {app} Source: Qt5Widgets.dll; DestDir: {app}
@ -140,7 +139,7 @@ procedure InitializeWizard();
begin begin
URLLabel := TNewStaticText.Create(WizardForm); URLLabel := TNewStaticText.Create(WizardForm);
URLLabel.Caption:='Make a DONATION/Haz una DONACIÓN'; URLLabel.Caption:='Make a DONATION/Haz una DONACI<EFBFBD>N';
URLLabel.Cursor:=crHand; URLLabel.Cursor:=crHand;
URLLabel.OnClick:=@URLLabelOnClick; URLLabel.OnClick:=@URLLabelOnClick;
URLLabel.Parent:=WizardForm; URLLabel.Parent:=WizardForm;
@ -154,7 +153,7 @@ begin
donationPage := CreateOutputMsgPage(wpWelcome, donationPage := CreateOutputMsgPage(wpWelcome,
'Iformation', 'Please read the following information before continuing.', 'Iformation', 'Please read the following information before continuing.',
'YACReader is FREE software. If you like it, please, consider to make a DONATION'#13#13 + 'YACReader is FREE software. If you like it, please, consider to make a DONATION'#13#13 +
'YACReader es software libre y GRATUITO. Si te gusta, por favor, considera realizar una DONACIÓN'#13#13) 'YACReader es software libre y GRATUITO. Si te gusta, por favor, considera realizar una DONACI<EFBFBD>N'#13#13)
end; end;