This commit is contained in:
Max-Wilhelm Bruker 2009-12-01 10:43:46 +01:00
parent e51aa20420
commit 207d10d3e2
9 changed files with 73 additions and 70 deletions

View file

@ -58,33 +58,28 @@ void Client::readData()
qDebug() << data; qDebug() << data;
xmlReader->addData(data); xmlReader->addData(data);
if (topLevelItem) while (!xmlReader->atEnd()) {
topLevelItem->read(xmlReader); xmlReader->readNext();
else { if (topLevelItem)
while (!xmlReader->atEnd()) { topLevelItem->readElement(xmlReader);
xmlReader->readNext(); else if (xmlReader->isStartElement() && (xmlReader->name().toString() == "cockatrice_server_stream")) {
if (xmlReader->isStartElement() && (xmlReader->name().toString() == "cockatrice_server_stream")) { int serverVersion = xmlReader->attributes().value("version").toString().toInt();
int serverVersion = xmlReader->attributes().value("version").toString().toInt(); if (serverVersion != ProtocolItem::protocolVersion) {
if (serverVersion != ProtocolItem::protocolVersion) { emit protocolVersionMismatch(ProtocolItem::protocolVersion, serverVersion);
emit protocolVersionMismatch(ProtocolItem::protocolVersion, serverVersion); disconnectFromServer();
disconnectFromServer(); return;
return;
}
xmlWriter->writeStartDocument();
xmlWriter->writeStartElement("cockatrice_client_stream");
xmlWriter->writeAttribute("version", QString::number(ProtocolItem::protocolVersion));
topLevelItem = new TopLevelProtocolItem;
connect(topLevelItem, SIGNAL(protocolItemReceived(ProtocolItem *)), this, SLOT(processProtocolItem(ProtocolItem *)));
setStatus(StatusLoggingIn);
Command_Login *cmdLogin = new Command_Login(userName, password);
connect(cmdLogin, SIGNAL(finished(ResponseCode)), this, SLOT(loginResponse(ResponseCode)));
sendCommand(cmdLogin);
if (topLevelItem)
topLevelItem->read(xmlReader);
} }
xmlWriter->writeStartDocument();
xmlWriter->writeStartElement("cockatrice_client_stream");
xmlWriter->writeAttribute("version", QString::number(ProtocolItem::protocolVersion));
topLevelItem = new TopLevelProtocolItem;
connect(topLevelItem, SIGNAL(protocolItemReceived(ProtocolItem *)), this, SLOT(processProtocolItem(ProtocolItem *)));
setStatus(StatusLoggingIn);
Command_Login *cmdLogin = new Command_Login(userName, password);
connect(cmdLogin, SIGNAL(finished(ResponseCode)), this, SLOT(loginResponse(ResponseCode)));
sendCommand(cmdLogin);
} }
} }
if (status == StatusDisconnecting) if (status == StatusDisconnecting)

View file

@ -102,6 +102,12 @@ void TabDeckStorage::actUpload()
DeckList *deck = new DeckList; DeckList *deck = new DeckList;
if (!deck->loadFromFile(filePath, DeckList::CockatriceFormat)) if (!deck->loadFromFile(filePath, DeckList::CockatriceFormat))
return; return;
if (deck->getName().isEmpty()) {
QString deckName = QInputDialog::getText(this, tr("Enter deck name"), tr("This decklist does not have a name.\nPlease enter a name:"), QLineEdit::Normal, tr("Unnamed deck"));
if (deckName.isEmpty())
deckName = tr("Unnamed deck");
deck->setName(deckName);
}
QString targetPath; QString targetPath;
QTreeWidgetItem *curRight = serverDirView->currentItem(); QTreeWidgetItem *curRight = serverDirView->currentItem();

View file

@ -5,6 +5,7 @@
#include <QXmlStreamWriter> #include <QXmlStreamWriter>
#include <QVariant> #include <QVariant>
#include "decklist.h" #include "decklist.h"
#include <QDebug>
AbstractDecklistNode::AbstractDecklistNode(InnerDecklistNode *_parent) AbstractDecklistNode::AbstractDecklistNode(InnerDecklistNode *_parent)
: parent(_parent), currentItem(0) : parent(_parent), currentItem(0)
@ -212,7 +213,7 @@ DeckList::~DeckList()
delete root; delete root;
} }
void DeckList::readElement(QXmlStreamReader *xml) bool DeckList::readElement(QXmlStreamReader *xml)
{ {
if (currentZone) { if (currentZone) {
if (currentZone->readElement(xml)) if (currentZone->readElement(xml))
@ -228,6 +229,7 @@ void DeckList::readElement(QXmlStreamReader *xml)
currentZone = new InnerDecklistNode(xml->attributes().value("name").toString(), root); currentZone = new InnerDecklistNode(xml->attributes().value("name").toString(), root);
else if (xml->isCharacters() && !xml->isWhitespace()) else if (xml->isCharacters() && !xml->isWhitespace())
currentElementText = xml->text().toString(); currentElementText = xml->text().toString();
return SerializableItem::readElement(xml);
} }
void DeckList::writeElement(QXmlStreamWriter *xml) void DeckList::writeElement(QXmlStreamWriter *xml)

View file

@ -107,7 +107,7 @@ public:
QString getLastFileName() const { return lastFileName; } QString getLastFileName() const { return lastFileName; }
FileFormat getLastFileFormat() const { return lastFileFormat; } FileFormat getLastFileFormat() const { return lastFileFormat; }
void readElement(QXmlStreamReader *xml); bool readElement(QXmlStreamReader *xml);
void writeElement(QXmlStreamWriter *xml); void writeElement(QXmlStreamWriter *xml);
void loadFromXml(QXmlStreamReader *xml); void loadFromXml(QXmlStreamReader *xml);

View file

@ -53,7 +53,7 @@ TopLevelProtocolItem::TopLevelProtocolItem()
bool TopLevelProtocolItem::readCurrentItem(QXmlStreamReader *xml) bool TopLevelProtocolItem::readCurrentItem(QXmlStreamReader *xml)
{ {
if (currentItem) { if (currentItem) {
if (currentItem->read(xml)) { if (currentItem->readElement(xml)) {
emit protocolItemReceived(currentItem); emit protocolItemReceived(currentItem);
currentItem = 0; currentItem = 0;
} }
@ -62,7 +62,7 @@ bool TopLevelProtocolItem::readCurrentItem(QXmlStreamReader *xml)
return false; return false;
} }
void TopLevelProtocolItem::readElement(QXmlStreamReader *xml) bool TopLevelProtocolItem::readElement(QXmlStreamReader *xml)
{ {
if (!readCurrentItem(xml) && (xml->isStartElement())) { if (!readCurrentItem(xml) && (xml->isStartElement())) {
QString childName = xml->name().toString(); QString childName = xml->name().toString();
@ -74,6 +74,7 @@ void TopLevelProtocolItem::readElement(QXmlStreamReader *xml)
readCurrentItem(xml); readCurrentItem(xml);
} }
return SerializableItem::readElement(xml);
} }
void TopLevelProtocolItem::writeElement(QXmlStreamWriter * /*xml*/) void TopLevelProtocolItem::writeElement(QXmlStreamWriter * /*xml*/)

View file

@ -58,11 +58,10 @@ signals:
private: private:
ProtocolItem *currentItem; ProtocolItem *currentItem;
bool readCurrentItem(QXmlStreamReader *xml); bool readCurrentItem(QXmlStreamReader *xml);
protected:
void readElement(QXmlStreamReader *xml);
void writeElement(QXmlStreamWriter *xml);
public: public:
TopLevelProtocolItem(); TopLevelProtocolItem();
bool readElement(QXmlStreamReader *xml);
void writeElement(QXmlStreamWriter *xml);
}; };
// ---------------- // ----------------

View file

@ -17,14 +17,10 @@ void SerializableItem::registerSerializableItem(const QString &name, NewItemFunc
itemNameHash.insert(name, func); itemNameHash.insert(name, func);
} }
bool SerializableItem::read(QXmlStreamReader *xml) bool SerializableItem::readElement(QXmlStreamReader *xml)
{ {
while (!xml->atEnd()) { if (xml->isEndElement() && (xml->name() == itemType))
xml->readNext(); return true;
readElement(xml);
if (xml->isEndElement() && (xml->name() == itemType))
return true;
}
return false; return false;
} }
@ -46,12 +42,14 @@ SerializableItem_Map::~SerializableItem_Map()
delete itemList[i]; delete itemList[i];
} }
void SerializableItem_Map::readElement(QXmlStreamReader *xml) bool SerializableItem_Map::readElement(QXmlStreamReader *xml)
{ {
if (currentItem) { if (currentItem) {
if (currentItem->read(xml)) if (currentItem->readElement(xml))
currentItem = 0; currentItem = 0;
} else if (xml->isEndElement() && (xml->name() == itemType)) } else if (firstItem)
firstItem = false;
else if (xml->isEndElement() && (xml->name() == itemType))
extractData(); extractData();
else if (xml->isStartElement()) { else if (xml->isStartElement()) {
QString childName = xml->name().toString(); QString childName = xml->name().toString();
@ -63,9 +61,10 @@ void SerializableItem_Map::readElement(QXmlStreamReader *xml)
if (!currentItem) if (!currentItem)
currentItem = new SerializableItem_Invalid(childName); currentItem = new SerializableItem_Invalid(childName);
} }
if (currentItem->read(xml)) if (currentItem->readElement(xml))
currentItem = 0; currentItem = 0;
} }
return SerializableItem::readElement(xml);
} }
void SerializableItem_Map::writeElement(QXmlStreamWriter *xml) void SerializableItem_Map::writeElement(QXmlStreamWriter *xml)
@ -77,10 +76,11 @@ void SerializableItem_Map::writeElement(QXmlStreamWriter *xml)
itemList[i]->write(xml); itemList[i]->write(xml);
} }
void SerializableItem_String::readElement(QXmlStreamReader *xml) bool SerializableItem_String::readElement(QXmlStreamReader *xml)
{ {
if (xml->isCharacters() && !xml->isWhitespace()) if (xml->isCharacters() && !xml->isWhitespace())
data = xml->text().toString(); data = xml->text().toString();
return SerializableItem::readElement(xml);
} }
void SerializableItem_String::writeElement(QXmlStreamWriter *xml) void SerializableItem_String::writeElement(QXmlStreamWriter *xml)
@ -88,7 +88,7 @@ void SerializableItem_String::writeElement(QXmlStreamWriter *xml)
xml->writeCharacters(data); xml->writeCharacters(data);
} }
void SerializableItem_Int::readElement(QXmlStreamReader *xml) bool SerializableItem_Int::readElement(QXmlStreamReader *xml)
{ {
if (xml->isCharacters() && !xml->isWhitespace()) { if (xml->isCharacters() && !xml->isWhitespace()) {
bool ok; bool ok;
@ -96,6 +96,7 @@ void SerializableItem_Int::readElement(QXmlStreamReader *xml)
if (!ok) if (!ok)
data = -1; data = -1;
} }
return SerializableItem::readElement(xml);
} }
void SerializableItem_Int::writeElement(QXmlStreamWriter *xml) void SerializableItem_Int::writeElement(QXmlStreamWriter *xml)
@ -103,10 +104,11 @@ void SerializableItem_Int::writeElement(QXmlStreamWriter *xml)
xml->writeCharacters(QString::number(data)); xml->writeCharacters(QString::number(data));
} }
void SerializableItem_Bool::readElement(QXmlStreamReader *xml) bool SerializableItem_Bool::readElement(QXmlStreamReader *xml)
{ {
if (xml->isCharacters() && !xml->isWhitespace()) if (xml->isCharacters() && !xml->isWhitespace())
data = xml->text().toString() == "1"; data = xml->text().toString() == "1";
return SerializableItem::readElement(xml);
} }
void SerializableItem_Bool::writeElement(QXmlStreamWriter *xml) void SerializableItem_Bool::writeElement(QXmlStreamWriter *xml)
@ -124,13 +126,14 @@ QColor SerializableItem_Color::colorFromInt(int colorValue) const
return QColor(colorValue / 65536, (colorValue % 65536) / 256, colorValue % 256); return QColor(colorValue / 65536, (colorValue % 65536) / 256, colorValue % 256);
} }
void SerializableItem_Color::readElement(QXmlStreamReader *xml) bool SerializableItem_Color::readElement(QXmlStreamReader *xml)
{ {
if (xml->isCharacters() && !xml->isWhitespace()) { if (xml->isCharacters() && !xml->isWhitespace()) {
bool ok; bool ok;
int colorValue = xml->text().toString().toInt(&ok); int colorValue = xml->text().toString().toInt(&ok);
data = ok ? colorFromInt(colorValue) : Qt::black; data = ok ? colorFromInt(colorValue) : Qt::black;
} }
return SerializableItem::readElement(xml);
} }
void SerializableItem_Color::writeElement(QXmlStreamWriter *xml) void SerializableItem_Color::writeElement(QXmlStreamWriter *xml)
@ -138,13 +141,14 @@ void SerializableItem_Color::writeElement(QXmlStreamWriter *xml)
xml->writeCharacters(QString::number(colorToInt(data))); xml->writeCharacters(QString::number(colorToInt(data)));
} }
void SerializableItem_DateTime::readElement(QXmlStreamReader *xml) bool SerializableItem_DateTime::readElement(QXmlStreamReader *xml)
{ {
if (xml->isCharacters() && !xml->isWhitespace()) { if (xml->isCharacters() && !xml->isWhitespace()) {
bool ok; bool ok;
unsigned int dateTimeValue = xml->text().toString().toUInt(&ok); unsigned int dateTimeValue = xml->text().toString().toUInt(&ok);
data = ok ? QDateTime::fromTime_t(dateTimeValue) : QDateTime(); data = ok ? QDateTime::fromTime_t(dateTimeValue) : QDateTime();
} }
return SerializableItem::readElement(xml);
} }
void SerializableItem_DateTime::writeElement(QXmlStreamWriter *xml) void SerializableItem_DateTime::writeElement(QXmlStreamWriter *xml)

View file

@ -18,23 +18,22 @@ protected:
static QHash<QString, NewItemFunction> itemNameHash; static QHash<QString, NewItemFunction> itemNameHash;
QString itemType, itemSubType; QString itemType, itemSubType;
bool firstItem;
public: public:
SerializableItem(const QString &_itemType, const QString &_itemSubType = QString()) SerializableItem(const QString &_itemType, const QString &_itemSubType = QString())
: QObject(), itemType(_itemType), itemSubType(_itemSubType) { } : QObject(), itemType(_itemType), itemSubType(_itemSubType), firstItem(true) { }
static void registerSerializableItem(const QString &name, NewItemFunction func); static void registerSerializableItem(const QString &name, NewItemFunction func);
static SerializableItem *getNewItem(const QString &name); static SerializableItem *getNewItem(const QString &name);
const QString &getItemType() const { return itemType; } const QString &getItemType() const { return itemType; }
const QString &getItemSubType() const { return itemSubType; } const QString &getItemSubType() const { return itemSubType; }
virtual void readElement(QXmlStreamReader *xml) = 0; virtual bool readElement(QXmlStreamReader *xml);
virtual void writeElement(QXmlStreamWriter *xml) = 0; virtual void writeElement(QXmlStreamWriter *xml) = 0;
bool read(QXmlStreamReader *xml);
void write(QXmlStreamWriter *xml); void write(QXmlStreamWriter *xml);
}; };
class SerializableItem_Invalid : public SerializableItem { class SerializableItem_Invalid : public SerializableItem {
public: public:
SerializableItem_Invalid(const QString &_itemType) : SerializableItem(_itemType) { } SerializableItem_Invalid(const QString &_itemType) : SerializableItem(_itemType) { }
void readElement(QXmlStreamReader * /*xml*/) { }
void writeElement(QXmlStreamWriter * /*xml*/) { } void writeElement(QXmlStreamWriter * /*xml*/) { }
}; };
@ -65,7 +64,7 @@ public:
{ {
} }
~SerializableItem_Map(); ~SerializableItem_Map();
void readElement(QXmlStreamReader *xml); bool readElement(QXmlStreamReader *xml);
void writeElement(QXmlStreamWriter *xml); void writeElement(QXmlStreamWriter *xml);
void appendItem(SerializableItem *item) { itemList.append(item); } void appendItem(SerializableItem *item) { itemList.append(item); }
}; };
@ -74,7 +73,7 @@ class SerializableItem_String : public SerializableItem {
private: private:
QString data; QString data;
protected: protected:
void readElement(QXmlStreamReader *xml); bool readElement(QXmlStreamReader *xml);
void writeElement(QXmlStreamWriter *xml); void writeElement(QXmlStreamWriter *xml);
public: public:
SerializableItem_String(const QString &_itemType, const QString &_data) SerializableItem_String(const QString &_itemType, const QString &_data)
@ -87,7 +86,7 @@ class SerializableItem_Int : public SerializableItem {
private: private:
int data; int data;
protected: protected:
void readElement(QXmlStreamReader *xml); bool readElement(QXmlStreamReader *xml);
void writeElement(QXmlStreamWriter *xml); void writeElement(QXmlStreamWriter *xml);
public: public:
SerializableItem_Int(const QString &_itemType, int _data) SerializableItem_Int(const QString &_itemType, int _data)
@ -100,7 +99,7 @@ class SerializableItem_Bool : public SerializableItem {
private: private:
bool data; bool data;
protected: protected:
void readElement(QXmlStreamReader *xml); bool readElement(QXmlStreamReader *xml);
void writeElement(QXmlStreamWriter *xml); void writeElement(QXmlStreamWriter *xml);
public: public:
SerializableItem_Bool(const QString &_itemType, bool _data) SerializableItem_Bool(const QString &_itemType, bool _data)
@ -115,7 +114,7 @@ private:
int colorToInt(const QColor &color) const; int colorToInt(const QColor &color) const;
QColor colorFromInt(int colorValue) const; QColor colorFromInt(int colorValue) const;
protected: protected:
void readElement(QXmlStreamReader *xml); bool readElement(QXmlStreamReader *xml);
void writeElement(QXmlStreamWriter *xml); void writeElement(QXmlStreamWriter *xml);
public: public:
SerializableItem_Color(const QString &_itemType, const QColor &_data) SerializableItem_Color(const QString &_itemType, const QColor &_data)
@ -128,7 +127,7 @@ class SerializableItem_DateTime : public SerializableItem {
private: private:
QDateTime data; QDateTime data;
protected: protected:
void readElement(QXmlStreamReader *xml); bool readElement(QXmlStreamReader *xml);
void writeElement(QXmlStreamWriter *xml); void writeElement(QXmlStreamWriter *xml);
public: public:
SerializableItem_DateTime(const QString &_itemType, const QDateTime &_data) SerializableItem_DateTime(const QString &_itemType, const QDateTime &_data)

View file

@ -73,18 +73,15 @@ void ServerSocketInterface::readClient()
qDebug() << data; qDebug() << data;
xmlReader->addData(data); xmlReader->addData(data);
if (topLevelItem) while (!xmlReader->atEnd()) {
topLevelItem->read(xmlReader); xmlReader->readNext();
else if (topLevelItem)
while (!xmlReader->atEnd()) { topLevelItem->readElement(xmlReader);
xmlReader->readNext(); else if (xmlReader->isStartElement() && (xmlReader->name().toString() == "cockatrice_client_stream")) {
if (xmlReader->isStartElement() && (xmlReader->name().toString() == "cockatrice_client_stream")) { topLevelItem = new TopLevelProtocolItem;
topLevelItem = new TopLevelProtocolItem; connect(topLevelItem, SIGNAL(protocolItemReceived(ProtocolItem *)), this, SLOT(processProtocolItem(ProtocolItem *)));
connect(topLevelItem, SIGNAL(protocolItemReceived(ProtocolItem *)), this, SLOT(processProtocolItem(ProtocolItem *)));
topLevelItem->read(xmlReader);
}
} }
}
} }
void ServerSocketInterface::catchSocketError(QAbstractSocket::SocketError socketError) void ServerSocketInterface::catchSocketError(QAbstractSocket::SocketError socketError)