From 243fe25ce150ae1459d84d5d679429e225f858a0 Mon Sep 17 00:00:00 2001 From: NicolasPerrenoud Date: Sun, 4 Mar 2012 23:25:41 +0100 Subject: [PATCH] Fix priceUpdater bug. If a card is in the main and in the side, the price is dispay in both places. --- cockatrice/src/priceupdater.cpp | 34 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/cockatrice/src/priceupdater.cpp b/cockatrice/src/priceupdater.cpp index e9f1a695..f7ab36db 100644 --- a/cockatrice/src/priceupdater.cpp +++ b/cockatrice/src/priceupdater.cpp @@ -41,18 +41,8 @@ void PriceUpdater::updatePrices() */ void PriceUpdater::downloadFinished() { - QMap cmap; - InnerDecklistNode *listRoot = deck->getRoot(); - for (int i = 0; i < listRoot->size(); i++) { - InnerDecklistNode *currentZone = dynamic_cast(listRoot->at(i)); - for (int j = 0; j < currentZone->size(); j++) { - DecklistCardNode *currentCard = dynamic_cast(currentZone->at(j)); - if (!currentCard) - continue; - cmap.insert(currentCard->getName().toLower(), currentCard); - currentCard->setPrice(0); - } - } + + QNetworkReply *reply = static_cast(sender()); QByteArray result = reply->readAll(); @@ -60,21 +50,29 @@ void PriceUpdater::downloadFinished() QScriptEngine engine; sc = engine.evaluate("value = " + result); + QMap cardsPrice; + if (sc.property("cards").isArray()) { QScriptValueIterator it(sc.property("cards")); while (it.hasNext()) { it.next(); QString name = it.value().property("name").toString().toLower(); float price = it.value().property("average").toString().toFloat(); - DecklistCardNode *c = cmap[name]; - if (!c) - continue; - if (c->getPrice() == 0 || c->getPrice() > price) { - c->setPrice(price); - } + cardsPrice.insert(name, price); } } + InnerDecklistNode *listRoot = deck->getRoot(); + for (int i = 0; i < listRoot->size(); i++) { + InnerDecklistNode *currentZone = dynamic_cast(listRoot->at(i)); + for (int j = 0; j < currentZone->size(); j++) { + DecklistCardNode *currentCard = dynamic_cast(currentZone->at(j)); + if (!currentCard) + continue; + currentCard->setPrice(cardsPrice[currentCard->getName().toLower()]); + } + } + reply->deleteLater(); deleteLater(); emit finishedUpdate();