mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-13 01:24:46 -07:00
improved importer
This commit is contained in:
parent
aae2c437d6
commit
3c8f2b878b
9 changed files with 160 additions and 93 deletions
146
oracle/sets.xml
146
oracle/sets.xml
|
|
@ -1,292 +1,292 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cockatrice_setdatabase version="20090811">
|
||||
<cockatrice_setdatabase version="20091017">
|
||||
<picture_url>http://www.wizards.com/global/images/magic/general/%1.jpg</picture_url>
|
||||
<set_url>http://gatherer.wizards.com/Pages/Search/Default.aspx?output=spoiler&method=text&set=["!longname!"]</set_url>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>ARB</name>
|
||||
<longname>Alara Reborn</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>AL</name>
|
||||
<longname>Alliances</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>AQ</name>
|
||||
<longname>Antiquities</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>AP</name>
|
||||
<longname>Apocalypse</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>AN</name>
|
||||
<longname>Arabian Nights</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>BOK</name>
|
||||
<longname>Betrayers of Kamigawa</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>CHK</name>
|
||||
<longname>Champions of Kamigawa</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>CH</name>
|
||||
<longname>Chronicles</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>6E</name>
|
||||
<longname>Classic Sixth Edition</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>CS</name>
|
||||
<longname>Coldsnap</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>CFX</name>
|
||||
<longname>Conflux</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>DS</name>
|
||||
<longname>Darksteel</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>DIS</name>
|
||||
<longname>Dissension</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>8E</name>
|
||||
<longname>Eighth Edition</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>EVE</name>
|
||||
<longname>Eventide</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>EX</name>
|
||||
<longname>Exodus</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>FE</name>
|
||||
<longname>Fallen Empires</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>FD</name>
|
||||
<longname>Fifth Dawn</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>5E</name>
|
||||
<longname>Fifth Edition</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>4E</name>
|
||||
<longname>Fourth Edition</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>FUT</name>
|
||||
<longname>Future Sight</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>GP</name>
|
||||
<longname>Guildpact</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>HL</name>
|
||||
<longname>Homelands</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>IA</name>
|
||||
<longname>Ice Age</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>IN</name>
|
||||
<longname>Invasion</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>JU</name>
|
||||
<longname>Judgment</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>LG</name>
|
||||
<longname>Legends</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>LE</name>
|
||||
<longname>Legions</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>A</name>
|
||||
<longname>Limited Edition Alpha</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>B</name>
|
||||
<longname>Limited Edition Beta</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>LRW</name>
|
||||
<longname>Lorwyn</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>M10</name>
|
||||
<longname>Magic 2010</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>MM</name>
|
||||
<longname>Mercadian Masques</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>MI</name>
|
||||
<longname>Mirage</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>MR</name>
|
||||
<longname>Mirrodin</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>MOR</name>
|
||||
<longname>Morningtide</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>NE</name>
|
||||
<longname>Nemesis</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>9E</name>
|
||||
<longname>Ninth Edition</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>OD</name>
|
||||
<longname>Odyssey</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>ON</name>
|
||||
<longname>Onslaught</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>PLC</name>
|
||||
<longname>Planar Chaos</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>PS</name>
|
||||
<longname>Planeshift</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>PT</name>
|
||||
<longname>Portal</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>P2</name>
|
||||
<longname>Portal Second Age</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>P3</name>
|
||||
<longname>Portal Three Kingdoms</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>PR</name>
|
||||
<longname>Promo set for Gatherer</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>PY</name>
|
||||
<longname>Prophecy</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>RAV</name>
|
||||
<longname>Ravnica: City of Guilds</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>R</name>
|
||||
<longname>Revised Edition</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>SOK</name>
|
||||
<longname>Saviors of Kamigawa</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>SC</name>
|
||||
<longname>Scourge</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>7E</name>
|
||||
<longname>Seventh Edition</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>SHM</name>
|
||||
<longname>Shadowmoor</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>ALA</name>
|
||||
<longname>Shards of Alara</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>ST</name>
|
||||
<longname>Starter 1999</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>ST2K</name>
|
||||
<longname>Starter 2000</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>SH</name>
|
||||
<longname>Stronghold</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>TE</name>
|
||||
<longname>Tempest</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>10E</name>
|
||||
<longname>Tenth Edition</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>DK</name>
|
||||
<longname>The Dark</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>TSP</name>
|
||||
<longname>Time Spiral</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>TSB</name>
|
||||
<longname>Time Spiral "Timeshifted"</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>TO</name>
|
||||
<longname>Torment</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="0">
|
||||
<name>UG</name>
|
||||
<longname>Unglued</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="0">
|
||||
<name>UNH</name>
|
||||
<longname>Unhinged</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>U</name>
|
||||
<longname>Unlimited Edition</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>UD</name>
|
||||
<longname>Urza's Destiny</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>UL</name>
|
||||
<longname>Urza's Legacy</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>US</name>
|
||||
<longname>Urza's Saga</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>VI</name>
|
||||
<longname>Visions</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>WL</name>
|
||||
<longname>Weatherlight</longname>
|
||||
</set>
|
||||
<set>
|
||||
<set import="1">
|
||||
<name>ZEN</name>
|
||||
<longname>Zendikar</longname>
|
||||
</set>
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ OracleImporter::OracleImporter(const QString &_dataDir, QObject *parent)
|
|||
break;
|
||||
if (xml.name() == "set") {
|
||||
QString shortName, longName;
|
||||
bool import = xml.attributes().value("import").toString().toInt();
|
||||
while (!xml.atEnd()) {
|
||||
if (xml.readNext() == QXmlStreamReader::EndElement)
|
||||
break;
|
||||
|
|
@ -28,7 +29,7 @@ OracleImporter::OracleImporter(const QString &_dataDir, QObject *parent)
|
|||
else if (xml.name() == "url")
|
||||
editionURL = xml.readElementText();
|
||||
}
|
||||
setsToDownload << SetToDownload(edition, editionLong, editionURL);
|
||||
setsToDownload << SetToDownload(edition, editionLong, editionURL, import);
|
||||
edition = editionLong = editionURL = QString();
|
||||
} else if (xml.name() == "picture_url")
|
||||
pictureUrl = xml.readElementText();
|
||||
|
|
@ -182,6 +183,13 @@ QString OracleImporter::getURLFromName(QString name) const
|
|||
void OracleImporter::downloadNextFile()
|
||||
{
|
||||
if (setIndex == -1) {
|
||||
for (int i = 0; i < setsToDownload.size(); ++i)
|
||||
if (!setsToDownload[i].getImport()) {
|
||||
setsToDownload.removeAt(i);
|
||||
--i;
|
||||
}
|
||||
if (setsToDownload.isEmpty())
|
||||
return;
|
||||
setIndex = 0;
|
||||
emit setIndexChanged(0, 0, setsToDownload[0].getLongName());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,12 +9,15 @@ class QBuffer;
|
|||
class SetToDownload {
|
||||
private:
|
||||
QString shortName, longName, url;
|
||||
bool import;
|
||||
public:
|
||||
const QString &getShortName() const { return shortName; }
|
||||
const QString &getLongName() const { return longName; }
|
||||
const QString &getUrl() const { return url; }
|
||||
SetToDownload(const QString &_shortName, const QString &_longName, const QString &_url)
|
||||
: shortName(_shortName), longName(_longName), url(_url) { }
|
||||
bool getImport() const { return import; }
|
||||
void setImport(bool _import) { qDebug(QString("%1: setting import to %2").arg(getShortName()).arg(_import).toUtf8()); import = _import; }
|
||||
SetToDownload(const QString &_shortName, const QString &_longName, const QString &_url, bool _import)
|
||||
: shortName(_shortName), longName(_longName), url(_url), import(_import) { }
|
||||
};
|
||||
|
||||
class OracleImporter : public CardDatabase {
|
||||
|
|
@ -41,6 +44,7 @@ public:
|
|||
int importTextSpoiler(CardSet *set, const QByteArray &data);
|
||||
void downloadNextFile();
|
||||
int getSetsCount() const { return setsToDownload.size(); }
|
||||
QList<SetToDownload> &getSets() { return setsToDownload; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -7,6 +7,30 @@ WindowMain::WindowMain(QWidget *parent)
|
|||
{
|
||||
importer = new OracleImporter("../oracle", this);
|
||||
|
||||
QVBoxLayout *checkboxLayout = new QVBoxLayout;
|
||||
QList<SetToDownload> &sets = importer->getSets();
|
||||
for (int i = 0; i < sets.size(); ++i) {
|
||||
QCheckBox *checkBox = new QCheckBox(sets[i].getLongName());
|
||||
checkBox->setChecked(sets[i].getImport());
|
||||
connect(checkBox, SIGNAL(stateChanged(int)), this, SLOT(checkBoxChanged(int)));
|
||||
checkboxLayout->addWidget(checkBox);
|
||||
checkBoxList << checkBox;
|
||||
}
|
||||
|
||||
QWidget *checkboxFrame = new QWidget;
|
||||
checkboxFrame->setLayout(checkboxLayout);
|
||||
|
||||
QScrollArea *checkboxArea = new QScrollArea;
|
||||
checkboxArea->setWidget(checkboxFrame);
|
||||
checkboxArea->setWidgetResizable(true);
|
||||
|
||||
startButton = new QPushButton(tr("&Start download"));
|
||||
connect(startButton, SIGNAL(clicked()), this, SLOT(actStart()));
|
||||
|
||||
QVBoxLayout *settingsLayout = new QVBoxLayout;
|
||||
settingsLayout->addWidget(checkboxArea);
|
||||
settingsLayout->addWidget(startButton);
|
||||
|
||||
totalLabel = new QLabel(tr("Total progress:"));
|
||||
totalProgressBar = new QProgressBar;
|
||||
nextSetLabel1 = new QLabel(tr("Current file:"));
|
||||
|
|
@ -26,8 +50,13 @@ WindowMain::WindowMain(QWidget *parent)
|
|||
grid->addWidget(fileProgressBar, 2, 1);
|
||||
grid->addWidget(messageLog, 3, 0, 1, 2);
|
||||
|
||||
QHBoxLayout *mainLayout = new QHBoxLayout;
|
||||
mainLayout->addLayout(settingsLayout);
|
||||
mainLayout->addSpacing(10);
|
||||
mainLayout->addLayout(grid);
|
||||
|
||||
QWidget *centralWidget = new QWidget;
|
||||
centralWidget->setLayout(grid);
|
||||
centralWidget->setLayout(mainLayout);
|
||||
setCentralWidget(centralWidget);
|
||||
|
||||
connect(importer, SIGNAL(setIndexChanged(int, int, const QString &)), this, SLOT(updateTotalProgress(int, int, const QString &)));
|
||||
|
|
@ -35,9 +64,7 @@ WindowMain::WindowMain(QWidget *parent)
|
|||
totalProgressBar->setMaximum(importer->getSetsCount());
|
||||
|
||||
setWindowTitle(tr("Oracle importer"));
|
||||
setFixedSize(300, 300);
|
||||
|
||||
importer->downloadNextFile();
|
||||
setFixedSize(500, 300);
|
||||
}
|
||||
|
||||
void WindowMain::updateTotalProgress(int cardsImported, int setIndex, const QString &nextSetName)
|
||||
|
|
@ -58,3 +85,22 @@ void WindowMain::updateFileProgress(int bytesRead, int totalBytes)
|
|||
fileProgressBar->setMaximum(totalBytes);
|
||||
fileProgressBar->setValue(bytesRead);
|
||||
}
|
||||
|
||||
void WindowMain::actStart()
|
||||
{
|
||||
startButton->setEnabled(false);
|
||||
for (int i = 0; i < checkBoxList.size(); ++i)
|
||||
checkBoxList[i]->setEnabled(false);
|
||||
importer->downloadNextFile();
|
||||
}
|
||||
|
||||
void WindowMain::checkBoxChanged(int state)
|
||||
{
|
||||
QCheckBox *checkBox = qobject_cast<QCheckBox *>(sender());
|
||||
QList<SetToDownload> &sets = importer->getSets();
|
||||
for (int i = 0; i < sets.size(); ++i)
|
||||
if (sets[i].getLongName() == checkBox->text()) {
|
||||
sets[i].setImport(state);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -2,23 +2,30 @@
|
|||
#define WINDOW_MAIN_H
|
||||
|
||||
#include <QMainWindow>
|
||||
#include <QList>
|
||||
|
||||
class OracleImporter;
|
||||
class QLabel;
|
||||
class QProgressBar;
|
||||
class QTextEdit;
|
||||
class QPushButton;
|
||||
class QCheckBox;
|
||||
|
||||
class WindowMain : public QMainWindow {
|
||||
Q_OBJECT
|
||||
private:
|
||||
OracleImporter *importer;
|
||||
|
||||
QPushButton *startButton;
|
||||
QLabel *totalLabel, *fileLabel, *nextSetLabel1, *nextSetLabel2;
|
||||
QProgressBar *totalProgressBar, *fileProgressBar;
|
||||
QTextEdit *messageLog;
|
||||
QList<QCheckBox *> checkBoxList;
|
||||
private slots:
|
||||
void updateTotalProgress(int cardsImported, int setIndex, const QString &nextSetName);
|
||||
void updateFileProgress(int bytesRead, int totalBytes);
|
||||
void actStart();
|
||||
void checkBoxChanged(int state);
|
||||
public:
|
||||
WindowMain(QWidget *parent = 0);
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue