Ensure all card prices are retrieved correctly
Query card database to get a multiverseis for a card. Get card price using that id instead of card name. Tested Aether, split cards, question elemental?, _____
This commit is contained in:
parent
d102733826
commit
06def7f46a
2 changed files with 29 additions and 8 deletions
|
@ -9,6 +9,9 @@
|
||||||
#include "qt-json/json.h"
|
#include "qt-json/json.h"
|
||||||
#include "priceupdater.h"
|
#include "priceupdater.h"
|
||||||
|
|
||||||
|
#include "main.h"
|
||||||
|
#include "carddatabase.h"
|
||||||
|
|
||||||
#if QT_VERSION < 0x050000
|
#if QT_VERSION < 0x050000
|
||||||
// for Qt::escape()
|
// for Qt::escape()
|
||||||
#include <QtGui/qtextdocument.h>
|
#include <QtGui/qtextdocument.h>
|
||||||
|
@ -120,10 +123,16 @@ void DBPriceUpdater::updatePrices()
|
||||||
{
|
{
|
||||||
QString q = "https://api.deckbrew.com/mtg/cards";
|
QString q = "https://api.deckbrew.com/mtg/cards";
|
||||||
QStringList cards = deck->getCardList();
|
QStringList cards = deck->getCardList();
|
||||||
|
muidMap.clear();
|
||||||
|
CardInfo * card;
|
||||||
|
int muid;
|
||||||
for (int i = 0; i < cards.size(); ++i) {
|
for (int i = 0; i < cards.size(); ++i) {
|
||||||
q += (i ? "&" : "?") + QString("name=") + cards[i].toLower();
|
card = db->getCard(cards[i], false);
|
||||||
|
muid=card->getPreferredMuId();
|
||||||
|
q += (i ? "&" : "?") + QString("multiverseid=%1").arg(muid);
|
||||||
|
muidMap.insert(muid, cards[i]);
|
||||||
}
|
}
|
||||||
QUrl url(q.replace(' ', '+'));
|
QUrl url(q);
|
||||||
|
|
||||||
QNetworkReply *reply = nam->get(QNetworkRequest(url));
|
QNetworkReply *reply = nam->get(QNetworkRequest(url));
|
||||||
connect(reply, SIGNAL(finished()), this, SLOT(downloadFinished()));
|
connect(reply, SIGNAL(finished()), this, SLOT(downloadFinished()));
|
||||||
|
@ -172,17 +181,24 @@ void DBPriceUpdater::downloadFinished()
|
||||||
}
|
}
|
||||||
|
|
||||||
QMap<QString, float> cardsPrice;
|
QMap<QString, float> cardsPrice;
|
||||||
|
|
||||||
QListIterator<QVariant> it(resultList);
|
QListIterator<QVariant> it(resultList);
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
QVariantMap map = it.next().toMap();
|
QVariantMap cardMap = it.next().toMap();
|
||||||
QString name = map.value("name").toString().toLower();
|
|
||||||
|
|
||||||
QList<QVariant> editions = map.value("editions").toList();
|
|
||||||
|
// get sets list
|
||||||
|
QList<QVariant> editions = cardMap.value("editions").toList();
|
||||||
foreach (QVariant ed, editions)
|
foreach (QVariant ed, editions)
|
||||||
{
|
{
|
||||||
|
// retrieve card name "as we know it" from the muid
|
||||||
QVariantMap edition = ed.toMap();
|
QVariantMap edition = ed.toMap();
|
||||||
QString set = edition.value("set_id").toString();
|
QString set = edition.value("set_id").toString();
|
||||||
|
|
||||||
|
int muid = edition.value("multiverse_id").toString().toInt();
|
||||||
|
if(!muidMap.contains(muid))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
QString name=muidMap.value(muid);
|
||||||
// Prices are in USD cents
|
// Prices are in USD cents
|
||||||
float price = edition.value("price").toMap().value("median").toString().toFloat() / 100;
|
float price = edition.value("price").toMap().value("median").toString().toFloat() / 100;
|
||||||
//qDebug() << "card " << name << " set " << set << " price " << price << endl;
|
//qDebug() << "card " << name << " set " << set << " price " << price << endl;
|
||||||
|
@ -196,7 +212,7 @@ void DBPriceUpdater::downloadFinished()
|
||||||
cardsPrice.insert(name, price);
|
cardsPrice.insert(name, price);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
InnerDecklistNode *listRoot = deck->getRoot();
|
InnerDecklistNode *listRoot = deck->getRoot();
|
||||||
for (int i = 0; i < listRoot->size(); i++) {
|
for (int i = 0; i < listRoot->size(); i++) {
|
||||||
InnerDecklistNode *currentZone = dynamic_cast<InnerDecklistNode *>(listRoot->at(i));
|
InnerDecklistNode *currentZone = dynamic_cast<InnerDecklistNode *>(listRoot->at(i));
|
||||||
|
@ -204,7 +220,7 @@ void DBPriceUpdater::downloadFinished()
|
||||||
DecklistCardNode *currentCard = dynamic_cast<DecklistCardNode *>(currentZone->at(j));
|
DecklistCardNode *currentCard = dynamic_cast<DecklistCardNode *>(currentZone->at(j));
|
||||||
if (!currentCard)
|
if (!currentCard)
|
||||||
continue;
|
continue;
|
||||||
currentCard->setPrice(cardsPrice[currentCard->getName().toLower()]);
|
currentCard->setPrice(cardsPrice[currentCard->getName()]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
|
|
||||||
class QNetworkAccessManager;
|
class QNetworkAccessManager;
|
||||||
|
|
||||||
|
// If we don't typedef this, won't compile on OS X < 10.9
|
||||||
|
typedef QMap<int, QString> MuidStringMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Price Updater.
|
* Price Updater.
|
||||||
*
|
*
|
||||||
|
@ -41,6 +44,8 @@ public:
|
||||||
class DBPriceUpdater : public AbstractPriceUpdater
|
class DBPriceUpdater : public AbstractPriceUpdater
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
protected:
|
||||||
|
MuidStringMap muidMap;
|
||||||
protected:
|
protected:
|
||||||
virtual void downloadFinished();
|
virtual void downloadFinished();
|
||||||
public:
|
public:
|
||||||
|
|
Loading…
Reference in a new issue