rework set prioritization

This commit is contained in:
Cameron McDonald 2024-08-15 11:57:46 -05:00
parent f85faf141d
commit 9f4ac3b28a
13 changed files with 141 additions and 42 deletions

View file

@ -19,6 +19,18 @@ OracleImporter::OracleImporter(const QString &_dataDir, QObject *parent) : CardD
{
}
CardSet::Priority OracleImporter::getSetPriority(QString &setType, QString &shortName)
{
if (!setTypePriorities.contains(setType.toLower())) {
qDebug() << "warning: Set type" << setType << "unrecognized for prioritization";
}
CardSet::Priority priority = setTypePriorities.value(setType.toLower(), CardSet::Priority::UNDEFINED);
if (nonEnglishSets.contains(shortName)) {
priority = CardSet::Priority::LOWEST;
}
return priority;
}
bool OracleImporter::readSetsFromByteArray(const QByteArray &data)
{
QList<SetToDownload> newSetList;
@ -38,6 +50,7 @@ bool OracleImporter::readSetsFromByteArray(const QByteArray &data)
QList<QVariant> setCards;
QString setType;
QDate releaseDate;
CardSet::Priority priority;
while (it.hasNext()) {
map = it.next().toMap();
@ -45,6 +58,8 @@ bool OracleImporter::readSetsFromByteArray(const QByteArray &data)
longName = map.value("name").toString();
setCards = map.value("cards").toList();
setType = map.value("type").toString();
releaseDate = map.value("releaseDate").toDate();
priority = getSetPriority(setType, shortName);
// capitalize set type
if (setType.length() > 0) {
// basic grammar for words that aren't capitalized, like in "From the Vault"
@ -62,12 +77,7 @@ bool OracleImporter::readSetsFromByteArray(const QByteArray &data)
}
setType = setType.trimmed();
}
if (!nonEnglishSets.contains(shortName)) {
releaseDate = map.value("releaseDate").toDate();
} else {
releaseDate = QDate();
}
newSetList.append(SetToDownload(shortName, longName, setCards, setType, releaseDate));
newSetList.append(SetToDownload(shortName, longName, setCards, priority, setType, releaseDate));
}
std::sort(newSetList.begin(), newSetList.end());
@ -494,7 +504,8 @@ int OracleImporter::startImport()
for (const SetToDownload &curSetToParse : allSets) {
CardSetPtr newSet = CardSet::newInstance(curSetToParse.getShortName(), curSetToParse.getLongName(),
curSetToParse.getSetType(), curSetToParse.getReleaseDate());
curSetToParse.getSetType(), curSetToParse.getReleaseDate(),
curSetToParse.getPriority());
if (!sets.contains(newSet->getShortName()))
sets.insert(newSet->getShortName(), newSet);

View file

@ -7,11 +7,35 @@
#include <utility>
// many users prefer not to see these sets with non english arts
// as a solution we remove the date property on these sets
// that way they will be sorted last by default
// this will cause their art to not get priority over english cards
// users will still be able to find these sets and prioritize them manually
const QStringList nonEnglishSets = {"4BB", "FBB", "PS11", "PSAL", "REN", "RIN"};
const QMap<QString, CardSet::Priority> setTypePriorities{
{"core", CardSet::Priority::PRIMARY},
{"expansion", CardSet::Priority::PRIMARY},
{"commander", CardSet::Priority::SECONDARY},
{"starter", CardSet::Priority::SECONDARY},
{"archenemy", CardSet::Priority::REPRINT},
{"arsenal", CardSet::Priority::REPRINT},
{"box", CardSet::Priority::REPRINT},
{"draft_innovation", CardSet::Priority::REPRINT},
{"duel_deck", CardSet::Priority::REPRINT},
{"from_the_vault", CardSet::Priority::REPRINT},
{"masterpiece", CardSet::Priority::REPRINT},
{"masters", CardSet::Priority::REPRINT},
{"memorabilia", CardSet::Priority::REPRINT},
{"planechase", CardSet::Priority::REPRINT},
{"premium_deck", CardSet::Priority::REPRINT},
{"promo", CardSet::Priority::REPRINT},
{"spellbook", CardSet::Priority::REPRINT},
{"token", CardSet::Priority::REPRINT},
{"treasure_chest", CardSet::Priority::REPRINT},
{"alchemy", CardSet::Priority::OTHER},
{"funny", CardSet::Priority::OTHER},
{"minigame", CardSet::Priority::OTHER},
{"vanguard", CardSet::Priority::OTHER},
};
class SetToDownload
{
@ -20,6 +44,7 @@ private:
QList<QVariant> cards;
QDate releaseDate;
QString setType;
CardSet::Priority priority;
public:
const QString &getShortName() const
@ -42,13 +67,18 @@ public:
{
return releaseDate;
}
CardSet::Priority getPriority() const
{
return priority;
}
SetToDownload(QString _shortName,
QString _longName,
QList<QVariant> _cards,
CardSet::Priority _priority,
QString _setType = QString(),
const QDate &_releaseDate = QDate())
: shortName(std::move(_shortName)), longName(std::move(_longName)), cards(std::move(_cards)),
releaseDate(_releaseDate), setType(std::move(_setType))
releaseDate(_releaseDate), setType(std::move(_setType)), priority(_priority)
{
}
bool operator<(const SetToDownload &set) const
@ -108,6 +138,7 @@ signals:
public:
explicit OracleImporter(const QString &_dataDir, QObject *parent = nullptr);
CardSet::Priority getSetPriority(QString &setType, QString &shortName);
bool readSetsFromByteArray(const QByteArray &data);
int startImport();
bool saveToFile(const QString &fileName, const QString &sourceUrl, const QString &sourceVersion);