Merge pull request #260 from Mawu3n4/master

Find cards by prefix
This commit is contained in:
Gavin Bisesi 2014-10-09 11:29:02 -04:00
commit 6810ae46d6
2 changed files with 31 additions and 6 deletions

View file

@ -263,14 +263,14 @@ void PictureLoader::picDownloadFinished(QNetworkReply *reply)
const QByteArray &picData = reply->peek(reply->size()); //peek is used to keep the data in the buffer for use by QImageReader const QByteArray &picData = reply->peek(reply->size()); //peek is used to keep the data in the buffer for use by QImageReader
QImage testImage; QImage testImage;
QImageReader imgReader; QImageReader imgReader;
imgReader.setDecideFormatFromContent(true); imgReader.setDecideFormatFromContent(true);
imgReader.setDevice(reply); imgReader.setDevice(reply);
QString extension = "." + imgReader.format(); //the format is determined prior to reading the QImageReader data into a QImage object, as that wipes the QImageReader buffer QString extension = "." + imgReader.format(); //the format is determined prior to reading the QImageReader data into a QImage object, as that wipes the QImageReader buffer
if (extension == ".jpeg") if (extension == ".jpeg")
extension = ".jpg"; extension = ".jpg";
if (imgReader.read(&testImage)) { if (imgReader.read(&testImage)) {
QString setName = cardBeingDownloaded.getSetName(); QString setName = cardBeingDownloaded.getSetName();
if(!setName.isEmpty()) if(!setName.isEmpty())
@ -493,7 +493,7 @@ void CardInfo::updatePixmapCache()
qDebug() << "Updating pixmap cache for" << name; qDebug() << "Updating pixmap cache for" << name;
clearPixmapCache(); clearPixmapCache();
loadPixmap(); loadPixmap();
emit pixmapUpdated(); emit pixmapUpdated();
} }
@ -605,7 +605,7 @@ CardDatabase::~CardDatabase()
{ {
clear(); clear();
delete noCard; delete noCard;
pictureLoader->deleteLater(); pictureLoader->deleteLater();
pictureLoaderThread->wait(); pictureLoaderThread->wait();
delete pictureLoaderThread; delete pictureLoaderThread;
@ -619,7 +619,7 @@ void CardDatabase::clear()
delete setIt.value(); delete setIt.value();
} }
sets.clear(); sets.clear();
QHashIterator<QString, CardInfo *> i(cards); QHashIterator<QString, CardInfo *> i(cards);
while (i.hasNext()) { while (i.hasNext()) {
i.next(); i.next();
@ -770,11 +770,30 @@ void CardDatabase::loadCardsFromXml(QXmlStreamReader &xml, bool tokens)
} }
} }
CardInfo *CardNameMap::findByPrefix(const std::string &prefix) {
int count = 0;
CardInfo *found;
for (CardNameMap::iterator it = this->begin(); it != this->end(); ++it) {
if (std::mismatch(prefix.begin(), prefix.end(),
it.key().toStdString().begin()).first == prefix.end()) {
count++;
found = it.value();
}
}
return (count == 1 ? found : NULL);
}
CardInfo *CardDatabase::getCardFromMap(CardNameMap &cardMap, const QString &cardName, bool createIfNotFound) { CardInfo *CardDatabase::getCardFromMap(CardNameMap &cardMap, const QString &cardName, bool createIfNotFound) {
CardInfo *foundCard;
if (cardName.isEmpty()) if (cardName.isEmpty())
return noCard; return noCard;
else if (cardMap.contains(cardName)) else if (cardMap.contains(cardName))
return cardMap.value(cardName); return cardMap.value(cardName);
else if ((foundCard = cardMap.findByPrefix(cardName.toStdString())))
return foundCard;
else if (createIfNotFound) { else if (createIfNotFound) {
CardInfo *newCard = new CardInfo(this, cardName, true); CardInfo *newCard = new CardInfo(this, cardName, true);
newCard->addToSet(getSet("TK")); newCard->addToSet(getSet("TK"));

View file

@ -180,7 +180,13 @@ signals:
enum LoadStatus { Ok, VersionTooOld, Invalid, NotLoaded, FileError, NoCards }; enum LoadStatus { Ok, VersionTooOld, Invalid, NotLoaded, FileError, NoCards };
typedef QHash<QString, CardInfo *> CardNameMap;
class CardNameMap: public QHash<QString, CardInfo *>
{
public:
CardInfo *findByPrefix(const std::string &prefix);
};
typedef QHash<QString, CardSet *> SetNameMap; typedef QHash<QString, CardSet *> SetNameMap;
class CardDatabase : public QObject { class CardDatabase : public QObject {