mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-12 17:14:52 -07:00
decklist transfer code
This commit is contained in:
parent
c5bf72b1bf
commit
d3114fafbf
9 changed files with 248 additions and 36 deletions
|
|
@ -4,8 +4,8 @@
|
|||
#include <QXmlStreamReader>
|
||||
#include <QXmlStreamWriter>
|
||||
#include <QVariant>
|
||||
#include <QDebug>
|
||||
#include "decklist.h"
|
||||
#include "carddatabase.h"
|
||||
|
||||
AbstractDecklistNode::AbstractDecklistNode(InnerDecklistNode *_parent)
|
||||
: parent(_parent), currentItem(0)
|
||||
|
|
@ -185,7 +185,7 @@ bool DeckList::readElement(QXmlStreamReader *xml)
|
|||
if (currentZone) {
|
||||
if (currentZone->readElement(xml))
|
||||
currentZone = 0;
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (xml->isEndElement()) {
|
||||
|
|
@ -193,17 +193,17 @@ bool DeckList::readElement(QXmlStreamReader *xml)
|
|||
name = currentElementText;
|
||||
else if (xml->name() == "comments")
|
||||
comments = currentElementText;
|
||||
else
|
||||
return false;
|
||||
else if (xml->name() == "cockatrice_deck") {
|
||||
qDebug() << "deck finished!";
|
||||
return true;
|
||||
}
|
||||
currentElementText.clear();
|
||||
} else if (xml->isStartElement() && (xml->name() == "zone"))
|
||||
currentZone = new InnerDecklistNode(xml->attributes().value("name").toString(), root);
|
||||
else if (xml->isCharacters() && !xml->isWhitespace())
|
||||
currentElementText = xml->text().toString();
|
||||
else
|
||||
return false;
|
||||
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void DeckList::writeElement(QXmlStreamWriter *xml)
|
||||
|
|
@ -219,25 +219,29 @@ void DeckList::writeElement(QXmlStreamWriter *xml)
|
|||
xml->writeEndElement(); // cockatrice_deck
|
||||
}
|
||||
|
||||
bool DeckList::loadFromFile_Native(QIODevice *device)
|
||||
bool DeckList::loadFromXml(QXmlStreamReader *xml)
|
||||
{
|
||||
QXmlStreamReader xml(device);
|
||||
while (!xml.atEnd()) {
|
||||
xml.readNext();
|
||||
if (xml.isStartElement()) {
|
||||
if (xml.name() != "cockatrice_deck")
|
||||
while (!xml->atEnd()) {
|
||||
xml->readNext();
|
||||
if (xml->isStartElement()) {
|
||||
if (xml->name() != "cockatrice_deck")
|
||||
return false;
|
||||
while (!xml.atEnd()) {
|
||||
xml.readNext();
|
||||
if (!readElement(&xml))
|
||||
if (xml.isEndElement() && (xml.name() == "cockatrice_deck"))
|
||||
return true;
|
||||
while (!xml->atEnd()) {
|
||||
xml->readNext();
|
||||
if (readElement(xml))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool DeckList::loadFromFile_Native(QIODevice *device)
|
||||
{
|
||||
QXmlStreamReader xml(device);
|
||||
return loadFromXml(&xml);
|
||||
}
|
||||
|
||||
bool DeckList::saveToFile_Native(QIODevice *device)
|
||||
{
|
||||
QXmlStreamWriter xml(device);
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@ public:
|
|||
|
||||
bool readElement(QXmlStreamReader *xml);
|
||||
void writeElement(QXmlStreamWriter *xml);
|
||||
bool loadFromXml(QXmlStreamReader *xml);
|
||||
|
||||
bool loadFromFile_Native(QIODevice *device);
|
||||
bool saveToFile_Native(QIODevice *device);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#include <QDebug>
|
||||
#include "protocol.h"
|
||||
#include "protocol_items.h"
|
||||
#include "decklist.h"
|
||||
|
||||
QHash<QString, ProtocolItem::NewItemFunction> ProtocolItem::itemNameHash;
|
||||
|
||||
|
|
@ -69,6 +70,7 @@ void ProtocolItem::initializeHash()
|
|||
itemNameHash.insert("resp", ProtocolResponse::newItem);
|
||||
ProtocolResponse::initializeHash();
|
||||
itemNameHash.insert("respdeck_list", Response_DeckList::newItem);
|
||||
itemNameHash.insert("respdeck_download", Response_DeckDownload::newItem);
|
||||
|
||||
itemNameHash.insert("generic_eventlist_games", Event_ListGames::newItem);
|
||||
itemNameHash.insert("generic_eventlist_chat_channels", Event_ListChatChannels::newItem);
|
||||
|
|
@ -99,6 +101,49 @@ void Command::processResponse(ProtocolResponse *response)
|
|||
emit finished(response->getResponseCode());
|
||||
}
|
||||
|
||||
Command_DeckUpload::Command_DeckUpload(int _cmdId, DeckList *_deck, const QString &_path)
|
||||
: Command("deck_upload", _cmdId), deck(_deck), path(_path), readFinished(false)
|
||||
{
|
||||
setParameter("path", path);
|
||||
}
|
||||
|
||||
Command_DeckUpload::~Command_DeckUpload()
|
||||
{
|
||||
delete deck;
|
||||
}
|
||||
|
||||
void Command_DeckUpload::extractParameters()
|
||||
{
|
||||
Command::extractParameters();
|
||||
|
||||
path = parameters["path"];
|
||||
}
|
||||
|
||||
bool Command_DeckUpload::readElement(QXmlStreamReader *xml)
|
||||
{
|
||||
if (readFinished)
|
||||
return false;
|
||||
|
||||
if (!deck) {
|
||||
if (xml->isStartElement() && (xml->name() == "cockatrice_deck")) {
|
||||
deck = new DeckList;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
if (deck->readElement(xml))
|
||||
readFinished = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
void Command_DeckUpload::writeElement(QXmlStreamWriter *xml)
|
||||
{
|
||||
if (deck)
|
||||
deck->writeElement(xml);
|
||||
}
|
||||
|
||||
|
||||
QHash<QString, ResponseCode> ProtocolResponse::responseHash;
|
||||
|
||||
ProtocolResponse::ProtocolResponse(int _cmdId, ResponseCode _responseCode, const QString &_itemName)
|
||||
|
|
@ -180,7 +225,7 @@ void Response_DeckList::Directory::writeElement(QXmlStreamWriter *xml)
|
|||
}
|
||||
|
||||
Response_DeckList::Response_DeckList(int _cmdId, ResponseCode _responseCode, Directory *_root)
|
||||
: ProtocolResponse(_cmdId, _responseCode, "deck_list"), root(_root)
|
||||
: ProtocolResponse(_cmdId, _responseCode, "deck_list"), root(_root), readFinished(false)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -191,13 +236,20 @@ Response_DeckList::~Response_DeckList()
|
|||
|
||||
bool Response_DeckList::readElement(QXmlStreamReader *xml)
|
||||
{
|
||||
if (readFinished)
|
||||
return false;
|
||||
|
||||
if (!root) {
|
||||
if (xml->isStartElement() && (xml->name() == "directory"))
|
||||
if (xml->isStartElement() && (xml->name() == "directory")) {
|
||||
root = new Directory;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return !root->readElement(xml);
|
||||
if (root->readElement(xml))
|
||||
readFinished = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
void Response_DeckList::writeElement(QXmlStreamWriter *xml)
|
||||
|
|
@ -205,6 +257,56 @@ void Response_DeckList::writeElement(QXmlStreamWriter *xml)
|
|||
root->writeElement(xml);
|
||||
}
|
||||
|
||||
Response_DeckDownload::Response_DeckDownload(int _cmdId, ResponseCode _responseCode, DeckList *_deck)
|
||||
: ProtocolResponse(_cmdId, _responseCode, "deck_download"), deck(_deck), readFinished(false)
|
||||
{
|
||||
}
|
||||
|
||||
Response_DeckDownload::~Response_DeckDownload()
|
||||
{
|
||||
delete deck;
|
||||
}
|
||||
|
||||
bool Response_DeckDownload::readElement(QXmlStreamReader *xml)
|
||||
{
|
||||
if (readFinished)
|
||||
return false;
|
||||
|
||||
if (!deck) {
|
||||
if (xml->isStartElement() && (xml->name() == "cockatrice_deck")) {
|
||||
deck = new DeckList;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
if (deck->readElement(xml))
|
||||
readFinished = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
void Response_DeckDownload::writeElement(QXmlStreamWriter *xml)
|
||||
{
|
||||
if (deck)
|
||||
deck->writeElement(xml);
|
||||
}
|
||||
|
||||
Response_DeckUpload::Response_DeckUpload(int _cmdId, ResponseCode _responseCode, int _deckId)
|
||||
: ProtocolResponse(_cmdId, _responseCode, "deck_upload"), deckId(_deckId)
|
||||
{
|
||||
setParameter("deck_id", deckId);
|
||||
}
|
||||
|
||||
void Response_DeckUpload::extractParameters()
|
||||
{
|
||||
ProtocolResponse::extractParameters();
|
||||
|
||||
bool ok;
|
||||
deckId = parameters["deck_id"].toInt(&ok);
|
||||
if (!ok)
|
||||
deckId = -1;
|
||||
}
|
||||
|
||||
GenericEvent::GenericEvent(const QString &_eventName)
|
||||
: ProtocolItem(_eventName)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -14,13 +14,16 @@ class QXmlStreamWriter;
|
|||
class QXmlStreamAttributes;
|
||||
|
||||
class ProtocolResponse;
|
||||
class DeckList;
|
||||
|
||||
enum ItemId {
|
||||
ItemId_Command_DeckUpload = ItemId_Other + 1,
|
||||
ItemId_Event_ListChatChannels = ItemId_Other + 2,
|
||||
ItemId_Event_ChatListPlayers = ItemId_Other + 3,
|
||||
ItemId_Event_ListGames = ItemId_Other + 4,
|
||||
ItemId_Response_DeckList = ItemId_Other + 5
|
||||
ItemId_Response_DeckList = ItemId_Other + 5,
|
||||
ItemId_Response_DeckDownload = ItemId_Other + 6,
|
||||
ItemId_Response_DeckUpload = ItemId_Other + 7
|
||||
};
|
||||
|
||||
class ProtocolItem : public QObject {
|
||||
|
|
@ -123,10 +126,21 @@ public:
|
|||
|
||||
class Command_DeckUpload : public Command {
|
||||
Q_OBJECT
|
||||
private:
|
||||
DeckList *deck;
|
||||
QString path;
|
||||
bool readFinished;
|
||||
protected:
|
||||
void extractParameters();
|
||||
bool readElement(QXmlStreamReader *xml);
|
||||
void writeElement(QXmlStreamWriter *xml);
|
||||
public:
|
||||
Command_DeckUpload(int _cmdId = -1) : Command("deck_upload", _cmdId) { }
|
||||
Command_DeckUpload(int _cmdId = -1, DeckList *_deck = 0, const QString &_path = QString());
|
||||
~Command_DeckUpload();
|
||||
static ProtocolItem *newItem() { return new Command_DeckUpload; }
|
||||
int getItemId() const { return ItemId_Command_DeckUpload; }
|
||||
DeckList *getDeck() const { return deck; }
|
||||
QString getPath() const { return path; }
|
||||
};
|
||||
|
||||
// -----------------
|
||||
|
|
@ -182,6 +196,7 @@ public:
|
|||
};
|
||||
private:
|
||||
Directory *root;
|
||||
bool readFinished;
|
||||
protected:
|
||||
bool readElement(QXmlStreamReader *xml);
|
||||
void writeElement(QXmlStreamWriter *xml);
|
||||
|
|
@ -193,6 +208,35 @@ public:
|
|||
Directory *getRoot() const { return root; }
|
||||
};
|
||||
|
||||
class Response_DeckDownload : public ProtocolResponse {
|
||||
Q_OBJECT
|
||||
private:
|
||||
DeckList *deck;
|
||||
bool readFinished;
|
||||
protected:
|
||||
bool readElement(QXmlStreamReader *xml);
|
||||
void writeElement(QXmlStreamWriter *xml);
|
||||
public:
|
||||
Response_DeckDownload(int _cmdId = -1, ResponseCode _responseCode = RespOk, DeckList *_deck = 0);
|
||||
~Response_DeckDownload();
|
||||
int getItemId() const { return ItemId_Response_DeckDownload; }
|
||||
static ProtocolItem *newItem() { return new Response_DeckDownload; }
|
||||
DeckList *getDeck() const { return deck; }
|
||||
};
|
||||
|
||||
class Response_DeckUpload : public ProtocolResponse {
|
||||
Q_OBJECT
|
||||
private:
|
||||
int deckId;
|
||||
protected:
|
||||
void extractParameters();
|
||||
public:
|
||||
Response_DeckUpload(int _cmdId = -1, ResponseCode _responseCode = RespOk, int _deckId = -1);
|
||||
int getItemId() const { return ItemId_Response_DeckUpload; }
|
||||
static ProtocolItem *newItem() { return new Response_DeckUpload; }
|
||||
int getDeckId() const { return deckId; }
|
||||
};
|
||||
|
||||
// --------------
|
||||
// --- EVENTS ---
|
||||
// --------------
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
#include <QString>
|
||||
#include <QColor>
|
||||
|
||||
enum ResponseCode { RespNothing, RespOk, RespInvalidCommand, RespNameNotFound, RespLoginNeeded, RespContextError, RespWrongPassword, RespSpectatorsNotAllowed };
|
||||
enum ResponseCode { RespNothing, RespOk, RespInvalidCommand, RespInvalidData, RespNameNotFound, RespLoginNeeded, RespContextError, RespWrongPassword, RespSpectatorsNotAllowed };
|
||||
|
||||
class ServerChatChannelInfo {
|
||||
private:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue